diff --git a/.gitignore b/.gitignore index 8a367305..7db06c1b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ TODOs.md # jetbrains files .idea +public/chii \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index e2e22ba1..c90b395c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,5 @@ dist CHANGELOG.md pnpm-lock.yaml + +public/chii \ No newline at end of file diff --git a/chii.d.ts b/chii.d.ts new file mode 100644 index 00000000..deedadb8 --- /dev/null +++ b/chii.d.ts @@ -0,0 +1,4 @@ +declare module 'virtual:chii' { + const value: string + export default value +} diff --git a/chii/Images/Images.js b/chii/Images/Images.js new file mode 100644 index 00000000..fe7bd715 --- /dev/null +++ b/chii/Images/Images.js @@ -0,0 +1,141 @@ +// Copyright 2023 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +const sheet = new CSSStyleSheet(); +sheet.replaceSync(':root {}'); +const style = sheet.cssRules[0].style; + +style.setProperty('--image-file-accelerometer-bottom', 'url(\"' + new URL('./accelerometer-bottom.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-accelerometer-left', 'url(\"' + new URL('./accelerometer-left.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-accelerometer-right', 'url(\"' + new URL('./accelerometer-right.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-accelerometer-top', 'url(\"' + new URL('./accelerometer-top.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-checker', 'url(\"' + new URL('./checker.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeDisabledSelect_2x', 'url(\"' + new URL('./chromeDisabledSelect_2x.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeDisabledSelect', 'url(\"' + new URL('./chromeDisabledSelect.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeLeft', 'url(\"' + new URL('./chromeLeft.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeMiddle', 'url(\"' + new URL('./chromeMiddle.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeRight', 'url(\"' + new URL('./chromeRight.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-cssoverview_icons_2x', 'url(\"' + new URL('./cssoverview_icons_2x.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-navigationControls_2x', 'url(\"' + new URL('./navigationControls_2x.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-navigationControls', 'url(\"' + new URL('./navigationControls.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-nodeIcon', 'url(\"' + new URL('./nodeIcon.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-popoverArrows', 'url(\"' + new URL('./popoverArrows.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-profileGroupIcon', 'url(\"' + new URL('./profileGroupIcon.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-profileIcon', 'url(\"' + new URL('./profileIcon.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-profileSmallIcon', 'url(\"' + new URL('./profileSmallIcon.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-resourcesTimeGraphIcon', 'url(\"' + new URL('./resourcesTimeGraphIcon.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-searchNext', 'url(\"' + new URL('./searchNext.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-searchPrev', 'url(\"' + new URL('./searchPrev.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-speech', 'url(\"' + new URL('./speech.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-toolbarResizerVertical', 'url(\"' + new URL('./toolbarResizerVertical.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-touchCursor_2x', 'url(\"' + new URL('./touchCursor_2x.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-touchCursor', 'url(\"' + new URL('./touchCursor.png', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-whatsnew', 'url(\"' + new URL('./whatsnew.avif', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-accelerometer-back', 'url(\"' + new URL(new URL('accelerometer-back.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-accelerometer-front', 'url(\"' + new URL(new URL('accelerometer-front.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-accessibility-icon', 'url(\"' + new URL(new URL('accessibility-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-add-icon', 'url(\"' + new URL(new URL('add-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-center-icon', 'url(\"' + new URL(new URL('align-content-center-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-end-icon', 'url(\"' + new URL(new URL('align-content-end-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-space-around-icon', 'url(\"' + new URL(new URL('align-content-space-around-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-space-between-icon', 'url(\"' + new URL(new URL('align-content-space-between-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-space-evenly-icon', 'url(\"' + new URL(new URL('align-content-space-evenly-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-start-icon', 'url(\"' + new URL(new URL('align-content-start-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-content-stretch-icon', 'url(\"' + new URL(new URL('align-content-stretch-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-items-center-icon', 'url(\"' + new URL(new URL('align-items-center-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-items-flex-end-icon', 'url(\"' + new URL(new URL('align-items-flex-end-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-items-flex-start-icon', 'url(\"' + new URL(new URL('align-items-flex-start-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-items-stretch-icon', 'url(\"' + new URL(new URL('align-items-stretch-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-self-center-icon', 'url(\"' + new URL(new URL('align-self-center-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-self-flex-end-icon', 'url(\"' + new URL(new URL('align-self-flex-end-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-self-flex-start-icon', 'url(\"' + new URL(new URL('align-self-flex-start-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-align-self-stretch-icon', 'url(\"' + new URL(new URL('align-self-stretch-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-baseline-icon', 'url(\"' + new URL(new URL('baseline-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-checkboxCheckmark', 'url(\"' + new URL(new URL('checkboxCheckmark.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chevrons', 'url(\"' + new URL(new URL('chevrons.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeSelect', 'url(\"' + new URL(new URL('chromeSelect.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-chromeSelectDark', 'url(\"' + new URL(new URL('chromeSelectDark.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-circled_exclamation_icon', 'url(\"' + new URL(new URL('circled_exclamation_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-close-icon', 'url(\"' + new URL(new URL('close-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-copy_icon', 'url(\"' + new URL(new URL('copy_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-dropdown_7x6_icon', 'url(\"' + new URL(new URL('dropdown_7x6_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-elements_panel_icon', 'url(\"' + new URL(new URL('elements_panel_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-errorWave', 'url(\"' + new URL(new URL('errorWave.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-error_icon', 'url(\"' + new URL(new URL('error_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-feedback_button_icon', 'url(\"' + new URL(new URL('feedback_button_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-flex-direction-icon', 'url(\"' + new URL(new URL('flex-direction-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-flex-nowrap-icon', 'url(\"' + new URL(new URL('flex-nowrap-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-flex-wrap-icon', 'url(\"' + new URL(new URL('flex-wrap-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-help_outline', 'url(\"' + new URL(new URL('help_outline.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_checkmark_16x16', 'url(\"' + new URL(new URL('ic_checkmark_16x16.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_command_go_to_line', 'url(\"' + new URL(new URL('ic_command_go_to_line.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_command_go_to_symbol', 'url(\"' + new URL(new URL('ic_command_go_to_symbol.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_command_help', 'url(\"' + new URL(new URL('ic_command_help.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_command_open_file', 'url(\"' + new URL(new URL('ic_command_open_file.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_command_run_command', 'url(\"' + new URL(new URL('ic_command_run_command.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_command_run_snippet', 'url(\"' + new URL(new URL('ic_command_run_snippet.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_delete_filter', 'url(\"' + new URL(new URL('ic_delete_filter.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_delete_list', 'url(\"' + new URL(new URL('ic_delete_list.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_dimension_single', 'url(\"' + new URL(new URL('ic_dimension_single.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_default', 'url(\"' + new URL(new URL('ic_file_default.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_document', 'url(\"' + new URL(new URL('ic_file_document.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_font', 'url(\"' + new URL(new URL('ic_file_font.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_image', 'url(\"' + new URL(new URL('ic_file_image.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_script', 'url(\"' + new URL(new URL('ic_file_script.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_snippet', 'url(\"' + new URL(new URL('ic_file_snippet.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_stylesheet', 'url(\"' + new URL(new URL('ic_file_stylesheet.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_webbundle', 'url(\"' + new URL(new URL('ic_file_webbundle.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_file_webbundle_inner_request', 'url(\"' + new URL(new URL('ic_file_webbundle_inner_request.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_folder_default', 'url(\"' + new URL(new URL('ic_folder_default.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_folder_local', 'url(\"' + new URL(new URL('ic_folder_local.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_folder_network', 'url(\"' + new URL(new URL('ic_folder_network.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_info_black_18dp', 'url(\"' + new URL(new URL('ic_info_black_18dp.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_memory_16x16', 'url(\"' + new URL(new URL('ic_memory_16x16.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_page_next_16x16_icon', 'url(\"' + new URL(new URL('ic_page_next_16x16_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_page_prev_16x16_icon', 'url(\"' + new URL(new URL('ic_page_prev_16x16_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_preview_feature', 'url(\"' + new URL(new URL('ic_preview_feature.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_redo_16x16_icon', 'url(\"' + new URL(new URL('ic_redo_16x16_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_request_response', 'url(\"' + new URL(new URL('ic_request_response.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_response', 'url(\"' + new URL(new URL('ic_response.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_show_node_16x16', 'url(\"' + new URL(new URL('ic_show_node_16x16.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_suggest_color', 'url(\"' + new URL(new URL('ic_suggest_color.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_undo_16x16_icon', 'url(\"' + new URL(new URL('ic_undo_16x16_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-ic_warning_black_18dp', 'url(\"' + new URL(new URL('ic_warning_black_18dp.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-issue-cross-icon', 'url(\"' + new URL(new URL('issue-cross-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-issue-exclamation-icon', 'url(\"' + new URL(new URL('issue-exclamation-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-issue-questionmark-icon', 'url(\"' + new URL(new URL('issue-questionmark-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-issue-text-icon', 'url(\"' + new URL(new URL('issue-text-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-content-center-icon', 'url(\"' + new URL(new URL('justify-content-center-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-content-flex-end-icon', 'url(\"' + new URL(new URL('justify-content-flex-end-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-content-flex-start-icon', 'url(\"' + new URL(new URL('justify-content-flex-start-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-content-space-around-icon', 'url(\"' + new URL(new URL('justify-content-space-around-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-content-space-between-icon', 'url(\"' + new URL(new URL('justify-content-space-between-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-content-space-evenly-icon', 'url(\"' + new URL(new URL('justify-content-space-evenly-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-items-center-icon', 'url(\"' + new URL(new URL('justify-items-center-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-items-end-icon', 'url(\"' + new URL(new URL('justify-items-end-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-items-start-icon', 'url(\"' + new URL(new URL('justify-items-start-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-justify-items-stretch-icon', 'url(\"' + new URL(new URL('justify-items-stretch-icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-largeIcons', 'url(\"' + new URL(new URL('largeIcons.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-lighthouse_logo', 'url(\"' + new URL(new URL('lighthouse_logo.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-link_icon', 'url(\"' + new URL(new URL('link_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-mediumIcons', 'url(\"' + new URL(new URL('mediumIcons.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-network_conditions_icon', 'url(\"' + new URL(new URL('network_conditions_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-network_panel_icon', 'url(\"' + new URL(new URL('network_panel_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-node_search_icon', 'url(\"' + new URL(new URL('node_search_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-preview_feature_video_thumbnail', 'url(\"' + new URL(new URL('preview_feature_video_thumbnail.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-refresh_12x12_icon', 'url(\"' + new URL(new URL('refresh_12x12_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-resizeDiagonal', 'url(\"' + new URL(new URL('resizeDiagonal.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-resizeHorizontal', 'url(\"' + new URL(new URL('resizeHorizontal.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-resizeVertical', 'url(\"' + new URL(new URL('resizeVertical.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-securityIcons', 'url(\"' + new URL(new URL('securityIcons.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-settings_14x14_icon', 'url(\"' + new URL(new URL('settings_14x14_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-smallIcons', 'url(\"' + new URL(new URL('smallIcons.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-sources_panel_icon', 'url(\"' + new URL(new URL('sources_panel_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-survey_feedback_icon', 'url(\"' + new URL(new URL('survey_feedback_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-switcherIcon', 'url(\"' + new URL(new URL('switcherIcon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-three_dots_menu_icon', 'url(\"' + new URL(new URL('three_dots_menu_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-trash_bin_icon', 'url(\"' + new URL(new URL('trash_bin_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-treeoutlineTriangles', 'url(\"' + new URL(new URL('treeoutlineTriangles.svg', import.meta.url).href, import.meta.url).toString() + '\")'); +style.setProperty('--image-file-warning_icon', 'url(\"' + new URL(new URL('warning_icon.svg', import.meta.url).href, import.meta.url).toString() + '\")'); + +document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet]; diff --git a/chii/Images/accelerometer-back.svg b/chii/Images/accelerometer-back.svg new file mode 100644 index 00000000..73ce51fb --- /dev/null +++ b/chii/Images/accelerometer-back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/accelerometer-bottom.png b/chii/Images/accelerometer-bottom.png new file mode 100644 index 00000000..997b5498 Binary files /dev/null and b/chii/Images/accelerometer-bottom.png differ diff --git a/chii/Images/accelerometer-front.svg b/chii/Images/accelerometer-front.svg new file mode 100644 index 00000000..e4c195d5 --- /dev/null +++ b/chii/Images/accelerometer-front.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/accelerometer-left.png b/chii/Images/accelerometer-left.png new file mode 100644 index 00000000..26db4cfa Binary files /dev/null and b/chii/Images/accelerometer-left.png differ diff --git a/chii/Images/accelerometer-right.png b/chii/Images/accelerometer-right.png new file mode 100644 index 00000000..034c882b Binary files /dev/null and b/chii/Images/accelerometer-right.png differ diff --git a/chii/Images/accelerometer-top.png b/chii/Images/accelerometer-top.png new file mode 100644 index 00000000..71a07f09 Binary files /dev/null and b/chii/Images/accelerometer-top.png differ diff --git a/chii/Images/accessibility-icon.svg b/chii/Images/accessibility-icon.svg new file mode 100644 index 00000000..080920f3 --- /dev/null +++ b/chii/Images/accessibility-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/add-icon.svg b/chii/Images/add-icon.svg new file mode 100644 index 00000000..3a79180b --- /dev/null +++ b/chii/Images/add-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-center-icon.svg b/chii/Images/align-content-center-icon.svg new file mode 100644 index 00000000..6cf3b376 --- /dev/null +++ b/chii/Images/align-content-center-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-end-icon.svg b/chii/Images/align-content-end-icon.svg new file mode 100644 index 00000000..bba12b07 --- /dev/null +++ b/chii/Images/align-content-end-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-space-around-icon.svg b/chii/Images/align-content-space-around-icon.svg new file mode 100644 index 00000000..e57c8b52 --- /dev/null +++ b/chii/Images/align-content-space-around-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-space-between-icon.svg b/chii/Images/align-content-space-between-icon.svg new file mode 100644 index 00000000..d3aa2e04 --- /dev/null +++ b/chii/Images/align-content-space-between-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-space-evenly-icon.svg b/chii/Images/align-content-space-evenly-icon.svg new file mode 100644 index 00000000..b9cfddff --- /dev/null +++ b/chii/Images/align-content-space-evenly-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-start-icon.svg b/chii/Images/align-content-start-icon.svg new file mode 100644 index 00000000..38d7e087 --- /dev/null +++ b/chii/Images/align-content-start-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-content-stretch-icon.svg b/chii/Images/align-content-stretch-icon.svg new file mode 100644 index 00000000..4b031b3b --- /dev/null +++ b/chii/Images/align-content-stretch-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-items-center-icon.svg b/chii/Images/align-items-center-icon.svg new file mode 100644 index 00000000..1bc71d35 --- /dev/null +++ b/chii/Images/align-items-center-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-items-flex-end-icon.svg b/chii/Images/align-items-flex-end-icon.svg new file mode 100644 index 00000000..c2d10855 --- /dev/null +++ b/chii/Images/align-items-flex-end-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-items-flex-start-icon.svg b/chii/Images/align-items-flex-start-icon.svg new file mode 100644 index 00000000..3272e234 --- /dev/null +++ b/chii/Images/align-items-flex-start-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-items-stretch-icon.svg b/chii/Images/align-items-stretch-icon.svg new file mode 100644 index 00000000..b4cf67cd --- /dev/null +++ b/chii/Images/align-items-stretch-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-self-center-icon.svg b/chii/Images/align-self-center-icon.svg new file mode 100644 index 00000000..4982b252 --- /dev/null +++ b/chii/Images/align-self-center-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-self-flex-end-icon.svg b/chii/Images/align-self-flex-end-icon.svg new file mode 100644 index 00000000..95dc38f2 --- /dev/null +++ b/chii/Images/align-self-flex-end-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-self-flex-start-icon.svg b/chii/Images/align-self-flex-start-icon.svg new file mode 100644 index 00000000..03852204 --- /dev/null +++ b/chii/Images/align-self-flex-start-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/align-self-stretch-icon.svg b/chii/Images/align-self-stretch-icon.svg new file mode 100644 index 00000000..5add240e --- /dev/null +++ b/chii/Images/align-self-stretch-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/baseline-icon.svg b/chii/Images/baseline-icon.svg new file mode 100644 index 00000000..16e43d98 --- /dev/null +++ b/chii/Images/baseline-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/checkboxCheckmark.svg b/chii/Images/checkboxCheckmark.svg new file mode 100644 index 00000000..f9e75f4f --- /dev/null +++ b/chii/Images/checkboxCheckmark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/checker.png b/chii/Images/checker.png new file mode 100644 index 00000000..fa1d6789 Binary files /dev/null and b/chii/Images/checker.png differ diff --git a/chii/Images/chevrons.svg b/chii/Images/chevrons.svg new file mode 100644 index 00000000..08433c0c --- /dev/null +++ b/chii/Images/chevrons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/chromeDisabledSelect.png b/chii/Images/chromeDisabledSelect.png new file mode 100644 index 00000000..9f003e5d Binary files /dev/null and b/chii/Images/chromeDisabledSelect.png differ diff --git a/chii/Images/chromeDisabledSelect_2x.png b/chii/Images/chromeDisabledSelect_2x.png new file mode 100644 index 00000000..f7ace7a5 Binary files /dev/null and b/chii/Images/chromeDisabledSelect_2x.png differ diff --git a/chii/Images/chromeLeft.avif b/chii/Images/chromeLeft.avif new file mode 100644 index 00000000..25d18157 Binary files /dev/null and b/chii/Images/chromeLeft.avif differ diff --git a/chii/Images/chromeMiddle.avif b/chii/Images/chromeMiddle.avif new file mode 100644 index 00000000..13087d03 Binary files /dev/null and b/chii/Images/chromeMiddle.avif differ diff --git a/chii/Images/chromeRight.avif b/chii/Images/chromeRight.avif new file mode 100644 index 00000000..81472dd5 Binary files /dev/null and b/chii/Images/chromeRight.avif differ diff --git a/chii/Images/chromeSelect.svg b/chii/Images/chromeSelect.svg new file mode 100644 index 00000000..9e62d2e3 --- /dev/null +++ b/chii/Images/chromeSelect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/chromeSelectDark.svg b/chii/Images/chromeSelectDark.svg new file mode 100644 index 00000000..530d2ed5 --- /dev/null +++ b/chii/Images/chromeSelectDark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/circled_exclamation_icon.svg b/chii/Images/circled_exclamation_icon.svg new file mode 100644 index 00000000..4bfb0b46 --- /dev/null +++ b/chii/Images/circled_exclamation_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/close-icon.svg b/chii/Images/close-icon.svg new file mode 100644 index 00000000..da2f7397 --- /dev/null +++ b/chii/Images/close-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/copy_icon.svg b/chii/Images/copy_icon.svg new file mode 100644 index 00000000..b07da9a0 --- /dev/null +++ b/chii/Images/copy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/cssoverview_icons_2x.avif b/chii/Images/cssoverview_icons_2x.avif new file mode 100644 index 00000000..28a74d19 Binary files /dev/null and b/chii/Images/cssoverview_icons_2x.avif differ diff --git a/chii/Images/dropdown_7x6_icon.svg b/chii/Images/dropdown_7x6_icon.svg new file mode 100644 index 00000000..6d9a2448 --- /dev/null +++ b/chii/Images/dropdown_7x6_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/elements_panel_icon.svg b/chii/Images/elements_panel_icon.svg new file mode 100644 index 00000000..c596c5ec --- /dev/null +++ b/chii/Images/elements_panel_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/errorWave.svg b/chii/Images/errorWave.svg new file mode 100644 index 00000000..97ea21e1 --- /dev/null +++ b/chii/Images/errorWave.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/error_icon.svg b/chii/Images/error_icon.svg new file mode 100644 index 00000000..8b25eacc --- /dev/null +++ b/chii/Images/error_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/feedback_button_icon.svg b/chii/Images/feedback_button_icon.svg new file mode 100644 index 00000000..9e3c0680 --- /dev/null +++ b/chii/Images/feedback_button_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/flex-direction-icon.svg b/chii/Images/flex-direction-icon.svg new file mode 100644 index 00000000..ac09995e --- /dev/null +++ b/chii/Images/flex-direction-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/flex-nowrap-icon.svg b/chii/Images/flex-nowrap-icon.svg new file mode 100644 index 00000000..abbf4d33 --- /dev/null +++ b/chii/Images/flex-nowrap-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/flex-wrap-icon.svg b/chii/Images/flex-wrap-icon.svg new file mode 100644 index 00000000..b73d182e --- /dev/null +++ b/chii/Images/flex-wrap-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/help_outline.svg b/chii/Images/help_outline.svg new file mode 100644 index 00000000..ef583fed --- /dev/null +++ b/chii/Images/help_outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_checkmark_16x16.svg b/chii/Images/ic_checkmark_16x16.svg new file mode 100644 index 00000000..18165157 --- /dev/null +++ b/chii/Images/ic_checkmark_16x16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_command_go_to_line.svg b/chii/Images/ic_command_go_to_line.svg new file mode 100644 index 00000000..d8ccc9b6 --- /dev/null +++ b/chii/Images/ic_command_go_to_line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_command_go_to_symbol.svg b/chii/Images/ic_command_go_to_symbol.svg new file mode 100644 index 00000000..0516f0b7 --- /dev/null +++ b/chii/Images/ic_command_go_to_symbol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_command_help.svg b/chii/Images/ic_command_help.svg new file mode 100644 index 00000000..8c9e8f14 --- /dev/null +++ b/chii/Images/ic_command_help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_command_open_file.svg b/chii/Images/ic_command_open_file.svg new file mode 100644 index 00000000..3276b777 --- /dev/null +++ b/chii/Images/ic_command_open_file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_command_run_command.svg b/chii/Images/ic_command_run_command.svg new file mode 100644 index 00000000..d78c7ba8 --- /dev/null +++ b/chii/Images/ic_command_run_command.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_command_run_snippet.svg b/chii/Images/ic_command_run_snippet.svg new file mode 100644 index 00000000..725a4be2 --- /dev/null +++ b/chii/Images/ic_command_run_snippet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_delete_filter.svg b/chii/Images/ic_delete_filter.svg new file mode 100644 index 00000000..b0793ea3 --- /dev/null +++ b/chii/Images/ic_delete_filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_delete_list.svg b/chii/Images/ic_delete_list.svg new file mode 100644 index 00000000..80ecb7c8 --- /dev/null +++ b/chii/Images/ic_delete_list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_dimension_single.svg b/chii/Images/ic_dimension_single.svg new file mode 100644 index 00000000..3369c895 --- /dev/null +++ b/chii/Images/ic_dimension_single.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_default.svg b/chii/Images/ic_file_default.svg new file mode 100644 index 00000000..795ccbed --- /dev/null +++ b/chii/Images/ic_file_default.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_document.svg b/chii/Images/ic_file_document.svg new file mode 100644 index 00000000..3eeccdd0 --- /dev/null +++ b/chii/Images/ic_file_document.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_font.svg b/chii/Images/ic_file_font.svg new file mode 100644 index 00000000..b12ba552 --- /dev/null +++ b/chii/Images/ic_file_font.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_image.svg b/chii/Images/ic_file_image.svg new file mode 100644 index 00000000..d9176f8f --- /dev/null +++ b/chii/Images/ic_file_image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_script.svg b/chii/Images/ic_file_script.svg new file mode 100644 index 00000000..ecaf0721 --- /dev/null +++ b/chii/Images/ic_file_script.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_snippet.svg b/chii/Images/ic_file_snippet.svg new file mode 100644 index 00000000..f5800731 --- /dev/null +++ b/chii/Images/ic_file_snippet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_stylesheet.svg b/chii/Images/ic_file_stylesheet.svg new file mode 100644 index 00000000..e231f745 --- /dev/null +++ b/chii/Images/ic_file_stylesheet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_webbundle.svg b/chii/Images/ic_file_webbundle.svg new file mode 100644 index 00000000..4d22b7d9 --- /dev/null +++ b/chii/Images/ic_file_webbundle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_file_webbundle_inner_request.svg b/chii/Images/ic_file_webbundle_inner_request.svg new file mode 100644 index 00000000..c2e3fe53 --- /dev/null +++ b/chii/Images/ic_file_webbundle_inner_request.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_folder_default.svg b/chii/Images/ic_folder_default.svg new file mode 100644 index 00000000..30386f14 --- /dev/null +++ b/chii/Images/ic_folder_default.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_folder_local.svg b/chii/Images/ic_folder_local.svg new file mode 100644 index 00000000..52f82fe4 --- /dev/null +++ b/chii/Images/ic_folder_local.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_folder_network.svg b/chii/Images/ic_folder_network.svg new file mode 100644 index 00000000..650b1c17 --- /dev/null +++ b/chii/Images/ic_folder_network.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_info_black_18dp.svg b/chii/Images/ic_info_black_18dp.svg new file mode 100644 index 00000000..135a5960 --- /dev/null +++ b/chii/Images/ic_info_black_18dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_memory_16x16.svg b/chii/Images/ic_memory_16x16.svg new file mode 100644 index 00000000..f06e511f --- /dev/null +++ b/chii/Images/ic_memory_16x16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_page_next_16x16_icon.svg b/chii/Images/ic_page_next_16x16_icon.svg new file mode 100644 index 00000000..a0d65197 --- /dev/null +++ b/chii/Images/ic_page_next_16x16_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_page_prev_16x16_icon.svg b/chii/Images/ic_page_prev_16x16_icon.svg new file mode 100644 index 00000000..3988457f --- /dev/null +++ b/chii/Images/ic_page_prev_16x16_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_preview_feature.svg b/chii/Images/ic_preview_feature.svg new file mode 100644 index 00000000..40fd6e11 --- /dev/null +++ b/chii/Images/ic_preview_feature.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_redo_16x16_icon.svg b/chii/Images/ic_redo_16x16_icon.svg new file mode 100644 index 00000000..896953ab --- /dev/null +++ b/chii/Images/ic_redo_16x16_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_request_response.svg b/chii/Images/ic_request_response.svg new file mode 100644 index 00000000..4da33e0e --- /dev/null +++ b/chii/Images/ic_request_response.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_response.svg b/chii/Images/ic_response.svg new file mode 100644 index 00000000..12f6e66e --- /dev/null +++ b/chii/Images/ic_response.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_show_node_16x16.svg b/chii/Images/ic_show_node_16x16.svg new file mode 100644 index 00000000..78928fa9 --- /dev/null +++ b/chii/Images/ic_show_node_16x16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_suggest_color.svg b/chii/Images/ic_suggest_color.svg new file mode 100644 index 00000000..514b0bab --- /dev/null +++ b/chii/Images/ic_suggest_color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_undo_16x16_icon.svg b/chii/Images/ic_undo_16x16_icon.svg new file mode 100644 index 00000000..012974c1 --- /dev/null +++ b/chii/Images/ic_undo_16x16_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/ic_warning_black_18dp.svg b/chii/Images/ic_warning_black_18dp.svg new file mode 100644 index 00000000..dbf20ebf --- /dev/null +++ b/chii/Images/ic_warning_black_18dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/issue-cross-icon.svg b/chii/Images/issue-cross-icon.svg new file mode 100644 index 00000000..e59ae6cf --- /dev/null +++ b/chii/Images/issue-cross-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/issue-exclamation-icon.svg b/chii/Images/issue-exclamation-icon.svg new file mode 100644 index 00000000..6489eb43 --- /dev/null +++ b/chii/Images/issue-exclamation-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/issue-questionmark-icon.svg b/chii/Images/issue-questionmark-icon.svg new file mode 100644 index 00000000..f8e8fae6 --- /dev/null +++ b/chii/Images/issue-questionmark-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/issue-text-icon.svg b/chii/Images/issue-text-icon.svg new file mode 100644 index 00000000..924baa64 --- /dev/null +++ b/chii/Images/issue-text-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-content-center-icon.svg b/chii/Images/justify-content-center-icon.svg new file mode 100644 index 00000000..2e088454 --- /dev/null +++ b/chii/Images/justify-content-center-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-content-flex-end-icon.svg b/chii/Images/justify-content-flex-end-icon.svg new file mode 100644 index 00000000..d1b2f11d --- /dev/null +++ b/chii/Images/justify-content-flex-end-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-content-flex-start-icon.svg b/chii/Images/justify-content-flex-start-icon.svg new file mode 100644 index 00000000..412e5a14 --- /dev/null +++ b/chii/Images/justify-content-flex-start-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-content-space-around-icon.svg b/chii/Images/justify-content-space-around-icon.svg new file mode 100644 index 00000000..9e6a250d --- /dev/null +++ b/chii/Images/justify-content-space-around-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-content-space-between-icon.svg b/chii/Images/justify-content-space-between-icon.svg new file mode 100644 index 00000000..d0748d53 --- /dev/null +++ b/chii/Images/justify-content-space-between-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-content-space-evenly-icon.svg b/chii/Images/justify-content-space-evenly-icon.svg new file mode 100644 index 00000000..f47e8e5c --- /dev/null +++ b/chii/Images/justify-content-space-evenly-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-items-center-icon.svg b/chii/Images/justify-items-center-icon.svg new file mode 100644 index 00000000..6324ce51 --- /dev/null +++ b/chii/Images/justify-items-center-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-items-end-icon.svg b/chii/Images/justify-items-end-icon.svg new file mode 100644 index 00000000..edb2296f --- /dev/null +++ b/chii/Images/justify-items-end-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-items-start-icon.svg b/chii/Images/justify-items-start-icon.svg new file mode 100644 index 00000000..9cc65bec --- /dev/null +++ b/chii/Images/justify-items-start-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/justify-items-stretch-icon.svg b/chii/Images/justify-items-stretch-icon.svg new file mode 100644 index 00000000..7cf39169 --- /dev/null +++ b/chii/Images/justify-items-stretch-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/largeIcons.svg b/chii/Images/largeIcons.svg new file mode 100644 index 00000000..e19be75c --- /dev/null +++ b/chii/Images/largeIcons.svg @@ -0,0 +1,2 @@ +abcdefgh123456789i9Sprites are deprecated, do not modify this file. +See readme in front_end/Images for the new workflow. \ No newline at end of file diff --git a/chii/Images/lighthouse_logo.svg b/chii/Images/lighthouse_logo.svg new file mode 100644 index 00000000..5f8e9c6b --- /dev/null +++ b/chii/Images/lighthouse_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/link_icon.svg b/chii/Images/link_icon.svg new file mode 100644 index 00000000..358d7752 --- /dev/null +++ b/chii/Images/link_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/mediumIcons.svg b/chii/Images/mediumIcons.svg new file mode 100644 index 00000000..7c26bfa1 --- /dev/null +++ b/chii/Images/mediumIcons.svg @@ -0,0 +1 @@ +1234abcd5eAB6fgSprites are deprecated, do not modify this file.See readme in front_end/Images for the new workflow. \ No newline at end of file diff --git a/chii/Images/navigationControls.png b/chii/Images/navigationControls.png new file mode 100644 index 00000000..de8ecc77 Binary files /dev/null and b/chii/Images/navigationControls.png differ diff --git a/chii/Images/navigationControls_2x.png b/chii/Images/navigationControls_2x.png new file mode 100644 index 00000000..01dff78e Binary files /dev/null and b/chii/Images/navigationControls_2x.png differ diff --git a/chii/Images/network_conditions_icon.svg b/chii/Images/network_conditions_icon.svg new file mode 100644 index 00000000..b30220af --- /dev/null +++ b/chii/Images/network_conditions_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/network_panel_icon.svg b/chii/Images/network_panel_icon.svg new file mode 100644 index 00000000..ff9b8513 --- /dev/null +++ b/chii/Images/network_panel_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/nodeIcon.avif b/chii/Images/nodeIcon.avif new file mode 100644 index 00000000..ce1a7dff Binary files /dev/null and b/chii/Images/nodeIcon.avif differ diff --git a/chii/Images/node_search_icon.svg b/chii/Images/node_search_icon.svg new file mode 100644 index 00000000..bf82df21 --- /dev/null +++ b/chii/Images/node_search_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/popoverArrows.png b/chii/Images/popoverArrows.png new file mode 100644 index 00000000..0e427a7f Binary files /dev/null and b/chii/Images/popoverArrows.png differ diff --git a/chii/Images/preview_feature_video_thumbnail.svg b/chii/Images/preview_feature_video_thumbnail.svg new file mode 100644 index 00000000..923d1ea9 --- /dev/null +++ b/chii/Images/preview_feature_video_thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/profileGroupIcon.png b/chii/Images/profileGroupIcon.png new file mode 100644 index 00000000..dae0c1b0 Binary files /dev/null and b/chii/Images/profileGroupIcon.png differ diff --git a/chii/Images/profileIcon.png b/chii/Images/profileIcon.png new file mode 100644 index 00000000..9a844916 Binary files /dev/null and b/chii/Images/profileIcon.png differ diff --git a/chii/Images/profileSmallIcon.png b/chii/Images/profileSmallIcon.png new file mode 100644 index 00000000..f46732a9 Binary files /dev/null and b/chii/Images/profileSmallIcon.png differ diff --git a/chii/Images/refresh_12x12_icon.svg b/chii/Images/refresh_12x12_icon.svg new file mode 100644 index 00000000..954c6801 --- /dev/null +++ b/chii/Images/refresh_12x12_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/resizeDiagonal.svg b/chii/Images/resizeDiagonal.svg new file mode 100644 index 00000000..29955155 --- /dev/null +++ b/chii/Images/resizeDiagonal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/resizeHorizontal.svg b/chii/Images/resizeHorizontal.svg new file mode 100644 index 00000000..eed4f6e0 --- /dev/null +++ b/chii/Images/resizeHorizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/resizeVertical.svg b/chii/Images/resizeVertical.svg new file mode 100644 index 00000000..5b0b69fa --- /dev/null +++ b/chii/Images/resizeVertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/resourcesTimeGraphIcon.avif b/chii/Images/resourcesTimeGraphIcon.avif new file mode 100644 index 00000000..3368898a Binary files /dev/null and b/chii/Images/resourcesTimeGraphIcon.avif differ diff --git a/chii/Images/searchNext.png b/chii/Images/searchNext.png new file mode 100644 index 00000000..29164763 Binary files /dev/null and b/chii/Images/searchNext.png differ diff --git a/chii/Images/searchPrev.png b/chii/Images/searchPrev.png new file mode 100644 index 00000000..fe7c61f8 Binary files /dev/null and b/chii/Images/searchPrev.png differ diff --git a/chii/Images/securityIcons.svg b/chii/Images/securityIcons.svg new file mode 100644 index 00000000..b03c3914 --- /dev/null +++ b/chii/Images/securityIcons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/settings_14x14_icon.svg b/chii/Images/settings_14x14_icon.svg new file mode 100644 index 00000000..174a9177 --- /dev/null +++ b/chii/Images/settings_14x14_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/smallIcons.svg b/chii/Images/smallIcons.svg new file mode 100644 index 00000000..e835aa70 --- /dev/null +++ b/chii/Images/smallIcons.svg @@ -0,0 +1 @@ +abcde123456fgSprites are deprecated, do not modify this file.See readme in front_end/Images for the new workflow. \ No newline at end of file diff --git a/chii/Images/sources_panel_icon.svg b/chii/Images/sources_panel_icon.svg new file mode 100644 index 00000000..97cc1b9e --- /dev/null +++ b/chii/Images/sources_panel_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/speech.png b/chii/Images/speech.png new file mode 100644 index 00000000..1c3e441a Binary files /dev/null and b/chii/Images/speech.png differ diff --git a/chii/Images/survey_feedback_icon.svg b/chii/Images/survey_feedback_icon.svg new file mode 100644 index 00000000..ac8dda3d --- /dev/null +++ b/chii/Images/survey_feedback_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/switcherIcon.svg b/chii/Images/switcherIcon.svg new file mode 100644 index 00000000..05dc6875 --- /dev/null +++ b/chii/Images/switcherIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/three_dots_menu_icon.svg b/chii/Images/three_dots_menu_icon.svg new file mode 100644 index 00000000..ddbfa438 --- /dev/null +++ b/chii/Images/three_dots_menu_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/toolbarResizerVertical.png b/chii/Images/toolbarResizerVertical.png new file mode 100644 index 00000000..5da3f6c2 Binary files /dev/null and b/chii/Images/toolbarResizerVertical.png differ diff --git a/chii/Images/touchCursor.png b/chii/Images/touchCursor.png new file mode 100644 index 00000000..a6e0e80b Binary files /dev/null and b/chii/Images/touchCursor.png differ diff --git a/chii/Images/touchCursor_2x.png b/chii/Images/touchCursor_2x.png new file mode 100644 index 00000000..b3bbb5a6 Binary files /dev/null and b/chii/Images/touchCursor_2x.png differ diff --git a/chii/Images/trash_bin_icon.svg b/chii/Images/trash_bin_icon.svg new file mode 100644 index 00000000..b1f96abb --- /dev/null +++ b/chii/Images/trash_bin_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/treeoutlineTriangles.svg b/chii/Images/treeoutlineTriangles.svg new file mode 100644 index 00000000..de13f688 --- /dev/null +++ b/chii/Images/treeoutlineTriangles.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/warning_icon.svg b/chii/Images/warning_icon.svg new file mode 100644 index 00000000..6db9f9e6 --- /dev/null +++ b/chii/Images/warning_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chii/Images/whatsnew.avif b/chii/Images/whatsnew.avif new file mode 100644 index 00000000..86540657 Binary files /dev/null and b/chii/Images/whatsnew.avif differ diff --git a/chii/Tests.js b/chii/Tests.js new file mode 100644 index 00000000..a97b7b41 --- /dev/null +++ b/chii/Tests.js @@ -0,0 +1,1683 @@ +/* + * Copyright (C) 2010 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* eslint-disable indent */ + +/** + * @fileoverview This file contains small testing framework along with the + * test suite for the frontend. These tests are a part of the continues build + * and are executed by the devtools_browsertest.cc as a part of the + * Interactive UI Test suite. + * FIXME: change field naming style to use trailing underscore. + */ + +(function createTestSuite(window) { + + const TestSuite = class { + /** + * Test suite for interactive UI tests. + * @param {Object} domAutomationController DomAutomationController instance. + */ + constructor(domAutomationController) { + this.domAutomationController_ = domAutomationController; + this.controlTaken_ = false; + this.timerId_ = -1; + this._asyncInvocationId = 0; + } + + /** + * Key event with given key identifier. + */ + static createKeyEvent(key) { + return new KeyboardEvent('keydown', {bubbles: true, cancelable: true, key: key}); + } + }; + + /** + * Reports test failure. + * @param {string} message Failure description. + */ + TestSuite.prototype.fail = function(message) { + if (this.controlTaken_) { + this.reportFailure_(message); + } else { + throw message; + } + }; + + /** + * Equals assertion tests that expected === actual. + * @param {!Object|boolean} expected Expected object. + * @param {!Object|boolean} actual Actual object. + * @param {string} opt_message User message to print if the test fails. + */ + TestSuite.prototype.assertEquals = function(expected, actual, opt_message) { + if (expected !== actual) { + let message = 'Expected: \'' + expected + '\', but was \'' + actual + '\''; + if (opt_message) { + message = opt_message + '(' + message + ')'; + } + this.fail(message); + } + }; + + /** + * True assertion tests that value == true. + * @param {!Object} value Actual object. + * @param {string} opt_message User message to print if the test fails. + */ + TestSuite.prototype.assertTrue = function(value, opt_message) { + this.assertEquals(true, Boolean(value), opt_message); + }; + + /** + * Takes control over execution. + * @param {{slownessFactor:number}=} options + */ + TestSuite.prototype.takeControl = function(options) { + const {slownessFactor} = {slownessFactor: 1, ...options}; + this.controlTaken_ = true; + // Set up guard timer. + const self = this; + const timeoutInSec = 20 * slownessFactor; + this.timerId_ = setTimeout(function() { + self.reportFailure_(`Timeout exceeded: ${timeoutInSec} sec`); + }, timeoutInSec * 1000); + }; + + /** + * Releases control over execution. + */ + TestSuite.prototype.releaseControl = function() { + if (this.timerId_ !== -1) { + clearTimeout(this.timerId_); + this.timerId_ = -1; + } + this.controlTaken_ = false; + this.reportOk_(); + }; + + /** + * Async tests use this one to report that they are completed. + */ + TestSuite.prototype.reportOk_ = function() { + this.domAutomationController_.send('[OK]'); + }; + + /** + * Async tests use this one to report failures. + */ + TestSuite.prototype.reportFailure_ = function(error) { + if (this.timerId_ !== -1) { + clearTimeout(this.timerId_); + this.timerId_ = -1; + } + this.domAutomationController_.send('[FAILED] ' + error); + }; + + TestSuite.prototype.setupLegacyFilesForTest = async function() { + try { + await Promise.all([ + self.runtime.loadLegacyModule('core/common/common-legacy.js'), + self.runtime.loadLegacyModule('core/sdk/sdk-legacy.js'), + self.runtime.loadLegacyModule('core/host/host-legacy.js'), + self.runtime.loadLegacyModule('ui/legacy/legacy-legacy.js'), + self.runtime.loadLegacyModule('models/workspace/workspace-legacy.js'), + ]); + this.reportOk_(); + } catch (e) { + this.reportFailure_(e); + } + }; + + /** + * Run specified test on a fresh instance of the test suite. + * @param {Array} args method name followed by its parameters. + */ + TestSuite.prototype.dispatchOnTestSuite = async function(args) { + const methodName = args.shift(); + try { + await this[methodName].apply(this, args); + if (!this.controlTaken_) { + this.reportOk_(); + } + } catch (e) { + this.reportFailure_(e); + } + }; + + /** + * Wrap an async method with TestSuite.{takeControl(), releaseControl()} + * and invoke TestSuite.reportOk_ upon completion. + * @param {Array} args method name followed by its parameters. + */ + TestSuite.prototype.waitForAsync = function(var_args) { + const args = Array.prototype.slice.call(arguments); + this.takeControl(); + args.push(this.releaseControl.bind(this)); + this.dispatchOnTestSuite(args); + }; + + /** + * Overrides the method with specified name until it's called first time. + * @param {!Object} receiver An object whose method to override. + * @param {string} methodName Name of the method to override. + * @param {!Function} override A function that should be called right after the + * overridden method returns. + * @param {?boolean} opt_sticky Whether restore original method after first run + * or not. + */ + TestSuite.prototype.addSniffer = function(receiver, methodName, override, opt_sticky) { + const orig = receiver[methodName]; + if (typeof orig !== 'function') { + this.fail('Cannot find method to override: ' + methodName); + } + const test = this; + receiver[methodName] = function(var_args) { + let result; + try { + result = orig.apply(this, arguments); + } finally { + if (!opt_sticky) { + receiver[methodName] = orig; + } + } + // In case of exception the override won't be called. + try { + override.apply(this, arguments); + } catch (e) { + test.fail('Exception in overriden method \'' + methodName + '\': ' + e); + } + return result; + }; + }; + + /** + * Waits for current throttler invocations, if any. + * @param {!Common.Throttler} throttler + * @param {function()} callback + */ + TestSuite.prototype.waitForThrottler = function(throttler, callback) { + const test = this; + let scheduleShouldFail = true; + test.addSniffer(throttler, 'schedule', onSchedule); + + function hasSomethingScheduled() { + return throttler._isRunningProcess || throttler._process; + } + + function checkState() { + if (!hasSomethingScheduled()) { + scheduleShouldFail = false; + callback(); + return; + } + + test.addSniffer(throttler, 'processCompletedForTests', checkState); + } + + function onSchedule() { + if (scheduleShouldFail) { + test.fail('Unexpected Throttler.schedule'); + } + } + + checkState(); + }; + + /** + * @param {string} panelName Name of the panel to show. + */ + TestSuite.prototype.showPanel = function(panelName) { + return self.UI.inspectorView.showPanel(panelName); + }; + + // UI Tests + + /** + * Tests that scripts tab can be open and populated with inspected scripts. + */ + TestSuite.prototype.testShowScriptsTab = function() { + const test = this; + this.showPanel('sources').then(function() { + // There should be at least main page script. + this._waitUntilScriptsAreParsed(['debugger_test_page.html'], function() { + test.releaseControl(); + }); + }.bind(this)); + // Wait until all scripts are added to the debugger. + this.takeControl(); + }; + + /** + * Tests that scripts tab is populated with inspected scripts even if it + * hadn't been shown by the moment inspected paged refreshed. + * @see http://crbug.com/26312 + */ + TestSuite.prototype.testScriptsTabIsPopulatedOnInspectedPageRefresh = function() { + const test = this; + const debuggerModel = self.SDK.targetManager.mainTarget().model(SDK.DebuggerModel); + debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, waitUntilScriptIsParsed); + + this.showPanel('elements').then(function() { + // Reload inspected page. It will reset the debugger agent. + test.evaluateInConsole_('window.location.reload(true);', function(resultText) {}); + }); + + function waitUntilScriptIsParsed() { + debuggerModel.removeEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, waitUntilScriptIsParsed); + test.showPanel('sources').then(function() { + test._waitUntilScriptsAreParsed(['debugger_test_page.html'], function() { + test.releaseControl(); + }); + }); + } + + // Wait until all scripts are added to the debugger. + this.takeControl(); + }; + + /** + * Tests that scripts list contains content scripts. + */ + TestSuite.prototype.testContentScriptIsPresent = function() { + const test = this; + this.showPanel('sources').then(function() { + test._waitUntilScriptsAreParsed(['page_with_content_script.html', 'simple_content_script.js'], function() { + test.releaseControl(); + }); + }); + + // Wait until all scripts are added to the debugger. + this.takeControl(); + }; + + /** + * Tests that scripts are not duplicaed on Scripts tab switch. + */ + TestSuite.prototype.testNoScriptDuplicatesOnPanelSwitch = function() { + const test = this; + + function switchToElementsTab() { + test.showPanel('elements').then(function() { + setTimeout(switchToScriptsTab, 0); + }); + } + + function switchToScriptsTab() { + test.showPanel('sources').then(function() { + setTimeout(checkScriptsPanel, 0); + }); + } + + function checkScriptsPanel() { + test.assertTrue(test._scriptsAreParsed(['debugger_test_page.html']), 'Some scripts are missing.'); + checkNoDuplicates(); + test.releaseControl(); + } + + function checkNoDuplicates() { + const uiSourceCodes = test.nonAnonymousUISourceCodes_(); + for (let i = 0; i < uiSourceCodes.length; i++) { + for (let j = i + 1; j < uiSourceCodes.length; j++) { + test.assertTrue( + uiSourceCodes[i].url() !== uiSourceCodes[j].url(), + 'Found script duplicates: ' + test.uiSourceCodesToString_(uiSourceCodes)); + } + } + } + + this.showPanel('sources').then(function() { + test._waitUntilScriptsAreParsed(['debugger_test_page.html'], function() { + checkNoDuplicates(); + setTimeout(switchToElementsTab, 0); + }); + }); + + // Wait until all scripts are added to the debugger. + this.takeControl({slownessFactor: 10}); + }; + + // Tests that debugger works correctly if pause event occurs when DevTools + // frontend is being loaded. + TestSuite.prototype.testPauseWhenLoadingDevTools = function() { + const debuggerModel = self.SDK.targetManager.mainTarget().model(SDK.DebuggerModel); + if (debuggerModel.debuggerPausedDetails) { + return; + } + + this.showPanel('sources').then(function() { + // Script execution can already be paused. + + this._waitForScriptPause(this.releaseControl.bind(this)); + }.bind(this)); + + this.takeControl(); + }; + + // Tests that pressing "Pause" will pause script execution if the script + // is already running. + TestSuite.prototype.testPauseWhenScriptIsRunning = function() { + this.showPanel('sources').then(function() { + this.evaluateInConsole_('setTimeout("handleClick()", 0)', didEvaluateInConsole.bind(this)); + }.bind(this)); + + function didEvaluateInConsole(resultText) { + this.assertTrue(!isNaN(resultText), 'Failed to get timer id: ' + resultText); + // Wait for some time to make sure that inspected page is running the + // infinite loop. + setTimeout(testScriptPause.bind(this), 300); + } + + function testScriptPause() { + // The script should be in infinite loop. Click "Pause" button to + // pause it and wait for the result. + UI.panels.sources.togglePause(); + + this._waitForScriptPause(this.releaseControl.bind(this)); + } + + this.takeControl(); + }; + + /** + * Tests network size. + */ + TestSuite.prototype.testNetworkSize = function() { + const test = this; + + function finishRequest(request, finishTime) { + test.assertEquals(25, request.resourceSize, 'Incorrect total data length'); + test.releaseControl(); + } + + this.addSniffer(SDK.NetworkDispatcher.prototype, 'finishNetworkRequest', finishRequest); + + // Reload inspected page to sniff network events + test.evaluateInConsole_('window.location.reload(true);', function(resultText) {}); + + this.takeControl({slownessFactor: 10}); + }; + + /** + * Tests network sync size. + */ + TestSuite.prototype.testNetworkSyncSize = function() { + const test = this; + + function finishRequest(request, finishTime) { + test.assertEquals(25, request.resourceSize, 'Incorrect total data length'); + test.releaseControl(); + } + + this.addSniffer(SDK.NetworkDispatcher.prototype, 'finishNetworkRequest', finishRequest); + + // Send synchronous XHR to sniff network events + test.evaluateInConsole_( + 'let xhr = new XMLHttpRequest(); xhr.open("GET", "chunked", false); xhr.send(null);', function() {}); + + this.takeControl({slownessFactor: 10}); + }; + + /** + * Tests network raw headers text. + */ + TestSuite.prototype.testNetworkRawHeadersText = function() { + const test = this; + + function finishRequest(request, finishTime) { + if (!request.responseHeadersText) { + test.fail('Failure: resource does not have response headers text'); + } + const index = request.responseHeadersText.indexOf('Date:'); + test.assertEquals( + 112, request.responseHeadersText.substring(index).length, 'Incorrect response headers text length'); + test.releaseControl(); + } + + this.addSniffer(SDK.NetworkDispatcher.prototype, 'finishNetworkRequest', finishRequest); + + // Reload inspected page to sniff network events + test.evaluateInConsole_('window.location.reload(true);', function(resultText) {}); + + this.takeControl({slownessFactor: 10}); + }; + + /** + * Tests network timing. + */ + TestSuite.prototype.testNetworkTiming = function() { + const test = this; + + function finishRequest(request, finishTime) { + // Setting relaxed expectations to reduce flakiness. + // Server sends headers after 100ms, then sends data during another 100ms. + // We expect these times to be measured at least as 70ms. + test.assertTrue( + request.timing.receiveHeadersEnd - request.timing.connectStart >= 70, + 'Time between receiveHeadersEnd and connectStart should be >=70ms, but was ' + + 'receiveHeadersEnd=' + request.timing.receiveHeadersEnd + ', connectStart=' + + request.timing.connectStart + '.'); + test.assertTrue( + request.responseReceivedTime - request.startTime >= 0.07, + 'Time between responseReceivedTime and startTime should be >=0.07s, but was ' + + 'responseReceivedTime=' + request.responseReceivedTime + ', startTime=' + request.startTime + '.'); + test.assertTrue( + request.endTime - request.startTime >= 0.14, + 'Time between endTime and startTime should be >=0.14s, but was ' + + 'endtime=' + request.endTime + ', startTime=' + request.startTime + '.'); + + test.releaseControl(); + } + + this.addSniffer(SDK.NetworkDispatcher.prototype, 'finishNetworkRequest', finishRequest); + + // Reload inspected page to sniff network events + test.evaluateInConsole_('window.location.reload(true);', function(resultText) {}); + + this.takeControl({slownessFactor: 10}); + }; + + TestSuite.prototype.testPushTimes = function(url) { + const test = this; + let pendingRequestCount = 2; + + function finishRequest(request, finishTime) { + test.assertTrue( + typeof request.timing.pushStart === 'number' && request.timing.pushStart > 0, + `pushStart is invalid: ${request.timing.pushStart}`); + test.assertTrue(typeof request.timing.pushEnd === 'number', `pushEnd is invalid: ${request.timing.pushEnd}`); + test.assertTrue(request.timing.pushStart < request.startTime, 'pushStart should be before startTime'); + if (request.url().endsWith('?pushUseNullEndTime')) { + test.assertTrue(request.timing.pushEnd === 0, `pushEnd should be 0 but is ${request.timing.pushEnd}`); + } else { + test.assertTrue( + request.timing.pushStart < request.timing.pushEnd, + `pushStart should be before pushEnd (${request.timing.pushStart} >= ${request.timing.pushEnd})`); + // The below assertion is just due to the way we generate times in the moch URLRequestJob and is not generally an invariant. + test.assertTrue(request.timing.pushEnd < request.endTime, 'pushEnd should be before endTime'); + test.assertTrue(request.startTime < request.timing.pushEnd, 'pushEnd should be after startTime'); + } + if (!--pendingRequestCount) { + test.releaseControl(); + } + } + + this.addSniffer(SDK.NetworkDispatcher.prototype, 'finishNetworkRequest', finishRequest, true); + + test.evaluateInConsole_('addImage(\'' + url + '\')', function(resultText) {}); + test.evaluateInConsole_('addImage(\'' + url + '?pushUseNullEndTime\')', function(resultText) {}); + this.takeControl(); + }; + + TestSuite.prototype.testConsoleOnNavigateBack = function() { + + function filteredMessages() { + return self.SDK.consoleModel.messages().filter(a => a.source !== Protocol.Log.LogEntrySource.Violation); + } + + if (filteredMessages().length === 1) { + firstConsoleMessageReceived.call(this, null); + } else { + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this); + } + + function firstConsoleMessageReceived(event) { + if (event && event.data.source === Protocol.Log.LogEntrySource.Violation) { + return; + } + self.SDK.consoleModel.removeEventListener( + SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this); + this.evaluateInConsole_('clickLink();', didClickLink.bind(this)); + } + + function didClickLink() { + // Check that there are no new messages(command is not a message). + this.assertEquals(3, filteredMessages().length); + this.evaluateInConsole_('history.back();', didNavigateBack.bind(this)); + } + + function didNavigateBack() { + // Make sure navigation completed and possible console messages were pushed. + this.evaluateInConsole_('void 0;', didCompleteNavigation.bind(this)); + } + + function didCompleteNavigation() { + this.assertEquals(7, filteredMessages().length); + this.releaseControl(); + } + + this.takeControl(); + }; + + TestSuite.prototype.testSharedWorker = function() { + function didEvaluateInConsole(resultText) { + this.assertEquals('2011', resultText); + this.releaseControl(); + } + this.evaluateInConsole_('globalVar', didEvaluateInConsole.bind(this)); + this.takeControl(); + }; + + TestSuite.prototype.testPauseInSharedWorkerInitialization1 = function() { + // Make sure the worker is loaded. + this.takeControl(); + this._waitForTargets(1, callback.bind(this)); + + function callback() { + ProtocolClient.test.deprecatedRunAfterPendingDispatches(this.releaseControl.bind(this)); + } + }; + + TestSuite.prototype.testPauseInSharedWorkerInitialization2 = function() { + this.takeControl(); + this._waitForTargets(1, callback.bind(this)); + + function callback() { + const debuggerModel = self.SDK.targetManager.models(SDK.DebuggerModel)[0]; + if (debuggerModel.isPaused()) { + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this); + debuggerModel.resume(); + return; + } + this._waitForScriptPause(callback.bind(this)); + } + + function onConsoleMessage(event) { + const message = event.data.messageText; + if (message !== 'connected') { + this.fail('Unexpected message: ' + message); + } + this.releaseControl(); + } + }; + + TestSuite.prototype.testSharedWorkerNetworkPanel = function() { + this.takeControl(); + this.showPanel('network').then(() => { + if (!document.querySelector('#network-container')) { + this.fail('unable to find #network-container'); + } + this.releaseControl(); + }); + }; + + TestSuite.prototype.enableTouchEmulation = function() { + const deviceModeModel = new Emulation.DeviceModeModel(function() {}); + deviceModeModel._target = self.SDK.targetManager.mainTarget(); + deviceModeModel._applyTouch(true, true); + }; + + TestSuite.prototype.waitForDebuggerPaused = function() { + const debuggerModel = self.SDK.targetManager.mainTarget().model(SDK.DebuggerModel); + if (debuggerModel.debuggerPausedDetails) { + return; + } + + this.takeControl(); + this._waitForScriptPause(this.releaseControl.bind(this)); + }; + + TestSuite.prototype.switchToPanel = function(panelName) { + this.showPanel(panelName).then(this.releaseControl.bind(this)); + this.takeControl(); + }; + + // Regression test for crbug.com/370035. + TestSuite.prototype.testDeviceMetricsOverrides = function() { + function dumpPageMetrics() { + return JSON.stringify( + {width: window.innerWidth, height: window.innerHeight, deviceScaleFactor: window.devicePixelRatio}); + } + + const test = this; + + async function testOverrides(params, metrics, callback) { + await self.SDK.targetManager.mainTarget().emulationAgent().invoke_setDeviceMetricsOverride(params); + test.evaluateInConsole_('(' + dumpPageMetrics.toString() + ')()', checkMetrics); + + function checkMetrics(consoleResult) { + test.assertEquals( + `'${JSON.stringify(metrics)}'`, consoleResult, 'Wrong metrics for params: ' + JSON.stringify(params)); + callback(); + } + } + + function step1() { + testOverrides( + {width: 1200, height: 1000, deviceScaleFactor: 1, mobile: false, fitWindow: true}, + {width: 1200, height: 1000, deviceScaleFactor: 1}, step2); + } + + function step2() { + testOverrides( + {width: 1200, height: 1000, deviceScaleFactor: 1, mobile: false, fitWindow: false}, + {width: 1200, height: 1000, deviceScaleFactor: 1}, step3); + } + + function step3() { + testOverrides( + {width: 1200, height: 1000, deviceScaleFactor: 3, mobile: false, fitWindow: true}, + {width: 1200, height: 1000, deviceScaleFactor: 3}, step4); + } + + function step4() { + testOverrides( + {width: 1200, height: 1000, deviceScaleFactor: 3, mobile: false, fitWindow: false}, + {width: 1200, height: 1000, deviceScaleFactor: 3}, finish); + } + + function finish() { + test.releaseControl(); + } + + test.takeControl(); + step1(); + }; + + TestSuite.prototype.testDispatchKeyEventShowsAutoFill = function() { + const test = this; + let receivedReady = false; + + function signalToShowAutofill() { + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'rawKeyDown', key: 'Down', windowsVirtualKeyCode: 40, nativeVirtualKeyCode: 40}); + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'keyUp', key: 'Down', windowsVirtualKeyCode: 40, nativeVirtualKeyCode: 40}); + } + + function selectTopAutoFill() { + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'rawKeyDown', key: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13}); + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'keyUp', key: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13}); + + test.evaluateInConsole_('document.getElementById("name").value', onResultOfInput); + } + + function onResultOfInput(value) { + // Console adds '' around the response. + test.assertEquals('\'Abbf\'', value); + test.releaseControl(); + } + + function onConsoleMessage(event) { + const message = event.data.messageText; + if (message === 'ready' && !receivedReady) { + receivedReady = true; + signalToShowAutofill(); + } + // This log comes from the browser unittest code. + if (message === 'didShowSuggestions') { + selectTopAutoFill(); + } + } + + this.takeControl({slownessFactor: 10}); + + // It is possible for the ready console messagage to be already received but not handled + // or received later. This ensures we can catch both cases. + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this); + + const messages = self.SDK.consoleModel.messages(); + if (messages.length) { + const text = messages[0].messageText; + this.assertEquals('ready', text); + signalToShowAutofill(); + } + }; + + TestSuite.prototype.testKeyEventUnhandled = function() { + function onKeyEventUnhandledKeyDown(event) { + this.assertEquals('keydown', event.data.type); + this.assertEquals('F8', event.data.key); + this.assertEquals(119, event.data.keyCode); + this.assertEquals(0, event.data.modifiers); + this.assertEquals('', event.data.code); + Host.InspectorFrontendHost.events.removeEventListener( + Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled, onKeyEventUnhandledKeyDown, this); + Host.InspectorFrontendHost.events.addEventListener( + Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled, onKeyEventUnhandledKeyUp, this); + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'keyUp', key: 'F8', code: 'F8', windowsVirtualKeyCode: 119, nativeVirtualKeyCode: 119}); + } + function onKeyEventUnhandledKeyUp(event) { + this.assertEquals('keyup', event.data.type); + this.assertEquals('F8', event.data.key); + this.assertEquals(119, event.data.keyCode); + this.assertEquals(0, event.data.modifiers); + this.assertEquals('F8', event.data.code); + this.releaseControl(); + } + this.takeControl(); + Host.InspectorFrontendHost.events.addEventListener( + Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled, onKeyEventUnhandledKeyDown, this); + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'rawKeyDown', key: 'F8', windowsVirtualKeyCode: 119, nativeVirtualKeyCode: 119}); + }; + + // Tests that the keys that are forwarded from the browser update + // when their shortcuts change + TestSuite.prototype.testForwardedKeysChanged = function() { + this.takeControl(); + + this.addSniffer(self.UI.shortcutRegistry, 'registerBindings', () => { + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'rawKeyDown', key: 'F1', windowsVirtualKeyCode: 112, nativeVirtualKeyCode: 112}); + }); + this.addSniffer(self.UI.shortcutRegistry, 'handleKey', key => { + this.assertEquals(112, key); + this.releaseControl(); + }); + + self.Common.settings.moduleSetting('activeKeybindSet').set('vsCode'); + }; + + TestSuite.prototype.testDispatchKeyEventDoesNotCrash = function() { + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'rawKeyDown', windowsVirtualKeyCode: 0x23, key: 'End'}); + self.SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent( + {type: 'keyUp', windowsVirtualKeyCode: 0x23, key: 'End'}); + }; + + // Check that showing the certificate viewer does not crash, crbug.com/954874 + TestSuite.prototype.testShowCertificate = function() { + Host.InspectorFrontendHost.showCertificateViewer([ + 'MIIFIDCCBAigAwIBAgIQE0TsEu6R8FUHQv+9fE7j8TANBgkqhkiG9w0BAQsF' + + 'ADBUMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZp' + + 'Y2VzMSUwIwYDVQQDExxHb29nbGUgSW50ZXJuZXQgQXV0aG9yaXR5IEczMB4X' + + 'DTE5MDMyNjEzNDEwMVoXDTE5MDYxODEzMjQwMFowZzELMAkGA1UEBhMCVVMx' + + 'EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx' + + 'EzARBgNVBAoMCkdvb2dsZSBMTEMxFjAUBgNVBAMMDSouYXBwc3BvdC5jb20w' + + 'ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwca7hj0kyoJVxcvyA' + + 'a8zNKMIXcoPM3aU1KVe7mxZITtwC6/D/D/q4Oe8fBQLeZ3c6qR5Sr3M+611k' + + 'Ab15AcGUgh1Xi0jZqERvd/5+P0aVCFJYeoLrPBzwSMZBStkoiO2CwtV8x06e' + + 'X7qUz7Hvr3oeG+Ma9OUMmIebl//zHtC82mE0mCRBQAW0MWEgT5nOWey74tJR' + + 'GRqUEI8ftV9grAshD5gY8kxxUoMfqrreaXVqcRF58ZPiwUJ0+SbtC5q9cJ+K' + + 'MuYM4TCetEuk/WQsa+1EnSa40dhGRtZjxbwEwQAJ1vLOcIA7AVR/Ck22Uj8X' + + 'UOECercjUrKdDyaAPcLp2TThAgMBAAGjggHZMIIB1TATBgNVHSUEDDAKBggr' + + 'BgEFBQcDATCBrwYDVR0RBIGnMIGkgg0qLmFwcHNwb3QuY29tggsqLmEucnVu' + + 'LmFwcIIVKi50aGlua3dpdGhnb29nbGUuY29tghAqLndpdGhnb29nbGUuY29t' + + 'ghEqLndpdGh5b3V0dWJlLmNvbYILYXBwc3BvdC5jb22CB3J1bi5hcHCCE3Ro' + + 'aW5rd2l0aGdvb2dsZS5jb22CDndpdGhnb29nbGUuY29tgg93aXRoeW91dHVi' + + 'ZS5jb20waAYIKwYBBQUHAQEEXDBaMC0GCCsGAQUFBzAChiFodHRwOi8vcGtp' + + 'Lmdvb2cvZ3NyMi9HVFNHSUFHMy5jcnQwKQYIKwYBBQUHMAGGHWh0dHA6Ly9v' + + 'Y3NwLnBraS5nb29nL0dUU0dJQUczMB0GA1UdDgQWBBTGkpE5o0H9+Wjc05rF' + + 'hNQiYDjBFjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFHfCuFCaZ3Z2sS3C' + + 'htCDoH6mfrpLMCEGA1UdIAQaMBgwDAYKKwYBBAHWeQIFAzAIBgZngQwBAgIw' + + 'MQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC5wa2kuZ29vZy9HVFNHSUFH' + + 'My5jcmwwDQYJKoZIhvcNAQELBQADggEBALqoYGqWtJW/6obEzY+ehsgfyXb+' + + 'qNIuV09wt95cRF93HlLbBlSZ/Iz8HXX44ZT1/tGAkwKnW0gDKSSab3I8U+e9' + + 'LHbC9VXrgAFENzu89MNKNmK5prwv+MPA2HUQPu4Pad3qXmd4+nKc/EUjtg1d' + + '/xKGK1Vn6JX3i5ly/rduowez3LxpSAJuIwseum331aQaKC2z2ri++96B8MPU' + + 'KFXzvV2gVGOe3ZYqmwPaG8y38Tba+OzEh59ygl8ydJJhoI6+R3itPSy0aXUU' + + 'lMvvAbfCobXD5kBRQ28ysgbDSDOPs3fraXpAKL92QUjsABs58XBz5vka4swu' + + 'gg/u+ZxaKOqfIm8=', + 'MIIEXDCCA0SgAwIBAgINAeOpMBz8cgY4P5pTHTANBgkqhkiG9w0BAQsFADBM' + + 'MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMK' + + 'R2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xNzA2MTUwMDAw' + + 'NDJaFw0yMTEyMTUwMDAwNDJaMFQxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVH' + + 'b29nbGUgVHJ1c3QgU2VydmljZXMxJTAjBgNVBAMTHEdvb2dsZSBJbnRlcm5l' + + 'dCBBdXRob3JpdHkgRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB' + + 'AQDKUkvqHv/OJGuo2nIYaNVWXQ5IWi01CXZaz6TIHLGp/lOJ+600/4hbn7vn' + + '6AAB3DVzdQOts7G5pH0rJnnOFUAK71G4nzKMfHCGUksW/mona+Y2emJQ2N+a' + + 'icwJKetPKRSIgAuPOB6Aahh8Hb2XO3h9RUk2T0HNouB2VzxoMXlkyW7XUR5m' + + 'w6JkLHnA52XDVoRTWkNty5oCINLvGmnRsJ1zouAqYGVQMc/7sy+/EYhALrVJ' + + 'EA8KbtyX+r8snwU5C1hUrwaW6MWOARa8qBpNQcWTkaIeoYvy/sGIJEmjR0vF' + + 'EwHdp1cSaWIr6/4g72n7OqXwfinu7ZYW97EfoOSQJeAzAgMBAAGjggEzMIIB' + + 'LzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF' + + 'BwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHfCuFCaZ3Z2sS3C' + + 'htCDoH6mfrpLMB8GA1UdIwQYMBaAFJviB1dnHB7AagbeWbSaLd/cGYYuMDUG' + + 'CCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AucGtpLmdv' + + 'b2cvZ3NyMjAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLnBraS5nb29n' + + 'L2dzcjIvZ3NyMi5jcmwwPwYDVR0gBDgwNjA0BgZngQwBAgIwKjAoBggrBgEF' + + 'BQcCARYcaHR0cHM6Ly9wa2kuZ29vZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0B' + + 'AQsFAAOCAQEAHLeJluRT7bvs26gyAZ8so81trUISd7O45skDUmAge1cnxhG1' + + 'P2cNmSxbWsoiCt2eux9LSD+PAj2LIYRFHW31/6xoic1k4tbWXkDCjir37xTT' + + 'NqRAMPUyFRWSdvt+nlPqwnb8Oa2I/maSJukcxDjNSfpDh/Bd1lZNgdd/8cLd' + + 'sE3+wypufJ9uXO1iQpnh9zbuFIwsIONGl1p3A8CgxkqI/UAih3JaGOqcpcda' + + 'CIzkBaR9uYQ1X4k2Vg5APRLouzVy7a8IVk6wuy6pm+T7HT4LY8ibS5FEZlfA' + + 'FLSW8NwsVz9SBK2Vqn1N0PIMn5xA6NZVc7o835DLAFshEWfC7TIe3g==', + 'MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEg' + + 'MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkds' + + 'b2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAw' + + 'WhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3Qg' + + 'Q0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs' + + 'U2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8o' + + 'mUVCxKs+IVSbC9N/hHD6ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe' + + '+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1' + + 'AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjNS7SgfQx5' + + 'TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo' + + '4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99y' + + 'qWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8E' + + 'BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IHV2ccHsBqBt5Z' + + 'tJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxz' + + 'aWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0' + + 'mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs' + + 'J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4' + + 'h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRD' + + 'LenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7' + + '9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmg' + + 'QWpzU/qlULRuJQ/7TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq' + + '/H5COEBkEveegeGTLg==' + ]); + }; + + // Simple check to make sure network throttling is wired up + // See crbug.com/747724 + TestSuite.prototype.testOfflineNetworkConditions = async function() { + const test = this; + self.SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.OfflineConditions); + + function finishRequest(request) { + test.assertEquals( + 'net::ERR_INTERNET_DISCONNECTED', request.localizedFailDescription, 'Request should have failed'); + test.releaseControl(); + } + + this.addSniffer(SDK.NetworkDispatcher.prototype, 'finishNetworkRequest', finishRequest); + + test.takeControl(); + test.evaluateInConsole_('await fetch("/");', function(resultText) {}); + }; + + TestSuite.prototype.testEmulateNetworkConditions = function() { + const test = this; + + function testPreset(preset, messages, next) { + function onConsoleMessage(event) { + const index = messages.indexOf(event.data.messageText); + if (index === -1) { + test.fail('Unexpected message: ' + event.data.messageText); + return; + } + + messages.splice(index, 1); + if (!messages.length) { + self.SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this); + next(); + } + } + + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this); + self.SDK.multitargetNetworkManager.setNetworkConditions(preset); + } + + test.takeControl(); + step1(); + + function step1() { + testPreset( + MobileThrottling.networkPresets[2], + [ + 'offline event: online = false', 'connection change event: type = none; downlinkMax = 0; effectiveType = 4g' + ], + step2); + } + + function step2() { + testPreset( + MobileThrottling.networkPresets[1], + [ + 'online event: online = true', + 'connection change event: type = cellular; downlinkMax = 0.3814697265625; effectiveType = 2g' + ], + step3); + } + + function step3() { + testPreset( + MobileThrottling.networkPresets[0], + ['connection change event: type = cellular; downlinkMax = 1.373291015625; effectiveType = 3g'], + test.releaseControl.bind(test)); + } + }; + + TestSuite.prototype.testScreenshotRecording = function() { + const test = this; + + function performActionsInPage(callback) { + let count = 0; + const div = document.createElement('div'); + div.setAttribute('style', 'left: 0px; top: 0px; width: 100px; height: 100px; position: absolute;'); + document.body.appendChild(div); + requestAnimationFrame(frame); + function frame() { + const color = [0, 0, 0]; + color[count % 3] = 255; + div.style.backgroundColor = 'rgb(' + color.join(',') + ')'; + if (++count > 10) { + requestAnimationFrame(callback); + } else { + requestAnimationFrame(frame); + } + } + } + + const captureFilmStripSetting = self.Common.settings.createSetting('timelineCaptureFilmStrip', false); + captureFilmStripSetting.set(true); + test.evaluateInConsole_(performActionsInPage.toString(), function() {}); + test.invokeAsyncWithTimeline_('performActionsInPage', onTimelineDone); + + function onTimelineDone() { + captureFilmStripSetting.set(false); + const filmStripModel = UI.panels.timeline._performanceModel.filmStripModel(); + const frames = filmStripModel.frames(); + test.assertTrue(frames.length > 4 && typeof frames.length === 'number'); + loadFrameImages(frames); + } + + function loadFrameImages(frames) { + const readyImages = []; + for (const frame of frames) { + frame.imageDataPromise().then(onGotImageData); + } + + function onGotImageData(data) { + const image = new Image(); + test.assertTrue(Boolean(data), 'No image data for frame'); + image.addEventListener('load', onLoad); + image.src = 'data:image/jpg;base64,' + data; + } + + function onLoad(event) { + readyImages.push(event.target); + if (readyImages.length === frames.length) { + validateImagesAndCompleteTest(readyImages); + } + } + } + + function validateImagesAndCompleteTest(images) { + let redCount = 0; + let greenCount = 0; + let blueCount = 0; + + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + for (const image of images) { + test.assertTrue(image.naturalWidth > 10); + test.assertTrue(image.naturalHeight > 10); + canvas.width = image.naturalWidth; + canvas.height = image.naturalHeight; + ctx.drawImage(image, 0, 0); + const data = ctx.getImageData(0, 0, 1, 1); + const color = Array.prototype.join.call(data.data, ','); + if (data.data[0] > 200) { + redCount++; + } else if (data.data[1] > 200) { + greenCount++; + } else if (data.data[2] > 200) { + blueCount++; + } else { + test.fail('Unexpected color: ' + color); + } + } + test.assertTrue(redCount && greenCount && blueCount, 'Color check failed'); + test.releaseControl(); + } + + test.takeControl(); + }; + + TestSuite.prototype.testSettings = function() { + const test = this; + + createSettings(); + test.takeControl(); + setTimeout(reset, 0); + + function createSettings() { + const localSetting = self.Common.settings.createLocalSetting('local', undefined); + localSetting.set({s: 'local', n: 1}); + const globalSetting = self.Common.settings.createSetting('global', undefined); + globalSetting.set({s: 'global', n: 2}); + } + + function reset() { + Root.Runtime.experiments.clearForTest(); + Host.InspectorFrontendHost.getPreferences(gotPreferences); + } + + function gotPreferences(prefs) { + Main.Main.instanceForTest.createSettings(prefs); + + const localSetting = self.Common.settings.createLocalSetting('local', undefined); + test.assertEquals('object', typeof localSetting.get()); + test.assertEquals('local', localSetting.get().s); + test.assertEquals(1, localSetting.get().n); + const globalSetting = self.Common.settings.createSetting('global', undefined); + test.assertEquals('object', typeof globalSetting.get()); + test.assertEquals('global', globalSetting.get().s); + test.assertEquals(2, globalSetting.get().n); + test.releaseControl(); + } + }; + + TestSuite.prototype.testWindowInitializedOnNavigateBack = function() { + const test = this; + test.takeControl(); + const messages = self.SDK.consoleModel.messages(); + if (messages.length === 1) { + checkMessages(); + } else { + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, checkMessages.bind(this), this); + } + + function checkMessages() { + const messages = self.SDK.consoleModel.messages(); + test.assertEquals(1, messages.length); + test.assertTrue(messages[0].messageText.indexOf('Uncaught') === -1); + test.releaseControl(); + } + }; + + TestSuite.prototype.testConsoleContextNames = function() { + const test = this; + test.takeControl(); + this.showPanel('console').then(() => this._waitForExecutionContexts(2, onExecutionContexts.bind(this))); + + function onExecutionContexts() { + const consoleView = Console.ConsoleView.instance(); + const selector = consoleView.consoleContextSelector; + const values = []; + for (const item of selector.items) { + values.push(selector.titleFor(item)); + } + test.assertEquals('top', values[0]); + test.assertEquals('Simple content script', values[1]); + test.releaseControl(); + } + }; + + TestSuite.prototype.testRawHeadersWithHSTS = function(url) { + const test = this; + test.takeControl({slownessFactor: 10}); + self.SDK.targetManager.addModelListener( + SDK.NetworkManager, SDK.NetworkManager.Events.ResponseReceived, onResponseReceived); + + this.evaluateInConsole_(` + let img = document.createElement('img'); + img.src = "${url}"; + document.body.appendChild(img); + `, () => {}); + + let count = 0; + function onResponseReceived(event) { + const networkRequest = event.data.request; + if (!networkRequest.url().startsWith('http')) { + return; + } + switch (++count) { + case 1: // Original redirect + test.assertEquals(301, networkRequest.statusCode); + test.assertEquals('Moved Permanently', networkRequest.statusText); + test.assertTrue(url.endsWith(networkRequest.responseHeaderValue('Location'))); + break; + + case 2: // HSTS internal redirect + test.assertTrue(networkRequest.url().startsWith('http://')); + test.assertEquals(307, networkRequest.statusCode); + test.assertEquals('Internal Redirect', networkRequest.statusText); + test.assertEquals('HSTS', networkRequest.responseHeaderValue('Non-Authoritative-Reason')); + test.assertTrue(networkRequest.responseHeaderValue('Location').startsWith('https://')); + break; + + case 3: // Final response + test.assertTrue(networkRequest.url().startsWith('https://')); + test.assertTrue(networkRequest.requestHeaderValue('Referer').startsWith('http://127.0.0.1')); + test.assertEquals(200, networkRequest.statusCode); + test.assertEquals('OK', networkRequest.statusText); + test.assertEquals('132', networkRequest.responseHeaderValue('Content-Length')); + test.releaseControl(); + } + } + }; + + TestSuite.prototype.testDOMWarnings = function() { + const messages = self.SDK.consoleModel.messages(); + this.assertEquals(1, messages.length); + const expectedPrefix = '[DOM] Found 2 elements with non-unique id #dup:'; + this.assertTrue(messages[0].messageText.startsWith(expectedPrefix)); + }; + + TestSuite.prototype.waitForTestResultsInConsole = function() { + const messages = self.SDK.consoleModel.messages(); + for (let i = 0; i < messages.length; ++i) { + const text = messages[i].messageText; + if (text === 'PASS') { + return; + } + if (/^FAIL/.test(text)) { + this.fail(text); + } // This will throw. + } + // Neither PASS nor FAIL, so wait for more messages. + function onConsoleMessage(event) { + const text = event.data.messageText; + if (text === 'PASS') { + this.releaseControl(); + } else if (/^FAIL/.test(text)) { + this.fail(text); + } + } + + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this); + this.takeControl({slownessFactor: 10}); + }; + + TestSuite.prototype.waitForTestResultsAsMessage = function() { + const onMessage = event => { + if (!event.data.testOutput) { + return; + } + top.removeEventListener('message', onMessage); + const text = event.data.testOutput; + if (text === 'PASS') { + this.releaseControl(); + } else { + this.fail(text); + } + }; + top.addEventListener('message', onMessage); + this.takeControl(); + }; + + TestSuite.prototype._overrideMethod = function(receiver, methodName, override) { + const original = receiver[methodName]; + if (typeof original !== 'function') { + this.fail(`TestSuite._overrideMethod: ${methodName} is not a function`); + return; + } + receiver[methodName] = function() { + let value; + try { + value = original.apply(receiver, arguments); + } finally { + receiver[methodName] = original; + } + override.apply(original, arguments); + return value; + }; + }; + + TestSuite.prototype.startTimeline = function(callback) { + const test = this; + this.showPanel('timeline').then(function() { + const timeline = UI.panels.timeline; + test._overrideMethod(timeline, 'recordingStarted', callback); + timeline._toggleRecording(); + }); + }; + + TestSuite.prototype.stopTimeline = function(callback) { + const timeline = UI.panels.timeline; + this._overrideMethod(timeline, 'loadingComplete', callback); + timeline._toggleRecording(); + }; + + TestSuite.prototype.invokePageFunctionAsync = function(functionName, opt_args, callback_is_always_last) { + const callback = arguments[arguments.length - 1]; + const doneMessage = `DONE: ${functionName}.${++this._asyncInvocationId}`; + const argsString = arguments.length < 3 ? + '' : + Array.prototype.slice.call(arguments, 1, -1).map(arg => JSON.stringify(arg)).join(',') + ','; + this.evaluateInConsole_( + `${functionName}(${argsString} function() { console.log('${doneMessage}'); });`, function() {}); + self.SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage); + + function onConsoleMessage(event) { + const text = event.data.messageText; + if (text === doneMessage) { + self.SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage); + callback(); + } + } + }; + + TestSuite.prototype.invokeAsyncWithTimeline_ = function(functionName, callback) { + const test = this; + + this.startTimeline(onRecordingStarted); + + function onRecordingStarted() { + test.invokePageFunctionAsync(functionName, pageActionsDone); + } + + function pageActionsDone() { + test.stopTimeline(callback); + } + }; + + TestSuite.prototype.enableExperiment = function(name) { + Root.Runtime.experiments.enableForTest(name); + }; + + TestSuite.prototype.checkInputEventsPresent = function() { + const expectedEvents = new Set(arguments); + const model = UI.panels.timeline._performanceModel.timelineModel(); + const asyncEvents = model.virtualThreads().find(thread => thread.isMainFrame).asyncEventsByGroup; + const input = asyncEvents.get(TimelineModel.TimelineModel.AsyncEventGroup.input) || []; + const prefix = 'InputLatency::'; + for (const e of input) { + if (!e.name.startsWith(prefix)) { + continue; + } + if (e.steps.length < 2) { + continue; + } + if (e.name.startsWith(prefix + 'Mouse') && + typeof TimelineModel.TimelineData.forEvent(e.steps[0]).timeWaitingForMainThread !== 'number') { + throw `Missing timeWaitingForMainThread on ${e.name}`; + } + expectedEvents.delete(e.name.substr(prefix.length)); + } + if (expectedEvents.size) { + throw 'Some expected events are not found: ' + Array.from(expectedEvents.keys()).join(','); + } + }; + + TestSuite.prototype.testInspectedElementIs = async function(nodeName) { + this.takeControl(); + await self.runtime.loadLegacyModule('panels/elements/elements-legacy.js'); + if (!Elements.ElementsPanel.firstInspectElementNodeNameForTest) { + await new Promise(f => this.addSniffer(Elements.ElementsPanel, 'firstInspectElementCompletedForTest', f)); + } + this.assertEquals(nodeName, Elements.ElementsPanel.firstInspectElementNodeNameForTest); + this.releaseControl(); + }; + + TestSuite.prototype.testDisposeEmptyBrowserContext = async function(url) { + this.takeControl(); + const targetAgent = self.SDK.targetManager.mainTarget().targetAgent(); + const {browserContextId} = await targetAgent.invoke_createBrowserContext(); + const response1 = await targetAgent.invoke_getBrowserContexts(); + this.assertEquals(response1.browserContextIds.length, 1); + await targetAgent.invoke_disposeBrowserContext({browserContextId}); + const response2 = await targetAgent.invoke_getBrowserContexts(); + this.assertEquals(response2.browserContextIds.length, 0); + this.releaseControl(); + }; + + TestSuite.prototype.testNewWindowFromBrowserContext = async function(url) { + this.takeControl(); + // Create a BrowserContext. + const targetAgent = self.SDK.targetManager.mainTarget().targetAgent(); + const {browserContextId} = await targetAgent.invoke_createBrowserContext(); + + // Cause a Browser to be created with the temp profile. + const {targetId} = await targetAgent.invoke_createTarget( + {url: 'data:text/html,', browserContextId, newWindow: true}); + await targetAgent.invoke_attachToTarget({targetId, flatten: true}); + + // Destroy the temp profile. + await targetAgent.invoke_disposeBrowserContext({browserContextId}); + + this.releaseControl(); + }; + + TestSuite.prototype.testCreateBrowserContext = async function(url) { + this.takeControl(); + const browserContextIds = []; + const targetAgent = self.SDK.targetManager.mainTarget().targetAgent(); + + const target1 = await createIsolatedTarget(url, browserContextIds); + const target2 = await createIsolatedTarget(url, browserContextIds); + + const response = await targetAgent.invoke_getBrowserContexts(); + this.assertEquals(response.browserContextIds.length, 2); + this.assertTrue(response.browserContextIds.includes(browserContextIds[0])); + this.assertTrue(response.browserContextIds.includes(browserContextIds[1])); + + await evalCode(target1, 'localStorage.setItem("page1", "page1")'); + await evalCode(target2, 'localStorage.setItem("page2", "page2")'); + + this.assertEquals(await evalCode(target1, 'localStorage.getItem("page1")'), 'page1'); + this.assertEquals(await evalCode(target1, 'localStorage.getItem("page2")'), null); + this.assertEquals(await evalCode(target2, 'localStorage.getItem("page1")'), null); + this.assertEquals(await evalCode(target2, 'localStorage.getItem("page2")'), 'page2'); + + const removedTargets = []; + self.SDK.targetManager.observeTargets( + {targetAdded: () => {}, targetRemoved: target => removedTargets.push(target)}); + await Promise.all([disposeBrowserContext(browserContextIds[0]), disposeBrowserContext(browserContextIds[1])]); + this.assertEquals(removedTargets.length, 2); + this.assertEquals(removedTargets.indexOf(target1) !== -1, true); + this.assertEquals(removedTargets.indexOf(target2) !== -1, true); + + this.releaseControl(); + }; + + /** + * @param {string} url + * @return {!Promise} + */ + async function createIsolatedTarget(url, opt_browserContextIds) { + const targetAgent = self.SDK.targetManager.mainTarget().targetAgent(); + const {browserContextId} = await targetAgent.invoke_createBrowserContext(); + if (opt_browserContextIds) { + opt_browserContextIds.push(browserContextId); + } + + const {targetId} = await targetAgent.invoke_createTarget({url: 'about:blank', browserContextId}); + await targetAgent.invoke_attachToTarget({targetId, flatten: true}); + + const target = self.SDK.targetManager.targets().find(target => target.id() === targetId); + const pageAgent = target.pageAgent(); + await pageAgent.invoke_enable(); + await pageAgent.invoke_navigate({url}); + return target; + } + + async function disposeBrowserContext(browserContextId) { + const targetAgent = self.SDK.targetManager.mainTarget().targetAgent(); + await targetAgent.invoke_disposeBrowserContext({browserContextId}); + } + + async function evalCode(target, code) { + return (await target.runtimeAgent().invoke_evaluate({expression: code})).result.value; + } + + TestSuite.prototype.testInputDispatchEventsToOOPIF = async function() { + this.takeControl(); + + await new Promise(callback => this._waitForTargets(2, callback)); + + async function takeLogs(target) { + return await evalCode(target, ` + (function() { + var result = window.logs.join(' '); + window.logs = []; + return result; + })()`); + } + + let parentFrameOutput; + let childFrameOutput; + + const inputAgent = self.SDK.targetManager.mainTarget().inputAgent(); + const runtimeAgent = self.SDK.targetManager.mainTarget().runtimeAgent(); + await inputAgent.invoke_dispatchMouseEvent({type: 'mousePressed', button: 'left', clickCount: 1, x: 10, y: 10}); + await inputAgent.invoke_dispatchMouseEvent({type: 'mouseMoved', button: 'left', clickCount: 1, x: 10, y: 20}); + await inputAgent.invoke_dispatchMouseEvent({type: 'mouseReleased', button: 'left', clickCount: 1, x: 10, y: 20}); + await inputAgent.invoke_dispatchMouseEvent({type: 'mousePressed', button: 'left', clickCount: 1, x: 230, y: 140}); + await inputAgent.invoke_dispatchMouseEvent({type: 'mouseMoved', button: 'left', clickCount: 1, x: 230, y: 150}); + await inputAgent.invoke_dispatchMouseEvent({type: 'mouseReleased', button: 'left', clickCount: 1, x: 230, y: 150}); + parentFrameOutput = 'Event type: mousedown button: 0 x: 10 y: 10 Event type: mouseup button: 0 x: 10 y: 20'; + this.assertEquals(parentFrameOutput, await takeLogs(self.SDK.targetManager.targets()[0])); + childFrameOutput = 'Event type: mousedown button: 0 x: 30 y: 40 Event type: mouseup button: 0 x: 30 y: 50'; + this.assertEquals(childFrameOutput, await takeLogs(self.SDK.targetManager.targets()[1])); + + await inputAgent.invoke_dispatchKeyEvent({type: 'keyDown', key: 'a'}); + await runtimeAgent.invoke_evaluate({expression: "document.querySelector('iframe').focus()"}); + await inputAgent.invoke_dispatchKeyEvent({type: 'keyDown', key: 'a'}); + parentFrameOutput = 'Event type: keydown'; + this.assertEquals(parentFrameOutput, await takeLogs(self.SDK.targetManager.targets()[0])); + childFrameOutput = 'Event type: keydown'; + this.assertEquals(childFrameOutput, await takeLogs(self.SDK.targetManager.targets()[1])); + + await inputAgent.invoke_dispatchTouchEvent({type: 'touchStart', touchPoints: [{x: 10, y: 10}]}); + await inputAgent.invoke_dispatchTouchEvent({type: 'touchEnd', touchPoints: []}); + await inputAgent.invoke_dispatchTouchEvent({type: 'touchStart', touchPoints: [{x: 230, y: 140}]}); + await inputAgent.invoke_dispatchTouchEvent({type: 'touchEnd', touchPoints: []}); + parentFrameOutput = 'Event type: touchstart touch x: 10 touch y: 10'; + this.assertEquals(parentFrameOutput, await takeLogs(self.SDK.targetManager.targets()[0])); + childFrameOutput = 'Event type: touchstart touch x: 30 touch y: 40'; + this.assertEquals(childFrameOutput, await takeLogs(self.SDK.targetManager.targets()[1])); + + this.releaseControl(); + }; + + TestSuite.prototype.testLoadResourceForFrontend = async function(baseURL, fileURL) { + const test = this; + const loggedHeaders = new Set(['cache-control', 'pragma']); + function testCase(url, headers, expectedStatus, expectedHeaders, expectedContent) { + return new Promise(fulfill => { + Host.ResourceLoader.load(url, headers, callback); + + function callback(success, headers, content, errorDescription) { + test.assertEquals(expectedStatus, errorDescription.statusCode); + + const headersArray = []; + for (const name in headers) { + const nameLower = name.toLowerCase(); + if (loggedHeaders.has(nameLower)) { + headersArray.push(nameLower); + } + } + headersArray.sort(); + test.assertEquals(expectedHeaders.join(', '), headersArray.join(', ')); + test.assertEquals(expectedContent, content); + fulfill(); + } + }); + } + + this.takeControl({slownessFactor: 10}); + await testCase(baseURL + 'non-existent.html', undefined, 404, [], ''); + await testCase(baseURL + 'hello.html', undefined, 200, [], '\n

hello

\n'); + await testCase(baseURL + 'echoheader?x-devtools-test', {'x-devtools-test': 'Foo'}, 200, ['cache-control'], 'Foo'); + await testCase(baseURL + 'set-header?pragma:%20no-cache', undefined, 200, ['pragma'], 'pragma: no-cache'); + + await self.SDK.targetManager.mainTarget().runtimeAgent().invoke_evaluate({ + expression: `fetch("/set-cookie?devtools-test-cookie=Bar", + {credentials: 'include'})`, + awaitPromise: true + }); + await testCase(baseURL + 'echoheader?Cookie', undefined, 200, ['cache-control'], 'devtools-test-cookie=Bar'); + + await self.SDK.targetManager.mainTarget().runtimeAgent().invoke_evaluate({ + expression: `fetch("/set-cookie?devtools-test-cookie=same-site-cookie;SameSite=Lax", + {credentials: 'include'})`, + awaitPromise: true + }); + await testCase( + baseURL + 'echoheader?Cookie', undefined, 200, ['cache-control'], 'devtools-test-cookie=same-site-cookie'); + await testCase('data:text/html,hello', undefined, 200, [], 'hello'); + await testCase(fileURL, undefined, 200, [], '\n\n\nDummy page.\n\n\n'); + await testCase(fileURL + 'thisfileshouldnotbefound', undefined, 404, [], ''); + + this.releaseControl(); + }; + + TestSuite.prototype.testExtensionWebSocketUserAgentOverride = async function(websocketPort) { + this.takeControl(); + + const testUserAgent = 'test user agent'; + self.SDK.multitargetNetworkManager.setUserAgentOverride(testUserAgent); + + function onRequestUpdated(event) { + const request = event.data; + if (request.resourceType() !== Common.resourceTypes.WebSocket) { + return; + } + if (!request.requestHeadersText()) { + return; + } + + let actualUserAgent = 'no user-agent header'; + for (const {name, value} of request.requestHeaders()) { + if (name.toLowerCase() === 'user-agent') { + actualUserAgent = value; + } + } + this.assertEquals(testUserAgent, actualUserAgent); + this.releaseControl(); + } + self.SDK.targetManager.addModelListener( + SDK.NetworkManager, SDK.NetworkManager.Events.RequestUpdated, onRequestUpdated.bind(this)); + + this.evaluateInConsole_(`new WebSocket('ws://127.0.0.1:${websocketPort}')`, () => {}); + }; + + TestSuite.prototype.testExtensionWebSocketOfflineNetworkConditions = async function(websocketPort) { + self.SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.OfflineConditions); + + // TODO(crbug.com/1263900): Currently we don't send loadingFailed for web sockets. + // Update this once we do. + this.addSniffer(SDK.NetworkDispatcher.prototype, 'webSocketClosed', () => { + this.releaseControl(); + }); + + this.takeControl(); + this.evaluateInConsole_(`new WebSocket('ws://127.0.0.1:${websocketPort}/echo-with-no-extension')`, () => {}); + }; + + /** + * Serializes array of uiSourceCodes to string. + * @param {!Array.} uiSourceCodes + * @return {string} + */ + TestSuite.prototype.uiSourceCodesToString_ = function(uiSourceCodes) { + const names = []; + for (let i = 0; i < uiSourceCodes.length; i++) { + names.push('"' + uiSourceCodes[i].url() + '"'); + } + return names.join(','); + }; + + /** + * Returns all loaded non anonymous uiSourceCodes. + * @return {!Array.} + */ + TestSuite.prototype.nonAnonymousUISourceCodes_ = function() { + /** + * @param {!Workspace.UISourceCode} uiSourceCode + */ + function filterOutService(uiSourceCode) { + return !uiSourceCode.project().isServiceProject(); + } + + const uiSourceCodes = self.Workspace.workspace.uiSourceCodes(); + return uiSourceCodes.filter(filterOutService); + }; + + /* + * Evaluates the code in the console as if user typed it manually and invokes + * the callback when the result message is received and added to the console. + * @param {string} code + * @param {function(string)} callback + */ + TestSuite.prototype.evaluateInConsole_ = function(code, callback) { + function innerEvaluate() { + self.UI.context.removeFlavorChangeListener(SDK.ExecutionContext, showConsoleAndEvaluate, this); + const consoleView = Console.ConsoleView.instance(); + consoleView.prompt.appendCommand(code); + + this.addSniffer(Console.ConsoleView.prototype, 'consoleMessageAddedForTest', function(viewMessage) { + callback(viewMessage.toMessageElement().deepTextContent()); + }.bind(this)); + } + + function showConsoleAndEvaluate() { + self.Common.console.showPromise().then(innerEvaluate.bind(this)); + } + + if (!self.UI.context.flavor(SDK.ExecutionContext)) { + self.UI.context.addFlavorChangeListener(SDK.ExecutionContext, showConsoleAndEvaluate, this); + return; + } + showConsoleAndEvaluate.call(this); + }; + + /** + * Checks that all expected scripts are present in the scripts list + * in the Scripts panel. + * @param {!Array.} expected Regular expressions describing + * expected script names. + * @return {boolean} Whether all the scripts are in "scripts-files" select + * box + */ + TestSuite.prototype._scriptsAreParsed = function(expected) { + const uiSourceCodes = this.nonAnonymousUISourceCodes_(); + // Check that at least all the expected scripts are present. + const missing = expected.slice(0); + for (let i = 0; i < uiSourceCodes.length; ++i) { + for (let j = 0; j < missing.length; ++j) { + if (uiSourceCodes[i].name().search(missing[j]) !== -1) { + missing.splice(j, 1); + break; + } + } + } + return missing.length === 0; + }; + + /** + * Waits for script pause, checks expectations, and invokes the callback. + * @param {function():void} callback + */ + TestSuite.prototype._waitForScriptPause = function(callback) { + this.addSniffer(SDK.DebuggerModel.prototype, 'pausedScript', callback); + }; + + /** + * Waits until all the scripts are parsed and invokes the callback. + */ + TestSuite.prototype._waitUntilScriptsAreParsed = function(expectedScripts, callback) { + const test = this; + + function waitForAllScripts() { + if (test._scriptsAreParsed(expectedScripts)) { + callback(); + } else { + test.addSniffer(UI.panels.sources.sourcesView(), 'addUISourceCode', waitForAllScripts); + } + } + + waitForAllScripts(); + }; + + TestSuite.prototype._waitForTargets = function(n, callback) { + checkTargets.call(this); + + function checkTargets() { + if (self.SDK.targetManager.targets().length >= n) { + callback.call(null); + } else { + this.addSniffer(SDK.TargetManager.prototype, 'createTarget', checkTargets.bind(this)); + } + } + }; + + TestSuite.prototype._waitForExecutionContexts = function(n, callback) { + const runtimeModel = self.SDK.targetManager.mainTarget().model(SDK.RuntimeModel); + checkForExecutionContexts.call(this); + + function checkForExecutionContexts() { + if (runtimeModel.executionContexts().length >= n) { + callback.call(null); + } else { + this.addSniffer(SDK.RuntimeModel.prototype, 'executionContextCreated', checkForExecutionContexts.bind(this)); + } + } + }; + + window.uiTests = new TestSuite(window.domAutomationController); +})(window); diff --git a/chii/chii_app.html b/chii/chii_app.html new file mode 100644 index 00000000..90dddb89 --- /dev/null +++ b/chii/chii_app.html @@ -0,0 +1,19 @@ + + + + +DevTools + + + + diff --git a/chii/core/common/common-legacy.js b/chii/core/common/common-legacy.js new file mode 100644 index 00000000..2994a38a --- /dev/null +++ b/chii/core/common/common-legacy.js @@ -0,0 +1 @@ +import*as e from"./common.js";self.Common=self.Common||{},Common=Common||{},Common.App=e.App.App,Common.AppProvider=e.AppProvider.AppProvider,Common.Color=e.Color.Color,Common.Color.Format=e.Color.Format,Common.console=e.Console.Console.instance(),Common.Console=e.Console.Console,Common.EventTarget={removeEventListeners:e.EventTarget.removeEventListeners},Common.JavaScriptMetadata=e.JavaScriptMetaData.JavaScriptMetaData,Common.Linkifier=e.Linkifier.Linkifier,Common.Object=e.ObjectWrapper.ObjectWrapper,Common.ParsedURL=e.ParsedURL.ParsedURL,Common.Progress=e.Progress.Progress,Common.CompositeProgress=e.Progress.CompositeProgress,Common.QueryParamHandler=e.QueryParamHandler.QueryParamHandler,Common.resourceTypes=e.ResourceType.resourceTypes,Common.Revealer=e.Revealer.Revealer,Common.Revealer.reveal=e.Revealer.reveal,Common.Revealer.setRevealForTest=e.Revealer.setRevealForTest,Common.Segment=e.SegmentedRange.Segment,Common.SegmentedRange=e.SegmentedRange.SegmentedRange,Common.Settings=e.Settings.Settings,Common.Settings.detectColorFormat=e.Settings.detectColorFormat,Common.Setting=e.Settings.Setting,Common.settingForTest=e.Settings.settingForTest,Common.VersionController=e.Settings.VersionController,Common.moduleSetting=e.Settings.moduleSetting,Common.StringOutputStream=e.StringOutputStream.StringOutputStream,Common.Throttler=e.Throttler.Throttler,Common.Trie=e.Trie.Trie,Common.settings; diff --git a/chii/core/common/common.js b/chii/core/common/common.js new file mode 100644 index 00000000..881426ab --- /dev/null +++ b/chii/core/common/common.js @@ -0,0 +1 @@ +import*as e from"../root/root.js";import*as t from"../platform/platform.js";export{UIString}from"../platform/platform.js";import*as r from"../i18n/i18n.js";var s=Object.freeze({__proto__:null});const n=[];var i=Object.freeze({__proto__:null,registerAppProvider:function(e){n.push(e)},getRegisteredAppProviders:function(){return n.filter((t=>e.Runtime.Runtime.isDescriptorEnabled({experiment:void 0,condition:t.condition}))).sort(((e,t)=>(e.order||0)-(t.order||0)))}});const a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=new Uint8Array(123);for(let e=0;e>>0;61===e.charCodeAt(e.length-2)?t-=2:61===e.charCodeAt(e.length-1)&&(t-=1);const r=new Uint8Array(t);for(let t=0,s=0;t>4,r[s++]=(15&i)<<4|a>>2,r[s++]=(3&a)<<6|63&l}return r.buffer}});var c=Object.freeze({__proto__:null,CharacterIdMap:class{#e;#t;#r;constructor(){this.#e=new Map,this.#t=new Map,this.#r=33}toChar(e){let t=this.#e.get(e);if(!t){if(this.#r>=65535)throw new Error("CharacterIdMap ran out of capacity!");t=String.fromCharCode(this.#r++),this.#e.set(e,t),this.#t.set(t,e)}return t}fromChar(e){const t=this.#t.get(e);return void 0===t?null:t}}});function h(e,t){const r=e[3];return[(1-r)*t[0]+r*e[0],(1-r)*t[1]+r*e[1],(1-r)*t[2]+r*e[2],r+t[3]*(1-r)]}function u([e,t,r,s]){const n=Math.max(e,t,r),i=Math.min(e,t,r),a=n-i,o=n+i;let l;l=i===n?0:e===n?(1/6*(t-r)/a+1)%1:t===n?1/6*(r-e)/a+1/3:1/6*(e-t)/a+2/3;const c=.5*o;let h;return h=0===c||1===c?0:c<=.5?a/o:a/(2-o),[l,h,c,s]}function g([e,t,r]){return.2126*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))}function d([e,t,r]){return.2126729*Math.pow(e,2.4)+.7151522*Math.pow(t,2.4)+.072175*Math.pow(r,2.4)}function p(e,t){return f(d(h(e,t)),d(t))}function m(e){return e>.03?e:e+Math.pow(.03-e,1.45)}function f(e,t){if(e=m(e),t=m(t),Math.abs(e-t)<5e-4)return 0;let r=0;return t>=e?(r=1.25*(Math.pow(t,.55)-Math.pow(e,.58)),r=r<.001?0:r<.078?r-12.82051282051282*r*.06:r-.06):(r=1.25*(Math.pow(t,.62)-Math.pow(e,.57)),r=r>-.001?0:r>-.078?r-12.82051282051282*r*.06:r+.06),100*r}function S(e,t,r){function s(){return r?Math.pow(Math.abs(Math.pow(e,.62)-(-t-.06)/1.25),1/.57):Math.pow(Math.abs(Math.pow(e,.55)-(t+.06)/1.25),1/.58)}e=m(e),t/=100;let n=s();return(n<0||n>1)&&(r=!r,n=s()),n}const b=[[12,-1,-1,-1,-1,100,90,80,-1,-1],[14,-1,-1,-1,100,90,80,60,60,-1],[16,-1,-1,100,90,80,60,55,50,50],[18,-1,-1,90,80,60,55,50,40,40],[24,-1,100,80,60,55,50,40,38,35],[30,-1,90,70,55,50,40,38,35,40],[36,-1,80,60,50,40,38,35,30,25],[48,100,70,55,40,38,35,30,25,20],[60,90,60,50,38,35,30,25,20,20],[72,80,55,40,35,30,25,20,20,20],[96,70,50,35,30,25,20,20,20,20],[120,60,40,30,25,20,20,20,20,20]];function w(e,t){const r=72*parseFloat(e.replace("px",""))/96;return-1!==["bold","bolder","600","700","800","900"].indexOf(t)?r>=14:r>=18}b.reverse();const y={aa:3,aaa:4.5},v={aa:4.5,aaa:7};var I=Object.freeze({__proto__:null,blendColors:h,rgbaToHsla:u,luminance:g,contrastRatio:function(e,t){const r=g(h(e,t)),s=g(t);return(Math.max(r,s)+.05)/(Math.min(r,s)+.05)},luminanceAPCA:d,contrastRatioAPCA:p,contrastRatioByLuminanceAPCA:f,desiredLuminanceAPCA:S,getAPCAThreshold:function(e,t){const r=parseFloat(e.replace("px","")),s=parseFloat(t);for(const[e,...t]of b)if(r>=e)for(const[e,r]of[900,800,700,600,500,400,300,200,100].entries())if(s>=r){const r=t[t.length-1-e];return-1===r?null:r}return null},isLargeFont:w,getContrastThreshold:function(e,t){return w(e,t)?y:v}});class x{#s;#n;#i;#a;#o;constructor(e,t,r){this.#s=void 0,this.#n=e,this.#i=r||null,this.#a=Boolean(this.#i),this.#o=t,void 0===this.#n[3]&&(this.#n[3]=1);for(let e=0;e<4;++e)this.#n[e]<0&&(this.#n[e]=0,this.#a=!1),this.#n[e]>1&&(this.#n[e]=1,this.#a=!1)}static parse(e){let t=e.toLowerCase().replace(/\s+/g,"").match(/^(?:#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(\w+))$/i);if(t){if(t[1]){let r,s=t[1].toLowerCase();3===s.length?(r=R.ShortHEX,s=s.charAt(0)+s.charAt(0)+s.charAt(1)+s.charAt(1)+s.charAt(2)+s.charAt(2)):4===s.length?(r=R.ShortHEXA,s=s.charAt(0)+s.charAt(0)+s.charAt(1)+s.charAt(1)+s.charAt(2)+s.charAt(2)+s.charAt(3)+s.charAt(3)):r=6===s.length?R.HEX:R.HEXA;const n=parseInt(s.substring(0,2),16),i=parseInt(s.substring(2,4),16),a=parseInt(s.substring(4,6),16);let o=1;return 8===s.length&&(o=parseInt(s.substring(6,8),16)/255),new x([n/255,i/255,a/255,o],r,e)}if(t[2]){const r=t[2].toLowerCase(),s=A.get(r);if(void 0!==s){const t=x.fromRGBA(s);return t.#o=R.Nickname,t.#i=e,t}return null}return null}if(t=e.toLowerCase().match(/^\s*(?:(rgba?)|(hsla?))\((.*)\)\s*$/),t){const r=t[3].trim();let s=r.split(/\s*,\s*/);if(1===s.length)if(s=r.split(/\s+/),"/"===s[3]){if(s.splice(3,1),4!==s.length)return null}else if(s.length>2&&-1!==s[2].indexOf("/")||s.length>3&&-1!==s[3].indexOf("/")){const e=s.slice(2,4).join("");s=s.slice(0,2).concat(e.split(/\//)).concat(s.slice(4))}else if(s.length>=4)return null;if(3!==s.length&&4!==s.length||s.indexOf("")>-1)return null;const n=void 0!==s[3];if(t[1]){const t=[x.parseRgbNumeric(s[0]),x.parseRgbNumeric(s[1]),x.parseRgbNumeric(s[2]),n?x.parseAlphaNumeric(s[3]):1];return t.indexOf(null)>-1?null:new x(t,n?R.RGBA:R.RGB,e)}if(t[2]){const t=[x.parseHueNumeric(s[0]),x.parseSatLightNumeric(s[1]),x.parseSatLightNumeric(s[2]),n?x.parseAlphaNumeric(s[3]):1];if(t.indexOf(null)>-1)return null;const r=[];return x.hsl2rgb(t,r),new x(r,n?R.HSLA:R.HSL,e)}}return null}static fromRGBA(e){return new x([e[0]/255,e[1]/255,e[2]/255,e[3]],R.RGBA)}static fromHSVA(e){const t=[];return x.hsva2rgba(e,t),new x(t,R.HSLA)}static parsePercentOrNumber(e){if(isNaN(e.replace("%","")))return null;const t=parseFloat(e);return-1!==e.indexOf("%")?e.indexOf("%")!==e.length-1?null:t/100:t}static parseRgbNumeric(e){const t=x.parsePercentOrNumber(e);return null===t?null:-1!==e.indexOf("%")?t:t/255}static parseHueNumeric(e){const t=e.replace(/(deg|g?rad|turn)$/,"");if(isNaN(t)||e.match(/\s+(deg|g?rad|turn)/))return null;const r=parseFloat(t);return-1!==e.indexOf("turn")?r%1:-1!==e.indexOf("grad")?r/400%1:-1!==e.indexOf("rad")?r/(2*Math.PI)%1:r/360%1}static parseSatLightNumeric(e){if(e.indexOf("%")!==e.length-1||isNaN(e.replace("%","")))return null;const t=parseFloat(e);return Math.min(1,t/100)}static parseAlphaNumeric(e){return x.parsePercentOrNumber(e)}static hsva2hsla(e,t){const r=e[0];let s=e[1];const n=e[2],i=(2-s)*n;0===n||0===s?s=0:s*=n/(i<1?i:2-i),t[0]=r,t[1]=s,t[2]=i/2,t[3]=e[3]}static hsl2rgb(e,t){const r=e[0];let s=e[1];const n=e[2];function i(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}let a;s<0&&(s=0),a=n<=.5?n*(1+s):n+s-n*s;const o=2*n-a,l=r+1/3,c=r,h=r-1/3;t[0]=i(o,a,l),t[1]=i(o,a,c),t[2]=i(o,a,h),t[3]=e[3]}static hsva2rgba(e,t){x.hsva2hsla(e,C),x.hsl2rgb(C,t);for(let e=0;e1)&&(r=!r,n=s()),n}static approachColorValue(e,t,r,s,n){let i=e[r],a=1,o=n(e)-s,l=Math.sign(o);for(let t=100;t;t--){if(Math.abs(o)<2e-4)return e[r]=i,i;const t=Math.sign(o);if(t!==l)a/=2,l=t;else if(i<0||i>1)return null;i+=a*(2===r?-o:o),e[r]=i,o=n(e)-s}return null}static findFgColorForContrast(e,t,r){const s=e.hsva(),n=t.rgba(),i=e=>g(h(x.fromHSVA(e).rgba(),n)),a=g(t.rgba()),o=i(s)>a,l=x.desiredLuminance(a,r,o);return x.approachColorValue(s,n,2,l,i)?x.fromHSVA(s):(s[2]=1,x.approachColorValue(s,n,1,l,i)?x.fromHSVA(s):null)}static findFgColorForContrastAPCA(e,t,r){const s=e.hsva(),n=t.rgba(),i=e=>d(x.fromHSVA(e).rgba()),a=d(t.rgba()),o=S(a,r,i(s)>=a);if(x.approachColorValue(s,n,2,o,i)){const e=x.fromHSVA(s);if(Math.abs(p(t.rgba(),e.rgba()))>=r)return e}if(s[2]=1,x.approachColorValue(s,n,1,o,i)){const e=x.fromHSVA(s);if(Math.abs(p(t.rgba(),e.rgba()))>=r)return e}return null}format(){return this.#o}hsla(){return this.#s||(this.#s=u(this.#n)),this.#s}canonicalHSLA(){const e=this.hsla();return[Math.round(360*e[0]),Math.round(100*e[1]),Math.round(100*e[2]),e[3]]}hsva(){const e=this.hsla(),t=e[0];let r=e[1];const s=e[2];return r*=s<.5?s:1-s,[t,0!==r?2*r/(s+r):0,s+r,e[3]]}hasAlpha(){return 1!==this.#n[3]}detectHEXFormat(){let e=!0;for(let t=0;t<4;++t){if(Math.round(255*this.#n[t])%17){e=!1;break}}const t=this.hasAlpha(),r=R;return e?t?r.ShortHEXA:r.ShortHEX:t?r.HEXA:r.HEX}asString(e){if(e===this.#o&&this.#a)return this.#i;function r(e){return Math.round(255*e)}function s(e){const t=Math.round(255*e).toString(16);return 1===t.length?"0"+t:t}function n(e){return(Math.round(255*e)/17).toString(16)}switch(e||(e=this.#o),e){case R.Original:return this.#i;case R.RGB:case R.RGBA:{const e=t.StringUtilities.sprintf("rgb(%d %d %d",r(this.#n[0]),r(this.#n[1]),r(this.#n[2]));return this.hasAlpha()?e+t.StringUtilities.sprintf(" / %d%)",Math.round(100*this.#n[3])):e+")"}case R.HSL:case R.HSLA:{const e=this.hsla(),r=t.StringUtilities.sprintf("hsl(%ddeg %d% %d%",Math.round(360*e[0]),Math.round(100*e[1]),Math.round(100*e[2]));return this.hasAlpha()?r+t.StringUtilities.sprintf(" / %d%)",Math.round(100*e[3])):r+")"}case R.HEXA:return t.StringUtilities.sprintf("#%s%s%s%s",s(this.#n[0]),s(this.#n[1]),s(this.#n[2]),s(this.#n[3])).toLowerCase();case R.HEX:return this.hasAlpha()?null:t.StringUtilities.sprintf("#%s%s%s",s(this.#n[0]),s(this.#n[1]),s(this.#n[2])).toLowerCase();case R.ShortHEXA:{const e=this.detectHEXFormat();return e!==R.ShortHEXA&&e!==R.ShortHEX?null:t.StringUtilities.sprintf("#%s%s%s%s",n(this.#n[0]),n(this.#n[1]),n(this.#n[2]),n(this.#n[3])).toLowerCase()}case R.ShortHEX:return this.hasAlpha()||this.detectHEXFormat()!==R.ShortHEX?null:t.StringUtilities.sprintf("#%s%s%s",n(this.#n[0]),n(this.#n[1]),n(this.#n[2])).toLowerCase();case R.Nickname:return this.nickname()}return this.#i}rgba(){return this.#n.slice()}canonicalRGBA(){const e=new Array(4);for(let t=0;t<3;++t)e[t]=Math.round(255*this.#n[t]);return e[3]=this.#n[3],e}nickname(){return T.get(String(this.canonicalRGBA()))||null}toProtocolRGBA(){const e=this.canonicalRGBA(),t={r:e[0],g:e[1],b:e[2],a:void 0};return 1!==e[3]&&(t.a=e[3]),t}invert(){const e=[];return e[0]=1-this.#n[0],e[1]=1-this.#n[1],e[2]=1-this.#n[2],e[3]=this.#n[3],new x(e,R.RGBA)}setAlpha(e){const t=this.#n.slice();return t[3]=e,new x(t,R.RGBA)}blendWith(e){const t=h(e.#n,this.#n);return new x(t,R.RGBA)}blendWithAlpha(e){const t=this.#n.slice();return t[3]*=e,new x(t,R.RGBA)}setFormat(e){this.#o=e}equal(e){return this.#n.every(((t,r)=>t===e.#n[r]))&&this.#o===e.#o}}var R;!function(e){e.Original="original",e.Nickname="nickname",e.HEX="hex",e.ShortHEX="shorthex",e.HEXA="hexa",e.ShortHEXA="shorthexa",e.RGB="rgb",e.RGBA="rgba",e.HSL="hsl",e.HSLA="hsla"}(R||(R={}));const E=[["aliceblue",[240,248,255]],["antiquewhite",[250,235,215]],["aqua",[0,255,255]],["aquamarine",[127,255,212]],["azure",[240,255,255]],["beige",[245,245,220]],["bisque",[255,228,196]],["black",[0,0,0]],["blanchedalmond",[255,235,205]],["blue",[0,0,255]],["blueviolet",[138,43,226]],["brown",[165,42,42]],["burlywood",[222,184,135]],["cadetblue",[95,158,160]],["chartreuse",[127,255,0]],["chocolate",[210,105,30]],["coral",[255,127,80]],["cornflowerblue",[100,149,237]],["cornsilk",[255,248,220]],["crimson",[237,20,61]],["cyan",[0,255,255]],["darkblue",[0,0,139]],["darkcyan",[0,139,139]],["darkgoldenrod",[184,134,11]],["darkgray",[169,169,169]],["darkgrey",[169,169,169]],["darkgreen",[0,100,0]],["darkkhaki",[189,183,107]],["darkmagenta",[139,0,139]],["darkolivegreen",[85,107,47]],["darkorange",[255,140,0]],["darkorchid",[153,50,204]],["darkred",[139,0,0]],["darksalmon",[233,150,122]],["darkseagreen",[143,188,143]],["darkslateblue",[72,61,139]],["darkslategray",[47,79,79]],["darkslategrey",[47,79,79]],["darkturquoise",[0,206,209]],["darkviolet",[148,0,211]],["deeppink",[255,20,147]],["deepskyblue",[0,191,255]],["dimgray",[105,105,105]],["dimgrey",[105,105,105]],["dodgerblue",[30,144,255]],["firebrick",[178,34,34]],["floralwhite",[255,250,240]],["forestgreen",[34,139,34]],["fuchsia",[255,0,255]],["gainsboro",[220,220,220]],["ghostwhite",[248,248,255]],["gold",[255,215,0]],["goldenrod",[218,165,32]],["gray",[128,128,128]],["grey",[128,128,128]],["green",[0,128,0]],["greenyellow",[173,255,47]],["honeydew",[240,255,240]],["hotpink",[255,105,180]],["indianred",[205,92,92]],["indigo",[75,0,130]],["ivory",[255,255,240]],["khaki",[240,230,140]],["lavender",[230,230,250]],["lavenderblush",[255,240,245]],["lawngreen",[124,252,0]],["lemonchiffon",[255,250,205]],["lightblue",[173,216,230]],["lightcoral",[240,128,128]],["lightcyan",[224,255,255]],["lightgoldenrodyellow",[250,250,210]],["lightgreen",[144,238,144]],["lightgray",[211,211,211]],["lightgrey",[211,211,211]],["lightpink",[255,182,193]],["lightsalmon",[255,160,122]],["lightseagreen",[32,178,170]],["lightskyblue",[135,206,250]],["lightslategray",[119,136,153]],["lightslategrey",[119,136,153]],["lightsteelblue",[176,196,222]],["lightyellow",[255,255,224]],["lime",[0,255,0]],["limegreen",[50,205,50]],["linen",[250,240,230]],["magenta",[255,0,255]],["maroon",[128,0,0]],["mediumaquamarine",[102,205,170]],["mediumblue",[0,0,205]],["mediumorchid",[186,85,211]],["mediumpurple",[147,112,219]],["mediumseagreen",[60,179,113]],["mediumslateblue",[123,104,238]],["mediumspringgreen",[0,250,154]],["mediumturquoise",[72,209,204]],["mediumvioletred",[199,21,133]],["midnightblue",[25,25,112]],["mintcream",[245,255,250]],["mistyrose",[255,228,225]],["moccasin",[255,228,181]],["navajowhite",[255,222,173]],["navy",[0,0,128]],["oldlace",[253,245,230]],["olive",[128,128,0]],["olivedrab",[107,142,35]],["orange",[255,165,0]],["orangered",[255,69,0]],["orchid",[218,112,214]],["palegoldenrod",[238,232,170]],["palegreen",[152,251,152]],["paleturquoise",[175,238,238]],["palevioletred",[219,112,147]],["papayawhip",[255,239,213]],["peachpuff",[255,218,185]],["peru",[205,133,63]],["pink",[255,192,203]],["plum",[221,160,221]],["powderblue",[176,224,230]],["purple",[128,0,128]],["rebeccapurple",[102,51,153]],["red",[255,0,0]],["rosybrown",[188,143,143]],["royalblue",[65,105,225]],["saddlebrown",[139,69,19]],["salmon",[250,128,114]],["sandybrown",[244,164,96]],["seagreen",[46,139,87]],["seashell",[255,245,238]],["sienna",[160,82,45]],["silver",[192,192,192]],["skyblue",[135,206,235]],["slateblue",[106,90,205]],["slategray",[112,128,144]],["slategrey",[112,128,144]],["snow",[255,250,250]],["springgreen",[0,255,127]],["steelblue",[70,130,180]],["tan",[210,180,140]],["teal",[0,128,128]],["thistle",[216,191,216]],["tomato",[255,99,71]],["turquoise",[64,224,208]],["violet",[238,130,238]],["wheat",[245,222,179]],["white",[255,255,255]],["whitesmoke",[245,245,245]],["yellow",[255,255,0]],["yellowgreen",[154,205,50]],["transparent",[0,0,0,0]]],A=new Map(E),T=new Map(E.map((([e,[t,r,s,n=1]])=>[String([t,r,s,n]),e]))),O=[127,32,210],k={Content:x.fromRGBA([111,168,220,.66]),ContentLight:x.fromRGBA([111,168,220,.5]),ContentOutline:x.fromRGBA([9,83,148]),Padding:x.fromRGBA([147,196,125,.55]),PaddingLight:x.fromRGBA([147,196,125,.4]),Border:x.fromRGBA([255,229,153,.66]),BorderLight:x.fromRGBA([255,229,153,.5]),Margin:x.fromRGBA([246,178,107,.66]),MarginLight:x.fromRGBA([246,178,107,.5]),EventTarget:x.fromRGBA([255,196,196,.66]),Shape:x.fromRGBA([96,82,177,.8]),ShapeMargin:x.fromRGBA([96,82,127,.6]),CssGrid:x.fromRGBA([75,0,130,1]),LayoutLine:x.fromRGBA([...O,1]),GridBorder:x.fromRGBA([...O,1]),GapBackground:x.fromRGBA([...O,.3]),GapHatch:x.fromRGBA([...O,.8]),GridAreaBorder:x.fromRGBA([26,115,232,1])},P={ParentOutline:x.fromRGBA([224,90,183,1]),ChildOutline:x.fromRGBA([0,120,212,1])},L={Resizer:x.fromRGBA([222,225,230,1]),ResizerHandle:x.fromRGBA([166,166,166,1]),Mask:x.fromRGBA([248,249,249,1])};const C=[0,0,0,0];var N=Object.freeze({__proto__:null,Color:x,Regex:/((?:rgb|hsl)a?\([^)]+\)|#[0-9a-fA-F]{8}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3,4}|\b[a-zA-Z]+\b(?!-))/g,get Format(){return R},Nicknames:A,PageHighlight:k,SourceOrderHighlight:P,IsolationModeHighlight:L,Generator:class{#l;#c;#h;#u;#g;constructor(e,t,r,s){this.#l=e||{min:0,max:360,count:void 0},this.#c=t||67,this.#h=r||80,this.#u=s||1,this.#g=new Map}setColorForID(e,t){this.#g.set(e,t)}colorForID(e){let t=this.#g.get(e);return t||(t=this.generateColorForID(e),this.#g.set(e,t)),t}generateColorForID(e){const r=t.StringUtilities.hashCode(e),s=this.indexToValueInSpace(r,this.#l),n=this.indexToValueInSpace(r>>8,this.#c),i=this.indexToValueInSpace(r>>16,this.#h),a=this.indexToValueInSpace(r>>24,this.#u),o=`hsl(${s}deg ${n}% ${i}%`;return 1!==a?`${o} / ${Math.floor(100*a)}%)`:`${o})`}indexToValueInSpace(e,t){if("number"==typeof t)return t;const r=t.count||t.max-t.min;return e%=r,t.min+Math.floor(e/(r-1)*(t.max-t.min))}}});class M{listeners;addEventListener(e,t,r){this.listeners||(this.listeners=new Map);let s=this.listeners.get(e);return s||(s=new Set,this.listeners.set(e,s)),s.add({thisObject:r,listener:t}),{eventTarget:this,eventType:e,thisObject:r,listener:t}}once(e){return new Promise((t=>{const r=this.addEventListener(e,(s=>{this.removeEventListener(e,r.listener),t(s.data)}))}))}removeEventListener(e,t,r){const s=this.listeners?.get(e);if(s){for(const e of s)e.listener===t&&e.thisObject===r&&(e.disposed=!0,s.delete(e));s.size||this.listeners?.delete(e)}}hasEventListeners(e){return Boolean(this.listeners&&this.listeners.has(e))}dispatchEventToListeners(e,...[t]){const r=this.listeners?.get(e);if(!r)return;const s={data:t};for(const e of[...r])e.disposed||e.listener.call(e.thisObject,s)}}var V=Object.freeze({__proto__:null,ObjectWrapper:M,eventMixin:function(e){return class extends e{#d=new M;addEventListener(e,t,r){return this.#d.addEventListener(e,t,r)}once(e){return this.#d.once(e)}removeEventListener(e,t,r){this.#d.removeEventListener(e,t,r)}hasEventListeners(e){return this.#d.hasEventListeners(e)}dispatchEventToListeners(e,...t){this.#d.dispatchEventToListeners(e,...t)}}}});const _={elementsPanel:"Elements panel",stylesSidebar:"styles sidebar",changesDrawer:"Changes drawer",issuesView:"Issues view",networkPanel:"Network panel",applicationPanel:"Application panel",sourcesPanel:"Sources panel"},F=r.i18n.registerUIStrings("core/common/Revealer.ts",_),W=r.i18n.getLazilyComputedLocalizedString.bind(void 0,F);let j=async function(e,t){if(!e)return Promise.reject(new Error("Can't reveal "+e));return function(r){const s=[];for(let n=0;ne.loadRevealer()))))};const B=[];function z(e){return B.filter((function(t){if(!t.contextTypes)return!0;for(const r of t.contextTypes())if(e instanceof r)return!0;return!1}))}const D={ELEMENTS_PANEL:W(_.elementsPanel),STYLES_SIDEBAR:W(_.stylesSidebar),CHANGES_DRAWER:W(_.changesDrawer),ISSUES_VIEW:W(_.issuesView),NETWORK_PANEL:W(_.networkPanel),APPLICATION_PANEL:W(_.applicationPanel),SOURCES_PANEL:W(_.sourcesPanel)};var G=Object.freeze({__proto__:null,Revealer:class{},get reveal(){return j},setRevealForTest:function(e){j=e},revealDestination:function(e){const t=e?z(e)[0]:B[0];return t&&t.destination?.()||null},registerRevealer:function(e){B.push(e)},RevealerDestination:D});let U;class H extends M{#p;constructor(){super(),this.#p=[]}static instance({forceNew:e}={forceNew:!1}){return U&&!e||(U=new H),U}addMessage(e,t,r){const s=new $(e,t||q.Info,Date.now(),r||!1);this.#p.push(s),this.dispatchEventToListeners(X.MessageAdded,s)}log(e){this.addMessage(e,q.Info)}warn(e){this.addMessage(e,q.Warning)}error(e){this.addMessage(e,q.Error,!0)}messages(){return this.#p}show(){this.showPromise()}showPromise(){return j(this)}}var X,q;!function(e){e.MessageAdded="messageAdded"}(X||(X={})),function(e){e.Info="info",e.Warning="warning",e.Error="error"}(q||(q={}));class ${text;level;timestamp;show;constructor(e,t,r,s){this.text=e,this.level=t,this.timestamp="number"==typeof r?r:Date.now(),this.show=s}}var Y=Object.freeze({__proto__:null,Console:H,get Events(){return X},get MessageLevel(){return q},Message:$});var Z=Object.freeze({__proto__:null,debounce:function(e,t){let r=0;return()=>{clearTimeout(r),r=setTimeout((()=>e()),t)}}});var K=Object.freeze({__proto__:null,removeEventListeners:function(e){for(const t of e)t.eventTarget.removeEventListener(t.eventType,t.listener,t.thisObject);e.splice(0)},fireEvent:function(e,t={},r=window){const s=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:t});r.dispatchEvent(s)}}),J=Object.freeze({__proto__:null});const Q=Symbol("uninitialized"),ee=Symbol("error");var te=Object.freeze({__proto__:null,lazy:function(e){let t=Q,r=null;return()=>{if(t===ee)throw r;if(t!==Q)return t;try{return t=e(),t}catch(e){throw r=e,t=ee,r}}}});const re=[];function se(e){return re.filter((function(t){if(!t.contextTypes)return!0;for(const r of t.contextTypes())if(e instanceof r)return!0;return!1}))}var ne=Object.freeze({__proto__:null,Linkifier:class{static async linkify(e,t){if(!e)throw new Error("Can't linkify "+e);const r=se(e)[0];if(!r)throw new Error("No linkifiers registered for object "+e);return(await r.loadLinkifier()).linkify(e,t)}},registerLinkifier:function(e){re.push(e)},getApplicableRegisteredlinkifiers:se});class ie{isValid;url;scheme;user;host;port;path;queryParams;fragment;folderPathComponents;lastPathComponent;blobInnerScheme;#m;#f;constructor(e){this.isValid=!1,this.url=e,this.scheme="",this.user="",this.host="",this.port="",this.path="",this.queryParams="",this.fragment="",this.folderPathComponents="",this.lastPathComponent="";const t=this.url.startsWith("blob:"),r=(t?e.substring(5):e).match(ie.urlRegex());if(r)this.isValid=!0,t?(this.blobInnerScheme=r[2].toLowerCase(),this.scheme="blob"):this.scheme=r[2].toLowerCase(),this.user=r[3],this.host=r[4],this.port=r[5],this.path=r[6]||"/",this.queryParams=r[7]||"",this.fragment=r[8];else{if(this.url.startsWith("data:"))return void(this.scheme="data");if(this.url.startsWith("blob:"))return void(this.scheme="blob");if("about:blank"===this.url)return void(this.scheme="about");this.path=this.url}const s=this.path.lastIndexOf("/");-1!==s?(this.folderPathComponents=this.path.substring(0,s),this.lastPathComponent=this.path.substring(s+1)):this.lastPathComponent=this.path}static fromString(e){const t=new ie(e.toString());return t.isValid?t:null}static rawPathToUrlString(e){let t=e;return t=t.replace(/\\/g,"/"),t.startsWith("file://")||(t=t.startsWith("/")?"file://"+t:"file:///"+t),t}static capFilePrefix(e,t){return console.assert(e.startsWith("file://"),"This must be a file URL."),t?e.substr("file:///".length).replace(/\//g,"\\"):e.substr("file://".length)}static urlWithoutHash(e){const t=e.indexOf("#");return-1!==t?e.substr(0,t):e}static urlRegex(){if(ie.urlRegexInstance)return ie.urlRegexInstance;return ie.urlRegexInstance=new RegExp("^("+/([A-Za-z][A-Za-z0-9+.-]*):\/\//.source+/(?:([A-Za-z0-9\-._~%!$&'()*+,;=:]*)@)?/.source+/((?:\[::\d?\])|(?:[^\s\/:]*))/.source+/(?::([\d]+))?/.source+")"+/(\/[^#?]*)?/.source+/(?:\?([^#]*))?/.source+/(?:#(.*))?/.source+"$"),ie.urlRegexInstance}static extractPath(e){const t=this.fromString(e);return t?t.path:""}static extractOrigin(e){const t=this.fromString(e);return t?t.securityOrigin():""}static extractExtension(e){const t=(e=ie.urlWithoutHash(e)).indexOf("?");-1!==t&&(e=e.substr(0,t));const r=e.lastIndexOf("/");-1!==r&&(e=e.substr(r+1));const s=e.lastIndexOf(".");if(-1!==s){const t=(e=e.substr(s+1)).indexOf("%");return-1!==t?e.substr(0,t):e}return""}static extractName(e){let t=e.lastIndexOf("/");const r=-1!==t?e.substr(t+1):e;return t=r.indexOf("?"),t<0?r:r.substr(0,t)}static completeURL(t,r){const s=r.trim();if(s.startsWith("data:")||s.startsWith("blob:")||s.startsWith("javascript:")||s.startsWith("mailto:"))return r;const n=this.fromString(s);if(n&&n.scheme)return s;const i=this.fromString(t);if(!i)return null;if(i.isDataURL())return r;if(r.length>1&&"/"===r.charAt(0)&&"/"===r.charAt(1))return i.scheme+":"+r;const a=i.securityOrigin(),o=i.path,l=i.queryParams?"?"+i.queryParams:"";if(!r.length)return a+o+l;if("#"===r.charAt(0))return a+o+l+r;if("?"===r.charAt(0))return a+o+r;const c=r.match(/^[^#?]*/);if(!c||!r.length)throw new Error("Invalid href");let h=c[0];const u=r.substring(h.length);return"/"!==h.charAt(0)&&(h=i.folderPathComponents+"/"+h),a+e.Runtime.Runtime.normalizePath(h)+u}static splitLineAndColumn(e){const t=e.match(ie.urlRegex());let r="",s=e;t&&(r=t[1],s=e.substring(t[1].length));const n=/(?::(\d+))?(?::(\d+))?$/.exec(s);let i,a;if(console.assert(Boolean(n)),!n)return{url:e,lineNumber:0,columnNumber:0};"string"==typeof n[1]&&(i=parseInt(n[1],10),i=isNaN(i)?void 0:i-1),"string"==typeof n[2]&&(a=parseInt(n[2],10),a=isNaN(a)?void 0:a-1);let o=r+s.substring(0,s.length-n[0].length);if(void 0===n[1]&&void 0===n[2]){const e=/wasm-function\[\d+\]:0x([a-z0-9]+)$/g.exec(s);e&&"string"==typeof e[1]&&(o=ie.removeWasmFunctionInfoFromURL(o),a=parseInt(e[1],16),a=isNaN(a)?void 0:a)}return{url:o,lineNumber:i,columnNumber:a}}static removeWasmFunctionInfoFromURL(e){const t=e.search(/:wasm-function\[\d+\]/);return-1===t?e:e.substring(0,t)}static isRelativeURL(e){return!/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)}get displayName(){return this.#m?this.#m:this.isDataURL()?this.dataURLDisplayName():this.isBlobURL()||this.isAboutBlank()?this.url:(this.#m=this.lastPathComponent,this.#m||(this.#m=(this.host||"")+"/"),"/"===this.#m&&(this.#m=this.url),this.#m)}dataURLDisplayName(){return this.#f?this.#f:this.isDataURL()?(this.#f=t.StringUtilities.trimEndWithMaxLength(this.url,20),this.#f):""}isAboutBlank(){return"about:blank"===this.url}isDataURL(){return"data"===this.scheme}isHttpOrHttps(){return"http"===this.scheme||"https"===this.scheme}isBlobURL(){return this.url.startsWith("blob:")}lastPathComponentWithFragment(){return this.lastPathComponent+(this.fragment?"#"+this.fragment:"")}domain(){return this.isDataURL()?"data:":this.host+(this.port?":"+this.port:"")}securityOrigin(){if(this.isDataURL())return"data:";return(this.isBlobURL()?this.blobInnerScheme:this.scheme)+"://"+this.domain()}urlWithoutScheme(){return this.scheme&&this.url.startsWith(this.scheme+"://")?this.url.substring(this.scheme.length+3):this.url}static urlRegexInstance=null}var ae=Object.freeze({__proto__:null,ParsedURL:ie});class oe{#S;#b;#w;#y;constructor(e,t){this.#S=e,this.#b=t||1,this.#w=0,this.#y=0}isCanceled(){return this.#S.parent.isCanceled()}setTitle(e){this.#S.parent.setTitle(e)}done(){this.setWorked(this.#y),this.#S.childDone()}setTotalWork(e){this.#y=e,this.#S.update()}setWorked(e,t){this.#w=e,void 0!==t&&this.setTitle(t),this.#S.update()}incrementWorked(e){this.setWorked(this.#w+(e||1))}getWeight(){return this.#b}getWorked(){return this.#w}getTotalWork(){return this.#y}}var le=Object.freeze({__proto__:null,Progress:class{setTotalWork(e){}setTitle(e){}setWorked(e,t){}incrementWorked(e){}done(){}isCanceled(){return!1}},CompositeProgress:class{parent;#v;#I;constructor(e){this.parent=e,this.#v=[],this.#I=0,this.parent.setTotalWork(1),this.parent.setWorked(0)}childDone(){++this.#I===this.#v.length&&this.parent.done()}createSubProgress(e){const t=new oe(this,e);return this.#v.push(t),t}update(){let e=0,t=0;for(let r=0;r{};return this.getOrCreatePromise(e).catch(r).then((e=>{e&&t(e)})),null}return r}clear(){this.stopListening();for(const[e,{reject:t}]of this.#E.entries())t(new Error(`Object with ${e} never resolved.`));this.#E.clear()}getOrCreatePromise(e){const t=this.#E.get(e);if(t)return t.promise;let r=()=>{},s=()=>{};const n=new Promise(((e,t)=>{r=e,s=t}));return this.#E.set(e,{promise:n,resolve:r,reject:s}),this.startListening(),n}onResolve(e,t){const r=this.#E.get(e);this.#E.delete(e),0===this.#E.size&&this.stopListening(),r?.resolve(t)}}});const ue={xhrAndFetch:"`XHR` and `Fetch`",scripts:"Scripts",js:"JS",stylesheets:"Stylesheets",css:"CSS",images:"Images",img:"Img",media:"Media",fonts:"Fonts",font:"Font",documents:"Documents",doc:"Doc",websockets:"WebSockets",ws:"WS",webassembly:"WebAssembly",wasm:"Wasm",manifest:"Manifest",other:"Other",document:"Document",stylesheet:"Stylesheet",image:"Image",script:"Script",texttrack:"TextTrack",fetch:"Fetch",eventsource:"EventSource",websocket:"WebSocket",webtransport:"WebTransport",signedexchange:"SignedExchange",ping:"Ping",cspviolationreport:"CSPViolationReport",preflight:"Preflight",webbundle:"WebBundle"},ge=r.i18n.registerUIStrings("core/common/ResourceType.ts",ue),de=r.i18n.getLazilyComputedLocalizedString.bind(void 0,ge);class pe{#A;#T;#O;#k;constructor(e,t,r,s){this.#A=e,this.#T=t,this.#O=r,this.#k=s}static fromMimeType(e){return e?e.startsWith("text/html")?Se.Document:e.startsWith("text/css")?Se.Stylesheet:e.startsWith("image/")?Se.Image:e.startsWith("text/")?Se.Script:e.includes("font")?Se.Font:e.includes("script")?Se.Script:e.includes("octet")?Se.Other:e.includes("application")?Se.Script:Se.Other:Se.Other}static fromMimeTypeOverride(e){return"application/wasm"===e?Se.Wasm:"application/webbundle"===e?Se.WebBundle:null}static fromURL(e){return we.get(ie.extractExtension(e))||null}static fromName(e){for(const t in Se){const r=Se[t];if(r.name()===e)return r}return null}static mimeFromURL(e){const t=ie.extractName(e);if(be.has(t))return be.get(t);const r=ie.extractExtension(e).toLowerCase();return ye.get(r)}static mimeFromExtension(e){return ye.get(e)}name(){return this.#A}title(){return this.#T()}category(){return this.#O}isTextType(){return this.#k}isScript(){return"script"===this.#A||"sm-script"===this.#A}hasScripts(){return this.isScript()||this.isDocument()}isStyleSheet(){return"stylesheet"===this.#A||"sm-stylesheet"===this.#A}isDocument(){return"document"===this.#A}isDocumentOrScriptOrStyleSheet(){return this.isDocument()||this.isScript()||this.isStyleSheet()}isFont(){return"font"===this.#A}isImage(){return"image"===this.#A}isFromSourceMap(){return this.#A.startsWith("sm-")}isWebbundle(){return"webbundle"===this.#A}toString(){return this.#A}canonicalMimeType(){return this.isDocument()?"text/html":this.isScript()?"text/javascript":this.isStyleSheet()?"text/css":""}}class me{title;shortTitle;constructor(e,t){this.title=e,this.shortTitle=t}}const fe={XHR:new me(de(ue.xhrAndFetch),r.i18n.lockedLazyString("Fetch/XHR")),Script:new me(de(ue.scripts),de(ue.js)),Stylesheet:new me(de(ue.stylesheets),de(ue.css)),Image:new me(de(ue.images),de(ue.img)),Media:new me(de(ue.media),de(ue.media)),Font:new me(de(ue.fonts),de(ue.font)),Document:new me(de(ue.documents),de(ue.doc)),WebSocket:new me(de(ue.websockets),de(ue.ws)),Wasm:new me(de(ue.webassembly),de(ue.wasm)),Manifest:new me(de(ue.manifest),de(ue.manifest)),Other:new me(de(ue.other),de(ue.other))},Se={Document:new pe("document",de(ue.document),fe.Document,!0),Stylesheet:new pe("stylesheet",de(ue.stylesheet),fe.Stylesheet,!0),Image:new pe("image",de(ue.image),fe.Image,!1),Media:new pe("media",de(ue.media),fe.Media,!1),Font:new pe("font",de(ue.font),fe.Font,!1),Script:new pe("script",de(ue.script),fe.Script,!0),TextTrack:new pe("texttrack",de(ue.texttrack),fe.Other,!0),XHR:new pe("xhr",r.i18n.lockedLazyString("XHR"),fe.XHR,!0),Fetch:new pe("fetch",de(ue.fetch),fe.XHR,!0),EventSource:new pe("eventsource",de(ue.eventsource),fe.XHR,!0),WebSocket:new pe("websocket",de(ue.websocket),fe.WebSocket,!1),WebTransport:new pe("webtransport",de(ue.webtransport),fe.WebSocket,!1),Wasm:new pe("wasm",de(ue.wasm),fe.Wasm,!1),Manifest:new pe("manifest",de(ue.manifest),fe.Manifest,!0),SignedExchange:new pe("signed-exchange",de(ue.signedexchange),fe.Other,!1),Ping:new pe("ping",de(ue.ping),fe.Other,!1),CSPViolationReport:new pe("csp-violation-report",de(ue.cspviolationreport),fe.Other,!1),Other:new pe("other",de(ue.other),fe.Other,!1),Preflight:new pe("preflight",de(ue.preflight),fe.Other,!0),SourceMapScript:new pe("sm-script",de(ue.script),fe.Script,!0),SourceMapStyleSheet:new pe("sm-stylesheet",de(ue.stylesheet),fe.Stylesheet,!0),WebBundle:new pe("webbundle",de(ue.webbundle),fe.Other,!1)},be=new Map([["Cakefile","text/x-coffeescript"]]),we=new Map([["js",Se.Script],["mjs",Se.Script],["css",Se.Stylesheet],["xsl",Se.Stylesheet],["avif",Se.Image],["avifs",Se.Image],["bmp",Se.Image],["gif",Se.Image],["ico",Se.Image],["jpeg",Se.Image],["jpg",Se.Image],["jxl",Se.Image],["png",Se.Image],["svg",Se.Image],["tif",Se.Image],["tiff",Se.Image],["webp",Se.Media],["otf",Se.Font],["ttc",Se.Font],["ttf",Se.Font],["woff",Se.Font],["woff2",Se.Font],["wasm",Se.Wasm]]),ye=new Map([["js","text/javascript"],["mjs","text/javascript"],["css","text/css"],["html","text/html"],["htm","text/html"],["xml","application/xml"],["xsl","application/xml"],["wasm","application/wasm"],["asp","application/x-aspx"],["aspx","application/x-aspx"],["jsp","application/x-jsp"],["c","text/x-c++src"],["cc","text/x-c++src"],["cpp","text/x-c++src"],["h","text/x-c++src"],["m","text/x-c++src"],["mm","text/x-c++src"],["coffee","text/x-coffeescript"],["dart","text/javascript"],["ts","text/typescript"],["tsx","text/typescript-jsx"],["json","application/json"],["gyp","application/json"],["gypi","application/json"],["cs","text/x-csharp"],["java","text/x-java"],["less","text/x-less"],["php","text/x-php"],["phtml","application/x-httpd-php"],["py","text/x-python"],["sh","text/x-sh"],["scss","text/x-scss"],["vtt","text/vtt"],["ls","text/x-livescript"],["md","text/markdown"],["cljs","text/x-clojure"],["cljc","text/x-clojure"],["cljx","text/x-clojure"],["styl","text/x-styl"],["jsx","text/jsx"],["avif","image/avif"],["avifs","image/avif-sequence"],["bmp","image/bmp"],["gif","image/gif"],["ico","image/ico"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["jxl","image/jxl"],["png","image/png"],["svg","image/svg+xml"],["tif","image/tif"],["tiff","image/tiff"],["webp","image/webp"],["otf","font/otf"],["ttc","font/collection"],["ttf","font/ttf"],["woff","font/woff"],["woff2","font/woff2"]]);var ve=Object.freeze({__proto__:null,ResourceType:pe,ResourceCategory:me,resourceCategories:fe,resourceTypes:Se,resourceTypeByExtension:we,mimeTypeByExtension:ye});const Ie=new Map;const xe=[];var Re=Object.freeze({__proto__:null,registerLateInitializationRunnable:function(e){const{id:t,loadRunnable:r}=e;if(Ie.has(t))throw new Error(`Duplicate late Initializable runnable id '${t}'`);Ie.set(t,r)},maybeRemoveLateInitializationRunnable:function(e){return Ie.delete(e)},lateInitializationRunnables:function(){return[...Ie.values()]},registerEarlyInitializationRunnable:function(e){xe.push(e)},earlyInitializationRunnables:function(){return xe}});class Ee{begin;end;data;constructor(e,t,r){if(e>t)throw new Error("Invalid segment");this.begin=e,this.end=t,this.data=r}intersects(e){return this.begine.begin-t.begin)),s=r,n=null;if(r>0){const t=this.#P[r-1];n=this.tryMerge(t,e),n?(--r,e=n):this.#P[r-1].end>=e.begin&&(e.endthis.append(e)))}segments(){return this.#P}tryMerge(e,t){const r=this.#L&&this.#L(e,t);return r?(r.begin=e.begin,r.end=Math.max(e.end,t.end),r):null}}});const Te={elements:"Elements",appearance:"Appearance",sources:"Sources",network:"Network",performance:"Performance",console:"Console",persistence:"Persistence",debugger:"Debugger",global:"Global",rendering:"Rendering",grid:"Grid",mobile:"Mobile",memory:"Memory",extension:"Extension",adorner:"Adorner",sync:"Sync"},Oe=r.i18n.registerUIStrings("core/common/SettingRegistration.ts",Te),ke=r.i18n.getLocalizedString.bind(void 0,Oe);let Pe=[];const Le=new Set;function Ce(){return Pe.filter((t=>e.Runtime.Runtime.isDescriptorEnabled({experiment:t.experiment,condition:t.condition})))}var Ne,Me;let Ve;!function(e){e.NONE="",e.ELEMENTS="ELEMENTS",e.APPEARANCE="APPEARANCE",e.SOURCES="SOURCES",e.NETWORK="NETWORK",e.PERFORMANCE="PERFORMANCE",e.CONSOLE="CONSOLE",e.PERSISTENCE="PERSISTENCE",e.DEBUGGER="DEBUGGER",e.GLOBAL="GLOBAL",e.RENDERING="RENDERING",e.GRID="GRID",e.MOBILE="MOBILE",e.EMULATION="EMULATION",e.MEMORY="MEMORY",e.EXTENSIONS="EXTENSIONS",e.ADORNER="ADORNER",e.SYNC="SYNC"}(Ne||(Ne={})),function(e){e.ARRAY="array",e.REGEX="regex",e.ENUM="enum",e.BOOLEAN="boolean"}(Me||(Me={}));class _e{syncedStorage;globalStorage;localStorage;#C;settingNameSet;orderValuesBySettingCategory;#N;#M;moduleSettings;constructor(t,r,s){this.syncedStorage=t,this.globalStorage=r,this.localStorage=s,this.#C=new We({}),this.settingNameSet=new Set,this.orderValuesBySettingCategory=new Map,this.#N=new M,this.#M=new Map,this.moduleSettings=new Map;for(const t of Ce()){const{settingName:r,defaultValue:s,storageType:n}=t,i=t.settingType===Me.REGEX&&"string"==typeof s?this.createRegExpSetting(r,s,void 0,n):this.createSetting(r,s,n);"mac"===e.Runtime.Runtime.platform()&&t.titleMac?i.setTitleFunction(t.titleMac):i.setTitleFunction(t.title),t.userActionCondition&&i.setRequiresUserAction(Boolean(e.Runtime.Runtime.queryParam(t.userActionCondition))),i.setRegistration(t),this.registerModuleSetting(i)}}static hasInstance(){return void 0!==Ve}static instance(e={forceNew:null,syncedStorage:null,globalStorage:null,localStorage:null}){const{forceNew:t,syncedStorage:r,globalStorage:s,localStorage:n}=e;if(!Ve||t){if(!r||!s||!n)throw new Error(`Unable to create settings: global and local storage must be provided: ${(new Error).stack}`);Ve=new _e(r,s,n)}return Ve}static removeInstance(){Ve=void 0}registerModuleSetting(e){const t=e.name,r=e.category(),s=e.order();if(this.settingNameSet.has(t))throw new Error(`Duplicate Setting name '${t}'`);if(r&&s){const e=this.orderValuesBySettingCategory.get(r)||new Set;if(e.has(s))throw new Error(`Duplicate order value '${s}' for settings category '${r}'`);e.add(s),this.orderValuesBySettingCategory.set(r,e)}this.settingNameSet.add(t),this.moduleSettings.set(e.name,e)}moduleSetting(e){const t=this.moduleSettings.get(e);if(!t)throw new Error("No setting registered: "+e);return t}settingForTest(e){const t=this.#M.get(e);if(!t)throw new Error("No setting registered: "+e);return t}createSetting(e,t,r){const s=this.storageFromType(r);let n=this.#M.get(e);return n||(n=new Be(e,t,this.#N,s),this.#M.set(e,n)),n}createLocalSetting(e,t){return this.createSetting(e,t,Ge.Local)}createRegExpSetting(e,t,r,s){return this.#M.get(e)||this.#M.set(e,new ze(e,t,this.#N,this.storageFromType(s),r)),this.#M.get(e)}clearAll(){this.globalStorage.removeAll(),this.localStorage.removeAll();_e.instance().createSetting(De.currentVersionName,0).set(De.currentVersion)}storageFromType(e){switch(e){case Ge.Local:return this.localStorage;case Ge.Session:return this.#C;case Ge.Global:return this.globalStorage;case Ge.Synced:return this.syncedStorage}return this.globalStorage}getRegistry(){return this.#M}}const Fe={register:()=>{},set:()=>{},remove:()=>{},clear:()=>{}};class We{object;backingStore;storagePrefix;constructor(e,t=Fe,r=""){this.object=e,this.backingStore=t,this.storagePrefix=r}register(e){e=this.storagePrefix+e,this.backingStore.register(e)}set(e,t){e=this.storagePrefix+e,this.object[e]=t,this.backingStore.set(e,t)}has(e){return(e=this.storagePrefix+e)in this.object}get(e){return e=this.storagePrefix+e,this.object[e]}remove(e){e=this.storagePrefix+e,delete this.object[e],this.backingStore.remove(e)}removeAll(){this.object={},this.backingStore.clear()}dumpSizes(){H.instance().log("Ten largest settings: ");const e={__proto__:null};for(const t in this.object)e[t]=this.object[t].length;const t=Object.keys(e);t.sort((function(t,r){return e[r]-e[t]}));for(let r=0;r<10&&r{const{value:t,title:r,text:s,raw:n}=e;return{value:t,title:r(),text:"function"==typeof s?s():s,raw:n}})):[]}reloadRequired(){return this.#_&&this.#_.reloadRequired||null}category(){return this.#_&&this.#_.category||null}tags(){return this.#_&&this.#_.tags?this.#_.tags.map((e=>e())).join("\0"):null}order(){return this.#_&&this.#_.order||null}printSettingsSavingError(e,t,r){const s="Error saving setting with name: "+this.name+", value length: "+r.length+". Error: "+e;console.error(s),H.instance().error(s),this.storage.dumpSizes()}}class ze extends Be{#z;#D;constructor(e,t,r,s,n){super(e,t?[{pattern:t}]:[],r,s),this.#z=n}get(){const e=[],t=this.getAsArray();for(let r=0;r`-url:${e}`)).join(" ");if(t){const e=_e.instance().createSetting("console.textFilter",""),r=e.get()?` ${e.get()}`:"";e.set(`${t}${r}`)}je(e)}updateVersionFrom26To27(){function e(e,t,r){const s=_e.instance().createSetting(e,{}),n=s.get();t in n&&(n[r]=n[t],delete n[t],s.set(n))}e("panel-tabOrder","audits2","audits"),e("panel-closeableTabs","audits2","audits"),function(e,t,r){const s=_e.instance().createSetting(e,"");s.get()===t&&s.set(r)}("panel-selectedTab","audits2","audits")}updateVersionFrom27To28(){const e=_e.instance().createSetting("uiTheme","systemPreferred");"default"===e.get()&&e.set("systemPreferred")}updateVersionFrom28To29(){function e(e,t,r){const s=_e.instance().createSetting(e,{}),n=s.get();t in n&&(n[r]=n[t],delete n[t],s.set(n))}e("panel-tabOrder","audits","lighthouse"),e("panel-closeableTabs","audits","lighthouse"),function(e,t,r){const s=_e.instance().createSetting(e,"");s.get()===t&&s.set(r)}("panel-selectedTab","audits","lighthouse")}updateVersionFrom29To30(){const e=_e.instance().createSetting("closeableTabs",{}),t=_e.instance().createSetting("panel-closeableTabs",{}),r=_e.instance().createSetting("drawer-view-closeableTabs",{}),s=t.get(),n=t.get(),i=Object.assign(n,s);e.set(i),je(t),je(r)}updateVersionFrom30To31(){je(_e.instance().createSetting("recorder_recordings",[]))}migrateSettingsFromLocalStorage(){const e=new Set(["advancedSearchConfig","breakpoints","consoleHistory","domBreakpoints","eventListenerBreakpoints","fileSystemMapping","lastSelectedSourcesSidebarPaneTab","previouslyViewedFiles","savedURLs","watchExpressions","workspaceExcludedFolders","xhrBreakpoints"]);if(window.localStorage)for(const t in window.localStorage){if(e.has(t))continue;const r=window.localStorage[t];window.localStorage.removeItem(t),_e.instance().globalStorage.set(t,r)}}clearBreakpointsWhenTooMany(e,t){e.get().length>t&&e.set([])}}var Ge;function Ue(e){return _e.instance().moduleSetting(e)}!function(e){e.Synced="Synced",e.Global="Global",e.Local="Local",e.Session="Session"}(Ge||(Ge={}));var He=Object.freeze({__proto__:null,Settings:_e,NOOP_STORAGE:Fe,SettingsStorage:We,Setting:Be,RegExpSetting:ze,VersionController:De,get SettingStorageType(){return Ge},moduleSetting:Ue,settingForTest:function(e){return _e.instance().settingForTest(e)},detectColorFormat:function(e){const t=R;let r;const s=_e.instance().moduleSetting("colorFormat").get();return r=s===t.Original?t.Original:s===t.RGB?t.RGB:s===t.HSL?t.HSL:s===t.HEX?e.detectHEXFormat():t.RGB,r},getLocalizedSettingsCategory:function(e){switch(e){case Ne.ELEMENTS:return ke(Te.elements);case Ne.APPEARANCE:return ke(Te.appearance);case Ne.SOURCES:return ke(Te.sources);case Ne.NETWORK:return ke(Te.network);case Ne.PERFORMANCE:return ke(Te.performance);case Ne.CONSOLE:return ke(Te.console);case Ne.PERSISTENCE:return ke(Te.persistence);case Ne.DEBUGGER:return ke(Te.debugger);case Ne.GLOBAL:return ke(Te.global);case Ne.RENDERING:return ke(Te.rendering);case Ne.GRID:return ke(Te.grid);case Ne.MOBILE:return ke(Te.mobile);case Ne.EMULATION:return ke(Te.console);case Ne.MEMORY:return ke(Te.memory);case Ne.EXTENSIONS:return ke(Te.extension);case Ne.ADORNER:return ke(Te.adorner);case Ne.NONE:return"";case Ne.SYNC:return ke(Te.sync)}},getRegisteredSettings:Ce,maybeRemoveSettingExtension:function(e){const t=Pe.findIndex((t=>t.settingName===e));return!(t<0||!Le.delete(e))&&(Pe.splice(t,1),!0)},registerSettingExtension:function(e){const t=e.settingName;if(Le.has(t))throw new Error(`Duplicate setting name '${t}'`);Le.add(t),Pe.push(e)},get SettingCategory(){return Ne},get SettingType(){return Me},registerSettingsForTest:function(e,t=!1){if(0===Pe.length||t){Pe=e,Le.clear();for(const t of e){const e=t.settingName;if(Le.has(e))throw new Error(`Duplicate setting name '${e}'`);Le.add(e)}}},resetSettings:function(){Pe=[]}});var Xe=Object.freeze({__proto__:null,SimpleHistoryManager:class{#G;#U;#H;#X;constructor(e){this.#G=[],this.#U=-1,this.#H=0,this.#X=e}readOnlyLock(){++this.#H}releaseReadOnlyLock(){--this.#H}getPreviousValidIndex(){if(this.empty())return-1;let e=this.#U-1;for(;e>=0&&!this.#G[e].valid();)--e;return e<0?-1:e}getNextValidIndex(){let e=this.#U+1;for(;e=this.#G.length?-1:e}readOnly(){return Boolean(this.#H)}filterOut(e){if(this.readOnly())return;const t=[];let r=0;for(let s=0;sthis.#X&&this.#G.shift(),this.#U=this.#G.length-1)}canRollback(){return this.getPreviousValidIndex()>=0}canRollover(){return this.getNextValidIndex()>=0}rollback(){const e=this.getPreviousValidIndex();return-1!==e&&(this.readOnlyLock(),this.#U=e,this.#G[e].reveal(),this.releaseReadOnlyLock(),!0)}rollover(){const e=this.getNextValidIndex();return-1!==e&&(this.readOnlyLock(),this.#U=e,this.#G[e].reveal(),this.releaseReadOnlyLock(),!0)}}});var qe=Object.freeze({__proto__:null,StringOutputStream:class{#q;constructor(){this.#q=""}async write(e){this.#q+=e}async close(){}data(){return this.#q}}});class $e{#$;#Y;#Z;#K;#J;#Q;constructor(){this.#Y=0,this.clear()}add(e){let t=this.#Y;++this.#J[this.#Y];for(let r=0;r{this.#ae=e}))}processCompleted(){this.#ne=this.getTime(),this.#te=!1,this.#se&&this.innerSchedule(!1),this.processCompletedForTests()}processCompletedForTests(){}get process(){return this.#se}onTimeout(){this.#oe=void 0,this.#re=!1,this.#te=!0,Promise.resolve().then(this.#se).catch(console.error.bind(console)).then(this.processCompleted.bind(this)).then(this.#ae),this.#ie=new Promise((e=>{this.#ae=e})),this.#se=null}schedule(e,t){this.#se=e;const r=Boolean(this.#oe)||this.#te,s=this.getTime()-this.#ne>this.#ee,n=(t=Boolean(t)||!r&&s)&&!this.#re;return this.#re=this.#re||t,this.innerSchedule(n),this.#ie}innerSchedule(e){if(this.#te)return;if(this.#oe&&!e)return;this.#oe&&this.clearTimeout(this.#oe);const t=this.#re?0:this.#ee;this.#oe=this.setTimeout(this.onTimeout.bind(this),t)}clearTimeout(e){clearTimeout(e)}setTimeout(e,t){return window.setTimeout(e,t)}getTime(){return window.performance.now()}}});var Je=Object.freeze({__proto__:null,WasmDisassembly:class{#le;#ce;constructor(e,t){this.#le=e,this.#ce=t}get lineNumbers(){return this.#le.length}bytecodeOffsetToLineNumber(e){return t.ArrayUtilities.upperBound(this.#le,e,t.ArrayUtilities.DEFAULT_COMPARATOR)-1}lineNumberToBytecodeOffset(e){return this.#le[e]}*nonBreakableLineNumbers(){let e=0,t=0;for(;e=this.#ce[t].start){e=this.bytecodeOffsetToLineNumber(this.#ce[t++].end)+1;continue}}yield e++}}}});class Qe{#he;#ue;constructor(e){this.#he=new Promise((t=>{const r=new Worker(e,{type:"module"});r.onmessage=e=>{console.assert("workerReady"===e.data),r.onmessage=null,t(r)}}))}static fromURL(e){return new Qe(e)}postMessage(e){this.#he.then((t=>{this.#ue||t.postMessage(e)}))}dispose(){this.#ue=!0,this.#he.then((e=>e.terminate()))}terminate(){this.dispose()}set onmessage(e){this.#he.then((t=>{t.onmessage=e}))}set onerror(e){this.#he.then((t=>{t.onerror=e}))}}var et=Object.freeze({__proto__:null,WorkerWrapper:Qe});let tt;export{s as App,i as AppProvider,l as Base64,c as CharacterIdMap,N as Color,I as ColorUtils,Y as Console,Z as Debouncer,K as EventTarget,J as JavaScriptMetaData,te as Lazy,ne as Linkifier,V as ObjectWrapper,ae as ParsedURL,le as Progress,ce as QueryParamHandler,he as ResolverBase,ve as ResourceType,G as Revealer,Re as Runnable,Ae as SegmentedRange,He as Settings,Xe as SimpleHistoryManager,qe as StringOutputStream,Ze as TextDictionary,Ke as Throttler,Ye as Trie,Je as WasmDisassembly,et as Worker,tt as settings}; diff --git a/chii/core/dom_extension/dom_extension.js b/chii/core/dom_extension/dom_extension.js new file mode 100644 index 00000000..ee5bb542 --- /dev/null +++ b/chii/core/dom_extension/dom_extension.js @@ -0,0 +1 @@ +import*as e from"../platform/platform.js";function t(e,t,o,n,r){let i,s,l=0,d=0;if(n||(n=e),r&&"backward"!==r&&"both"!==r)i=e,l=t;else{let r=e;for(;r;){if(r===n){i||(i=n);break}if(r.nodeType===Node.TEXT_NODE){for(let n=r===e?t-1:r.nodeValue.length-1;n>=0;--n)if(-1!==o.indexOf(r.nodeValue[n])){i=r,l=n+1;break}}if(i)break;r=r.traversePreviousNode(n)}i||(i=n,l=0)}if(r&&"forward"!==r&&"both"!==r)s=e,d=t;else{let r=e;for(;r;){if(r===n){s||(s=n);break}if(r.nodeType===Node.TEXT_NODE){for(let n=r===e?t:0;ne.hasSelection())))return!0}const e=this.getComponentSelection();return"Range"===e.type&&(e.containsNode(this,!0)||e.anchorNode.isSelfOrDescendant(this)||e.focusNode.isSelfOrDescendant(this))},Node.prototype.window=function(){return this.ownerDocument.defaultView},Element.prototype.removeChildren=function(){this.firstChild&&(this.textContent="")},self.createElement=function(e,t){return document.createElement(e,{is:t})},self.createTextNode=function(e){return document.createTextNode(e)},self.createDocumentFragment=function(){return document.createDocumentFragment()},Element.prototype.createChild=function(e,t,o){const n=document.createElement(e,{is:o});return t&&(n.className=t),this.appendChild(n),n},DocumentFragment.prototype.createChild=Element.prototype.createChild,Element.prototype.totalOffsetLeft=function(){return this.totalOffset().left},Element.prototype.totalOffsetTop=function(){return this.totalOffset().top},Element.prototype.totalOffset=function(){const e=this.getBoundingClientRect();return{left:e.left,top:e.top}},self.AnchorBox=class{constructor(e,t,o,n){this.x=e||0,this.y=t||0,this.width=o||0,this.height=n||0}contains(e,t){return e>=this.x&&e<=this.x+this.width&&t>=this.y&&t<=this.y+this.height}relativeTo(e){return new AnchorBox(this.x-e.x,this.y-e.y,this.width,this.height)}relativeToElement(e){return this.relativeTo(e.boxInWindow(e.ownerDocument.defaultView))}equals(e){return Boolean(e)&&this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height}},Element.prototype.boxInWindow=function(e){e=e||this.ownerDocument.defaultView;const t=new AnchorBox;let o=this,n=this.ownerDocument.defaultView;for(;n&&o&&(t.x+=o.totalOffsetLeft(),t.y+=o.totalOffsetTop(),n!==e);)o=n.frameElement,n=n.parent;return t.width=Math.min(this.offsetWidth,e.innerWidth-t.x),t.height=Math.min(this.offsetHeight,e.innerHeight-t.y),t},Event.prototype.consume=function(e){this.stopImmediatePropagation(),e&&this.preventDefault(),this.handled=!0},Text.prototype.select=function(e,t){e=e||0,t=t||this.textContent.length,e<0&&(e=t+e);const o=this.getComponentSelection();o.removeAllRanges();const n=this.ownerDocument.createRange();return n.setStart(this,e),n.setEnd(this,t),o.addRange(n),this},Element.prototype.selectionLeftOffset=function(){const e=this.getComponentSelection();if(!e.containsNode(this,!0))return null;let t=e.anchorOffset,o=e.anchorNode;for(;o!==this;){for(;o.previousSibling;)o=o.previousSibling,t+=o.textContent.length;o=o.parentNodeOrShadowHost()}return t},Node.prototype.deepTextContent=function(){return this.childTextNodes().map((function(e){return e.textContent})).join("")},Node.prototype.childTextNodes=function(){let e=this.traverseNextTextNode(this);const t=[],o={STYLE:1,SCRIPT:1};for(;e;)o[e.parentElement?e.parentElement.nodeName:""]||t.push(e),e=e.traverseNextTextNode(this);return t},Node.prototype.isAncestor=function(e){if(!e)return!1;let t=e.parentNodeOrShadowHost();for(;t;){if(this===t)return!0;t=t.parentNodeOrShadowHost()}return!1},Node.prototype.isDescendant=function(e){return Boolean(e)&&e.isAncestor(this)},Node.prototype.isSelfOrAncestor=function(e){return Boolean(e)&&(e===this||this.isAncestor(e))},Node.prototype.isSelfOrDescendant=function(e){return Boolean(e)&&(e===this||this.isDescendant(e))},Node.prototype.traverseNextNode=function(e,t=!1){if(!t&&this.shadowRoot)return this.shadowRoot;const o=this instanceof HTMLSlotElement?this.assignedNodes():[];if(o.length)return o[0];if(this.firstChild)return this.firstChild;let n=this;for(;n;){if(e&&n===e)return null;const t=r(n);if(t)return t;n=n.assignedSlot||n.parentNodeOrShadowHost()}function r(e){if(!e.assignedSlot)return e.nextSibling;const t=e.assignedSlot.assignedNodes(),o=Array.prototype.indexOf.call(t,e);return o+11e4?(this.textContent="string"==typeof o?o:e.StringUtilities.trimMiddle(t,1e4),!0):(this.textContent=t,!1)},Document.prototype.deepActiveElement=function(){let e=this.activeElement;for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e},DocumentFragment.prototype.deepActiveElement=Document.prototype.deepActiveElement,Element.prototype.hasFocus=function(){const e=this.getComponentRoot();return Boolean(e)&&this.isSelfOrAncestor(e.activeElement)},Node.prototype.getComponentRoot=function(){let e=this;for(;e&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&e.nodeType!==Node.DOCUMENT_NODE;)e=e.parentNode;return e},self.onInvokeElement=function(e,t){e.addEventListener("keydown",(e=>{self.isEnterOrSpaceKey(e)&&t(e)})),e.addEventListener("click",(e=>t(e)))},self.isEnterOrSpaceKey=function(e){return"Enter"===e.key||" "===e.key},self.isEscKey=function(e){return 27===e.keyCode},function(){const e=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,o){return 1===arguments.length&&(o=!this.contains(t)),e.call(this,t,Boolean(o))}}();const o=Element.prototype.appendChild,n=Element.prototype.insertBefore,r=Element.prototype.removeChild,i=Element.prototype.removeChildren;Element.prototype.appendChild=function(e){if(e.__widget&&e.parentElement!==this)throw new Error("Attempt to add widget via regular DOM operation.");return o.call(this,e)},Element.prototype.insertBefore=function(e,t){if(e.__widget&&e.parentElement!==this)throw new Error("Attempt to add widget via regular DOM operation.");return n.call(this,e,t)},Element.prototype.removeChild=function(e){if(e.__widgetCounter||e.__widget)throw new Error("Attempt to remove element containing widget via regular DOM operation");return r.call(this,e)},Element.prototype.removeChildren=function(){if(this.__widgetCounter)throw new Error("Attempt to remove element containing widget via regular DOM operation");i.call(this)};var s=Object.freeze({__proto__:null,rangeOfWord:t,originalAppendChild:o,originalInsertBefore:n,originalRemoveChild:r,originalRemoveChildren:i});export{s as DOMExtension}; diff --git a/chii/core/host/host-legacy.js b/chii/core/host/host-legacy.js new file mode 100644 index 00000000..059131c0 --- /dev/null +++ b/chii/core/host/host-legacy.js @@ -0,0 +1 @@ +import*as o from"./host.js";self.Host=self.Host||{},Host=Host||{},Host.InspectorFrontendHost=o.InspectorFrontendHost.InspectorFrontendHostInstance,Host.isUnderTest=o.InspectorFrontendHost.isUnderTest,Host.InspectorFrontendHostAPI={},Host.InspectorFrontendHostAPI.Events=o.InspectorFrontendHostAPI.Events,Host.platform=o.Platform.platform,Host.isWin=o.Platform.isWin,Host.isMac=o.Platform.isMac,Host.isCustomDevtoolsFrontend=o.Platform.isCustomDevtoolsFrontend,Host.fontFamily=o.Platform.fontFamily,Host.ResourceLoader=o.ResourceLoader.ResourceLoader,Host.ResourceLoader.load=o.ResourceLoader.load,Host.ResourceLoader.loadAsStream=o.ResourceLoader.loadAsStream,Host.ResourceLoader.setLoadForTest=o.ResourceLoader.setLoadForTest,Host.UserMetrics=o.UserMetrics.UserMetrics,Host.UserMetrics._PanelCodes=o.UserMetrics.PanelCodes,Host.UserMetrics.Action=o.UserMetrics.Action,Host.userMetrics=o.userMetrics; diff --git a/chii/core/host/host.js b/chii/core/host/host.js new file mode 100644 index 00000000..2af257ff --- /dev/null +++ b/chii/core/host/host.js @@ -0,0 +1 @@ +import*as e from"../common/common.js";import*as t from"../i18n/i18n.js";import*as o from"../platform/platform.js";import*as r from"../root/root.js";var n;!function(e){e.AppendedToURL="appendedToURL",e.CanceledSaveURL="canceledSaveURL",e.ContextMenuCleared="contextMenuCleared",e.ContextMenuItemSelected="contextMenuItemSelected",e.DeviceCountUpdated="deviceCountUpdated",e.DevicesDiscoveryConfigChanged="devicesDiscoveryConfigChanged",e.DevicesPortForwardingStatusChanged="devicesPortForwardingStatusChanged",e.DevicesUpdated="devicesUpdated",e.DispatchMessage="dispatchMessage",e.DispatchMessageChunk="dispatchMessageChunk",e.EnterInspectElementMode="enterInspectElementMode",e.EyeDropperPickedColor="eyeDropperPickedColor",e.FileSystemsLoaded="fileSystemsLoaded",e.FileSystemRemoved="fileSystemRemoved",e.FileSystemAdded="fileSystemAdded",e.FileSystemFilesChangedAddedRemoved="FileSystemFilesChangedAddedRemoved",e.IndexingTotalWorkCalculated="indexingTotalWorkCalculated",e.IndexingWorked="indexingWorked",e.IndexingDone="indexingDone",e.KeyEventUnhandled="keyEventUnhandled",e.ReattachMainTarget="reattachMainTarget",e.ReloadInspectedPage="reloadInspectedPage",e.RevealSourceLine="revealSourceLine",e.SavedURL="savedURL",e.SearchCompleted="searchCompleted",e.SetInspectedTabId="setInspectedTabId",e.SetUseSoftMenu="setUseSoftMenu",e.ShowPanel="showPanel"}(n||(n={}));const s=[[n.AppendedToURL,"appendedToURL",["url"]],[n.CanceledSaveURL,"canceledSaveURL",["url"]],[n.ContextMenuCleared,"contextMenuCleared",[]],[n.ContextMenuItemSelected,"contextMenuItemSelected",["id"]],[n.DeviceCountUpdated,"deviceCountUpdated",["count"]],[n.DevicesDiscoveryConfigChanged,"devicesDiscoveryConfigChanged",["config"]],[n.DevicesPortForwardingStatusChanged,"devicesPortForwardingStatusChanged",["status"]],[n.DevicesUpdated,"devicesUpdated",["devices"]],[n.DispatchMessage,"dispatchMessage",["messageObject"]],[n.DispatchMessageChunk,"dispatchMessageChunk",["messageChunk","messageSize"]],[n.EnterInspectElementMode,"enterInspectElementMode",[]],[n.EyeDropperPickedColor,"eyeDropperPickedColor",["color"]],[n.FileSystemsLoaded,"fileSystemsLoaded",["fileSystems"]],[n.FileSystemRemoved,"fileSystemRemoved",["fileSystemPath"]],[n.FileSystemAdded,"fileSystemAdded",["errorMessage","fileSystem"]],[n.FileSystemFilesChangedAddedRemoved,"fileSystemFilesChangedAddedRemoved",["changed","added","removed"]],[n.IndexingTotalWorkCalculated,"indexingTotalWorkCalculated",["requestId","fileSystemPath","totalWork"]],[n.IndexingWorked,"indexingWorked",["requestId","fileSystemPath","worked"]],[n.IndexingDone,"indexingDone",["requestId","fileSystemPath"]],[n.KeyEventUnhandled,"keyEventUnhandled",["event"]],[n.ReattachMainTarget,"reattachMainTarget",[]],[n.ReloadInspectedPage,"reloadInspectedPage",["hard"]],[n.RevealSourceLine,"revealSourceLine",["url","lineNumber","columnNumber"]],[n.SavedURL,"savedURL",["url","fileSystemPath"]],[n.SearchCompleted,"searchCompleted",["requestId","fileSystemPath","files"]],[n.SetInspectedTabId,"setInspectedTabId",["tabId"]],[n.SetUseSoftMenu,"setUseSoftMenu",["useSoftMenu"]],[n.ShowPanel,"showPanel",["panelName"]]];var i;!function(e){e.ActionTaken="DevTools.ActionTaken",e.PanelClosed="DevTools.PanelClosed",e.PanelShown="DevTools.PanelShown",e.SidebarPaneShown="DevTools.SidebarPaneShown",e.KeyboardShortcutFired="DevTools.KeyboardShortcutFired",e.IssueCreated="DevTools.IssueCreated",e.IssuesPanelIssueExpanded="DevTools.IssuesPanelIssueExpanded",e.IssuesPanelOpenedFrom="DevTools.IssuesPanelOpenedFrom",e.IssuesPanelResourceOpened="DevTools.IssuesPanelResourceOpened",e.KeybindSetSettingChanged="DevTools.KeybindSetSettingChanged",e.DualScreenDeviceEmulated="DevTools.DualScreenDeviceEmulated",e.ExperimentEnabledAtLaunch="DevTools.ExperimentEnabledAtLaunch",e.ExperimentEnabled="DevTools.ExperimentEnabled",e.ExperimentDisabled="DevTools.ExperimentDisabled",e.DeveloperResourceLoaded="DevTools.DeveloperResourceLoaded",e.DeveloperResourceScheme="DevTools.DeveloperResourceScheme",e.LinearMemoryInspectorRevealedFrom="DevTools.LinearMemoryInspector.RevealedFrom",e.LinearMemoryInspectorTarget="DevTools.LinearMemoryInspector.Target",e.Language="DevTools.Language",e.ConsoleShowsCorsErrors="DevTools.ConsoleShowsCorsErrors",e.SyncSetting="DevTools.SyncSetting",e.RecordingEdited="DevTools.RecordingEdited",e.RecordingExported="DevTools.RecordingExported",e.RecordingReplayFinished="DevTools.RecordingReplayFinished",e.RecordingReplayStarted="DevTools.RecordingReplayStarted",e.RecordingToggled="DevTools.RecordingToggled"}(i||(i={}));var a=Object.freeze({__proto__:null,get Events(){return n},EventDescriptors:s,get EnumeratedHistogram(){return i}});const d={systemError:"System error",connectionError:"Connection error",certificateError:"Certificate error",httpError:"HTTP error",cacheError:"Cache error",signedExchangeError:"Signed Exchange error",ftpError:"FTP error",certificateManagerError:"Certificate manager error",dnsResolverError:"DNS resolver error",unknownError:"Unknown error",httpErrorStatusCodeSS:"HTTP error: status code {PH1}, {PH2}",invalidUrl:"Invalid URL",decodingDataUrlFailed:"Decoding Data URL failed"},c=t.i18n.registerUIStrings("core/host/ResourceLoader.ts",d),l=t.i18n.getLocalizedString.bind(void 0,c);let u=0;const m={},g=function(e,t){m[e].write(t)};let S=function(t,o,r){const n=new e.StringOutputStream.StringOutputStream;h(t,o,n,(function(e,t,o){r(e,t,n.data(),o)}))};function p(e,t,o){if(void 0===e||void 0===o)return null;if(0!==e){if(function(e){return e<=-300&&e>-400}(e))return l(d.httpErrorStatusCodeSS,{PH1:String(t),PH2:o});const r=function(e){return l(e>-100?d.systemError:e>-200?d.connectionError:e>-300?d.certificateError:e>-400?d.httpError:e>-500?d.cacheError:e>-600?d.signedExchangeError:e>-700?d.ftpError:e>-800?d.certificateManagerError:e>-900?d.dnsResolverError:d.unknownError)}(e);return`${r}: ${o}`}return null}const h=function(t,o,r,n){const s=function(e){return m[++u]=e,u}(r);if(new e.ParsedURL.ParsedURL(t).isDataURL())return void(e=>new Promise(((t,o)=>{const r=new XMLHttpRequest;r.withCredentials=!1,r.open("GET",e,!0),r.onreadystatechange=function(){if(r.readyState===XMLHttpRequest.DONE){if(200!==r.status)return r.onreadystatechange=null,void o(new Error(String(r.status)));r.onreadystatechange=null,t(r.responseText)}},r.send(null)})))(t).then((function(e){g(s,e),a({statusCode:200})})).catch((function(e){a({statusCode:404,messageOverride:l(d.decodingDataUrlFailed)})}));const i=[];if(o)for(const e in o)i.push(e+": "+o[e]);function a(e){if(n){const{success:t,description:o}=function(e){const{statusCode:t,netError:o,netErrorName:r,urlValid:n,messageOverride:s}=e;let i="";const a=t>=200&&t<300;if("string"==typeof s)i=s;else if(!a)if(void 0===o)i=l(!1===n?d.invalidUrl:d.unknownError);else{const e=p(o,t,r);e&&(i=e)}return console.assert(a===(0===i.length)),{success:a,description:{statusCode:t,netError:o,netErrorName:r,urlValid:n,message:i}}}(e);n(t,e.headers||{},o)}var t;m[t=s].close(),delete m[t]}P.loadNetworkResource(t,i.join("\r\n"),s,a)};var v=Object.freeze({__proto__:null,ResourceLoader:{},streamWrite:g,get load(){return S},setLoadForTest:function(e){S=e},netErrorToMessage:p,loadAsStream:h});const C={devtoolsS:"DevTools - {PH1}"},y=t.i18n.registerUIStrings("core/host/InspectorFrontendHost.ts",C),f=t.i18n.getLocalizedString.bind(void 0,y);class k{#e;events;#t;recordedEnumeratedHistograms=[];recordedPerformanceHistograms=[];constructor(){function e(e){!("mac"===this.platform()?e.metaKey:e.ctrlKey)||"+"!==e.key&&"-"!==e.key||e.stopPropagation()}document.addEventListener("keydown",(t=>{e.call(this,t)}),!0),this.#e=new Map}platform(){const e=navigator.userAgent;return e.includes("Windows NT")?"windows":e.includes("Mac OS X")?"mac":"linux"}loadCompleted(){}bringToFront(){this.#t=!0}closeWindow(){this.#t=!1}setIsDocked(e,t){setTimeout(t,0)}showSurvey(e,t){setTimeout((()=>t({surveyShown:!1})),0)}canShowSurvey(e,t){setTimeout((()=>t({canShowSurvey:!1})),0)}setInspectedPageBounds(e){}inspectElementCompleted(){}setInjectedScriptForOrigin(e,t){}inspectedURLChanged(e){document.title=f(C.devtoolsS,{PH1:e.replace(/^https?:\/\//,"")})}copyText(e){null!=e&&navigator.clipboard.writeText(e)}openInNewTab(e){window.open(e,"_blank")}showItemInFolder(t){e.Console.Console.instance().error("Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect")}save(e,t,o){let r=this.#e.get(e);r||(r=[],this.#e.set(e,r)),r.push(t),this.events.dispatchEventToListeners(n.SavedURL,{url:e,fileSystemPath:e})}append(e,t){const o=this.#e.get(e);o&&(o.push(t),this.events.dispatchEventToListeners(n.AppendedToURL,e))}close(e){const t=this.#e.get(e)||[];this.#e.delete(e);let r="";if(e)try{const t=o.StringUtilities.trimURL(e);r=o.StringUtilities.removeURLFragment(t)}catch(t){r=e}const n=document.createElement("a");n.download=r;const s=new Blob([t.join("")],{type:"text/plain"}),i=URL.createObjectURL(s);n.href=i,n.click(),URL.revokeObjectURL(i)}sendMessageToBackend(e){}recordEnumeratedHistogram(e,t,o){this.recordedEnumeratedHistograms.length>=100&&this.recordedEnumeratedHistograms.shift(),this.recordedEnumeratedHistograms.push({actionName:e,actionCode:t})}recordPerformanceHistogram(e,t){this.recordedPerformanceHistograms.length>=100&&this.recordedPerformanceHistograms.shift(),this.recordedPerformanceHistograms.push({histogramName:e,duration:t})}recordUserMetricsAction(e){}requestFileSystems(){this.events.dispatchEventToListeners(n.FileSystemsLoaded,[])}addFileSystem(e){}removeFileSystem(e){}isolatedFileSystem(e,t){return null}loadNetworkResource(e,t,o,n){r.Runtime.loadResourcePromise(e).then((function(e){g(o,e),n({statusCode:200,headers:void 0,messageOverride:void 0,netError:void 0,netErrorName:void 0,urlValid:void 0})})).catch((function(){n({statusCode:404,headers:void 0,messageOverride:void 0,netError:void 0,netErrorName:void 0,urlValid:void 0})}))}registerPreference(e,t){}getPreferences(e){const t={};for(const e in window.localStorage)t[e]=window.localStorage[e];e(t)}setPreference(e,t){window.localStorage[e]=t}removePreference(e){delete window.localStorage[e]}clearPreferences(){window.localStorage.clear()}getSyncInformation(e){e({isSyncActive:!1,arePreferencesSynced:!1})}upgradeDraggedFileSystemPermissions(e){}indexPath(e,t,o){}stopIndexing(e){}searchInPath(e,t,o){}zoomFactor(){return 1}zoomIn(){}zoomOut(){}resetZoom(){}setWhitelistedShortcuts(e){}setEyeDropperActive(e){}showCertificateViewer(e){}reattach(e){}readyForTest(){}connectionReady(){}setOpenNewWindowForPopups(e){}setDevicesDiscoveryConfig(e){}setDevicesUpdatesEnabled(e){}performActionOnRemotePage(e,t){}openRemotePage(e,t){}openNodeFrontend(){}showContextMenuAtPoint(e,t,o,r){throw"Soft context menu should be used"}isHostedMode(){return!0}setAddExtensionCallback(e){}async initialTargetId(){return null}}let P=window.InspectorFrontendHost;class E{constructor(){for(const e of s)this[e[1]]=this.dispatch.bind(this,e[0],e[2],e[3])}dispatch(e,t,o,...r){if(t.length<2){try{P.events.dispatchEventToListeners(e,r[0])}catch(e){console.error(e+" "+e.stack)}return}const n={};for(let e=0;e{setTimeout((()=>{performance.mark(t),this.#o||P.recordPerformanceHistogram(t,performance.now())}),0)})))}setLaunchPanel(e){this.#n=e}keybindSetSettingChanged(e){const t=Object.keys(H).length+1,o=H[e]||0;P.recordEnumeratedHistogram(i.KeybindSetSettingChanged,o,t)}keyboardShortcutFired(e){const t=Object.keys(U).length+1,o=U[e]||U.OtherShortcut;P.recordEnumeratedHistogram(i.KeyboardShortcutFired,o,t)}issuesPanelOpenedFrom(e){const t=Object.keys(N).length+1;P.recordEnumeratedHistogram(i.IssuesPanelOpenedFrom,e,t)}issuesPanelIssueExpanded(e){if(void 0===e)return;const t=Object.keys(V).length+1,o=V[e];void 0!==o&&P.recordEnumeratedHistogram(i.IssuesPanelIssueExpanded,o,t)}issuesPanelResourceOpened(e,t){const o=Object.keys(B).length+1,r=B[e+t];void 0!==r&&P.recordEnumeratedHistogram(i.IssuesPanelResourceOpened,r,o)}issueCreated(e){const t=Object.keys(_).length+1,o=_[e];void 0!==o&&P.recordEnumeratedHistogram(i.IssueCreated,o,t)}dualScreenDeviceEmulated(e){const t=Object.keys(W).length+1;P.recordEnumeratedHistogram(i.DualScreenDeviceEmulated,e,t)}experimentEnabledAtLaunch(e){const t=j.__lastValidEnumPosition+1,o=j[e];void 0!==o&&P.recordEnumeratedHistogram(i.ExperimentEnabledAtLaunch,o,t)}experimentChanged(e,t){const o=j.__lastValidEnumPosition+1,r=j[e];if(void 0===r)return;const n=t?i.ExperimentEnabled:i.ExperimentDisabled;P.recordEnumeratedHistogram(n,r,o)}developerResourceLoaded(e){const t=Object.keys(z).length+1;e>=t||P.recordEnumeratedHistogram(i.DeveloperResourceLoaded,e,t)}developerResourceScheme(e){const t=Object.keys(q).length+1;e>=t||P.recordEnumeratedHistogram(i.DeveloperResourceScheme,e,t)}linearMemoryInspectorRevealedFrom(e){const t=Object.keys(K).length+1;e>=t||P.recordEnumeratedHistogram(i.LinearMemoryInspectorRevealedFrom,e,t)}linearMemoryInspectorTarget(e){const t=Object.keys(G).length+1;e>=t||P.recordEnumeratedHistogram(i.LinearMemoryInspectorTarget,e,t)}language(e){const t=Object.keys(J).length+1,o=J[e];void 0!==o&&P.recordEnumeratedHistogram(i.Language,o,t)}showCorsErrorsSettingChanged(e){P.recordEnumeratedHistogram(i.ConsoleShowsCorsErrors,Number(e),2)}syncSetting(e){const t=Object.keys(Q).length+1;P.getSyncInformation((o=>{let r=Q.ChromeSyncDisabled;o.isSyncActive&&!o.arePreferencesSynced?r=Q.ChromeSyncSettingsDisabled:o.isSyncActive&&o.arePreferencesSynced&&(r=e?Q.DevToolsSyncSettingEnabled:Q.DevToolsSyncSettingDisabled),P.recordEnumeratedHistogram(i.SyncSetting,r,t)}))}recordingToggled(e){const t=Object.keys(X).length+1;P.recordEnumeratedHistogram(i.RecordingToggled,e,t)}recordingReplayFinished(e){const t=Object.keys($).length+1;P.recordEnumeratedHistogram(i.RecordingReplayFinished,e,t)}recordingReplayStarted(e){const t=Object.keys(Z).length+1;P.recordEnumeratedHistogram(i.RecordingReplayStarted,e,t)}recordingEdited(e){const t=Object.keys(Y).length+1;P.recordEnumeratedHistogram(i.RecordingEdited,e,t)}recordingExported(e){const t=Object.keys(ee).length+1;P.recordEnumeratedHistogram(i.RecordingExported,e,t)}}!function(e){e[e.WindowDocked=1]="WindowDocked",e[e.WindowUndocked=2]="WindowUndocked",e[e.ScriptsBreakpointSet=3]="ScriptsBreakpointSet",e[e.TimelineStarted=4]="TimelineStarted",e[e.ProfilesCPUProfileTaken=5]="ProfilesCPUProfileTaken",e[e.ProfilesHeapProfileTaken=6]="ProfilesHeapProfileTaken",e[e["LegacyAuditsStarted-deprecated"]=7]="LegacyAuditsStarted-deprecated",e[e.ConsoleEvaluated=8]="ConsoleEvaluated",e[e.FileSavedInWorkspace=9]="FileSavedInWorkspace",e[e.DeviceModeEnabled=10]="DeviceModeEnabled",e[e.AnimationsPlaybackRateChanged=11]="AnimationsPlaybackRateChanged",e[e.RevisionApplied=12]="RevisionApplied",e[e.FileSystemDirectoryContentReceived=13]="FileSystemDirectoryContentReceived",e[e.StyleRuleEdited=14]="StyleRuleEdited",e[e.CommandEvaluatedInConsolePanel=15]="CommandEvaluatedInConsolePanel",e[e.DOMPropertiesExpanded=16]="DOMPropertiesExpanded",e[e.ResizedViewInResponsiveMode=17]="ResizedViewInResponsiveMode",e[e.TimelinePageReloadStarted=18]="TimelinePageReloadStarted",e[e.ConnectToNodeJSFromFrontend=19]="ConnectToNodeJSFromFrontend",e[e.ConnectToNodeJSDirectly=20]="ConnectToNodeJSDirectly",e[e.CpuThrottlingEnabled=21]="CpuThrottlingEnabled",e[e.CpuProfileNodeFocused=22]="CpuProfileNodeFocused",e[e.CpuProfileNodeExcluded=23]="CpuProfileNodeExcluded",e[e.SelectFileFromFilePicker=24]="SelectFileFromFilePicker",e[e.SelectCommandFromCommandMenu=25]="SelectCommandFromCommandMenu",e[e.ChangeInspectedNodeInElementsPanel=26]="ChangeInspectedNodeInElementsPanel",e[e.StyleRuleCopied=27]="StyleRuleCopied",e[e.CoverageStarted=28]="CoverageStarted",e[e.LighthouseStarted=29]="LighthouseStarted",e[e.LighthouseFinished=30]="LighthouseFinished",e[e.ShowedThirdPartyBadges=31]="ShowedThirdPartyBadges",e[e.LighthouseViewTrace=32]="LighthouseViewTrace",e[e.FilmStripStartedRecording=33]="FilmStripStartedRecording",e[e.CoverageReportFiltered=34]="CoverageReportFiltered",e[e.CoverageStartedPerBlock=35]="CoverageStartedPerBlock",e[e["SettingsOpenedFromGear-deprecated"]=36]="SettingsOpenedFromGear-deprecated",e[e["SettingsOpenedFromMenu-deprecated"]=37]="SettingsOpenedFromMenu-deprecated",e[e["SettingsOpenedFromCommandMenu-deprecated"]=38]="SettingsOpenedFromCommandMenu-deprecated",e[e.TabMovedToDrawer=39]="TabMovedToDrawer",e[e.TabMovedToMainPanel=40]="TabMovedToMainPanel",e[e.CaptureCssOverviewClicked=41]="CaptureCssOverviewClicked",e[e.VirtualAuthenticatorEnvironmentEnabled=42]="VirtualAuthenticatorEnvironmentEnabled",e[e.SourceOrderViewActivated=43]="SourceOrderViewActivated",e[e.UserShortcutAdded=44]="UserShortcutAdded",e[e.ShortcutRemoved=45]="ShortcutRemoved",e[e.ShortcutModified=46]="ShortcutModified",e[e.CustomPropertyLinkClicked=47]="CustomPropertyLinkClicked",e[e.CustomPropertyEdited=48]="CustomPropertyEdited",e[e.ServiceWorkerNetworkRequestClicked=49]="ServiceWorkerNetworkRequestClicked",e[e.ServiceWorkerNetworkRequestClosedQuickly=50]="ServiceWorkerNetworkRequestClosedQuickly",e[e.NetworkPanelServiceWorkerRespondWith=51]="NetworkPanelServiceWorkerRespondWith",e[e.NetworkPanelCopyValue=52]="NetworkPanelCopyValue",e[e.ConsoleSidebarOpened=53]="ConsoleSidebarOpened",e[e.PerfPanelTraceImported=54]="PerfPanelTraceImported",e[e.PerfPanelTraceExported=55]="PerfPanelTraceExported"}(F||(F={}));const x={elements:1,resources:2,network:3,sources:4,timeline:5,heap_profiler:6,"legacy-audits-deprecated":7,console:8,layers:9,"console-view":10,animations:11,"network.config":12,rendering:13,sensors:14,"sources.search":15,security:16,js_profiler:17,lighthouse:18,coverage:19,"protocol-monitor":20,"remote-devices":21,"web-audio":22,"changes.changes":23,"performance.monitor":24,"release-note":25,live_heap_profile:26,"sources.quick":27,"network.blocked-urls":28,"settings-preferences":29,"settings-workspace":30,"settings-experiments":31,"settings-blackbox":32,"settings-devices":33,"settings-throttling-conditions":34,"settings-emulation-locations":35,"settings-shortcuts":36,"issues-pane":37,"settings-keybinds":38,cssoverview:39,chrome_recorder:40},A={OtherSidebarPane:0,Styles:1,Computed:2,"elements.layout":3,"elements.eventListeners":4,"elements.domBreakpoints":5,"elements.domProperties":6,"accessibility.view":7},H={devToolsDefault:0,vsCode:1},U={OtherShortcut:0,"commandMenu.show":1,"console.clear":2,"console.show":3,"debugger.step":4,"debugger.step-into":5,"debugger.step-out":6,"debugger.step-over":7,"debugger.toggle-breakpoint":8,"debugger.toggle-breakpoint-enabled":9,"debugger.toggle-pause":10,"elements.edit-as-html":11,"elements.hide-element":12,"elements.redo":13,"elements.toggle-element-search":14,"elements.undo":15,"main.search-in-panel.find":16,"main.toggle-drawer":17,"network.hide-request-details":18,"network.search":19,"network.toggle-recording":20,"quickOpen.show":21,"settings.show":22,"sources.search":23,"background-service.toggle-recording":24,"components.collect-garbage":25,"console.clear.history":26,"console.create-pin":27,"coverage.start-with-reload":28,"coverage.toggle-recording":29,"debugger.breakpoint-input-window":30,"debugger.evaluate-selection":31,"debugger.next-call-frame":32,"debugger.previous-call-frame":33,"debugger.run-snippet":34,"debugger.toggle-breakpoints-active":35,"elements.capture-area-screenshot":36,"emulation.capture-full-height-screenshot":37,"emulation.capture-node-screenshot":38,"emulation.capture-screenshot":39,"emulation.show-sensors":40,"emulation.toggle-device-mode":41,"help.release-notes":42,"help.report-issue":43,"input.start-replaying":44,"input.toggle-pause":45,"input.toggle-recording":46,"inspector_main.focus-debuggee":47,"inspector_main.hard-reload":48,"inspector_main.reload":49,"live-heap-profile.start-with-reload":50,"live-heap-profile.toggle-recording":51,"main.debug-reload":52,"main.next-tab":53,"main.previous-tab":54,"main.search-in-panel.cancel":55,"main.search-in-panel.find-next":56,"main.search-in-panel.find-previous":57,"main.toggle-dock":58,"main.zoom-in":59,"main.zoom-out":60,"main.zoom-reset":61,"network-conditions.network-low-end-mobile":62,"network-conditions.network-mid-tier-mobile":63,"network-conditions.network-offline":64,"network-conditions.network-online":65,"profiler.heap-toggle-recording":66,"profiler.js-toggle-recording":67,"resources.clear":68,"settings.documentation":69,"settings.shortcuts":70,"sources.add-folder-to-workspace":71,"sources.add-to-watch":72,"sources.close-all":73,"sources.close-editor-tab":74,"sources.create-snippet":75,"sources.go-to-line":76,"sources.go-to-member":77,"sources.jump-to-next-location":78,"sources.jump-to-previous-location":79,"sources.rename":80,"sources.save":81,"sources.save-all":82,"sources.switch-file":83,"timeline.jump-to-next-frame":84,"timeline.jump-to-previous-frame":85,"timeline.load-from-file":86,"timeline.next-recording":87,"timeline.previous-recording":88,"timeline.record-reload":89,"timeline.save-to-file":90,"timeline.show-history":91,"timeline.toggle-recording":92,"sources.increment-css":93,"sources.increment-css-by-ten":94,"sources.decrement-css":95,"sources.decrement-css-by-ten":96,"layers.reset-view":97,"layers.pan-mode":98,"layers.rotate-mode":99,"layers.zoom-in":100,"layers.zoom-out":101,"layers.up":102,"layers.down":103,"layers.left":104,"layers.right":105,"help.report-translation-issue":106};var N,W;!function(e){e[e.ConsoleInfoBar=0]="ConsoleInfoBar",e[e.LearnMoreLinkCOEP=1]="LearnMoreLinkCOEP",e[e.StatusBarIssuesCounter=2]="StatusBarIssuesCounter",e[e.HamburgerMenu=3]="HamburgerMenu",e[e.Adorner=4]="Adorner",e[e.CommandMenu=5]="CommandMenu"}(N||(N={})),function(e){e[e.DualScreenDeviceSelected=0]="DualScreenDeviceSelected",e[e.SpanButtonClicked=1]="SpanButtonClicked",e[e.PlatformSupportUsed=2]="PlatformSupportUsed"}(W||(W={}));const j={applyCustomStylesheet:0,captureNodeCreationStacks:1,sourcesPrettyPrint:2,backgroundServices:3,backgroundServicesNotifications:4,backgroundServicesPaymentHandler:5,backgroundServicesPushMessaging:6,inputEventsOnTimelineOverview:10,liveHeapProfile:11,protocolMonitor:13,developerResourcesView:15,recordCoverageWithPerformanceTracing:16,samplingHeapProfilerTimeline:17,showOptionToNotTreatGlobalObjectsAsRoots:18,sourceOrderViewer:20,webauthnPane:22,timelineEventInitiators:24,timelineInvalidationTracking:26,timelineShowAllEvents:27,timelineV8RuntimeCallStats:28,timelineWebGL:29,timelineReplayEvent:30,wasmDWARFDebugging:31,dualScreenSupport:32,keyboardShortcutEditor:35,APCA:39,cspViolationsView:40,fontEditor:41,fullAccessibilityTree:42,ignoreListJSFramesOnTimeline:43,contrastIssues:44,experimentalCookieFeatures:45,hideIssuesFeature:48,reportingApiDebugging:49,syncSettings:50,groupAndHideIssuesByKind:51,cssTypeComponentLength:52,preciseChanges:53,__lastValidEnumPosition:53},V={CrossOriginEmbedderPolicy:0,MixedContent:1,SameSiteCookie:2,HeavyAd:3,ContentSecurityPolicy:4,Other:5},B={CrossOriginEmbedderPolicyRequest:0,CrossOriginEmbedderPolicyElement:1,MixedContentRequest:2,SameSiteCookieCookie:3,SameSiteCookieRequest:4,HeavyAdElement:5,ContentSecurityPolicyDirective:6,ContentSecurityPolicyElement:7,CrossOriginEmbedderPolicyLearnMore:8,MixedContentLearnMore:9,SameSiteCookieLearnMore:10,HeavyAdLearnMore:11,ContentSecurityPolicyLearnMore:12},_={MixedContentIssue:0,"ContentSecurityPolicyIssue::kInlineViolation":1,"ContentSecurityPolicyIssue::kEvalViolation":2,"ContentSecurityPolicyIssue::kURLViolation":3,"ContentSecurityPolicyIssue::kTrustedTypesSinkViolation":4,"ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation":5,"HeavyAdIssue::NetworkTotalLimit":6,"HeavyAdIssue::CpuTotalLimit":7,"HeavyAdIssue::CpuPeakLimit":8,"CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader":9,"CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage":10,"CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin":11,"CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep":12,"CrossOriginEmbedderPolicyIssue::CorpNotSameSite":13,"SameSiteCookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie":14,"SameSiteCookieIssue::ExcludeSameSiteNoneInsecure::SetCookie":15,"SameSiteCookieIssue::WarnSameSiteNoneInsecure::ReadCookie":16,"SameSiteCookieIssue::WarnSameSiteNoneInsecure::SetCookie":17,"SameSiteCookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure":18,"SameSiteCookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure":19,"SameSiteCookieIssue::WarnCrossDowngrade::ReadCookie::Secure":20,"SameSiteCookieIssue::WarnCrossDowngrade::ReadCookie::Insecure":21,"SameSiteCookieIssue::WarnCrossDowngrade::SetCookie::Secure":22,"SameSiteCookieIssue::WarnCrossDowngrade::SetCookie::Insecure":23,"SameSiteCookieIssue::ExcludeNavigationContextDowngrade::Secure":24,"SameSiteCookieIssue::ExcludeNavigationContextDowngrade::Insecure":25,"SameSiteCookieIssue::ExcludeContextDowngrade::ReadCookie::Secure":26,"SameSiteCookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure":27,"SameSiteCookieIssue::ExcludeContextDowngrade::SetCookie::Secure":28,"SameSiteCookieIssue::ExcludeContextDowngrade::SetCookie::Insecure":29,"SameSiteCookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie":30,"SameSiteCookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie":31,"SameSiteCookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie":32,"SameSiteCookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie":33,"SameSiteCookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie":34,"SameSiteCookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie":35,"SharedArrayBufferIssue::TransferIssue":36,"SharedArrayBufferIssue::CreationIssue":37,"TrustedWebActivityIssue::kHttpError":38,"TrustedWebActivityIssue::kUnavailableOffline":39,"TrustedWebActivityIssue::kDigitalAssetLinks":40,LowTextContrastIssue:41,"CorsIssue::InsecurePrivateNetwork":42,"CorsIssue::InsecurePrivateNetworkPreflight":43,"CorsIssue::InvalidHeaders":44,"CorsIssue::WildcardOriginWithCredentials":45,"CorsIssue::PreflightResponseInvalid":46,"CorsIssue::OriginMismatch":47,"CorsIssue::AllowCredentialsRequired":48,"CorsIssue::MethodDisallowedByPreflightResponse":49,"CorsIssue::HeaderDisallowedByPreflightResponse":50,"CorsIssue::RedirectContainsCredentials":51,"CorsIssue::DisallowedByMode":52,"CorsIssue::CorsDisabledScheme":53,"CorsIssue::PreflightMissingAllowExternal":54,"CorsIssue::PreflightInvalidAllowExternal":55,"CorsIssue::InvalidResponse":56,"CorsIssue::NoCorsRedirectModeNotFollow":57,"QuirksModeIssue::QuirksMode":58,"QuirksModeIssue::LimitedQuirksMode":59,DeprecationIssue:60};var z,q,K,G;!function(e){e[e.LoadThroughPageViaTarget=0]="LoadThroughPageViaTarget",e[e.LoadThroughPageViaFrame=1]="LoadThroughPageViaFrame",e[e.LoadThroughPageFailure=2]="LoadThroughPageFailure",e[e.LoadThroughPageFallback=3]="LoadThroughPageFallback",e[e.FallbackAfterFailure=4]="FallbackAfterFailure",e[e.FallbackPerOverride=5]="FallbackPerOverride",e[e.FallbackPerProtocol=6]="FallbackPerProtocol",e[e.FallbackFailure=7]="FallbackFailure"}(z||(z={})),function(e){e[e.SchemeOther=0]="SchemeOther",e[e.SchemeUnknown=1]="SchemeUnknown",e[e.SchemeHttp=2]="SchemeHttp",e[e.SchemeHttps=3]="SchemeHttps",e[e.SchemeHttpLocalhost=4]="SchemeHttpLocalhost",e[e.SchemeHttpsLocalhost=5]="SchemeHttpsLocalhost",e[e.SchemeData=6]="SchemeData",e[e.SchemeFile=7]="SchemeFile",e[e.SchemeBlob=8]="SchemeBlob"}(q||(q={})),function(e){e[e.ContextMenu=0]="ContextMenu",e[e.MemoryIcon=1]="MemoryIcon"}(K||(K={})),function(e){e[e.DWARFInspectableAddress=0]="DWARFInspectableAddress",e[e.ArrayBuffer=1]="ArrayBuffer",e[e.DataView=2]="DataView",e[e.TypedArray=3]="TypedArray",e[e.WebAssemblyMemory=4]="WebAssemblyMemory"}(G||(G={}));const J={af:1,am:2,ar:3,as:4,az:5,be:6,bg:7,bn:8,bs:9,ca:10,cs:11,cy:12,da:13,de:14,el:15,"en-GB":16,"en-US":17,"es-419":18,es:19,et:20,eu:21,fa:22,fi:23,fil:24,"fr-CA":25,fr:26,gl:27,gu:28,he:29,hi:30,hr:31,hu:32,hy:33,id:34,is:35,it:36,ja:37,ka:38,kk:39,km:40,kn:41,ko:42,ky:43,lo:44,lt:45,lv:46,mk:47,ml:48,mn:49,mr:50,ms:51,my:52,ne:53,nl:54,no:55,or:56,pa:57,pl:58,"pt-PT":59,pt:60,ro:61,ru:62,si:63,sk:64,sl:65,sq:66,"sr-Latn":67,sr:68,sv:69,sw:70,ta:71,te:72,th:73,tr:74,uk:75,ur:76,uz:77,vi:78,zh:79,"zh-HK":80,"zh-TW":81,zu:82};var Q,X,$,Z,Y,ee;!function(e){e[e.ChromeSyncDisabled=1]="ChromeSyncDisabled",e[e.ChromeSyncSettingsDisabled=2]="ChromeSyncSettingsDisabled",e[e.DevToolsSyncSettingDisabled=3]="DevToolsSyncSettingDisabled",e[e.DevToolsSyncSettingEnabled=4]="DevToolsSyncSettingEnabled"}(Q||(Q={})),function(e){e[e.RecordingStarted=1]="RecordingStarted",e[e.RecordingFinished=2]="RecordingFinished"}(X||(X={})),function(e){e[e.Success=1]="Success",e[e.TimeoutErrorSelectors=2]="TimeoutErrorSelectors",e[e.TimeoutErrorTarget=3]="TimeoutErrorTarget",e[e.OtherError=4]="OtherError"}($||($={})),function(e){e[e.ReplayOnly=1]="ReplayOnly",e[e.ReplayWithPerformanceTracing=2]="ReplayWithPerformanceTracing"}(Z||(Z={})),function(e){e[e.SelectorPickerUsed=1]="SelectorPickerUsed",e[e.StepAdded=2]="StepAdded",e[e.StepRemoved=3]="StepRemoved",e[e.SelectorAdded=4]="SelectorAdded",e[e.SelectorRemoved=5]="SelectorRemoved",e[e.SelectorPartAdded=6]="SelectorPartAdded",e[e.SelectorPartEdited=7]="SelectorPartEdited",e[e.SelectorPartRemoved=8]="SelectorPartRemoved",e[e.TypeChanged=9]="TypeChanged",e[e.OtherEditing=10]="OtherEditing"}(Y||(Y={})),function(e){e[e.ToPuppeteer=1]="ToPuppeteer",e[e.ToJSON=2]="ToJSON"}(ee||(ee={}));var te=Object.freeze({__proto__:null,UserMetrics:M,get Action(){return F},ContrastThresholds:{aa:0,aaa:1},PanelCodes:x,SidebarPaneCodes:A,KeybindSetSettings:H,KeyboardShortcutAction:U,get IssueOpener(){return N},get DualScreenDeviceEmulated(){return W},DevtoolsExperiments:j,IssueExpanded:V,IssueResourceOpened:B,IssueCreated:_,get DeveloperResourceLoaded(){return z},get DeveloperResourceScheme(){return q},get LinearMemoryInspectorRevealedFrom(){return K},get LinearMemoryInspectorTarget(){return G},Language:J,get SyncSetting(){return Q},get RecordingToggled(){return X},get RecordingReplayFinished(){return $},get RecordingReplayStarted(){return Z},get RecordingEdited(){return Y},get RecordingExported(){return ee}});const oe=new M;export{b as InspectorFrontendHost,a as InspectorFrontendHostAPI,O as Platform,v as ResourceLoader,te as UserMetrics,oe as userMetrics}; diff --git a/chii/core/i18n/i18n.js b/chii/core/i18n/i18n.js new file mode 100644 index 00000000..72024f1a --- /dev/null +++ b/chii/core/i18n/i18n.js @@ -0,0 +1,181 @@ +import * as e from "../../third_party/i18n/i18n.js"; +import * as t from "../platform/platform.js"; +import * as o from "../root/root.js"; +let n = null; +class r { + locale; + lookupClosestDevToolsLocale; + constructor(e) { + this.lookupClosestDevToolsLocale = e.lookupClosestDevToolsLocale, "browserLanguage" === e.settingLanguage ? this.locale = e.navigatorLanguage || "en-US" : this.locale = e.settingLanguage, this.locale = this.lookupClosestDevToolsLocale(this.locale) + } + static instance(e = { + create: !1 + }) { + if (!n && !e.create) throw new Error("No LanguageSelector instance exists yet."); + return e.create && (n = new r(e.data)), n + } + forceFallbackLocale() { + this.locale = "en-US" + } + languageIsSupportedByDevTools(e) { + return i(e, this.lookupClosestDevToolsLocale(e)) + } +} + +function i(e, t) { + const o = new Intl.Locale(e), + n = new Intl.Locale(t); + return o.language === n.language +} +var s = Object.freeze({ + __proto__: null, + DevToolsLocale: r, + localeLanguagesMatch: i +}); +const a = new e.I18n.I18n, + l = new Set(["en-US", "en-XL", "zh"]); + +function c(e, t, o = {}) { + return e.getLocalizedStringSetFor(r.instance().locale).getLocalizedString(t, o) +} + +function u(e, t) { + return a.registerFileStrings(e, t) +} + +function g(e, o) { + const n = { + s: e => e + }; + return t.StringUtilities.format(e, o, n, document.createElement("span"), (function (e, t) { + return t && e.appendChild("string" == typeof t ? document.createTextNode(t) : t), e + })).formattedResult +} +var f = Object.freeze({ + __proto__: null, + lookupClosestSupportedDevToolsLocale: function (e) { + return a.lookupClosestSupportedLocale(e) + }, + getAllSupportedDevToolsLocales: function () { + return [...a.supportedLocales] + }, + fetchAndRegisterLocaleData: async function (e) { + const tx = o.Runtime.getRemoteBase(); + const t = tx && tx.base && !l.has(e) ? o.Runtime.loadResourcePromise(`${t.base}core/i18n/locales/${e}.json`) : ( + import(`../../core/i18n/locales/${e}.json?raw`).then(m=>m.default) + ) + const n = new Promise(((e, t) => setTimeout((() => t(new Error("timed out fetching locale"))), 5e3))), + r = await Promise.race([n, t]), + i = JSON.parse(r); + a.registerLocaleData(e, i) + }, + getLazilyComputedLocalizedString: function (e, t, o = {}) { + return () => c(e, t, o) + }, + getLocalizedString: c, + registerUIStrings: u, + getFormatLocalizedString: function (e, t, o) { + const n = e.getLocalizedStringSetFor(r.instance().locale).getMessageFormatterFor(t).getAst(), + i = []; + let s = ""; + for (const e of n) { + if (1 === e.type) { + const t = o[e.value]; + t && (i.push(t), e.value = "%s") + } + "value" in e && (s += e.value) + } + return g(s, i) + }, + formatLocalized: g, + serializeUIString: function (e, t = {}) { + const o = { + string: e, + values: t + }; + return JSON.stringify(o) + }, + deserializeUIString: function (e) { + return e ? JSON.parse(e) : { + string: "", + values: {} + } + }, + lockedString: function (e) { + return e + }, + lockedLazyString: function (e) { + return () => e + }, + getLocalizedLanguageRegion: function (e, t) { + const o = new Intl.Locale(e), + n = o.language || "en", + r = o.baseName || "en-US", + i = n === new Intl.Locale(t.locale).language ? "en" : r, + s = new Intl.DisplayNames([t.locale], { + type: "language" + }).of(n), + a = new Intl.DisplayNames([i], { + type: "language" + }).of(n); + let l = "", + c = ""; + if (o.region) { + l = ` (${new Intl.DisplayNames([t.locale],{type:"region",style:"short"}).of(o.region)})`, c = ` (${new Intl.DisplayNames([i],{type:"region",style:"short"}).of(o.region)})` + } + return `${s}${l} - ${a}${c}` + } +}); +const m = { + fmms: "{PH1} μs", + fms: "{PH1} ms", + fs: "{PH1} s", + fmin: "{PH1} min", + fhrs: "{PH1} hrs", + fdays: "{PH1} days" + }, + p = u("core/i18n/time-utilities.ts", m), + d = c.bind(void 0, p), + L = function (e, t) { + if (!isFinite(e)) return "-"; + if (0 === e) return "0"; + if (t && e < .1) return d(m.fmms, { + PH1: (1e3 * e).toFixed(0) + }); + if (t && e < 1e3) return d(m.fms, { + PH1: e.toFixed(2) + }); + if (e < 1e3) return d(m.fms, { + PH1: e.toFixed(0) + }); + const o = e / 1e3; + if (o < 60) return d(m.fs, { + PH1: o.toFixed(2) + }); + const n = o / 60; + if (n < 60) return d(m.fmin, { + PH1: n.toFixed(1) + }); + const r = n / 60; + if (r < 24) return d(m.fhrs, { + PH1: r.toFixed(1) + }); + return d(m.fdays, { + PH1: (r / 24).toFixed(1) + }) + }; +var S = Object.freeze({ + __proto__: null, + preciseMillisToString: function (e, t) { + return t = t || 0, d(m.fms, { + PH1: e.toFixed(t) + }) + }, + millisToString: L, + secondsToString: function (e, t) { + return isFinite(e) ? L(1e3 * e, t) : "-" + } +}); +export { + s as DevToolsLocale, S as TimeUtilities, f as i18n +}; \ No newline at end of file diff --git a/chii/core/i18n/locales/en-US.json b/chii/core/i18n/locales/en-US.json new file mode 100644 index 00000000..f0782e29 --- /dev/null +++ b/chii/core/i18n/locales/en-US.json @@ -0,0 +1,12251 @@ +{ + "core/common/ResourceType.ts | cspviolationreport": { + "message": "CSPViolationReport" + }, + "core/common/ResourceType.ts | css": { + "message": "CSS" + }, + "core/common/ResourceType.ts | doc": { + "message": "Doc" + }, + "core/common/ResourceType.ts | document": { + "message": "Document" + }, + "core/common/ResourceType.ts | documents": { + "message": "Documents" + }, + "core/common/ResourceType.ts | eventsource": { + "message": "EventSource" + }, + "core/common/ResourceType.ts | fetch": { + "message": "Fetch" + }, + "core/common/ResourceType.ts | font": { + "message": "Font" + }, + "core/common/ResourceType.ts | fonts": { + "message": "Fonts" + }, + "core/common/ResourceType.ts | image": { + "message": "Image" + }, + "core/common/ResourceType.ts | images": { + "message": "Images" + }, + "core/common/ResourceType.ts | img": { + "message": "Img" + }, + "core/common/ResourceType.ts | js": { + "message": "JS" + }, + "core/common/ResourceType.ts | manifest": { + "message": "Manifest" + }, + "core/common/ResourceType.ts | media": { + "message": "Media" + }, + "core/common/ResourceType.ts | other": { + "message": "Other" + }, + "core/common/ResourceType.ts | ping": { + "message": "Ping" + }, + "core/common/ResourceType.ts | preflight": { + "message": "Preflight" + }, + "core/common/ResourceType.ts | script": { + "message": "Script" + }, + "core/common/ResourceType.ts | scripts": { + "message": "Scripts" + }, + "core/common/ResourceType.ts | signedexchange": { + "message": "SignedExchange" + }, + "core/common/ResourceType.ts | stylesheet": { + "message": "Stylesheet" + }, + "core/common/ResourceType.ts | stylesheets": { + "message": "Stylesheets" + }, + "core/common/ResourceType.ts | texttrack": { + "message": "TextTrack" + }, + "core/common/ResourceType.ts | wasm": { + "message": "Wasm" + }, + "core/common/ResourceType.ts | webassembly": { + "message": "WebAssembly" + }, + "core/common/ResourceType.ts | webbundle": { + "message": "WebBundle" + }, + "core/common/ResourceType.ts | websocket": { + "message": "WebSocket" + }, + "core/common/ResourceType.ts | websockets": { + "message": "WebSockets" + }, + "core/common/ResourceType.ts | webtransport": { + "message": "WebTransport" + }, + "core/common/ResourceType.ts | ws": { + "message": "WS" + }, + "core/common/ResourceType.ts | xhrAndFetch": { + "message": "XHR and Fetch" + }, + "core/common/Revealer.ts | applicationPanel": { + "message": "Application panel" + }, + "core/common/Revealer.ts | changesDrawer": { + "message": "Changes drawer" + }, + "core/common/Revealer.ts | elementsPanel": { + "message": "Elements panel" + }, + "core/common/Revealer.ts | issuesView": { + "message": "Issues view" + }, + "core/common/Revealer.ts | networkPanel": { + "message": "Network panel" + }, + "core/common/Revealer.ts | sourcesPanel": { + "message": "Sources panel" + }, + "core/common/Revealer.ts | stylesSidebar": { + "message": "styles sidebar" + }, + "core/common/SettingRegistration.ts | adorner": { + "message": "Adorner" + }, + "core/common/SettingRegistration.ts | appearance": { + "message": "Appearance" + }, + "core/common/SettingRegistration.ts | console": { + "message": "Console" + }, + "core/common/SettingRegistration.ts | debugger": { + "message": "Debugger" + }, + "core/common/SettingRegistration.ts | elements": { + "message": "Elements" + }, + "core/common/SettingRegistration.ts | extension": { + "message": "Extension" + }, + "core/common/SettingRegistration.ts | global": { + "message": "Global" + }, + "core/common/SettingRegistration.ts | grid": { + "message": "Grid" + }, + "core/common/SettingRegistration.ts | memory": { + "message": "Memory" + }, + "core/common/SettingRegistration.ts | mobile": { + "message": "Mobile" + }, + "core/common/SettingRegistration.ts | network": { + "message": "Network" + }, + "core/common/SettingRegistration.ts | performance": { + "message": "Performance" + }, + "core/common/SettingRegistration.ts | persistence": { + "message": "Persistence" + }, + "core/common/SettingRegistration.ts | rendering": { + "message": "Rendering" + }, + "core/common/SettingRegistration.ts | sources": { + "message": "Sources" + }, + "core/common/SettingRegistration.ts | sync": { + "message": "Sync" + }, + "core/host/InspectorFrontendHost.ts | devtoolsS": { + "message": "DevTools - {PH1}" + }, + "core/host/ResourceLoader.ts | cacheError": { + "message": "Cache error" + }, + "core/host/ResourceLoader.ts | certificateError": { + "message": "Certificate error" + }, + "core/host/ResourceLoader.ts | certificateManagerError": { + "message": "Certificate manager error" + }, + "core/host/ResourceLoader.ts | connectionError": { + "message": "Connection error" + }, + "core/host/ResourceLoader.ts | decodingDataUrlFailed": { + "message": "Decoding Data URL failed" + }, + "core/host/ResourceLoader.ts | dnsResolverError": { + "message": "DNS resolver error" + }, + "core/host/ResourceLoader.ts | ftpError": { + "message": "FTP error" + }, + "core/host/ResourceLoader.ts | httpError": { + "message": "HTTP error" + }, + "core/host/ResourceLoader.ts | httpErrorStatusCodeSS": { + "message": "HTTP error: status code {PH1}, {PH2}" + }, + "core/host/ResourceLoader.ts | invalidUrl": { + "message": "Invalid URL" + }, + "core/host/ResourceLoader.ts | signedExchangeError": { + "message": "Signed Exchange error" + }, + "core/host/ResourceLoader.ts | systemError": { + "message": "System error" + }, + "core/host/ResourceLoader.ts | unknownError": { + "message": "Unknown error" + }, + "core/i18n/time-utilities.ts | fdays": { + "message": "{PH1} days" + }, + "core/i18n/time-utilities.ts | fhrs": { + "message": "{PH1} hrs" + }, + "core/i18n/time-utilities.ts | fmin": { + "message": "{PH1} min" + }, + "core/i18n/time-utilities.ts | fmms": { + "message": "{PH1} μs" + }, + "core/i18n/time-utilities.ts | fms": { + "message": "{PH1} ms" + }, + "core/i18n/time-utilities.ts | fs": { + "message": "{PH1} s" + }, + "core/sdk/CompilerSourceMappingContentProvider.ts | couldNotLoadContentForSS": { + "message": "Could not load content for {PH1} ({PH2})" + }, + "core/sdk/ConsoleModel.ts | failedToSaveToTempVariable": { + "message": "Failed to save to temp variable." + }, + "core/sdk/ConsoleModel.ts | navigatedToS": { + "message": "Navigated to {PH1}" + }, + "core/sdk/ConsoleModel.ts | profileSFinished": { + "message": "Profile ''{PH1}'' finished." + }, + "core/sdk/ConsoleModel.ts | profileSStarted": { + "message": "Profile ''{PH1}'' started." + }, + "core/sdk/CPUProfileDataModel.ts | devtoolsCpuProfileParserIsFixing": { + "message": "DevTools: CPU profile parser is fixing {PH1} missing samples." + }, + "core/sdk/CPUProfilerModel.ts | profileD": { + "message": "Profile {PH1}" + }, + "core/sdk/CSSStyleSheetHeader.ts | couldNotFindTheOriginalStyle": { + "message": "Could not find the original style sheet." + }, + "core/sdk/CSSStyleSheetHeader.ts | thereWasAnErrorRetrievingThe": { + "message": "There was an error retrieving the source styles." + }, + "core/sdk/DebuggerModel.ts | block": { + "message": "Block" + }, + "core/sdk/DebuggerModel.ts | closure": { + "message": "Closure" + }, + "core/sdk/DebuggerModel.ts | expression": { + "message": "Expression" + }, + "core/sdk/DebuggerModel.ts | global": { + "message": "Global" + }, + "core/sdk/DebuggerModel.ts | local": { + "message": "Local" + }, + "core/sdk/DebuggerModel.ts | module": { + "message": "Module" + }, + "core/sdk/DebuggerModel.ts | script": { + "message": "Script" + }, + "core/sdk/DebuggerModel.ts | withBlock": { + "message": "With Block" + }, + "core/sdk/DOMDebuggerModel.ts | animation": { + "message": "Animation" + }, + "core/sdk/DOMDebuggerModel.ts | animationFrameFired": { + "message": "Animation Frame Fired" + }, + "core/sdk/DOMDebuggerModel.ts | cancelAnimationFrame": { + "message": "Cancel Animation Frame" + }, + "core/sdk/DOMDebuggerModel.ts | canvas": { + "message": "Canvas" + }, + "core/sdk/DOMDebuggerModel.ts | clipboard": { + "message": "Clipboard" + }, + "core/sdk/DOMDebuggerModel.ts | closeAudiocontext": { + "message": "Close AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | control": { + "message": "Control" + }, + "core/sdk/DOMDebuggerModel.ts | createAudiocontext": { + "message": "Create AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | createCanvasContext": { + "message": "Create canvas context" + }, + "core/sdk/DOMDebuggerModel.ts | device": { + "message": "Device" + }, + "core/sdk/DOMDebuggerModel.ts | domMutation": { + "message": "DOM Mutation" + }, + "core/sdk/DOMDebuggerModel.ts | dragDrop": { + "message": "Drag / drop" + }, + "core/sdk/DOMDebuggerModel.ts | geolocation": { + "message": "Geolocation" + }, + "core/sdk/DOMDebuggerModel.ts | keyboard": { + "message": "Keyboard" + }, + "core/sdk/DOMDebuggerModel.ts | load": { + "message": "Load" + }, + "core/sdk/DOMDebuggerModel.ts | media": { + "message": "Media" + }, + "core/sdk/DOMDebuggerModel.ts | mouse": { + "message": "Mouse" + }, + "core/sdk/DOMDebuggerModel.ts | notification": { + "message": "Notification" + }, + "core/sdk/DOMDebuggerModel.ts | parse": { + "message": "Parse" + }, + "core/sdk/DOMDebuggerModel.ts | pictureinpicture": { + "message": "Picture-in-Picture" + }, + "core/sdk/DOMDebuggerModel.ts | pointer": { + "message": "Pointer" + }, + "core/sdk/DOMDebuggerModel.ts | policyViolations": { + "message": "Policy Violations" + }, + "core/sdk/DOMDebuggerModel.ts | requestAnimationFrame": { + "message": "Request Animation Frame" + }, + "core/sdk/DOMDebuggerModel.ts | resumeAudiocontext": { + "message": "Resume AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | script": { + "message": "Script" + }, + "core/sdk/DOMDebuggerModel.ts | scriptBlockedByContentSecurity": { + "message": "Script Blocked by Content Security Policy" + }, + "core/sdk/DOMDebuggerModel.ts | scriptBlockedDueToContent": { + "message": "Script blocked due to Content Security Policy directive: {PH1}" + }, + "core/sdk/DOMDebuggerModel.ts | scriptFirstStatement": { + "message": "Script First Statement" + }, + "core/sdk/DOMDebuggerModel.ts | setInnerhtml": { + "message": "Set innerHTML" + }, + "core/sdk/DOMDebuggerModel.ts | setTimeoutOrIntervalFired": { + "message": "{PH1} fired" + }, + "core/sdk/DOMDebuggerModel.ts | sinkViolations": { + "message": "Sink Violations" + }, + "core/sdk/DOMDebuggerModel.ts | suspendAudiocontext": { + "message": "Suspend AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | timer": { + "message": "Timer" + }, + "core/sdk/DOMDebuggerModel.ts | touch": { + "message": "Touch" + }, + "core/sdk/DOMDebuggerModel.ts | trustedTypeViolations": { + "message": "Trusted Type Violations" + }, + "core/sdk/DOMDebuggerModel.ts | webaudio": { + "message": "WebAudio" + }, + "core/sdk/DOMDebuggerModel.ts | webglErrorFired": { + "message": "WebGL Error Fired" + }, + "core/sdk/DOMDebuggerModel.ts | webglErrorFiredS": { + "message": "WebGL Error Fired ({PH1})" + }, + "core/sdk/DOMDebuggerModel.ts | webglWarningFired": { + "message": "WebGL Warning Fired" + }, + "core/sdk/DOMDebuggerModel.ts | window": { + "message": "Window" + }, + "core/sdk/DOMDebuggerModel.ts | worker": { + "message": "Worker" + }, + "core/sdk/DOMDebuggerModel.ts | xhr": { + "message": "XHR" + }, + "core/sdk/EventBreakpointsModel.ts | auctionWorklet": { + "message": "Ad Auction Worklet" + }, + "core/sdk/EventBreakpointsModel.ts | beforeBidderWorkletBiddingStart": { + "message": "Bidder Bidding Phase Start" + }, + "core/sdk/EventBreakpointsModel.ts | beforeBidderWorkletReportingStart": { + "message": "Bidder Reporting Phase Start" + }, + "core/sdk/EventBreakpointsModel.ts | beforeSellerWorkletReportingStart": { + "message": "Seller Reporting Phase Start" + }, + "core/sdk/EventBreakpointsModel.ts | beforeSellerWorkletScoringStart": { + "message": "Seller Scoring Phase Start" + }, + "core/sdk/NetworkManager.ts | crossoriginReadBlockingCorb": { + "message": "Cross-Origin Read Blocking (CORB) blocked cross-origin response {PH1} with MIME type {PH2}. See https://www.chromestatus.com/feature/5629709824032768 for more details." + }, + "core/sdk/NetworkManager.ts | fastG": { + "message": "Fast 3G" + }, + "core/sdk/NetworkManager.ts | noContentForPreflight": { + "message": "No content available for preflight request" + }, + "core/sdk/NetworkManager.ts | noContentForRedirect": { + "message": "No content available because this request was redirected" + }, + "core/sdk/NetworkManager.ts | noContentForWebSocket": { + "message": "Content for WebSockets is currently not supported" + }, + "core/sdk/NetworkManager.ts | noThrottling": { + "message": "No throttling" + }, + "core/sdk/NetworkManager.ts | offline": { + "message": "Offline" + }, + "core/sdk/NetworkManager.ts | requestWasBlockedByDevtoolsS": { + "message": "Request was blocked by DevTools: \"{PH1}\"" + }, + "core/sdk/NetworkManager.ts | sFailedLoadingSS": { + "message": "{PH1} failed loading: {PH2} \"{PH3}\"." + }, + "core/sdk/NetworkManager.ts | sFinishedLoadingSS": { + "message": "{PH1} finished loading: {PH2} \"{PH3}\"." + }, + "core/sdk/NetworkManager.ts | slowG": { + "message": "Slow 3G" + }, + "core/sdk/NetworkRequest.ts | anUnknownErrorWasEncounteredWhenTrying": { + "message": "An unknown error was encountered when trying to store this cookie." + }, + "core/sdk/NetworkRequest.ts | binary": { + "message": "(binary)" + }, + "core/sdk/NetworkRequest.ts | blockedReasonInvalidDomain": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because its Domain attribute was invalid with regards to the current host url." + }, + "core/sdk/NetworkRequest.ts | blockedReasonInvalidPrefix": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it used the \"__Secure-\" or \"__Host-\" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in https://tools.ietf.org/html/draft-west-cookie-prefixes-05." + }, + "core/sdk/NetworkRequest.ts | blockedReasonOverwriteSecure": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it was not sent over a secure connection and would have overwritten a cookie with the Secure attribute." + }, + "core/sdk/NetworkRequest.ts | blockedReasonSameSiteNoneInsecure": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameSite=None\" attribute but did not have the \"Secure\" attribute, which is required in order to use \"SameSite=None\"." + }, + "core/sdk/NetworkRequest.ts | blockedReasonSameSiteStrictLax": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation." + }, + "core/sdk/NetworkRequest.ts | blockedReasonSameSiteUnspecifiedTreatedAsLax": { + "message": "This Set-Cookie header didn't specify a \"SameSite\" attribute and was defaulted to \"SameSite=Lax,\" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The Set-Cookie had to have been set with \"SameSite=None\" to enable cross-site usage." + }, + "core/sdk/NetworkRequest.ts | blockedReasonSecureOnly": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"Secure\" attribute but was not received over a secure connection." + }, + "core/sdk/NetworkRequest.ts | domainMismatch": { + "message": "This cookie was blocked because neither did the request URL's domain exactly match the cookie's domain, nor was the request URL's domain a subdomain of the cookie's Domain attribute value." + }, + "core/sdk/NetworkRequest.ts | nameValuePairExceedsMaxSize": { + "message": "This cookie was blocked because it was too large. The combined size of the name and value must be less than or equal to 4096 characters." + }, + "core/sdk/NetworkRequest.ts | notOnPath": { + "message": "This cookie was blocked because its path was not an exact match for or a superdirectory of the request url's path." + }, + "core/sdk/NetworkRequest.ts | samePartyFromCrossPartyContext": { + "message": "This cookie was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set." + }, + "core/sdk/NetworkRequest.ts | sameSiteLax": { + "message": "This cookie was blocked because it had the \"SameSite=Lax\" attribute and the request was made from a different site and was not initiated by a top-level navigation." + }, + "core/sdk/NetworkRequest.ts | sameSiteNoneInsecure": { + "message": "This cookie was blocked because it had the \"SameSite=None\" attribute but was not marked \"Secure\". Cookies without SameSite restrictions must be marked \"Secure\" and sent over a secure connection." + }, + "core/sdk/NetworkRequest.ts | sameSiteStrict": { + "message": "This cookie was blocked because it had the \"SameSite=Strict\" attribute and the request was made from a different site. This includes top-level navigation requests initiated by other sites." + }, + "core/sdk/NetworkRequest.ts | sameSiteUnspecifiedTreatedAsLax": { + "message": "This cookie didn't specify a \"SameSite\" attribute when it was stored and was defaulted to \"SameSite=Lax,\" and was blocked because the request was made from a different site and was not initiated by a top-level navigation. The cookie had to have been set with \"SameSite=None\" to enable cross-site usage." + }, + "core/sdk/NetworkRequest.ts | schemefulSameSiteLax": { + "message": "This cookie was blocked because it had the \"SameSite=Lax\" attribute but the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site." + }, + "core/sdk/NetworkRequest.ts | schemefulSameSiteStrict": { + "message": "This cookie was blocked because it had the \"SameSite=Strict\" attribute but the request was cross-site. This includes top-level navigation requests initiated by other sites. This request is considered cross-site because the URL has a different scheme than the current site." + }, + "core/sdk/NetworkRequest.ts | schemefulSameSiteUnspecifiedTreatedAsLax": { + "message": "This cookie didn't specify a \"SameSite\" attribute when it was stored, was defaulted to \"SameSite=Lax\", and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site." + }, + "core/sdk/NetworkRequest.ts | secureOnly": { + "message": "This cookie was blocked because it had the \"Secure\" attribute and the connection was not secure." + }, + "core/sdk/NetworkRequest.ts | setcookieHeaderIsIgnoredIn": { + "message": "Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters." + }, + "core/sdk/NetworkRequest.ts | theSchemeOfThisConnectionIsNot": { + "message": "The scheme of this connection is not allowed to store cookies." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieDidntSpecifyASamesite": { + "message": "This Set-Cookie header didn't specify a \"SameSite\" attribute, was defaulted to \"SameSite=Lax\", and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieHadInvalidSyntax": { + "message": "This Set-Cookie header had invalid syntax." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSameparty": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but also had other conflicting attributes. Chrome requires cookies that use the \"SameParty\" attribute to also have the \"Secure\" attribute, and to not be restricted to \"SameSite=Strict\"." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters." + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueToUser": { + "message": "This attempt to set a cookie via a Set-Cookie header was blocked due to user preferences." + }, + "core/sdk/NetworkRequest.ts | unknownError": { + "message": "An unknown error was encountered when trying to send this cookie." + }, + "core/sdk/NetworkRequest.ts | userPreferences": { + "message": "This cookie was blocked due to user preferences." + }, + "core/sdk/OverlayModel.ts | pausedInDebugger": { + "message": "Paused in debugger" + }, + "core/sdk/PageResourceLoader.ts | loadCanceledDueToLoadTimeout": { + "message": "Load canceled due to load timeout" + }, + "core/sdk/PageResourceLoader.ts | loadCanceledDueToReloadOf": { + "message": "Load canceled due to reload of inspected page" + }, + "core/sdk/Script.ts | scriptRemovedOrDeleted": { + "message": "Script removed or deleted." + }, + "core/sdk/Script.ts | unableToFetchScriptSource": { + "message": "Unable to fetch script source." + }, + "core/sdk/sdk-meta.ts | achromatopsia": { + "message": "Achromatopsia" + }, + "core/sdk/sdk-meta.ts | blurredVision": { + "message": "Blurred vision" + }, + "core/sdk/sdk-meta.ts | captureAsyncStackTraces": { + "message": "Capture async stack traces" + }, + "core/sdk/sdk-meta.ts | deuteranopia": { + "message": "Deuteranopia" + }, + "core/sdk/sdk-meta.ts | disableAsyncStackTraces": { + "message": "Disable async stack traces" + }, + "core/sdk/sdk-meta.ts | disableAvifFormat": { + "message": "Disable AVIF format" + }, + "core/sdk/sdk-meta.ts | disableCache": { + "message": "Disable cache (while DevTools is open)" + }, + "core/sdk/sdk-meta.ts | disabledDarkMode": { + "message": "Disable" + }, + "core/sdk/sdk-meta.ts | disableEmulateAutoDarkMode": { + "message": "Disable auto dark mode" + }, + "core/sdk/sdk-meta.ts | disableJavascript": { + "message": "Disable JavaScript" + }, + "core/sdk/sdk-meta.ts | disableJpegXlFormat": { + "message": "Disable JPEG XL format" + }, + "core/sdk/sdk-meta.ts | disableLocalFonts": { + "message": "Disable local fonts" + }, + "core/sdk/sdk-meta.ts | disableNetworkRequestBlocking": { + "message": "Disable network request blocking" + }, + "core/sdk/sdk-meta.ts | disableWebpFormat": { + "message": "Disable WebP format" + }, + "core/sdk/sdk-meta.ts | doNotCaptureAsyncStackTraces": { + "message": "Do not capture async stack traces" + }, + "core/sdk/sdk-meta.ts | doNotEmulateAFocusedPage": { + "message": "Do not emulate a focused page" + }, + "core/sdk/sdk-meta.ts | doNotEmulateAnyVisionDeficiency": { + "message": "Do not emulate any vision deficiency" + }, + "core/sdk/sdk-meta.ts | doNotEmulateCss": { + "message": "Do not emulate CSS {PH1}" + }, + "core/sdk/sdk-meta.ts | doNotEmulateCssMediaType": { + "message": "Do not emulate CSS media type" + }, + "core/sdk/sdk-meta.ts | doNotEmulateDarkMode": { + "message": "Do not emulate auto dark mode" + }, + "core/sdk/sdk-meta.ts | doNotExtendGridLines": { + "message": "Do not extend grid lines" + }, + "core/sdk/sdk-meta.ts | doNotHighlightAdFrames": { + "message": "Do not highlight ad frames" + }, + "core/sdk/sdk-meta.ts | doNotPauseOnExceptions": { + "message": "Do not pause on exceptions" + }, + "core/sdk/sdk-meta.ts | doNotPreserveLogUponNavigation": { + "message": "Do not preserve log upon navigation" + }, + "core/sdk/sdk-meta.ts | doNotShowGridNamedAreas": { + "message": "Do not show grid named areas" + }, + "core/sdk/sdk-meta.ts | doNotShowGridTrackSizes": { + "message": "Do not show grid track sizes" + }, + "core/sdk/sdk-meta.ts | doNotShowRulersOnHover": { + "message": "Do not show rulers on hover" + }, + "core/sdk/sdk-meta.ts | emulateAchromatopsia": { + "message": "Emulate achromatopsia" + }, + "core/sdk/sdk-meta.ts | emulateAFocusedPage": { + "message": "Emulate a focused page" + }, + "core/sdk/sdk-meta.ts | emulateAutoDarkMode": { + "message": "Emulate auto dark mode" + }, + "core/sdk/sdk-meta.ts | emulateBlurredVision": { + "message": "Emulate blurred vision" + }, + "core/sdk/sdk-meta.ts | emulateCss": { + "message": "Emulate CSS {PH1}" + }, + "core/sdk/sdk-meta.ts | emulateCssMediaFeature": { + "message": "Emulate CSS media feature {PH1}" + }, + "core/sdk/sdk-meta.ts | emulateCssMediaType": { + "message": "Emulate CSS media type" + }, + "core/sdk/sdk-meta.ts | emulateCssPrintMediaType": { + "message": "Emulate CSS print media type" + }, + "core/sdk/sdk-meta.ts | emulateCssScreenMediaType": { + "message": "Emulate CSS screen media type" + }, + "core/sdk/sdk-meta.ts | emulateDeuteranopia": { + "message": "Emulate deuteranopia" + }, + "core/sdk/sdk-meta.ts | emulateProtanopia": { + "message": "Emulate protanopia" + }, + "core/sdk/sdk-meta.ts | emulateTritanopia": { + "message": "Emulate tritanopia" + }, + "core/sdk/sdk-meta.ts | emulateVisionDeficiencies": { + "message": "Emulate vision deficiencies" + }, + "core/sdk/sdk-meta.ts | enableAvifFormat": { + "message": "Enable AVIF format" + }, + "core/sdk/sdk-meta.ts | enableCache": { + "message": "Enable cache" + }, + "core/sdk/sdk-meta.ts | enableCustomFormatters": { + "message": "Enable custom formatters" + }, + "core/sdk/sdk-meta.ts | enabledDarkMode": { + "message": "Enable" + }, + "core/sdk/sdk-meta.ts | enableEmulateAutoDarkMode": { + "message": "Enable auto dark mode" + }, + "core/sdk/sdk-meta.ts | enableJavascript": { + "message": "Enable JavaScript" + }, + "core/sdk/sdk-meta.ts | enableJpegXlFormat": { + "message": "Enable JPEG XL format" + }, + "core/sdk/sdk-meta.ts | enableLocalFonts": { + "message": "Enable local fonts" + }, + "core/sdk/sdk-meta.ts | enableNetworkRequestBlocking": { + "message": "Enable network request blocking" + }, + "core/sdk/sdk-meta.ts | enableWebpFormat": { + "message": "Enable WebP format" + }, + "core/sdk/sdk-meta.ts | extendGridLines": { + "message": "Extend grid lines" + }, + "core/sdk/sdk-meta.ts | hideCoreWebVitalsOverlay": { + "message": "Hide Core Web Vitals overlay" + }, + "core/sdk/sdk-meta.ts | hideFramesPerSecondFpsMeter": { + "message": "Hide frames per second (FPS) meter" + }, + "core/sdk/sdk-meta.ts | hideLayerBorders": { + "message": "Hide layer borders" + }, + "core/sdk/sdk-meta.ts | hideLayoutShiftRegions": { + "message": "Hide layout shift regions" + }, + "core/sdk/sdk-meta.ts | hideLineLabels": { + "message": "Hide line labels" + }, + "core/sdk/sdk-meta.ts | hidePaintFlashingRectangles": { + "message": "Hide paint flashing rectangles" + }, + "core/sdk/sdk-meta.ts | hideScrollPerformanceBottlenecks": { + "message": "Hide scroll performance bottlenecks" + }, + "core/sdk/sdk-meta.ts | highlightAdFrames": { + "message": "Highlight ad frames" + }, + "core/sdk/sdk-meta.ts | noEmulation": { + "message": "No emulation" + }, + "core/sdk/sdk-meta.ts | pauseOnExceptions": { + "message": "Pause on exceptions" + }, + "core/sdk/sdk-meta.ts | preserveLogUponNavigation": { + "message": "Preserve log upon navigation" + }, + "core/sdk/sdk-meta.ts | print": { + "message": "print" + }, + "core/sdk/sdk-meta.ts | protanopia": { + "message": "Protanopia" + }, + "core/sdk/sdk-meta.ts | query": { + "message": "query" + }, + "core/sdk/sdk-meta.ts | screen": { + "message": "screen" + }, + "core/sdk/sdk-meta.ts | showAreaNames": { + "message": "Show area names" + }, + "core/sdk/sdk-meta.ts | showCoreWebVitalsOverlay": { + "message": "Show Core Web Vitals overlay" + }, + "core/sdk/sdk-meta.ts | showFramesPerSecondFpsMeter": { + "message": "Show frames per second (FPS) meter" + }, + "core/sdk/sdk-meta.ts | showGridNamedAreas": { + "message": "Show grid named areas" + }, + "core/sdk/sdk-meta.ts | showGridTrackSizes": { + "message": "Show grid track sizes" + }, + "core/sdk/sdk-meta.ts | showLayerBorders": { + "message": "Show layer borders" + }, + "core/sdk/sdk-meta.ts | showLayoutShiftRegions": { + "message": "Show layout shift regions" + }, + "core/sdk/sdk-meta.ts | showLineLabels": { + "message": "Show line labels" + }, + "core/sdk/sdk-meta.ts | showLineNames": { + "message": "Show line names" + }, + "core/sdk/sdk-meta.ts | showLineNumbers": { + "message": "Show line numbers" + }, + "core/sdk/sdk-meta.ts | showPaintFlashingRectangles": { + "message": "Show paint flashing rectangles" + }, + "core/sdk/sdk-meta.ts | showRulersOnHover": { + "message": "Show rulers on hover" + }, + "core/sdk/sdk-meta.ts | showScrollPerformanceBottlenecks": { + "message": "Show scroll performance bottlenecks" + }, + "core/sdk/sdk-meta.ts | showTrackSizes": { + "message": "Show track sizes" + }, + "core/sdk/sdk-meta.ts | tritanopia": { + "message": "Tritanopia" + }, + "core/sdk/ServerTiming.ts | deprecatedSyntaxFoundPleaseUse": { + "message": "Deprecated syntax found. Please use: ;dur=;desc=" + }, + "core/sdk/ServerTiming.ts | duplicateParameterSIgnored": { + "message": "Duplicate parameter \"{PH1}\" ignored." + }, + "core/sdk/ServerTiming.ts | extraneousTrailingCharacters": { + "message": "Extraneous trailing characters." + }, + "core/sdk/ServerTiming.ts | noValueFoundForParameterS": { + "message": "No value found for parameter \"{PH1}\"." + }, + "core/sdk/ServerTiming.ts | unableToParseSValueS": { + "message": "Unable to parse \"{PH1}\" value \"{PH2}\"." + }, + "core/sdk/ServerTiming.ts | unrecognizedParameterS": { + "message": "Unrecognized parameter \"{PH1}\"." + }, + "core/sdk/ServiceWorkerCacheModel.ts | serviceworkercacheagentError": { + "message": "ServiceWorkerCacheAgent error deleting cache entry {PH1} in cache: {PH2}" + }, + "core/sdk/ServiceWorkerManager.ts | activated": { + "message": "activated" + }, + "core/sdk/ServiceWorkerManager.ts | activating": { + "message": "activating" + }, + "core/sdk/ServiceWorkerManager.ts | installed": { + "message": "installed" + }, + "core/sdk/ServiceWorkerManager.ts | installing": { + "message": "installing" + }, + "core/sdk/ServiceWorkerManager.ts | new": { + "message": "new" + }, + "core/sdk/ServiceWorkerManager.ts | redundant": { + "message": "redundant" + }, + "core/sdk/ServiceWorkerManager.ts | running": { + "message": "running" + }, + "core/sdk/ServiceWorkerManager.ts | sSS": { + "message": "{PH1} #{PH2} ({PH3})" + }, + "core/sdk/ServiceWorkerManager.ts | starting": { + "message": "starting" + }, + "core/sdk/ServiceWorkerManager.ts | stopped": { + "message": "stopped" + }, + "core/sdk/ServiceWorkerManager.ts | stopping": { + "message": "stopping" + }, + "core/sdk/SourceMap.ts | couldNotLoadContentForSS": { + "message": "Could not load content for {PH1}: {PH2}" + }, + "core/sdk/SourceMap.ts | couldNotParseContentForSS": { + "message": "Could not parse content for {PH1}: {PH2}" + }, + "core/sdk/SourceMapManager.ts | devtoolsFailedToLoadSourcemapS": { + "message": "DevTools failed to load source map: {PH1}" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | autoOpenDevTools": { + "message": "Auto-open DevTools for popups" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | blockAds": { + "message": "Block ads on this site" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | colorVisionDeficiency": { + "message": "color vision deficiency" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | cssMediaFeature": { + "message": "CSS media feature" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | cssMediaType": { + "message": "CSS media type" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | disablePaused": { + "message": "Disable paused state overlay" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | doNotAutoOpen": { + "message": "Do not auto-open DevTools for popups" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | forceAdBlocking": { + "message": "Force ad blocking on this site" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | fps": { + "message": "fps" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | hardReloadPage": { + "message": "Hard reload page" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | layout": { + "message": "layout" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | paint": { + "message": "paint" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | reloadPage": { + "message": "Reload page" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | rendering": { + "message": "Rendering" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | showAds": { + "message": "Show ads on this site, if allowed" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | showRendering": { + "message": "Show Rendering" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | visionDeficiency": { + "message": "vision deficiency" + }, + "entrypoints/inspector_main/InspectorMain.ts | javascriptIsDisabled": { + "message": "JavaScript is disabled" + }, + "entrypoints/inspector_main/InspectorMain.ts | main": { + "message": "Main" + }, + "entrypoints/inspector_main/InspectorMain.ts | openDedicatedTools": { + "message": "Open dedicated DevTools for Node.js" + }, + "entrypoints/inspector_main/RenderingOptions.ts | coreWebVitals": { + "message": "Core Web Vitals" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableAvifImageFormat": { + "message": "Disable AVIF image format" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableJpegXlImageFormat": { + "message": "Disable JPEG XL image format" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableLocalFonts": { + "message": "Disable local fonts" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disablesLocalSourcesInFontface": { + "message": "Disables local() sources in @font-face rules. Requires a page reload to apply." + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableWebpImageFormat": { + "message": "Disable WebP image format" + }, + "entrypoints/inspector_main/RenderingOptions.ts | emulateAFocusedPage": { + "message": "Emulate a focused page" + }, + "entrypoints/inspector_main/RenderingOptions.ts | emulatesAFocusedPage": { + "message": "Emulates a focused page." + }, + "entrypoints/inspector_main/RenderingOptions.ts | emulatesAutoDarkMode": { + "message": "Enables automatic dark mode for the inspected page." + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssColorgamutMediaFeature": { + "message": "Forces CSS color-gamut media feature" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssForcedColors": { + "message": "Forces CSS forced-colors media feature" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscolorschemeMedia": { + "message": "Forces CSS prefers-color-scheme media feature" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscontrastMedia": { + "message": "Forces CSS prefers-contrast media feature" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreduceddataMedia": { + "message": "Forces CSS prefers-reduced-data media feature" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedmotion": { + "message": "Forces CSS prefers-reduced-motion media feature" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesMediaTypeForTestingPrint": { + "message": "Forces media type for testing print and screen styles" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesVisionDeficiencyEmulation": { + "message": "Forces vision deficiency emulation" + }, + "entrypoints/inspector_main/RenderingOptions.ts | frameRenderingStats": { + "message": "Frame Rendering Stats" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightAdFrames": { + "message": "Highlight ad frames" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageBlueThat": { + "message": "Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy." + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageGreen": { + "message": "Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy." + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsElementsTealThatCan": { + "message": "Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations." + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsFramesRedDetectedToBe": { + "message": "Highlights frames (red) detected to be ads." + }, + "entrypoints/inspector_main/RenderingOptions.ts | layerBorders": { + "message": "Layer borders" + }, + "entrypoints/inspector_main/RenderingOptions.ts | layoutShiftRegions": { + "message": "Layout Shift Regions" + }, + "entrypoints/inspector_main/RenderingOptions.ts | paintFlashing": { + "message": "Paint flashing" + }, + "entrypoints/inspector_main/RenderingOptions.ts | plotsFrameThroughputDropped": { + "message": "Plots frame throughput, dropped frames distribution, and GPU memory." + }, + "entrypoints/inspector_main/RenderingOptions.ts | requiresAPageReloadToApplyAnd": { + "message": "Requires a page reload to apply and disables caching for image requests." + }, + "entrypoints/inspector_main/RenderingOptions.ts | scrollingPerformanceIssues": { + "message": "Scrolling performance issues" + }, + "entrypoints/inspector_main/RenderingOptions.ts | showsAnOverlayWithCoreWebVitals": { + "message": "Shows an overlay with Core Web Vitals." + }, + "entrypoints/inspector_main/RenderingOptions.ts | showsLayerBordersOrangeoliveAnd": { + "message": "Shows layer borders (orange/olive) and tiles (cyan)." + }, + "entrypoints/js_app/JsMain.ts | main": { + "message": "Main" + }, + "entrypoints/main/main-meta.ts | asAuthored": { + "message": "As authored" + }, + "entrypoints/main/main-meta.ts | auto": { + "message": "auto" + }, + "entrypoints/main/main-meta.ts | bottom": { + "message": "Bottom" + }, + "entrypoints/main/main-meta.ts | browserLanguage": { + "message": "Browser UI language" + }, + "entrypoints/main/main-meta.ts | cancelSearch": { + "message": "Cancel search" + }, + "entrypoints/main/main-meta.ts | colorFormat": { + "message": "Color format:" + }, + "entrypoints/main/main-meta.ts | darkCapital": { + "message": "Dark" + }, + "entrypoints/main/main-meta.ts | darkLower": { + "message": "dark" + }, + "entrypoints/main/main-meta.ts | devtoolsDefault": { + "message": "DevTools (Default)" + }, + "entrypoints/main/main-meta.ts | dockToBottom": { + "message": "Dock to bottom" + }, + "entrypoints/main/main-meta.ts | dockToLeft": { + "message": "Dock to left" + }, + "entrypoints/main/main-meta.ts | dockToRight": { + "message": "Dock to right" + }, + "entrypoints/main/main-meta.ts | enableCtrlShortcutToSwitchPanels": { + "message": "Enable Ctrl + 1-9 shortcut to switch panels" + }, + "entrypoints/main/main-meta.ts | enableShortcutToSwitchPanels": { + "message": "Enable ⌘ + 1-9 shortcut to switch panels" + }, + "entrypoints/main/main-meta.ts | enableSync": { + "message": "Enable settings sync" + }, + "entrypoints/main/main-meta.ts | findNextResult": { + "message": "Find next result" + }, + "entrypoints/main/main-meta.ts | findPreviousResult": { + "message": "Find previous result" + }, + "entrypoints/main/main-meta.ts | focusDebuggee": { + "message": "Focus debuggee" + }, + "entrypoints/main/main-meta.ts | horizontal": { + "message": "horizontal" + }, + "entrypoints/main/main-meta.ts | language": { + "message": "Language:" + }, + "entrypoints/main/main-meta.ts | left": { + "message": "Left" + }, + "entrypoints/main/main-meta.ts | lightCapital": { + "message": "Light" + }, + "entrypoints/main/main-meta.ts | lightLower": { + "message": "light" + }, + "entrypoints/main/main-meta.ts | nextPanel": { + "message": "Next panel" + }, + "entrypoints/main/main-meta.ts | panelLayout": { + "message": "Panel layout:" + }, + "entrypoints/main/main-meta.ts | previousPanel": { + "message": "Previous panel" + }, + "entrypoints/main/main-meta.ts | reloadDevtools": { + "message": "Reload DevTools" + }, + "entrypoints/main/main-meta.ts | resetZoomLevel": { + "message": "Reset zoom level" + }, + "entrypoints/main/main-meta.ts | restoreLastDockPosition": { + "message": "Restore last dock position" + }, + "entrypoints/main/main-meta.ts | right": { + "message": "Right" + }, + "entrypoints/main/main-meta.ts | searchInPanel": { + "message": "Search in panel" + }, + "entrypoints/main/main-meta.ts | setColorFormatAsAuthored": { + "message": "Set color format as authored" + }, + "entrypoints/main/main-meta.ts | setColorFormatToHex": { + "message": "Set color format to HEX" + }, + "entrypoints/main/main-meta.ts | setColorFormatToHsl": { + "message": "Set color format to HSL" + }, + "entrypoints/main/main-meta.ts | setColorFormatToRgb": { + "message": "Set color format to RGB" + }, + "entrypoints/main/main-meta.ts | switchToDarkTheme": { + "message": "Switch to dark theme" + }, + "entrypoints/main/main-meta.ts | switchToLightTheme": { + "message": "Switch to light theme" + }, + "entrypoints/main/main-meta.ts | switchToSystemPreferredColor": { + "message": "Switch to system preferred color theme" + }, + "entrypoints/main/main-meta.ts | systemPreference": { + "message": "System preference" + }, + "entrypoints/main/main-meta.ts | theme": { + "message": "Theme:" + }, + "entrypoints/main/main-meta.ts | toggleDrawer": { + "message": "Toggle drawer" + }, + "entrypoints/main/main-meta.ts | undocked": { + "message": "Undocked" + }, + "entrypoints/main/main-meta.ts | undockIntoSeparateWindow": { + "message": "Undock into separate window" + }, + "entrypoints/main/main-meta.ts | useAutomaticPanelLayout": { + "message": "Use automatic panel layout" + }, + "entrypoints/main/main-meta.ts | useHorizontalPanelLayout": { + "message": "Use horizontal panel layout" + }, + "entrypoints/main/main-meta.ts | useVerticalPanelLayout": { + "message": "Use vertical panel layout" + }, + "entrypoints/main/main-meta.ts | vertical": { + "message": "vertical" + }, + "entrypoints/main/main-meta.ts | zoomIn": { + "message": "Zoom in" + }, + "entrypoints/main/main-meta.ts | zoomOut": { + "message": "Zoom out" + }, + "entrypoints/main/MainImpl.ts | customizeAndControlDevtools": { + "message": "Customize and control DevTools" + }, + "entrypoints/main/MainImpl.ts | dockSide": { + "message": "Dock side" + }, + "entrypoints/main/MainImpl.ts | dockToBottom": { + "message": "Dock to bottom" + }, + "entrypoints/main/MainImpl.ts | dockToLeft": { + "message": "Dock to left" + }, + "entrypoints/main/MainImpl.ts | dockToRight": { + "message": "Dock to right" + }, + "entrypoints/main/MainImpl.ts | focusDebuggee": { + "message": "Focus debuggee" + }, + "entrypoints/main/MainImpl.ts | help": { + "message": "Help" + }, + "entrypoints/main/MainImpl.ts | hideConsoleDrawer": { + "message": "Hide console drawer" + }, + "entrypoints/main/MainImpl.ts | moreTools": { + "message": "More tools" + }, + "entrypoints/main/MainImpl.ts | placementOfDevtoolsRelativeToThe": { + "message": "Placement of DevTools relative to the page. ({PH1} to restore last position)" + }, + "entrypoints/main/MainImpl.ts | showConsoleDrawer": { + "message": "Show console drawer" + }, + "entrypoints/main/MainImpl.ts | theSystempreferredColorSchemeHas": { + "message": "The system-preferred color scheme has changed. To apply this change to DevTools, reload." + }, + "entrypoints/main/MainImpl.ts | undockIntoSeparateWindow": { + "message": "Undock into separate window" + }, + "entrypoints/node_app/node_app.ts | connection": { + "message": "Connection" + }, + "entrypoints/node_app/node_app.ts | networkTitle": { + "message": "Node" + }, + "entrypoints/node_app/node_app.ts | node": { + "message": "node" + }, + "entrypoints/node_app/node_app.ts | showConnection": { + "message": "Show Connection" + }, + "entrypoints/node_app/node_app.ts | showNode": { + "message": "Node" + }, + "entrypoints/node_app/NodeConnectionsPanel.ts | addConnection": { + "message": "Add connection" + }, + "entrypoints/node_app/NodeConnectionsPanel.ts | networkAddressEgLocalhost": { + "message": "Network address (e.g. localhost:9229)" + }, + "entrypoints/node_app/NodeConnectionsPanel.ts | noConnectionsSpecified": { + "message": "No connections specified" + }, + "entrypoints/node_app/NodeConnectionsPanel.ts | nodejsDebuggingGuide": { + "message": "Node.js debugging guide" + }, + "entrypoints/node_app/NodeConnectionsPanel.ts | specifyNetworkEndpointAnd": { + "message": "Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more." + }, + "entrypoints/node_app/NodeMain.ts | main": { + "message": "Main" + }, + "entrypoints/node_app/NodeMain.ts | nodejsS": { + "message": "Node.js: {PH1}" + }, + "entrypoints/worker_app/WorkerMain.ts | main": { + "message": "Main" + }, + "models/bindings/ContentProviderBasedProject.ts | unknownErrorLoadingFile": { + "message": "Unknown error loading file" + }, + "models/bindings/DebuggerLanguagePlugins.ts | errorInDebuggerLanguagePlugin": { + "message": "Error in debugger language plugin: {PH1}" + }, + "models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsFor": { + "message": "[{PH1}] Failed to load debug symbols for {PH2} ({PH3})" + }, + "models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsForFunction": { + "message": "Missing debug symbols for function \"{PH1}\"" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForButDidnt": { + "message": "[{PH1}] Loaded debug symbols for {PH2}, but didn't find any source files" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForFound": { + "message": "[{PH1}] Loaded debug symbols for {PH2}, found {PH3} source file(s)" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsFor": { + "message": "[{PH1}] Loading debug symbols for {PH2}..." + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsForVia": { + "message": "[{PH1}] Loading debug symbols for {PH2} (via {PH3})..." + }, + "models/bindings/DebuggerLanguagePlugins.ts | symbolFileNotFound": { + "message": "Symbol file \"{PH1}\" not found" + }, + "models/bindings/ResourceScriptMapping.ts | liveEditCompileFailed": { + "message": "LiveEdit compile failed: {PH1}" + }, + "models/bindings/ResourceScriptMapping.ts | liveEditFailed": { + "message": "LiveEdit failed: {PH1}" + }, + "models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeANumberOr": { + "message": "Device pixel ratio must be a number or blank." + }, + "models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeGreater": { + "message": "Device pixel ratio must be greater than or equal to {PH1}." + }, + "models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeLessThanOr": { + "message": "Device pixel ratio must be less than or equal to {PH1}." + }, + "models/emulation/DeviceModeModel.ts | heightMustBeANumber": { + "message": "Height must be a number." + }, + "models/emulation/DeviceModeModel.ts | heightMustBeGreaterThanOrEqualTo": { + "message": "Height must be greater than or equal to {PH1}." + }, + "models/emulation/DeviceModeModel.ts | heightMustBeLessThanOrEqualToS": { + "message": "Height must be less than or equal to {PH1}." + }, + "models/emulation/DeviceModeModel.ts | widthMustBeANumber": { + "message": "Width must be a number." + }, + "models/emulation/DeviceModeModel.ts | widthMustBeGreaterThanOrEqualToS": { + "message": "Width must be greater than or equal to {PH1}." + }, + "models/emulation/DeviceModeModel.ts | widthMustBeLessThanOrEqualToS": { + "message": "Width must be less than or equal to {PH1}." + }, + "models/emulation/EmulatedDevices.ts | laptopWithHiDPIScreen": { + "message": "Laptop with HiDPI screen" + }, + "models/emulation/EmulatedDevices.ts | laptopWithMDPIScreen": { + "message": "Laptop with MDPI screen" + }, + "models/emulation/EmulatedDevices.ts | laptopWithTouch": { + "message": "Laptop with touch" + }, + "models/har/Writer.ts | collectingContent": { + "message": "Collecting content…" + }, + "models/har/Writer.ts | writingFile": { + "message": "Writing file…" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyEval": { + "message": "Content Security Policy - Eval" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyInlineCode": { + "message": "Content Security Policy - Inline Code" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicySource": { + "message": "Content Security Policy - Source Allowlists" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesFixViolations": { + "message": "Trusted Types - Fix violations" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesPolicyViolation": { + "message": "Trusted Types - Policy violation" + }, + "models/issues_manager/CorsIssue.ts | CORS": { + "message": "Cross-Origin Resource Sharing (CORS)" + }, + "models/issues_manager/CorsIssue.ts | corsForPrivateNetworksRfc": { + "message": "CORS for private networks (RFC1918)" + }, + "models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | coopAndCoep": { + "message": "COOP and COEP" + }, + "models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | samesiteAndSameorigin": { + "message": "Same-Site and Same-Origin" + }, + "models/issues_manager/GenericIssue.ts | crossOriginPortalPostMessage": { + "message": "Portals - Same-origin communication channels" + }, + "models/issues_manager/HeavyAdIssue.ts | handlingHeavyAdInterventions": { + "message": "Handling Heavy Ad Interventions" + }, + "models/issues_manager/Issue.ts | breakingChangeIssue": { + "message": "A breaking change issue: the page may stop working in an upcoming version of Chrome" + }, + "models/issues_manager/Issue.ts | breakingChanges": { + "message": "Breaking Changes" + }, + "models/issues_manager/Issue.ts | improvementIssue": { + "message": "An improvement issue: there is an opportunity to improve the page" + }, + "models/issues_manager/Issue.ts | improvements": { + "message": "Improvements" + }, + "models/issues_manager/Issue.ts | pageErrorIssue": { + "message": "A page error issue: the page is not working correctly" + }, + "models/issues_manager/Issue.ts | pageErrors": { + "message": "Page Errors" + }, + "models/issues_manager/LowTextContrastIssue.ts | colorAndContrastAccessibility": { + "message": "Color and contrast accessibility" + }, + "models/issues_manager/MixedContentIssue.ts | preventingMixedContent": { + "message": "Preventing mixed content" + }, + "models/issues_manager/NavigatorUserAgentIssue.ts | userAgentReduction": { + "message": "User-Agent String Reduction" + }, + "models/issues_manager/QuirksModeIssue.ts | documentCompatibilityMode": { + "message": "Document compatibility mode" + }, + "models/issues_manager/SameSiteCookieIssue.ts | anInsecure": { + "message": "an insecure" + }, + "models/issues_manager/SameSiteCookieIssue.ts | aSecure": { + "message": "a secure" + }, + "models/issues_manager/SameSiteCookieIssue.ts | firstPartySetsExplained": { + "message": "First-Party Sets and the SameParty attribute" + }, + "models/issues_manager/SameSiteCookieIssue.ts | howSchemefulSamesiteWorks": { + "message": "How Schemeful Same-Site Works" + }, + "models/issues_manager/SameSiteCookieIssue.ts | samesiteCookiesExplained": { + "message": "SameSite cookies explained" + }, + "models/issues_manager/SharedArrayBufferIssue.ts | enablingSharedArrayBuffer": { + "message": "Enabling SharedArrayBuffer" + }, + "models/issues_manager/TrustedWebActivityIssue.ts | changesToQualityCriteriaForPwas": { + "message": "Changes to quality criteria for PWAs using Trusted Web Activity" + }, + "models/issues_manager/WasmCrossOriginModuleSharingIssue.ts | linkTitle": { + "message": "Restricting Wasm module sharing to same-origin" + }, + "models/logs/logs-meta.ts | clear": { + "message": "clear" + }, + "models/logs/logs-meta.ts | doNotPreserveLogOnPageReload": { + "message": "Do not preserve log on page reload / navigation" + }, + "models/logs/logs-meta.ts | preserve": { + "message": "preserve" + }, + "models/logs/logs-meta.ts | preserveLog": { + "message": "Preserve log" + }, + "models/logs/logs-meta.ts | preserveLogOnPageReload": { + "message": "Preserve log on page reload / navigation" + }, + "models/logs/logs-meta.ts | recordNetworkLog": { + "message": "Record network log" + }, + "models/logs/logs-meta.ts | reset": { + "message": "reset" + }, + "models/logs/NetworkLog.ts | anonymous": { + "message": "" + }, + "models/persistence/Automapping.ts | theAttemptToBindSInTheWorkspace": { + "message": "The attempt to bind \"{PH1}\" in the workspace failed as this URI is malformed." + }, + "models/persistence/EditFileSystemView.ts | add": { + "message": "Add" + }, + "models/persistence/EditFileSystemView.ts | enterAPath": { + "message": "Enter a path" + }, + "models/persistence/EditFileSystemView.ts | enterAUniquePath": { + "message": "Enter a unique path" + }, + "models/persistence/EditFileSystemView.ts | excludedFolders": { + "message": "Excluded folders" + }, + "models/persistence/EditFileSystemView.ts | folderPath": { + "message": "Folder path" + }, + "models/persistence/EditFileSystemView.ts | none": { + "message": "None" + }, + "models/persistence/EditFileSystemView.ts | sViaDevtools": { + "message": "{PH1} (via .devtools)" + }, + "models/persistence/IsolatedFileSystem.ts | blobCouldNotBeLoaded": { + "message": "Blob could not be loaded." + }, + "models/persistence/IsolatedFileSystem.ts | cantReadFileSS": { + "message": "Can't read file: {PH1}: {PH2}" + }, + "models/persistence/IsolatedFileSystem.ts | fileSystemErrorS": { + "message": "File system error: {PH1}" + }, + "models/persistence/IsolatedFileSystem.ts | linkedToS": { + "message": "Linked to {PH1}" + }, + "models/persistence/IsolatedFileSystem.ts | unknownErrorReadingFileS": { + "message": "Unknown error reading file: {PH1}" + }, + "models/persistence/IsolatedFileSystemManager.ts | unableToAddFilesystemS": { + "message": "Unable to add filesystem: {PH1}" + }, + "models/persistence/persistence-meta.ts | disableOverrideNetworkRequests": { + "message": "Disable override network requests" + }, + "models/persistence/persistence-meta.ts | enableLocalOverrides": { + "message": "Enable Local Overrides" + }, + "models/persistence/persistence-meta.ts | enableOverrideNetworkRequests": { + "message": "Enable override network requests" + }, + "models/persistence/persistence-meta.ts | interception": { + "message": "interception" + }, + "models/persistence/persistence-meta.ts | network": { + "message": "network" + }, + "models/persistence/persistence-meta.ts | override": { + "message": "override" + }, + "models/persistence/persistence-meta.ts | request": { + "message": "request" + }, + "models/persistence/persistence-meta.ts | rewrite": { + "message": "rewrite" + }, + "models/persistence/persistence-meta.ts | showWorkspace": { + "message": "Show Workspace" + }, + "models/persistence/persistence-meta.ts | workspace": { + "message": "Workspace" + }, + "models/persistence/PersistenceActions.ts | openInContainingFolder": { + "message": "Open in containing folder" + }, + "models/persistence/PersistenceActions.ts | saveAs": { + "message": "Save as..." + }, + "models/persistence/PersistenceActions.ts | saveForOverrides": { + "message": "Save for overrides" + }, + "models/persistence/PersistenceActions.ts | saveImage": { + "message": "Save image" + }, + "models/persistence/PersistenceUtils.ts | linkedToS": { + "message": "Linked to {PH1}" + }, + "models/persistence/PersistenceUtils.ts | linkedToSourceMapS": { + "message": "Linked to source map: {PH1}" + }, + "models/persistence/PlatformFileSystem.ts | unableToReadFilesWithThis": { + "message": "PlatformFileSystem cannot read files." + }, + "models/persistence/WorkspaceSettingsTab.ts | addFolder": { + "message": "Add folder…" + }, + "models/persistence/WorkspaceSettingsTab.ts | folderExcludePattern": { + "message": "Folder exclude pattern" + }, + "models/persistence/WorkspaceSettingsTab.ts | mappingsAreInferredAutomatically": { + "message": "Mappings are inferred automatically." + }, + "models/persistence/WorkspaceSettingsTab.ts | remove": { + "message": "Remove" + }, + "models/persistence/WorkspaceSettingsTab.ts | workspace": { + "message": "Workspace" + }, + "models/timeline_model/TimelineIRModel.ts | twoFlingsAtTheSameTimeSVsS": { + "message": "Two flings at the same time? {PH1} vs {PH2}" + }, + "models/timeline_model/TimelineIRModel.ts | twoTouchesAtTheSameTimeSVsS": { + "message": "Two touches at the same time? {PH1} vs {PH2}" + }, + "models/timeline_model/TimelineJSProfile.ts | threadS": { + "message": "Thread {PH1}" + }, + "models/timeline_model/TimelineModel.ts | dedicatedWorker": { + "message": "Dedicated Worker" + }, + "models/timeline_model/TimelineModel.ts | threadS": { + "message": "Thread {PH1}" + }, + "models/timeline_model/TimelineModel.ts | workerS": { + "message": "Worker — {PH1}" + }, + "models/timeline_model/TimelineModel.ts | workerSS": { + "message": "Worker: {PH1} — {PH2}" + }, + "models/workspace/UISourceCode.ts | index": { + "message": "(index)" + }, + "models/workspace/UISourceCode.ts | thisFileWasChangedExternally": { + "message": "This file was changed externally. Would you like to reload it?" + }, + "panels/accessibility/accessibility-meta.ts | accessibility": { + "message": "Accessibility" + }, + "panels/accessibility/accessibility-meta.ts | shoAccessibility": { + "message": "Show Accessibility" + }, + "panels/accessibility/AccessibilityNodeView.ts | accessibilityNodeNotExposed": { + "message": "Accessibility node not exposed" + }, + "panels/accessibility/AccessibilityNodeView.ts | ancestorChildrenAreAll": { + "message": "Ancestor's children are all presentational: " + }, + "panels/accessibility/AccessibilityNodeView.ts | computedProperties": { + "message": "Computed Properties" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementHasEmptyAltText": { + "message": "Element has empty alt text." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementHasPlaceholder": { + "message": "Element has {PH1}." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsHiddenBy": { + "message": "Element is hidden by active modal dialog: " + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsInAnInertSubTree": { + "message": "Element is in an inert subtree from " + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsInert": { + "message": "Element is inert." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsNotRendered": { + "message": "Element is not rendered." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsNotVisible": { + "message": "Element is not visible." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsPlaceholder": { + "message": "Element is {PH1}." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsPresentational": { + "message": "Element is presentational." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementNotInteresting": { + "message": "Element not interesting for accessibility." + }, + "panels/accessibility/AccessibilityNodeView.ts | elementsInheritsPresentational": { + "message": "Element inherits presentational role from " + }, + "panels/accessibility/AccessibilityNodeView.ts | invalidSource": { + "message": "Invalid source." + }, + "panels/accessibility/AccessibilityNodeView.ts | labelFor": { + "message": "Label for " + }, + "panels/accessibility/AccessibilityNodeView.ts | noAccessibilityNode": { + "message": "No accessibility node" + }, + "panels/accessibility/AccessibilityNodeView.ts | noNodeWithThisId": { + "message": "No node with this ID." + }, + "panels/accessibility/AccessibilityNodeView.ts | noTextContent": { + "message": "No text content." + }, + "panels/accessibility/AccessibilityNodeView.ts | notSpecified": { + "message": "Not specified" + }, + "panels/accessibility/AccessibilityNodeView.ts | partOfLabelElement": { + "message": "Part of label element: " + }, + "panels/accessibility/AccessibilityNodeView.ts | placeholderIsPlaceholderOnAncestor": { + "message": "{PH1} is {PH2} on ancestor: " + }, + "panels/accessibility/AccessibilityStrings.ts | activeDescendant": { + "message": "Active descendant" + }, + "panels/accessibility/AccessibilityStrings.ts | aHumanreadableVersionOfTheValue": { + "message": "A human-readable version of the value of a range widget (where necessary)." + }, + "panels/accessibility/AccessibilityStrings.ts | atomicLiveRegions": { + "message": "Atomic (live regions)" + }, + "panels/accessibility/AccessibilityStrings.ts | busyLiveRegions": { + "message": "Busy (live regions)" + }, + "panels/accessibility/AccessibilityStrings.ts | canSetValue": { + "message": "Can set value" + }, + "panels/accessibility/AccessibilityStrings.ts | checked": { + "message": "Checked" + }, + "panels/accessibility/AccessibilityStrings.ts | contents": { + "message": "Contents" + }, + "panels/accessibility/AccessibilityStrings.ts | controls": { + "message": "Controls" + }, + "panels/accessibility/AccessibilityStrings.ts | describedBy": { + "message": "Described by" + }, + "panels/accessibility/AccessibilityStrings.ts | description": { + "message": "Description" + }, + "panels/accessibility/AccessibilityStrings.ts | disabled": { + "message": "Disabled" + }, + "panels/accessibility/AccessibilityStrings.ts | editable": { + "message": "Editable" + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichFormThe": { + "message": "Element or elements which form the description of this element." + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichMayFormThe": { + "message": "Element or elements which may form the name of this element." + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichShouldBe": { + "message": "Element or elements which should be considered descendants of this element, despite not being descendants in the DOM." + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhoseContentOr": { + "message": "Element or elements whose content or presence is/are controlled by this widget." + }, + "panels/accessibility/AccessibilityStrings.ts | elementToWhichTheUserMayChooseTo": { + "message": "Element to which the user may choose to navigate after this one, instead of the next element in the DOM order." + }, + "panels/accessibility/AccessibilityStrings.ts | expanded": { + "message": "Expanded" + }, + "panels/accessibility/AccessibilityStrings.ts | focusable": { + "message": "Focusable" + }, + "panels/accessibility/AccessibilityStrings.ts | focused": { + "message": "Focused" + }, + "panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMaximumAllowed": { + "message": "For a range widget, the maximum allowed value." + }, + "panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMinimumAllowed": { + "message": "For a range widget, the minimum allowed value." + }, + "panels/accessibility/AccessibilityStrings.ts | fromAttribute": { + "message": "From attribute" + }, + "panels/accessibility/AccessibilityStrings.ts | fromCaption": { + "message": "From caption" + }, + "panels/accessibility/AccessibilityStrings.ts | fromDescription": { + "message": "From description" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLabel": { + "message": "From label" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLabelFor": { + "message": "From label (for= attribute)" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLabelWrapped": { + "message": "From label (wrapped)" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLegend": { + "message": "From legend" + }, + "panels/accessibility/AccessibilityStrings.ts | fromNativeHtml": { + "message": "From native HTML" + }, + "panels/accessibility/AccessibilityStrings.ts | fromPlaceholderAttribute": { + "message": "From placeholder attribute" + }, + "panels/accessibility/AccessibilityStrings.ts | fromRubyAnnotation": { + "message": "From ruby annotation" + }, + "panels/accessibility/AccessibilityStrings.ts | fromStyle": { + "message": "From style" + }, + "panels/accessibility/AccessibilityStrings.ts | fromTitle": { + "message": "From title" + }, + "panels/accessibility/AccessibilityStrings.ts | hasAutocomplete": { + "message": "Has autocomplete" + }, + "panels/accessibility/AccessibilityStrings.ts | hasPopup": { + "message": "Has popup" + }, + "panels/accessibility/AccessibilityStrings.ts | help": { + "message": "Help" + }, + "panels/accessibility/AccessibilityStrings.ts | ifAndHowThisElementCanBeEdited": { + "message": "If and how this element can be edited." + }, + "panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLive": { + "message": "If this element may receive live updates, whether the entire live region should be presented to the user on changes, or only changed nodes." + }, + "panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdates": { + "message": "If this element may receive live updates, what type of updates should trigger a notification." + }, + "panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdatesThe": { + "message": "If this element may receive live updates, the root element of the containing live region." + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCanReceiveFocus": { + "message": "If true, this element can receive focus." + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyCannot": { + "message": "If true, this element currently cannot be interacted with." + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyHas": { + "message": "If true, this element currently has focus." + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementMayBeInteracted": { + "message": "If true, this element may be interacted with, but its value cannot be changed." + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementsUserentered": { + "message": "If true, this element's user-entered value does not conform to validation requirement." + }, + "panels/accessibility/AccessibilityStrings.ts | implicit": { + "message": "Implicit" + }, + "panels/accessibility/AccessibilityStrings.ts | implicitValue": { + "message": "Implicit value." + }, + "panels/accessibility/AccessibilityStrings.ts | indicatesThePurposeOfThisElement": { + "message": "Indicates the purpose of this element, such as a user interface idiom for a widget, or structural role within a document." + }, + "panels/accessibility/AccessibilityStrings.ts | invalidUserEntry": { + "message": "Invalid user entry" + }, + "panels/accessibility/AccessibilityStrings.ts | labeledBy": { + "message": "Labeled by" + }, + "panels/accessibility/AccessibilityStrings.ts | level": { + "message": "Level" + }, + "panels/accessibility/AccessibilityStrings.ts | liveRegion": { + "message": "Live region" + }, + "panels/accessibility/AccessibilityStrings.ts | liveRegionRoot": { + "message": "Live region root" + }, + "panels/accessibility/AccessibilityStrings.ts | maximumValue": { + "message": "Maximum value" + }, + "panels/accessibility/AccessibilityStrings.ts | minimumValue": { + "message": "Minimum value" + }, + "panels/accessibility/AccessibilityStrings.ts | multiline": { + "message": "Multi-line" + }, + "panels/accessibility/AccessibilityStrings.ts | multiselectable": { + "message": "Multi-selectable" + }, + "panels/accessibility/AccessibilityStrings.ts | orientation": { + "message": "Orientation" + }, + "panels/accessibility/AccessibilityStrings.ts | pressed": { + "message": "Pressed" + }, + "panels/accessibility/AccessibilityStrings.ts | readonlyString": { + "message": "Read-only" + }, + "panels/accessibility/AccessibilityStrings.ts | relatedElement": { + "message": "Related element" + }, + "panels/accessibility/AccessibilityStrings.ts | relevantLiveRegions": { + "message": "Relevant (live regions)" + }, + "panels/accessibility/AccessibilityStrings.ts | requiredString": { + "message": "Required" + }, + "panels/accessibility/AccessibilityStrings.ts | role": { + "message": "Role" + }, + "panels/accessibility/AccessibilityStrings.ts | selectedString": { + "message": "Selected" + }, + "panels/accessibility/AccessibilityStrings.ts | theAccessibleDescriptionForThis": { + "message": "The accessible description for this element." + }, + "panels/accessibility/AccessibilityStrings.ts | theComputedHelpTextForThis": { + "message": "The computed help text for this element." + }, + "panels/accessibility/AccessibilityStrings.ts | theComputedNameOfThisElement": { + "message": "The computed name of this element." + }, + "panels/accessibility/AccessibilityStrings.ts | theDescendantOfThisElementWhich": { + "message": "The descendant of this element which is active; i.e. the element to which focus should be delegated." + }, + "panels/accessibility/AccessibilityStrings.ts | theHierarchicalLevelOfThis": { + "message": "The hierarchical level of this element." + }, + "panels/accessibility/AccessibilityStrings.ts | theValueOfThisElementThisMayBe": { + "message": "The value of this element; this may be user-provided or developer-provided, depending on the element." + }, + "panels/accessibility/AccessibilityStrings.ts | value": { + "message": "Value" + }, + "panels/accessibility/AccessibilityStrings.ts | valueDescription": { + "message": "Value description" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromAttribute": { + "message": "Value from attribute." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromDescriptionElement": { + "message": "Value from description element." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromElementContents": { + "message": "Value from element contents." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromFigcaptionElement": { + "message": "Value from figcaption element." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLabelElement": { + "message": "Value from label element." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWithFor": { + "message": "Value from label element with for= attribute." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWrapped": { + "message": "Value from a wrapping label element." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLegendElement": { + "message": "Value from legend element." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlRuby": { + "message": "Value from plain HTML ruby annotation." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlUnknownSource": { + "message": "Value from native HTML (unknown source)." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromPlaceholderAttribute": { + "message": "Value from placeholder attribute." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromRelatedElement": { + "message": "Value from related element." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromStyle": { + "message": "Value from style." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromTableCaption": { + "message": "Value from table caption." + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromTitleAttribute": { + "message": "Value from title attribute." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherAndWhatPriorityOfLive": { + "message": "Whether and what priority of live updates may be expected for this element." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherAndWhatTypeOfAutocomplete": { + "message": "Whether and what type of autocomplete suggestions are currently provided by this element." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherAUserMaySelectMoreThanOne": { + "message": "Whether a user may select more than one option from this widget." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherTheOptionRepresentedBy": { + "message": "Whether the option represented by this element is currently selected." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherTheValueOfThisElementCan": { + "message": "Whether the value of this element can be set." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisCheckboxRadioButtonOr": { + "message": "Whether this checkbox, radio button or tree item is checked, unchecked, or mixed (e.g. has both checked and un-checked children)." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementHasCausedSome": { + "message": "Whether this element has caused some kind of pop-up (such as a menu) to appear." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementIsARequired": { + "message": "Whether this element is a required field in a form." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrAnother": { + "message": "Whether this element, or another grouping element it controls, is expanded." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrItsSubtree": { + "message": "Whether this element or its subtree are currently being updated (and thus may be in an inconsistent state)." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisLinearElements": { + "message": "Whether this linear element's orientation is horizontal or vertical." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisTextBoxMayHaveMore": { + "message": "Whether this text box may have more than one line." + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisToggleButtonIs": { + "message": "Whether this toggle button is currently in a pressed state." + }, + "panels/accessibility/ARIAAttributesView.ts | ariaAttributes": { + "message": "ARIA Attributes" + }, + "panels/accessibility/ARIAAttributesView.ts | noAriaAttributes": { + "message": "No ARIA attributes" + }, + "panels/accessibility/AXBreadcrumbsPane.ts | accessibilityTree": { + "message": "Accessibility Tree" + }, + "panels/accessibility/AXBreadcrumbsPane.ts | ignored": { + "message": "Ignored" + }, + "panels/accessibility/AXBreadcrumbsPane.ts | scrollIntoView": { + "message": "Scroll into view" + }, + "panels/accessibility/SourceOrderView.ts | noSourceOrderInformation": { + "message": "No source order information available" + }, + "panels/accessibility/SourceOrderView.ts | showSourceOrder": { + "message": "Show source order" + }, + "panels/accessibility/SourceOrderView.ts | sourceOrderViewer": { + "message": "Source Order Viewer" + }, + "panels/accessibility/SourceOrderView.ts | thereMayBeADelayInDisplaying": { + "message": "There may be a delay in displaying source order for elements with many children" + }, + "panels/animation/animation-meta.ts | animations": { + "message": "Animations" + }, + "panels/animation/animation-meta.ts | showAnimations": { + "message": "Show Animations" + }, + "panels/animation/AnimationTimeline.ts | animationPreviews": { + "message": "Animation previews" + }, + "panels/animation/AnimationTimeline.ts | animationPreviewS": { + "message": "Animation Preview {PH1}" + }, + "panels/animation/AnimationTimeline.ts | clearAll": { + "message": "Clear all" + }, + "panels/animation/AnimationTimeline.ts | pause": { + "message": "Pause" + }, + "panels/animation/AnimationTimeline.ts | pauseAll": { + "message": "Pause all" + }, + "panels/animation/AnimationTimeline.ts | pauseTimeline": { + "message": "Pause timeline" + }, + "panels/animation/AnimationTimeline.ts | playbackRatePlaceholder": { + "message": "{PH1}%" + }, + "panels/animation/AnimationTimeline.ts | playbackRates": { + "message": "Playback rates" + }, + "panels/animation/AnimationTimeline.ts | playTimeline": { + "message": "Play timeline" + }, + "panels/animation/AnimationTimeline.ts | replayTimeline": { + "message": "Replay timeline" + }, + "panels/animation/AnimationTimeline.ts | resumeAll": { + "message": "Resume all" + }, + "panels/animation/AnimationTimeline.ts | selectAnEffectAboveToInspectAnd": { + "message": "Select an effect above to inspect and modify." + }, + "panels/animation/AnimationTimeline.ts | setSpeedToS": { + "message": "Set speed to {PH1}" + }, + "panels/animation/AnimationTimeline.ts | waitingForAnimations": { + "message": "Waiting for animations..." + }, + "panels/animation/AnimationUI.ts | animationEndpointSlider": { + "message": "Animation Endpoint slider" + }, + "panels/animation/AnimationUI.ts | animationKeyframeSlider": { + "message": "Animation Keyframe slider" + }, + "panels/animation/AnimationUI.ts | sSlider": { + "message": "{PH1} slider" + }, + "panels/application/application-meta.ts | application": { + "message": "Application" + }, + "panels/application/application-meta.ts | clearSiteData": { + "message": "Clear site data" + }, + "panels/application/application-meta.ts | clearSiteDataIncludingThirdparty": { + "message": "Clear site data (including third-party cookies)" + }, + "panels/application/application-meta.ts | pwa": { + "message": "pwa" + }, + "panels/application/application-meta.ts | showApplication": { + "message": "Show Application" + }, + "panels/application/application-meta.ts | startRecordingEvents": { + "message": "Start recording events" + }, + "panels/application/application-meta.ts | stopRecordingEvents": { + "message": "Stop recording events" + }, + "panels/application/ApplicationPanelCacheSection.ts | backForwardCache": { + "message": "Back/forward cache" + }, + "panels/application/ApplicationPanelCacheSection.ts | cacheStorage": { + "message": "Cache Storage" + }, + "panels/application/ApplicationPanelCacheSection.ts | delete": { + "message": "Delete" + }, + "panels/application/ApplicationPanelCacheSection.ts | refreshCaches": { + "message": "Refresh Caches" + }, + "panels/application/ApplicationPanelSidebar.ts | application": { + "message": "Application" + }, + "panels/application/ApplicationPanelSidebar.ts | backgroundServices": { + "message": "Background Services" + }, + "panels/application/ApplicationPanelSidebar.ts | cache": { + "message": "Cache" + }, + "panels/application/ApplicationPanelSidebar.ts | clear": { + "message": "Clear" + }, + "panels/application/ApplicationPanelSidebar.ts | cookies": { + "message": "Cookies" + }, + "panels/application/ApplicationPanelSidebar.ts | cookiesUsedByFramesFromS": { + "message": "Cookies used by frames from {PH1}" + }, + "panels/application/ApplicationPanelSidebar.ts | documentNotAvailable": { + "message": "Document not available" + }, + "panels/application/ApplicationPanelSidebar.ts | frames": { + "message": "Frames" + }, + "panels/application/ApplicationPanelSidebar.ts | indexeddb": { + "message": "IndexedDB" + }, + "panels/application/ApplicationPanelSidebar.ts | keyPathS": { + "message": "Key path: {PH1}" + }, + "panels/application/ApplicationPanelSidebar.ts | localFiles": { + "message": "Local Files" + }, + "panels/application/ApplicationPanelSidebar.ts | localStorage": { + "message": "Local Storage" + }, + "panels/application/ApplicationPanelSidebar.ts | manifest": { + "message": "Manifest" + }, + "panels/application/ApplicationPanelSidebar.ts | openedWindows": { + "message": "Opened Windows" + }, + "panels/application/ApplicationPanelSidebar.ts | refreshIndexeddb": { + "message": "Refresh IndexedDB" + }, + "panels/application/ApplicationPanelSidebar.ts | sessionStorage": { + "message": "Session Storage" + }, + "panels/application/ApplicationPanelSidebar.ts | storage": { + "message": "Storage" + }, + "panels/application/ApplicationPanelSidebar.ts | theContentOfThisDocumentHasBeen": { + "message": "The content of this document has been generated dynamically via 'document.write()'." + }, + "panels/application/ApplicationPanelSidebar.ts | versionS": { + "message": "Version: {PH1}" + }, + "panels/application/ApplicationPanelSidebar.ts | versionSEmpty": { + "message": "Version: {PH1} (empty)" + }, + "panels/application/ApplicationPanelSidebar.ts | webSql": { + "message": "Web SQL" + }, + "panels/application/ApplicationPanelSidebar.ts | webWorkers": { + "message": "Web Workers" + }, + "panels/application/ApplicationPanelSidebar.ts | windowWithoutTitle": { + "message": "Window without title" + }, + "panels/application/ApplicationPanelSidebar.ts | worker": { + "message": "worker" + }, + "panels/application/AppManifestView.ts | actualHeightSpxOfSSDoesNotMatch": { + "message": "Actual height ({PH1}px) of {PH2} {PH3} does not match specified height ({PH4}px)" + }, + "panels/application/AppManifestView.ts | actualSizeSspxOfSSDoesNotMatch": { + "message": "Actual size ({PH1}×{PH2})px of {PH3} {PH4} does not match specified size ({PH5}×{PH6}px)" + }, + "panels/application/AppManifestView.ts | actualWidthSpxOfSSDoesNotMatch": { + "message": "Actual width ({PH1}px) of {PH2} {PH3} does not match specified width ({PH4}px)" + }, + "panels/application/AppManifestView.ts | appIdExplainer": { + "message": "This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed." + }, + "panels/application/AppManifestView.ts | appIdNote": { + "message": "{PH1} {PH2} is not specified in the manifest, {PH3} is used instead. To specify an App Id that matches the current identity, set the {PH4} field to {PH5} {PH6}." + }, + "panels/application/AppManifestView.ts | appManifest": { + "message": "App Manifest" + }, + "panels/application/AppManifestView.ts | aUrlInTheManifestContainsA": { + "message": "A URL in the manifest contains a username, password, or port" + }, + "panels/application/AppManifestView.ts | avoidPurposeAnyAndMaskable": { + "message": "Declaring an icon with purpose: \"any maskable\" is discouraged. It is likely to look incorrect on some platforms due to too much or too little padding." + }, + "panels/application/AppManifestView.ts | backgroundColor": { + "message": "Background color" + }, + "panels/application/AppManifestView.ts | computedAppId": { + "message": "Computed App Id" + }, + "panels/application/AppManifestView.ts | copyToClipboard": { + "message": "Copy to clipboard" + }, + "panels/application/AppManifestView.ts | couldNotCheckServiceWorker": { + "message": "Could not check service worker without a 'start_url' field in the manifest" + }, + "panels/application/AppManifestView.ts | couldNotDownloadARequiredIcon": { + "message": "Could not download a required icon from the manifest" + }, + "panels/application/AppManifestView.ts | description": { + "message": "Description" + }, + "panels/application/AppManifestView.ts | descriptionMayBeTruncated": { + "message": "Description may be truncated." + }, + "panels/application/AppManifestView.ts | display": { + "message": "Display" + }, + "panels/application/AppManifestView.ts | documentationOnMaskableIcons": { + "message": "documentation on maskable icons" + }, + "panels/application/AppManifestView.ts | downloadedIconWasEmptyOr": { + "message": "Downloaded icon was empty or corrupted" + }, + "panels/application/AppManifestView.ts | errorsAndWarnings": { + "message": "Errors and warnings" + }, + "panels/application/AppManifestView.ts | icon": { + "message": "Icon" + }, + "panels/application/AppManifestView.ts | icons": { + "message": "Icons" + }, + "panels/application/AppManifestView.ts | identity": { + "message": "Identity" + }, + "panels/application/AppManifestView.ts | imageFromS": { + "message": "Image from {PH1}" + }, + "panels/application/AppManifestView.ts | installability": { + "message": "Installability" + }, + "panels/application/AppManifestView.ts | learnMore": { + "message": "Learn more" + }, + "panels/application/AppManifestView.ts | manifestContainsDisplayoverride": { + "message": "Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'" + }, + "panels/application/AppManifestView.ts | manifestCouldNotBeFetchedIsEmpty": { + "message": "Manifest could not be fetched, is empty, or could not be parsed" + }, + "panels/application/AppManifestView.ts | manifestDisplayPropertyMustBeOne": { + "message": "Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'" + }, + "panels/application/AppManifestView.ts | manifestDoesNotContainANameOr": { + "message": "Manifest does not contain a 'name' or 'short_name' field" + }, + "panels/application/AppManifestView.ts | manifestDoesNotContainASuitable": { + "message": "Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {PH1}px is required, the sizes attribute must be set, and the purpose attribute, if set, must include \"any\"." + }, + "panels/application/AppManifestView.ts | manifestSpecifies": { + "message": "Manifest specifies prefer_related_applications: true" + }, + "panels/application/AppManifestView.ts | manifestStartUrlIsNotValid": { + "message": "Manifest start URL is not valid" + }, + "panels/application/AppManifestView.ts | name": { + "message": "Name" + }, + "panels/application/AppManifestView.ts | needHelpReadOurS": { + "message": "Need help? Read {PH1}." + }, + "panels/application/AppManifestView.ts | newNoteUrl": { + "message": "New note URL" + }, + "panels/application/AppManifestView.ts | noManifestDetected": { + "message": "No manifest detected" + }, + "panels/application/AppManifestView.ts | noMatchingServiceWorkerDetected": { + "message": "No matching service worker detected. You may need to reload the page, or check that the scope of the service worker for the current page encloses the scope and start URL from the manifest." + }, + "panels/application/AppManifestView.ts | noPlayStoreIdProvided": { + "message": "No Play store ID provided" + }, + "panels/application/AppManifestView.ts | noSuppliedIconIsAtLeastSpxSquare": { + "message": "No supplied icon is at least {PH1} pixels square in PNG, SVG or WebP format, with the purpose attribute unset or set to \"any\"." + }, + "panels/application/AppManifestView.ts | note": { + "message": "Note:" + }, + "panels/application/AppManifestView.ts | orientation": { + "message": "Orientation" + }, + "panels/application/AppManifestView.ts | pageDoesNotWorkOffline": { + "message": "Page does not work offline" + }, + "panels/application/AppManifestView.ts | pageDoesNotWorkOfflineThePage": { + "message": "Page does not work offline. Starting in Chrome 93, the installability criteria are changing, and this site will not be installable. See {PH1} for more information." + }, + "panels/application/AppManifestView.ts | pageHasNoManifestLinkUrl": { + "message": "Page has no manifest URL" + }, + "panels/application/AppManifestView.ts | pageIsLoadedInAnIncognitoWindow": { + "message": "Page is loaded in an incognito window" + }, + "panels/application/AppManifestView.ts | pageIsNotLoadedInTheMainFrame": { + "message": "Page is not loaded in the main frame" + }, + "panels/application/AppManifestView.ts | pageIsNotServedFromASecureOrigin": { + "message": "Page is not served from a secure origin" + }, + "panels/application/AppManifestView.ts | preferrelatedapplicationsIsOnly": { + "message": "prefer_related_applications is only supported on Chrome Beta and Stable channels on Android." + }, + "panels/application/AppManifestView.ts | presentation": { + "message": "Presentation" + }, + "panels/application/AppManifestView.ts | primaryIconasUsedByChrome": { + "message": "Primary icon as used by Chrome" + }, + "panels/application/AppManifestView.ts | primaryManifestIconFromS": { + "message": "Primary manifest icon from {PH1}" + }, + "panels/application/AppManifestView.ts | screenshot": { + "message": "Screenshot" + }, + "panels/application/AppManifestView.ts | screenshotPixelSize": { + "message": "Screenshot {url} should specify a pixel size [width]x[height] instead of \"any\" as first size." + }, + "panels/application/AppManifestView.ts | screenshotS": { + "message": "Screenshot #{PH1}" + }, + "panels/application/AppManifestView.ts | shortcutS": { + "message": "Shortcut #{PH1}" + }, + "panels/application/AppManifestView.ts | shortcutSShouldIncludeAXPixel": { + "message": "Shortcut #{PH1} should include a 96x96 pixel icon" + }, + "panels/application/AppManifestView.ts | shortName": { + "message": "Short name" + }, + "panels/application/AppManifestView.ts | showOnlyTheMinimumSafeAreaFor": { + "message": "Show only the minimum safe area for maskable icons" + }, + "panels/application/AppManifestView.ts | sSDoesNotSpecifyItsSizeInThe": { + "message": "{PH1} {PH2} does not specify its size in the manifest" + }, + "panels/application/AppManifestView.ts | sSFailedToLoad": { + "message": "{PH1} {PH2} failed to load" + }, + "panels/application/AppManifestView.ts | sSHeightDoesNotComplyWithRatioRequirement": { + "message": "{PH1} {PH2} height can't be more than 2.3 times as long as the width" + }, + "panels/application/AppManifestView.ts | sSrcIsNotSet": { + "message": "{PH1} src is not set" + }, + "panels/application/AppManifestView.ts | sSShouldHaveSquareIcon": { + "message": "Most operating systems require square icons. Please include at least one square icon in the array." + }, + "panels/application/AppManifestView.ts | sSShouldSpecifyItsSizeAs": { + "message": "{PH1} {PH2} should specify its size as [width]x[height]" + }, + "panels/application/AppManifestView.ts | sSSizeShouldBeAtLeast320": { + "message": "{PH1} {PH2} size should be at least 320×320" + }, + "panels/application/AppManifestView.ts | sSSizeShouldBeAtMost3840": { + "message": "{PH1} {PH2} size should be at most 3840×3840" + }, + "panels/application/AppManifestView.ts | sSWidthDoesNotComplyWithRatioRequirement": { + "message": "{PH1} {PH2} width can't be more than 2.3 times as long as the height" + }, + "panels/application/AppManifestView.ts | startUrl": { + "message": "Start URL" + }, + "panels/application/AppManifestView.ts | sUrlSFailedToParse": { + "message": "{PH1} URL ''{PH2}'' failed to parse" + }, + "panels/application/AppManifestView.ts | theAppIsAlreadyInstalled": { + "message": "The app is already installed" + }, + "panels/application/AppManifestView.ts | themeColor": { + "message": "Theme color" + }, + "panels/application/AppManifestView.ts | thePlayStoreAppUrlAndPlayStoreId": { + "message": "The Play Store app URL and Play Store ID do not match" + }, + "panels/application/AppManifestView.ts | theSpecifiedApplicationPlatform": { + "message": "The specified application platform is not supported on Android" + }, + "panels/application/BackForwardCacheStrings.ts | appBanner": { + "message": "Pages that requested an AppBanner are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabled": { + "message": "Back/forward cache is disabled by flags. Visit chrome://flags/#back-forward-cache to enable it locally on this device." + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledByCommandLine": { + "message": "Back/forward cache is disabled by the command line." + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledByLowMemory": { + "message": "Back/forward cache is disabled due to insufficient memory." + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledForDelegate": { + "message": "Back/forward cache is not supported by delegate." + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledForPrerender": { + "message": "Back/forward cache is disabled for prerenderer." + }, + "panels/application/BackForwardCacheStrings.ts | broadcastChannel": { + "message": "The page cannot be cached because it has a BroadcastChannel instance with registered listeners." + }, + "panels/application/BackForwardCacheStrings.ts | cacheControlNoStore": { + "message": "Pages with cache-control:no-store header cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | cacheFlushed": { + "message": "The cache was intentionally cleared." + }, + "panels/application/BackForwardCacheStrings.ts | cacheLimit": { + "message": "The page was evicted from the cache to allow another page to be cached." + }, + "panels/application/BackForwardCacheStrings.ts | containsPlugins": { + "message": "Pages containing plugins are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentFileChooser": { + "message": "Pages that use FileChooser API are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentFileSystemAccess": { + "message": "Pages that use File System Access API are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaDevicesDispatcherHost": { + "message": "Pages that use Media Device Dispatcher are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaPlay": { + "message": "A media player was playing upon navigating away." + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaSession": { + "message": "Pages that use MediaSession API and set a playback state are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaSessionService": { + "message": "Pages that use MediaSession API and set action handlers are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentSecurityHandler": { + "message": "Pages that use SecurityHandler are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentSerial": { + "message": "Pages that use Serial API are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentWebAuthenticationAPI": { + "message": "Pages that use WebAuthetication API are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentWebBluetooth": { + "message": "Pages that use WebBluetooth API are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | contentWebUSB": { + "message": "Pages that use WebUSB API are not eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | dedicatedWorkerOrWorklet": { + "message": "Pages that use a dedicated worker or worklet are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | documentLoaded": { + "message": "The document did not finish loading before navigating away." + }, + "panels/application/BackForwardCacheStrings.ts | enteredBackForwardCacheBeforeServiceWorkerHostAdded": { + "message": "A service worker was activated while the page was in back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | foregroundCacheLimit": { + "message": "The page was evicted from the cache to allow another page to be cached." + }, + "panels/application/BackForwardCacheStrings.ts | grantedMediaStreamAccess": { + "message": "Pages that have granted media stream access are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | haveInnerContents": { + "message": "Pages that use portals are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | HTTPMethodNotGET": { + "message": "Only pages loaded via a GET request are eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | HTTPStatusNotOK": { + "message": "Only pages with a status code of 2XX can be cached." + }, + "panels/application/BackForwardCacheStrings.ts | idleManager": { + "message": "Pages that use IdleManager are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | indexedDBConnection": { + "message": "Pages that have an open IndexedDB connection are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | ineligibleAPI": { + "message": "Ineligible APIs were used." + }, + "panels/application/BackForwardCacheStrings.ts | injectedJavascript": { + "message": "IPages that JavaScript is injected into by extensions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | injectedStyleSheet": { + "message": "Pages that StyleSheet is injected into by extensions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | internalError": { + "message": "Internal error." + }, + "panels/application/BackForwardCacheStrings.ts | JavaScriptExecution": { + "message": "Chrome detected an attempt to execute JavaScript while in the cache." + }, + "panels/application/BackForwardCacheStrings.ts | keyboardLock": { + "message": "Pages that use Keyboard lock are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | loading": { + "message": "The page did not finish loading before navigating away." + }, + "panels/application/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoCache": { + "message": "Pages whose main resource has cache-control:no-cache cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoStore": { + "message": "Pages whose main resource has cache-control:no-store cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | navigationCancelledWhileRestoring": { + "message": "Navigation was cancelled before the page could be restored from back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | networkExceedsBufferLimit": { + "message": "The page was evicted from the cache because an active network connection received too much data. Chrome limits the amount of data that a page may receive while cached." + }, + "panels/application/BackForwardCacheStrings.ts | networkRequestDatapipeDrainedAsBytesConsumer": { + "message": "Pages that have inflight fetch() or XHR are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | networkRequestRedirected": { + "message": "The page was evicted from back/forward cache because an active network request involved a redirect." + }, + "panels/application/BackForwardCacheStrings.ts | networkRequestTimeout": { + "message": "The page was evicted from the cache because a network connection was open too long. Chrome limits the amount of time that a page may receive data while cached." + }, + "panels/application/BackForwardCacheStrings.ts | noResponseHead": { + "message": "Pages that do not have a valid response head cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | notMainFrame": { + "message": "Navigation happened in a frame other than the main frame." + }, + "panels/application/BackForwardCacheStrings.ts | optInUnloadHeaderNotPresent": { + "message": "The page has unload handler without the back/forward cache opt-in header." + }, + "panels/application/BackForwardCacheStrings.ts | outstandingIndexedDBTransaction": { + "message": "Page with ongoing indexed DB transactions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestDirectSocket": { + "message": "Pages with an in-flight network request are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestFetch": { + "message": "Pages with an in-flight fetch network request are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestOthers": { + "message": "Pages with an in-flight network request are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestXHR": { + "message": "Pages with an in-flight XHR network request are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | paymentManager": { + "message": "Pages that use PaymentManager are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | pictureInPicture": { + "message": "Pages that use Picture-in-Picture are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | portal": { + "message": "Pages that use portals are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | printing": { + "message": "Pages that show Printing UI are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | relatedActiveContentsExist": { + "message": "The page was opened using 'window.open()' and another tab has a reference to it, or the page opened a window." + }, + "panels/application/BackForwardCacheStrings.ts | rendererProcessCrashed": { + "message": "The renderer process for the page in back/forward cache crashed." + }, + "panels/application/BackForwardCacheStrings.ts | rendererProcessKilled": { + "message": "The renderer process for the page in back/forward cache was killed." + }, + "panels/application/BackForwardCacheStrings.ts | requestedAudioCapturePermission": { + "message": "Pages that have requested audio capture permissions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | requestedBackForwardCacheBlockedSensors": { + "message": "Pages that have requested sensor permissions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | requestedBackgroundWorkPermission": { + "message": "Pages that have requested background sync or fetch permissions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | requestedMIDIPermission": { + "message": "Pages that have requested MIDI permissions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | requestedNotificationsPermission": { + "message": "Pages that have requested notifications permissions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | requestedStorageAccessGrant": { + "message": "Pages that have requested storage access are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | requestedVideoCapturePermission": { + "message": "Pages that have requested video capture permissions are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | schemeNotHTTPOrHTTPS": { + "message": "Only pages whose URL scheme is HTTP / HTTPS can be cached." + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerClaim": { + "message": "The page was claimed by a service worker while it is in back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerPostMessage": { + "message": "A service worker attempted to send the page in back/forward cache a MessageEvent." + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerUnregistration": { + "message": "ServiceWorker was unregistered while a page was in back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerVersionActivation": { + "message": "The page was evicted from back/forward cache due to a service worker activation." + }, + "panels/application/BackForwardCacheStrings.ts | sessionRestored": { + "message": "Chrome restarted and cleared the back/forward cache entries." + }, + "panels/application/BackForwardCacheStrings.ts | sharedWorker": { + "message": "Pages that use SharedWorker are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | speechRecognizer": { + "message": "Pages that use SpeechRecognizer are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | speechSynthesis": { + "message": "Pages that use SpeechSynthesis are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | subframeIsNavigating": { + "message": "An iframe on the page started a navigation that did not complete." + }, + "panels/application/BackForwardCacheStrings.ts | subresourceHasCacheControlNoCache": { + "message": "Pages whose subresource has cache-control:no-cache cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | subresourceHasCacheControlNoStore": { + "message": "Pages whose subresource has cache-control:no-store cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | timeout": { + "message": "The page exceeded the maximum time in back/forward cache and was expired." + }, + "panels/application/BackForwardCacheStrings.ts | timeoutPuttingInCache": { + "message": "The page timed out entering back/forward cache (likely due to long-running pagehide handlers)." + }, + "panels/application/BackForwardCacheStrings.ts | unloadHandlerExistsInMainFrame": { + "message": "The page has an unload handler in the main frame." + }, + "panels/application/BackForwardCacheStrings.ts | unloadHandlerExistsInSubFrame": { + "message": "The page has an unload handler in a sub frame." + }, + "panels/application/BackForwardCacheStrings.ts | userAgentOverrideDiffers": { + "message": "Browser has changed the user agent override header." + }, + "panels/application/BackForwardCacheStrings.ts | wasGrantedMediaAccess": { + "message": "Pages that have granted access to record video or audio are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webDatabase": { + "message": "Pages that use WebDatabase are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webHID": { + "message": "Pages that use WebHID are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webLocks": { + "message": "Pages that use WebLocks are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webNfc": { + "message": "Pages that use WebNfc are not currently eligible for back/forwad cache." + }, + "panels/application/BackForwardCacheStrings.ts | webOTPService": { + "message": "Pages that use WebOTPService are not currently eligible for bfcache." + }, + "panels/application/BackForwardCacheStrings.ts | webRTC": { + "message": "Pages with WebRTC cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webShare": { + "message": "Pages that use WebShare are not currently eligible for back/forwad cache." + }, + "panels/application/BackForwardCacheStrings.ts | webSocket": { + "message": "Pages with WebSocket cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webTransport": { + "message": "Pages with WebTransport cannot enter back/forward cache." + }, + "panels/application/BackForwardCacheStrings.ts | webXR": { + "message": "Pages that use WebXR are not currently eligible for back/forward cache." + }, + "panels/application/BackForwardCacheView.ts | backForwardCacheTitle": { + "message": "Back/forward cache" + }, + "panels/application/BackForwardCacheView.ts | bfcacheStatus": { + "message": "Back/forward cache Status" + }, + "panels/application/BackForwardCacheView.ts | circumstantial": { + "message": "Not Actionable" + }, + "panels/application/BackForwardCacheView.ts | circumstantialExplanation": { + "message": "These reasons are not actionable i.e. caching was prevented by something outside of the direct control of the page." + }, + "panels/application/BackForwardCacheView.ts | mainFrame": { + "message": "Main Frame" + }, + "panels/application/BackForwardCacheView.ts | normalNavigation": { + "message": "Normal navigation (Not restored from back/forward cache)" + }, + "panels/application/BackForwardCacheView.ts | pageSupportNeeded": { + "message": "Actionable" + }, + "panels/application/BackForwardCacheView.ts | pageSupportNeededExplanation": { + "message": "These reasons are actionable i.e. they can be cleaned up to make the page eligible for back/forward cache." + }, + "panels/application/BackForwardCacheView.ts | restoredFromBFCache": { + "message": "Restored from back/forward cache" + }, + "panels/application/BackForwardCacheView.ts | runTest": { + "message": "Run Test" + }, + "panels/application/BackForwardCacheView.ts | supportPending": { + "message": "Pending Support" + }, + "panels/application/BackForwardCacheView.ts | supportPendingExplanation": { + "message": "Chrome support for these reasons is pending i.e. they will not prevent the page from being eligible for back/forward cache in a future version of Chrome." + }, + "panels/application/BackForwardCacheView.ts | unavailable": { + "message": "unavailable" + }, + "panels/application/BackForwardCacheView.ts | unknown": { + "message": "unknown" + }, + "panels/application/BackForwardCacheView.ts | url": { + "message": "URL" + }, + "panels/application/BackgroundServiceView.ts | backgroundFetch": { + "message": "Background Fetch" + }, + "panels/application/BackgroundServiceView.ts | backgroundServices": { + "message": "Background Services" + }, + "panels/application/BackgroundServiceView.ts | backgroundSync": { + "message": "Background Sync" + }, + "panels/application/BackgroundServiceView.ts | clear": { + "message": "Clear" + }, + "panels/application/BackgroundServiceView.ts | clickTheRecordButtonSOrHitSTo": { + "message": "Click the record button {PH1} or hit {PH2} to start recording." + }, + "panels/application/BackgroundServiceView.ts | devtoolsWillRecordAllSActivity": { + "message": "DevTools will record all {PH1} activity for up to 3 days, even when closed." + }, + "panels/application/BackgroundServiceView.ts | empty": { + "message": "empty" + }, + "panels/application/BackgroundServiceView.ts | event": { + "message": "Event" + }, + "panels/application/BackgroundServiceView.ts | instanceId": { + "message": "Instance ID" + }, + "panels/application/BackgroundServiceView.ts | learnMore": { + "message": "Learn more" + }, + "panels/application/BackgroundServiceView.ts | noMetadataForThisEvent": { + "message": "No metadata for this event" + }, + "panels/application/BackgroundServiceView.ts | notifications": { + "message": "Notifications" + }, + "panels/application/BackgroundServiceView.ts | origin": { + "message": "Origin" + }, + "panels/application/BackgroundServiceView.ts | paymentHandler": { + "message": "Payment Handler" + }, + "panels/application/BackgroundServiceView.ts | periodicBackgroundSync": { + "message": "Periodic Background Sync" + }, + "panels/application/BackgroundServiceView.ts | pushMessaging": { + "message": "Push Messaging" + }, + "panels/application/BackgroundServiceView.ts | recordingSActivity": { + "message": "Recording {PH1} activity..." + }, + "panels/application/BackgroundServiceView.ts | saveEvents": { + "message": "Save events" + }, + "panels/application/BackgroundServiceView.ts | selectAnEntryToViewMetadata": { + "message": "Select an entry to view metadata" + }, + "panels/application/BackgroundServiceView.ts | showEventsFromOtherDomains": { + "message": "Show events from other domains" + }, + "panels/application/BackgroundServiceView.ts | startRecordingEvents": { + "message": "Start recording events" + }, + "panels/application/BackgroundServiceView.ts | stopRecordingEvents": { + "message": "Stop recording events" + }, + "panels/application/BackgroundServiceView.ts | swScope": { + "message": "Service Worker Scope" + }, + "panels/application/BackgroundServiceView.ts | timestamp": { + "message": "Timestamp" + }, + "panels/application/components/EndpointsGrid.ts | noEndpointsToDisplay": { + "message": "No endpoints to display" + }, + "panels/application/components/FrameDetailsView.ts | additionalInformation": { + "message": "Additional Information" + }, + "panels/application/components/FrameDetailsView.ts | adStatus": { + "message": "Ad Status" + }, + "panels/application/components/FrameDetailsView.ts | aFrameAncestorIsAnInsecure": { + "message": "A frame ancestor is an insecure context" + }, + "panels/application/components/FrameDetailsView.ts | apiAvailability": { + "message": "API availability" + }, + "panels/application/components/FrameDetailsView.ts | availabilityOfCertainApisDepends": { + "message": "Availability of certain APIs depends on the document being cross-origin isolated." + }, + "panels/application/components/FrameDetailsView.ts | available": { + "message": "available" + }, + "panels/application/components/FrameDetailsView.ts | availableNotTransferable": { + "message": "available, not transferable" + }, + "panels/application/components/FrameDetailsView.ts | availableTransferable": { + "message": "available, transferable" + }, + "panels/application/components/FrameDetailsView.ts | child": { + "message": "child" + }, + "panels/application/components/FrameDetailsView.ts | childDescription": { + "message": "This frame has been identified as a child frame of an ad" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInElementsPanel": { + "message": "Click to reveal in Elements panel" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanel": { + "message": "Click to reveal in Network panel" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanelMight": { + "message": "Click to reveal in Network panel (might require page reload)" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInSourcesPanel": { + "message": "Click to reveal in Sources panel" + }, + "panels/application/components/FrameDetailsView.ts | createdByAdScriptExplanation": { + "message": "There was an ad script in the (async) stack when this frame was created. Examining the creation stack trace of this frame might provide more insight." + }, + "panels/application/components/FrameDetailsView.ts | creationStackTrace": { + "message": "Frame Creation Stack Trace" + }, + "panels/application/components/FrameDetailsView.ts | creationStackTraceExplanation": { + "message": "This frame was created programmatically. The stack trace shows where this happened." + }, + "panels/application/components/FrameDetailsView.ts | crossoriginIsolated": { + "message": "Cross-Origin Isolated" + }, + "panels/application/components/FrameDetailsView.ts | document": { + "message": "Document" + }, + "panels/application/components/FrameDetailsView.ts | frameId": { + "message": "Frame ID" + }, + "panels/application/components/FrameDetailsView.ts | learnMore": { + "message": "Learn more" + }, + "panels/application/components/FrameDetailsView.ts | localhostIsAlwaysASecureContext": { + "message": "Localhost is always a secure context" + }, + "panels/application/components/FrameDetailsView.ts | matchedBlockingRuleExplanation": { + "message": "This frame is considered an ad frame because its current (or previous) main document is an ad resource." + }, + "panels/application/components/FrameDetailsView.ts | measureMemory": { + "message": "Measure Memory" + }, + "panels/application/components/FrameDetailsView.ts | no": { + "message": "No" + }, + "panels/application/components/FrameDetailsView.ts | ownerElement": { + "message": "Owner Element" + }, + "panels/application/components/FrameDetailsView.ts | parentIsAdExplanation": { + "message": "This frame is considered an ad frame because its parent frame is an ad frame." + }, + "panels/application/components/FrameDetailsView.ts | reportingTo": { + "message": "reporting to" + }, + "panels/application/components/FrameDetailsView.ts | requiresCrossoriginIsolated": { + "message": "requires cross-origin isolated context" + }, + "panels/application/components/FrameDetailsView.ts | root": { + "message": "root" + }, + "panels/application/components/FrameDetailsView.ts | rootDescription": { + "message": "This frame has been identified as the root frame of an ad" + }, + "panels/application/components/FrameDetailsView.ts | secureContext": { + "message": "Secure Context" + }, + "panels/application/components/FrameDetailsView.ts | securityIsolation": { + "message": "Security & Isolation" + }, + "panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIs": { + "message": "SharedArrayBuffer constructor is available and SABs can be transferred via postMessage" + }, + "panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIsAvailable": { + "message": "SharedArrayBuffer constructor is available but SABs cannot be transferred via postMessage" + }, + "panels/application/components/FrameDetailsView.ts | theFramesSchemeIsInsecure": { + "message": "The frame's scheme is insecure" + }, + "panels/application/components/FrameDetailsView.ts | thePerformanceAPI": { + "message": "The performance.measureUserAgentSpecificMemory() API is available" + }, + "panels/application/components/FrameDetailsView.ts | thePerformancemeasureuseragentspecificmemory": { + "message": "The performance.measureUserAgentSpecificMemory() API is not available" + }, + "panels/application/components/FrameDetailsView.ts | thisAdditionalDebugging": { + "message": "This additional (debugging) information is shown because the 'Protocol Monitor' experiment is enabled." + }, + "panels/application/components/FrameDetailsView.ts | transferRequiresCrossoriginIsolatedPermission": { + "message": "SharedArrayBuffer transfer requires enabling the permission policy:" + }, + "panels/application/components/FrameDetailsView.ts | unavailable": { + "message": "unavailable" + }, + "panels/application/components/FrameDetailsView.ts | unreachableUrl": { + "message": "Unreachable URL" + }, + "panels/application/components/FrameDetailsView.ts | willRequireCrossoriginIsolated": { + "message": "⚠️ will require cross-origin isolated context in the future" + }, + "panels/application/components/FrameDetailsView.ts | yes": { + "message": "Yes" + }, + "panels/application/components/OriginTrialTreeView.ts | expiryTime": { + "message": "Expiry Time" + }, + "panels/application/components/OriginTrialTreeView.ts | isThirdParty": { + "message": "Third Party" + }, + "panels/application/components/OriginTrialTreeView.ts | matchSubDomains": { + "message": "Subdomain Matching" + }, + "panels/application/components/OriginTrialTreeView.ts | origin": { + "message": "Origin" + }, + "panels/application/components/OriginTrialTreeView.ts | rawTokenText": { + "message": "Raw Token" + }, + "panels/application/components/OriginTrialTreeView.ts | status": { + "message": "Token Status" + }, + "panels/application/components/OriginTrialTreeView.ts | token": { + "message": "Token" + }, + "panels/application/components/OriginTrialTreeView.ts | tokens": { + "message": "{PH1} tokens" + }, + "panels/application/components/OriginTrialTreeView.ts | trialName": { + "message": "Trial Name" + }, + "panels/application/components/OriginTrialTreeView.ts | usageRestriction": { + "message": "Usage Restriction" + }, + "panels/application/components/PermissionsPolicySection.ts | allowedFeatures": { + "message": "Allowed Features" + }, + "panels/application/components/PermissionsPolicySection.ts | clickToShowHeader": { + "message": "Click to reveal the request whose \"Permissions-Policy\" HTTP header disables this feature." + }, + "panels/application/components/PermissionsPolicySection.ts | clickToShowIframe": { + "message": "Click to reveal the top-most iframe which does not allow this feature in the elements panel." + }, + "panels/application/components/PermissionsPolicySection.ts | disabledByHeader": { + "message": "disabled by \"Permissions-Policy\" header" + }, + "panels/application/components/PermissionsPolicySection.ts | disabledByIframe": { + "message": "missing in iframe \"allow\" attribute" + }, + "panels/application/components/PermissionsPolicySection.ts | disabledFeatures": { + "message": "Disabled Features" + }, + "panels/application/components/PermissionsPolicySection.ts | hideDetails": { + "message": "Hide details" + }, + "panels/application/components/PermissionsPolicySection.ts | showDetails": { + "message": "Show details" + }, + "panels/application/components/ReportsGrid.ts | noReportsToDisplay": { + "message": "No reports to display" + }, + "panels/application/components/StackTrace.ts | cannotRenderStackTrace": { + "message": "Cannot render stack trace" + }, + "panels/application/components/StackTrace.ts | showSMoreFrames": { + "message": "{n, plural, =1 {Show # more frame} other {Show # more frames}}" + }, + "panels/application/components/TrustTokensView.ts | allStoredTrustTokensAvailableIn": { + "message": "All stored Trust Tokens available in this browser instance." + }, + "panels/application/components/TrustTokensView.ts | deleteTrustTokens": { + "message": "Delete all stored Trust Tokens issued by {PH1}." + }, + "panels/application/components/TrustTokensView.ts | issuer": { + "message": "Issuer" + }, + "panels/application/components/TrustTokensView.ts | noTrustTokensStored": { + "message": "No Trust Tokens are currently stored." + }, + "panels/application/components/TrustTokensView.ts | storedTokenCount": { + "message": "Stored token count" + }, + "panels/application/CookieItemsView.ts | clearAllCookies": { + "message": "Clear all cookies" + }, + "panels/application/CookieItemsView.ts | clearFilteredCookies": { + "message": "Clear filtered cookies" + }, + "panels/application/CookieItemsView.ts | cookies": { + "message": "Cookies" + }, + "panels/application/CookieItemsView.ts | numberOfCookiesShownInTableS": { + "message": "Number of cookies shown in table: {PH1}" + }, + "panels/application/CookieItemsView.ts | onlyShowCookiesWhichHaveAn": { + "message": "Only show cookies which have an associated issue" + }, + "panels/application/CookieItemsView.ts | onlyShowCookiesWithAnIssue": { + "message": "Only show cookies with an issue" + }, + "panels/application/CookieItemsView.ts | selectACookieToPreviewItsValue": { + "message": "Select a cookie to preview its value" + }, + "panels/application/CookieItemsView.ts | showUrlDecoded": { + "message": "Show URL decoded" + }, + "panels/application/DatabaseModel.ts | anUnexpectedErrorSOccurred": { + "message": "An unexpected error {PH1} occurred." + }, + "panels/application/DatabaseModel.ts | databaseNoLongerHasExpected": { + "message": "Database no longer has expected version." + }, + "panels/application/DatabaseQueryView.ts | databaseQuery": { + "message": "Database Query" + }, + "panels/application/DatabaseQueryView.ts | queryS": { + "message": "Query: {PH1}" + }, + "panels/application/DatabaseTableView.ts | anErrorOccurredTryingToreadTheS": { + "message": "An error occurred trying to read the \"{PH1}\" table." + }, + "panels/application/DatabaseTableView.ts | database": { + "message": "Database" + }, + "panels/application/DatabaseTableView.ts | refresh": { + "message": "Refresh" + }, + "panels/application/DatabaseTableView.ts | theStableIsEmpty": { + "message": "The \"{PH1}\" table is empty." + }, + "panels/application/DatabaseTableView.ts | visibleColumns": { + "message": "Visible columns" + }, + "panels/application/DOMStorageItemsView.ts | domStorage": { + "message": "DOM Storage" + }, + "panels/application/DOMStorageItemsView.ts | domStorageItemDeleted": { + "message": "The storage item was deleted." + }, + "panels/application/DOMStorageItemsView.ts | domStorageItems": { + "message": "DOM Storage Items" + }, + "panels/application/DOMStorageItemsView.ts | domStorageNumberEntries": { + "message": "Number of entries shown in table: {PH1}" + }, + "panels/application/DOMStorageItemsView.ts | key": { + "message": "Key" + }, + "panels/application/DOMStorageItemsView.ts | selectAValueToPreview": { + "message": "Select a value to preview" + }, + "panels/application/DOMStorageItemsView.ts | value": { + "message": "Value" + }, + "panels/application/IndexedDBViews.ts | clearObjectStore": { + "message": "Clear object store" + }, + "panels/application/IndexedDBViews.ts | collapse": { + "message": "Collapse" + }, + "panels/application/IndexedDBViews.ts | dataMayBeStale": { + "message": "Data may be stale" + }, + "panels/application/IndexedDBViews.ts | deleteDatabase": { + "message": "Delete database" + }, + "panels/application/IndexedDBViews.ts | deleteSelected": { + "message": "Delete selected" + }, + "panels/application/IndexedDBViews.ts | expandRecursively": { + "message": "Expand Recursively" + }, + "panels/application/IndexedDBViews.ts | idb": { + "message": "IDB" + }, + "panels/application/IndexedDBViews.ts | indexedDb": { + "message": "Indexed DB" + }, + "panels/application/IndexedDBViews.ts | keyGeneratorValueS": { + "message": "Key generator value: {PH1}" + }, + "panels/application/IndexedDBViews.ts | keyPath": { + "message": "Key path: " + }, + "panels/application/IndexedDBViews.ts | keyString": { + "message": "Key" + }, + "panels/application/IndexedDBViews.ts | loading": { + "message": "Loading…" + }, + "panels/application/IndexedDBViews.ts | objectStores": { + "message": "Object stores" + }, + "panels/application/IndexedDBViews.ts | pleaseConfirmDeleteOfSDatabase": { + "message": "Please confirm delete of \"{PH1}\" database." + }, + "panels/application/IndexedDBViews.ts | primaryKey": { + "message": "Primary key" + }, + "panels/application/IndexedDBViews.ts | refresh": { + "message": "Refresh" + }, + "panels/application/IndexedDBViews.ts | refreshDatabase": { + "message": "Refresh database" + }, + "panels/application/IndexedDBViews.ts | securityOrigin": { + "message": "Security origin" + }, + "panels/application/IndexedDBViews.ts | showNextPage": { + "message": "Show next page" + }, + "panels/application/IndexedDBViews.ts | showPreviousPage": { + "message": "Show previous page" + }, + "panels/application/IndexedDBViews.ts | someEntriesMayHaveBeenModified": { + "message": "Some entries may have been modified" + }, + "panels/application/IndexedDBViews.ts | startFromKey": { + "message": "Start from key" + }, + "panels/application/IndexedDBViews.ts | totalEntriesS": { + "message": "Total entries: {PH1}" + }, + "panels/application/IndexedDBViews.ts | valueString": { + "message": "Value" + }, + "panels/application/IndexedDBViews.ts | version": { + "message": "Version" + }, + "panels/application/OpenedWindowDetailsView.ts | accessToOpener": { + "message": "Access to opener" + }, + "panels/application/OpenedWindowDetailsView.ts | clickToRevealInElementsPanel": { + "message": "Click to reveal in Elements panel" + }, + "panels/application/OpenedWindowDetailsView.ts | closed": { + "message": "closed" + }, + "panels/application/OpenedWindowDetailsView.ts | crossoriginEmbedderPolicy": { + "message": "Cross-Origin Embedder Policy" + }, + "panels/application/OpenedWindowDetailsView.ts | document": { + "message": "Document" + }, + "panels/application/OpenedWindowDetailsView.ts | no": { + "message": "No" + }, + "panels/application/OpenedWindowDetailsView.ts | openerFrame": { + "message": "Opener Frame" + }, + "panels/application/OpenedWindowDetailsView.ts | reportingTo": { + "message": "reporting to" + }, + "panels/application/OpenedWindowDetailsView.ts | security": { + "message": "Security" + }, + "panels/application/OpenedWindowDetailsView.ts | securityIsolation": { + "message": "Security & Isolation" + }, + "panels/application/OpenedWindowDetailsView.ts | showsWhetherTheOpenedWindowIs": { + "message": "Shows whether the opened window is able to access its opener and vice versa" + }, + "panels/application/OpenedWindowDetailsView.ts | type": { + "message": "Type" + }, + "panels/application/OpenedWindowDetailsView.ts | unknown": { + "message": "Unknown" + }, + "panels/application/OpenedWindowDetailsView.ts | url": { + "message": "URL" + }, + "panels/application/OpenedWindowDetailsView.ts | webWorker": { + "message": "Web Worker" + }, + "panels/application/OpenedWindowDetailsView.ts | windowWithoutTitle": { + "message": "Window without title" + }, + "panels/application/OpenedWindowDetailsView.ts | worker": { + "message": "worker" + }, + "panels/application/OpenedWindowDetailsView.ts | yes": { + "message": "Yes" + }, + "panels/application/ReportingApiReportsView.ts | clickToDisplayBody": { + "message": "Click on any report to display its body" + }, + "panels/application/ReportingApiTreeElement.ts | reportingApi": { + "message": "Reporting API" + }, + "panels/application/ServiceWorkerCacheViews.ts | cache": { + "message": "Cache" + }, + "panels/application/ServiceWorkerCacheViews.ts | deleteSelected": { + "message": "Delete Selected" + }, + "panels/application/ServiceWorkerCacheViews.ts | filterByPath": { + "message": "Filter by Path" + }, + "panels/application/ServiceWorkerCacheViews.ts | headers": { + "message": "Headers" + }, + "panels/application/ServiceWorkerCacheViews.ts | matchingEntriesS": { + "message": "Matching entries: {PH1}" + }, + "panels/application/ServiceWorkerCacheViews.ts | name": { + "message": "Name" + }, + "panels/application/ServiceWorkerCacheViews.ts | preview": { + "message": "Preview" + }, + "panels/application/ServiceWorkerCacheViews.ts | refresh": { + "message": "Refresh" + }, + "panels/application/ServiceWorkerCacheViews.ts | selectACacheEntryAboveToPreview": { + "message": "Select a cache entry above to preview" + }, + "panels/application/ServiceWorkerCacheViews.ts | serviceWorkerCache": { + "message": "Service Worker Cache" + }, + "panels/application/ServiceWorkerCacheViews.ts | timeCached": { + "message": "Time Cached" + }, + "panels/application/ServiceWorkerCacheViews.ts | totalEntriesS": { + "message": "Total entries: {PH1}" + }, + "panels/application/ServiceWorkerCacheViews.ts | varyHeaderWarning": { + "message": "⚠️ Set ignoreVary to true when matching this entry" + }, + "panels/application/ServiceWorkersView.ts | bypassForNetwork": { + "message": "Bypass for network" + }, + "panels/application/ServiceWorkersView.ts | bypassTheServiceWorkerAndLoad": { + "message": "Bypass the service worker and load resources from the network" + }, + "panels/application/ServiceWorkersView.ts | clients": { + "message": "Clients" + }, + "panels/application/ServiceWorkersView.ts | focus": { + "message": "focus" + }, + "panels/application/ServiceWorkersView.ts | inspect": { + "message": "inspect" + }, + "panels/application/ServiceWorkersView.ts | networkRequests": { + "message": "Network requests" + }, + "panels/application/ServiceWorkersView.ts | onPageReloadForceTheService": { + "message": "On page reload, force the service worker to update, and activate it" + }, + "panels/application/ServiceWorkersView.ts | periodicSync": { + "message": "Periodic Sync" + }, + "panels/application/ServiceWorkersView.ts | periodicSyncTag": { + "message": "Periodic Sync tag" + }, + "panels/application/ServiceWorkersView.ts | pushData": { + "message": "Push data" + }, + "panels/application/ServiceWorkersView.ts | pushString": { + "message": "Push" + }, + "panels/application/ServiceWorkersView.ts | receivedS": { + "message": "Received {PH1}" + }, + "panels/application/ServiceWorkersView.ts | sActivatedAndIsS": { + "message": "#{PH1} activated and is {PH2}" + }, + "panels/application/ServiceWorkersView.ts | sDeleted": { + "message": "{PH1} - deleted" + }, + "panels/application/ServiceWorkersView.ts | seeAllRegistrations": { + "message": "See all registrations" + }, + "panels/application/ServiceWorkersView.ts | serviceWorkerForS": { + "message": "Service worker for {PH1}" + }, + "panels/application/ServiceWorkersView.ts | serviceWorkersFromOtherOrigins": { + "message": "Service workers from other origins" + }, + "panels/application/ServiceWorkersView.ts | sIsRedundant": { + "message": "#{PH1} is redundant" + }, + "panels/application/ServiceWorkersView.ts | source": { + "message": "Source" + }, + "panels/application/ServiceWorkersView.ts | sRegistrationErrors": { + "message": "{PH1} registration errors" + }, + "panels/application/ServiceWorkersView.ts | startString": { + "message": "start" + }, + "panels/application/ServiceWorkersView.ts | status": { + "message": "Status" + }, + "panels/application/ServiceWorkersView.ts | stopString": { + "message": "stop" + }, + "panels/application/ServiceWorkersView.ts | sTryingToInstall": { + "message": "#{PH1} trying to install" + }, + "panels/application/ServiceWorkersView.ts | sWaitingToActivate": { + "message": "#{PH1} waiting to activate" + }, + "panels/application/ServiceWorkersView.ts | syncString": { + "message": "Sync" + }, + "panels/application/ServiceWorkersView.ts | syncTag": { + "message": "Sync tag" + }, + "panels/application/ServiceWorkersView.ts | testPushMessageFromDevtools": { + "message": "Test push message from DevTools." + }, + "panels/application/ServiceWorkersView.ts | unregister": { + "message": "Unregister" + }, + "panels/application/ServiceWorkersView.ts | unregisterServiceWorker": { + "message": "Unregister service worker" + }, + "panels/application/ServiceWorkersView.ts | update": { + "message": "Update" + }, + "panels/application/ServiceWorkersView.ts | updateCycle": { + "message": "Update Cycle" + }, + "panels/application/ServiceWorkersView.ts | updateOnReload": { + "message": "Update on reload" + }, + "panels/application/ServiceWorkersView.ts | workerS": { + "message": "Worker: {PH1}" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | endTimeS": { + "message": "End time: {PH1}" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | startTimeS": { + "message": "Start time: {PH1}" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | timeline": { + "message": "Timeline" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | updateActivity": { + "message": "Update Activity" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | version": { + "message": "Version" + }, + "panels/application/StorageItemsView.ts | clearAll": { + "message": "Clear All" + }, + "panels/application/StorageItemsView.ts | deleteSelected": { + "message": "Delete Selected" + }, + "panels/application/StorageItemsView.ts | filter": { + "message": "Filter" + }, + "panels/application/StorageItemsView.ts | refresh": { + "message": "Refresh" + }, + "panels/application/StorageItemsView.ts | refreshedStatus": { + "message": "Table refreshed" + }, + "panels/application/StorageView.ts | application": { + "message": "Application" + }, + "panels/application/StorageView.ts | cache": { + "message": "Cache" + }, + "panels/application/StorageView.ts | cacheStorage": { + "message": "Cache storage" + }, + "panels/application/StorageView.ts | clearing": { + "message": "Clearing..." + }, + "panels/application/StorageView.ts | clearSiteData": { + "message": "Clear site data" + }, + "panels/application/StorageView.ts | cookies": { + "message": "Cookies" + }, + "panels/application/StorageView.ts | fileSystem": { + "message": "File System" + }, + "panels/application/StorageView.ts | includingThirdPartyCookies": { + "message": "including third-party cookies" + }, + "panels/application/StorageView.ts | indexDB": { + "message": "IndexedDB" + }, + "panels/application/StorageView.ts | internalError": { + "message": "Internal error" + }, + "panels/application/StorageView.ts | learnMore": { + "message": "Learn more" + }, + "panels/application/StorageView.ts | localAndSessionStorage": { + "message": "Local and session storage" + }, + "panels/application/StorageView.ts | mb": { + "message": "MB" + }, + "panels/application/StorageView.ts | numberMustBeNonNegative": { + "message": "Number must be non-negative" + }, + "panels/application/StorageView.ts | other": { + "message": "Other" + }, + "panels/application/StorageView.ts | pleaseEnterANumber": { + "message": "Please enter a number" + }, + "panels/application/StorageView.ts | serviceWorkers": { + "message": "Service Workers" + }, + "panels/application/StorageView.ts | sFailedToLoad": { + "message": "{PH1} (failed to load)" + }, + "panels/application/StorageView.ts | simulateCustomStorage": { + "message": "Simulate custom storage quota" + }, + "panels/application/StorageView.ts | storageQuotaIsLimitedIn": { + "message": "Storage quota is limited in Incognito mode" + }, + "panels/application/StorageView.ts | storageQuotaUsed": { + "message": "{PH1} used out of {PH2} storage quota" + }, + "panels/application/StorageView.ts | storageQuotaUsedWithBytes": { + "message": "{PH1} bytes used out of {PH2} bytes storage quota" + }, + "panels/application/StorageView.ts | storageTitle": { + "message": "Storage" + }, + "panels/application/StorageView.ts | storageUsage": { + "message": "Storage usage" + }, + "panels/application/StorageView.ts | storageWithCustomMarker": { + "message": "{PH1} (custom)" + }, + "panels/application/StorageView.ts | unregisterServiceWorker": { + "message": "Unregister service workers" + }, + "panels/application/StorageView.ts | usage": { + "message": "Usage" + }, + "panels/application/StorageView.ts | webSql": { + "message": "Web SQL" + }, + "panels/application/TrustTokensTreeElement.ts | trustTokens": { + "message": "Trust Tokens" + }, + "panels/browser_debugger/browser_debugger-meta.ts | contentScripts": { + "message": "Content scripts" + }, + "panels/browser_debugger/browser_debugger-meta.ts | cspViolationBreakpoints": { + "message": "CSP Violation Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | domBreakpoints": { + "message": "DOM Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | eventListenerBreakpoints": { + "message": "Event Listener Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | globalListeners": { + "message": "Global Listeners" + }, + "panels/browser_debugger/browser_debugger-meta.ts | overrides": { + "message": "Overrides" + }, + "panels/browser_debugger/browser_debugger-meta.ts | page": { + "message": "Page" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showContentScripts": { + "message": "Show Content scripts" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showCspViolationBreakpoints": { + "message": "Show CSP Violation Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showDomBreakpoints": { + "message": "Show DOM Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showEventListenerBreakpoints": { + "message": "Show Event Listener Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showGlobalListeners": { + "message": "Show Global Listeners" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showOverrides": { + "message": "Show Overrides" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showPage": { + "message": "Show Page" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showXhrfetchBreakpoints": { + "message": "Show XHR/fetch Breakpoints" + }, + "panels/browser_debugger/browser_debugger-meta.ts | xhrfetchBreakpoints": { + "message": "XHR/fetch Breakpoints" + }, + "panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts | breakpointHit": { + "message": "breakpoint hit" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | attributeModified": { + "message": "Attribute modified" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakOn": { + "message": "Break on" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointHit": { + "message": "breakpoint hit" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointRemoved": { + "message": "Breakpoint removed" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointSet": { + "message": "Breakpoint set" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | checked": { + "message": "checked" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | domBreakpointsList": { + "message": "DOM Breakpoints list" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | noBreakpoints": { + "message": "No breakpoints" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | nodeRemoved": { + "message": "Node removed" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeAllDomBreakpoints": { + "message": "Remove all DOM breakpoints" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeBreakpoint": { + "message": "Remove breakpoint" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | revealDomNodeInElementsPanel": { + "message": "Reveal DOM node in Elements panel" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sBreakpointHit": { + "message": "{PH1} breakpoint hit" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sS": { + "message": "{PH1}: {PH2}" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | subtreeModified": { + "message": "Subtree modified" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | unchecked": { + "message": "unchecked" + }, + "panels/browser_debugger/ObjectEventListenersSidebarPane.ts | refreshGlobalListeners": { + "message": "Refresh global listeners" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addBreakpoint": { + "message": "Add breakpoint" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addXhrfetchBreakpoint": { + "message": "Add XHR/fetch breakpoint" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | anyXhrOrFetch": { + "message": "Any XHR or fetch" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakpointHit": { + "message": "breakpoint hit" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakWhenUrlContains": { + "message": "Break when URL contains:" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | noBreakpoints": { + "message": "No breakpoints" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeAllBreakpoints": { + "message": "Remove all breakpoints" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeBreakpoint": { + "message": "Remove breakpoint" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlBreakpoint": { + "message": "URL Breakpoint" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlContainsS": { + "message": "URL contains \"{PH1}\"" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | xhrfetchBreakpoints": { + "message": "XHR/fetch Breakpoints" + }, + "panels/changes/changes-meta.ts | changes": { + "message": "Changes" + }, + "panels/changes/changes-meta.ts | showChanges": { + "message": "Show Changes" + }, + "panels/changes/ChangesSidebar.ts | sFromSourceMap": { + "message": "{PH1} (from source map)" + }, + "panels/changes/ChangesView.ts | binaryData": { + "message": "Binary data" + }, + "panels/changes/ChangesView.ts | noChanges": { + "message": "No changes" + }, + "panels/changes/ChangesView.ts | revertAllChangesToCurrentFile": { + "message": "Revert all changes to current file" + }, + "panels/changes/ChangesView.ts | sDeletions": { + "message": "{n, plural, =1 {# deletion (-)} other {# deletions (-)}}" + }, + "panels/changes/ChangesView.ts | sInsertions": { + "message": "{n, plural, =1 {# insertion (+)} other {# insertions (+)}}" + }, + "panels/console_counters/WarningErrorCounter.ts | openConsoleToViewS": { + "message": "Open Console to view {PH1}" + }, + "panels/console_counters/WarningErrorCounter.ts | openIssuesToView": { + "message": "{n, plural, =1 {Open Issues to view # issue:} other {Open Issues to view # issues:}}" + }, + "panels/console_counters/WarningErrorCounter.ts | sErrors": { + "message": "{n, plural, =1 {# error} other {# errors}}" + }, + "panels/console_counters/WarningErrorCounter.ts | sWarnings": { + "message": "{n, plural, =1 {# warning} other {# warnings}}" + }, + "panels/console/console-meta.ts | autocompleteFromHistory": { + "message": "Autocomplete from history" + }, + "panels/console/console-meta.ts | clearConsole": { + "message": "Clear console" + }, + "panels/console/console-meta.ts | clearConsoleHistory": { + "message": "Clear console history" + }, + "panels/console/console-meta.ts | console": { + "message": "Console" + }, + "panels/console/console-meta.ts | createLiveExpression": { + "message": "Create live expression" + }, + "panels/console/console-meta.ts | doNotAutocompleteFromHistory": { + "message": "Do not autocomplete from history" + }, + "panels/console/console-meta.ts | doNotEagerlyEvaluateConsole": { + "message": "Do not eagerly evaluate console prompt text" + }, + "panels/console/console-meta.ts | doNotGroupSimilarMessagesIn": { + "message": "Do not group similar messages in console" + }, + "panels/console/console-meta.ts | doNotShowCorsErrorsIn": { + "message": "Do not show CORS errors in console" + }, + "panels/console/console-meta.ts | doNotTreatEvaluationAsUser": { + "message": "Do not treat evaluation as user activation" + }, + "panels/console/console-meta.ts | eagerEvaluation": { + "message": "Eager evaluation" + }, + "panels/console/console-meta.ts | eagerlyEvaluateConsolePromptText": { + "message": "Eagerly evaluate console prompt text" + }, + "panels/console/console-meta.ts | evaluateTriggersUserActivation": { + "message": "Evaluate triggers user activation" + }, + "panels/console/console-meta.ts | groupSimilarMessagesInConsole": { + "message": "Group similar messages in console" + }, + "panels/console/console-meta.ts | hideNetworkMessages": { + "message": "Hide network messages" + }, + "panels/console/console-meta.ts | hideTimestamps": { + "message": "Hide timestamps" + }, + "panels/console/console-meta.ts | logXmlhttprequests": { + "message": "Log XMLHttpRequests" + }, + "panels/console/console-meta.ts | onlyShowMessagesFromTheCurrent": { + "message": "Only show messages from the current context (top, iframe, worker, extension)" + }, + "panels/console/console-meta.ts | selectedContextOnly": { + "message": "Selected context only" + }, + "panels/console/console-meta.ts | showConsole": { + "message": "Show Console" + }, + "panels/console/console-meta.ts | showCorsErrorsInConsole": { + "message": "Show CORS errors in console" + }, + "panels/console/console-meta.ts | showMessagesFromAllContexts": { + "message": "Show messages from all contexts" + }, + "panels/console/console-meta.ts | showNetworkMessages": { + "message": "Show network messages" + }, + "panels/console/console-meta.ts | showTimestamps": { + "message": "Show timestamps" + }, + "panels/console/console-meta.ts | treatEvaluationAsUserActivation": { + "message": "Treat evaluation as user activation" + }, + "panels/console/ConsoleContextSelector.ts | extension": { + "message": "Extension" + }, + "panels/console/ConsoleContextSelector.ts | javascriptContextNotSelected": { + "message": "JavaScript context: Not selected" + }, + "panels/console/ConsoleContextSelector.ts | javascriptContextS": { + "message": "JavaScript context: {PH1}" + }, + "panels/console/ConsolePinPane.ts | evaluateAllowingSideEffects": { + "message": "Evaluate, allowing side effects" + }, + "panels/console/ConsolePinPane.ts | expression": { + "message": "Expression" + }, + "panels/console/ConsolePinPane.ts | liveExpressionEditor": { + "message": "Live expression editor" + }, + "panels/console/ConsolePinPane.ts | notAvailable": { + "message": "not available" + }, + "panels/console/ConsolePinPane.ts | removeAllExpressions": { + "message": "Remove all expressions" + }, + "panels/console/ConsolePinPane.ts | removeBlankExpression": { + "message": "Remove blank expression" + }, + "panels/console/ConsolePinPane.ts | removeExpression": { + "message": "Remove expression" + }, + "panels/console/ConsolePinPane.ts | removeExpressionS": { + "message": "Remove expression: {PH1}" + }, + "panels/console/ConsolePrompt.ts | consolePrompt": { + "message": "Console prompt" + }, + "panels/console/ConsoleSidebar.ts | dErrors": { + "message": "{n, plural, =0 {No errors} =1 {# error} other {# errors}}" + }, + "panels/console/ConsoleSidebar.ts | dInfo": { + "message": "{n, plural, =0 {No info} =1 {# info} other {# info}}" + }, + "panels/console/ConsoleSidebar.ts | dMessages": { + "message": "{n, plural, =0 {No messages} =1 {# message} other {# messages}}" + }, + "panels/console/ConsoleSidebar.ts | dUserMessages": { + "message": "{n, plural, =0 {No user messages} =1 {# user message} other {# user messages}}" + }, + "panels/console/ConsoleSidebar.ts | dVerbose": { + "message": "{n, plural, =0 {No verbose} =1 {# verbose} other {# verbose}}" + }, + "panels/console/ConsoleSidebar.ts | dWarnings": { + "message": "{n, plural, =0 {No warnings} =1 {# warning} other {# warnings}}" + }, + "panels/console/ConsoleSidebar.ts | other": { + "message": "" + }, + "panels/console/ConsoleView.ts | allLevels": { + "message": "All levels" + }, + "panels/console/ConsoleView.ts | consoleCleared": { + "message": "Console cleared" + }, + "panels/console/ConsoleView.ts | consoleSettings": { + "message": "Console settings" + }, + "panels/console/ConsoleView.ts | copyVisibleStyledSelection": { + "message": "Copy visible styled selection" + }, + "panels/console/ConsoleView.ts | customLevels": { + "message": "Custom levels" + }, + "panels/console/ConsoleView.ts | default": { + "message": "Default" + }, + "panels/console/ConsoleView.ts | defaultLevels": { + "message": "Default levels" + }, + "panels/console/ConsoleView.ts | doNotClearLogOnPageReload": { + "message": "Do not clear log on page reload / navigation" + }, + "panels/console/ConsoleView.ts | eagerlyEvaluateTextInThePrompt": { + "message": "Eagerly evaluate text in the prompt" + }, + "panels/console/ConsoleView.ts | egEventdCdnUrlacom": { + "message": "e.g. /eventd/ -cdn url:a.com" + }, + "panels/console/ConsoleView.ts | errors": { + "message": "Errors" + }, + "panels/console/ConsoleView.ts | filter": { + "message": "Filter" + }, + "panels/console/ConsoleView.ts | filteredMessagesInConsole": { + "message": "{PH1} messages in console" + }, + "panels/console/ConsoleView.ts | findStringInLogs": { + "message": "Find string in logs" + }, + "panels/console/ConsoleView.ts | groupSimilarMessagesInConsole": { + "message": "Group similar messages in console" + }, + "panels/console/ConsoleView.ts | hideAll": { + "message": "Hide all" + }, + "panels/console/ConsoleView.ts | hideConsoleSidebar": { + "message": "Hide console sidebar" + }, + "panels/console/ConsoleView.ts | hideMessagesFromS": { + "message": "Hide messages from {PH1}" + }, + "panels/console/ConsoleView.ts | hideNetwork": { + "message": "Hide network" + }, + "panels/console/ConsoleView.ts | info": { + "message": "Info" + }, + "panels/console/ConsoleView.ts | issuesWithColon": { + "message": "{n, plural, =0 {No Issues} =1 {# Issue:} other {# Issues:}}" + }, + "panels/console/ConsoleView.ts | issueToolbarClickToGoToTheIssuesTab": { + "message": "Click to go to the issues tab" + }, + "panels/console/ConsoleView.ts | issueToolbarClickToView": { + "message": "Click to view {issueEnumeration}" + }, + "panels/console/ConsoleView.ts | issueToolbarTooltipGeneral": { + "message": "Some problems no longer generate console messages, but are surfaced in the issues tab." + }, + "panels/console/ConsoleView.ts | logLevels": { + "message": "Log levels" + }, + "panels/console/ConsoleView.ts | logLevelS": { + "message": "Log level: {PH1}" + }, + "panels/console/ConsoleView.ts | onlyShowMessagesFromTheCurrentContext": { + "message": "Only show messages from the current context (top, iframe, worker, extension)" + }, + "panels/console/ConsoleView.ts | overriddenByFilterSidebar": { + "message": "Overridden by filter sidebar" + }, + "panels/console/ConsoleView.ts | preserveLog": { + "message": "Preserve log" + }, + "panels/console/ConsoleView.ts | replayXhr": { + "message": "Replay XHR" + }, + "panels/console/ConsoleView.ts | saveAs": { + "message": "Save as..." + }, + "panels/console/ConsoleView.ts | searching": { + "message": "Searching…" + }, + "panels/console/ConsoleView.ts | selectedContextOnly": { + "message": "Selected context only" + }, + "panels/console/ConsoleView.ts | sHidden": { + "message": "{n, plural, =1 {# hidden} other {# hidden}}" + }, + "panels/console/ConsoleView.ts | showConsoleSidebar": { + "message": "Show console sidebar" + }, + "panels/console/ConsoleView.ts | showCorsErrorsInConsole": { + "message": "Show CORS errors in console" + }, + "panels/console/ConsoleView.ts | sOnly": { + "message": "{PH1} only" + }, + "panels/console/ConsoleView.ts | verbose": { + "message": "Verbose" + }, + "panels/console/ConsoleView.ts | warnings": { + "message": "Warnings" + }, + "panels/console/ConsoleView.ts | writingFile": { + "message": "Writing file…" + }, + "panels/console/ConsoleViewMessage.ts | assertionFailed": { + "message": "Assertion failed: " + }, + "panels/console/ConsoleViewMessage.ts | attribute": { + "message": "" + }, + "panels/console/ConsoleViewMessage.ts | clearAllMessagesWithS": { + "message": "Clear all messages with {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | console": { + "message": "Console" + }, + "panels/console/ConsoleViewMessage.ts | consoleclearWasPreventedDueTo": { + "message": "console.clear() was prevented due to 'Preserve log'" + }, + "panels/console/ConsoleViewMessage.ts | consoleWasCleared": { + "message": "Console was cleared" + }, + "panels/console/ConsoleViewMessage.ts | deprecationS": { + "message": "[Deprecation] {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | error": { + "message": "Error" + }, + "panels/console/ConsoleViewMessage.ts | errorS": { + "message": "{n, plural, =1 {Error, Repeated # time} other {Error, Repeated # times}}" + }, + "panels/console/ConsoleViewMessage.ts | exception": { + "message": "" + }, + "panels/console/ConsoleViewMessage.ts | functionWasResolvedFromBound": { + "message": "Function was resolved from bound function." + }, + "panels/console/ConsoleViewMessage.ts | index": { + "message": "(index)" + }, + "panels/console/ConsoleViewMessage.ts | interventionS": { + "message": "[Intervention] {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | Mxx": { + "message": " M" + }, + "panels/console/ConsoleViewMessage.ts | repeatS": { + "message": "{n, plural, =1 {Repeated # time} other {Repeated # times}}" + }, + "panels/console/ConsoleViewMessage.ts | someEvent": { + "message": " event" + }, + "panels/console/ConsoleViewMessage.ts | stackMessageCollapsed": { + "message": "Stack table collapsed" + }, + "panels/console/ConsoleViewMessage.ts | stackMessageExpanded": { + "message": "Stack table expanded" + }, + "panels/console/ConsoleViewMessage.ts | thisValueWasEvaluatedUponFirst": { + "message": "This value was evaluated upon first expanding. It may have changed since then." + }, + "panels/console/ConsoleViewMessage.ts | thisValueWillNotBeCollectedUntil": { + "message": "This value will not be collected until console is cleared." + }, + "panels/console/ConsoleViewMessage.ts | tookNms": { + "message": "took ms" + }, + "panels/console/ConsoleViewMessage.ts | url": { + "message": "" + }, + "panels/console/ConsoleViewMessage.ts | value": { + "message": "Value" + }, + "panels/console/ConsoleViewMessage.ts | violationS": { + "message": "[Violation] {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | warning": { + "message": "Warning" + }, + "panels/console/ConsoleViewMessage.ts | warningS": { + "message": "{n, plural, =1 {Warning, Repeated # time} other {Warning, Repeated # times}}" + }, + "panels/coverage/coverage-meta.ts | coverage": { + "message": "Coverage" + }, + "panels/coverage/coverage-meta.ts | instrumentCoverage": { + "message": "Instrument coverage" + }, + "panels/coverage/coverage-meta.ts | showCoverage": { + "message": "Show Coverage" + }, + "panels/coverage/coverage-meta.ts | startInstrumentingCoverageAnd": { + "message": "Start instrumenting coverage and reload page" + }, + "panels/coverage/coverage-meta.ts | stopInstrumentingCoverageAndShow": { + "message": "Stop instrumenting coverage and show results" + }, + "panels/coverage/CoverageListView.ts | codeCoverage": { + "message": "Code Coverage" + }, + "panels/coverage/CoverageListView.ts | css": { + "message": "CSS" + }, + "panels/coverage/CoverageListView.ts | jsCoverageWithPerBlock": { + "message": "JS coverage with per block granularity: Once a block of JavaScript was executed, that block is marked as covered." + }, + "panels/coverage/CoverageListView.ts | jsCoverageWithPerFunction": { + "message": "JS coverage with per function granularity: Once a function was executed, the whole function is marked as covered." + }, + "panels/coverage/CoverageListView.ts | jsPerBlock": { + "message": "JS (per block)" + }, + "panels/coverage/CoverageListView.ts | jsPerFunction": { + "message": "JS (per function)" + }, + "panels/coverage/CoverageListView.ts | sBytes": { + "message": "{n, plural, =1 {# byte} other {# bytes}}" + }, + "panels/coverage/CoverageListView.ts | sBytesS": { + "message": "{n, plural, =1 {# byte, {percentage}} other {# bytes, {percentage}}}" + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOf": { + "message": "{PH1} bytes ({PH2}) belong to blocks of JavaScript that have not (yet) been executed." + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOfJavascript": { + "message": "{PH1} bytes ({PH2}) belong to blocks of JavaScript that have executed at least once." + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHave": { + "message": "{PH1} bytes ({PH2}) belong to functions that have not (yet) been executed." + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHaveExecuted": { + "message": "{PH1} bytes ({PH2}) belong to functions that have executed at least once." + }, + "panels/coverage/CoverageListView.ts | sOfFileUnusedSOfFileUsed": { + "message": "{PH1} % of file unused, {PH2} % of file used" + }, + "panels/coverage/CoverageListView.ts | totalBytes": { + "message": "Total Bytes" + }, + "panels/coverage/CoverageListView.ts | type": { + "message": "Type" + }, + "panels/coverage/CoverageListView.ts | unusedBytes": { + "message": "Unused Bytes" + }, + "panels/coverage/CoverageListView.ts | url": { + "message": "URL" + }, + "panels/coverage/CoverageListView.ts | usageVisualization": { + "message": "Usage Visualization" + }, + "panels/coverage/CoverageView.ts | all": { + "message": "All" + }, + "panels/coverage/CoverageView.ts | chooseCoverageGranularityPer": { + "message": "Choose coverage granularity: Per function has low overhead, per block has significant overhead." + }, + "panels/coverage/CoverageView.ts | clearAll": { + "message": "Clear all" + }, + "panels/coverage/CoverageView.ts | clickTheRecordButtonSToStart": { + "message": "Click the record button {PH1} to start capturing coverage." + }, + "panels/coverage/CoverageView.ts | clickTheReloadButtonSToReloadAnd": { + "message": "Click the reload button {PH1} to reload and start capturing coverage." + }, + "panels/coverage/CoverageView.ts | contentScripts": { + "message": "Content scripts" + }, + "panels/coverage/CoverageView.ts | css": { + "message": "CSS" + }, + "panels/coverage/CoverageView.ts | export": { + "message": "Export..." + }, + "panels/coverage/CoverageView.ts | filterCoverageByType": { + "message": "Filter coverage by type" + }, + "panels/coverage/CoverageView.ts | filteredSTotalS": { + "message": "Filtered: {PH1} Total: {PH2}" + }, + "panels/coverage/CoverageView.ts | includeExtensionContentScripts": { + "message": "Include extension content scripts" + }, + "panels/coverage/CoverageView.ts | javascript": { + "message": "JavaScript" + }, + "panels/coverage/CoverageView.ts | perBlock": { + "message": "Per block" + }, + "panels/coverage/CoverageView.ts | perFunction": { + "message": "Per function" + }, + "panels/coverage/CoverageView.ts | sOfSSUsedSoFarSUnused": { + "message": "{PH1} of {PH2} ({PH3}%) used so far, {PH4} unused." + }, + "panels/coverage/CoverageView.ts | urlFilter": { + "message": "URL filter" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | captureOverview": { + "message": "Capture overview" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | capturePageCSSOverview": { + "message": "Capture an overview of your page’s CSS" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovements": { + "message": "Identify potential CSS improvements" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovementsWithExampleIssues": { + "message": "Identify potential CSS improvements (e.g. low contrast issues, unused declarations, color or font mismatches)" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | locateAffectedElements": { + "message": "Locate the affected elements in the Elements panel" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | quickStartWithCSSOverview": { + "message": "Quick start: get started with the new CSS Overview panel" + }, + "panels/css_overview/css_overview-meta.ts | cssOverview": { + "message": "CSS Overview" + }, + "panels/css_overview/css_overview-meta.ts | showCssOverview": { + "message": "Show CSS Overview" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | aa": { + "message": "AA" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | aaa": { + "message": "AAA" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | apca": { + "message": "APCA" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | attributeSelectors": { + "message": "Attribute selectors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | backgroundColorsS": { + "message": "Background colors: {PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | borderColorsS": { + "message": "Border colors: {PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | classSelectors": { + "message": "Class selectors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | colors": { + "message": "Colors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | contrastIssues": { + "message": "Contrast issues" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | contrastIssuesS": { + "message": "Contrast issues: {PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | contrastRatio": { + "message": "Contrast ratio" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | cssOverviewElements": { + "message": "CSS Overview Elements" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | declaration": { + "message": "Declaration" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | element": { + "message": "Element" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | elements": { + "message": "Elements" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | externalStylesheets": { + "message": "External stylesheets" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | fillColorsS": { + "message": "Fill colors: {PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | fontInfo": { + "message": "Font info" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | idSelectors": { + "message": "ID selectors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | inlineStyleElements": { + "message": "Inline style elements" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | mediaQueries": { + "message": "Media queries" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | nOccurrences": { + "message": "{n, plural, =1 {# occurrence} other {# occurrences}}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | nonsimpleSelectors": { + "message": "Non-simple selectors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | overviewSummary": { + "message": "Overview summary" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | showElement": { + "message": "Show element" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | source": { + "message": "Source" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | styleRules": { + "message": "Style rules" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | textColorSOverSBackgroundResults": { + "message": "Text color {PH1} over {PH2} background results in low contrast for {PH3} elements" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | textColorsS": { + "message": "Text colors: {PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoFonts": { + "message": "There are no fonts." + }, + "panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoMediaQueries": { + "message": "There are no media queries." + }, + "panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoUnusedDeclarations": { + "message": "There are no unused declarations." + }, + "panels/css_overview/CSSOverviewCompletedView.ts | typeSelectors": { + "message": "Type selectors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | universalSelectors": { + "message": "Universal selectors" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | unusedDeclarations": { + "message": "Unused declarations" + }, + "panels/css_overview/CSSOverviewProcessingView.ts | cancel": { + "message": "Cancel" + }, + "panels/css_overview/CSSOverviewSidebarPanel.ts | clearOverview": { + "message": "Clear overview" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | bottomAppliedToAStatically": { + "message": "Bottom applied to a statically positioned element" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | heightAppliedToAnInlineElement": { + "message": "Height applied to an inline element" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | leftAppliedToAStatically": { + "message": "Left applied to a statically positioned element" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | rightAppliedToAStatically": { + "message": "Right applied to a statically positioned element" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | topAppliedToAStatically": { + "message": "Top applied to a statically positioned element" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | verticalAlignmentAppliedTo": { + "message": "Vertical alignment applied to element which is neither inline nor table-cell" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | widthAppliedToAnInlineElement": { + "message": "Width applied to an inline element" + }, + "panels/developer_resources/developer_resources-meta.ts | developerResources": { + "message": "Developer Resources" + }, + "panels/developer_resources/developer_resources-meta.ts | showDeveloperResources": { + "message": "Show Developer Resources" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | copyInitiatorUrl": { + "message": "Copy initiator URL" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | copyUrl": { + "message": "Copy URL" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | developerResources": { + "message": "Developer Resources" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | error": { + "message": "Error" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | failure": { + "message": "failure" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | initiator": { + "message": "Initiator" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | pending": { + "message": "pending" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | sBytes": { + "message": "{n, plural, =1 {# byte} other {# bytes}}" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | status": { + "message": "Status" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | success": { + "message": "success" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | totalBytes": { + "message": "Total Bytes" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | url": { + "message": "URL" + }, + "panels/developer_resources/DeveloperResourcesView.ts | enableLoadingThroughTarget": { + "message": "Enable loading through target" + }, + "panels/developer_resources/DeveloperResourcesView.ts | enterTextToSearchTheUrlAndError": { + "message": "Enter text to search the URL and Error columns" + }, + "panels/developer_resources/DeveloperResourcesView.ts | loadHttpsDeveloperResources": { + "message": "Load HTTP(S) developer resources through the inspected target" + }, + "panels/developer_resources/DeveloperResourcesView.ts | resources": { + "message": "{n, plural, =1 {# resource} other {# resources}}" + }, + "panels/developer_resources/DeveloperResourcesView.ts | resourcesCurrentlyLoading": { + "message": "{PH1} resources, {PH2} currently loading" + }, + "panels/elements/ClassesPaneWidget.ts | addNewClass": { + "message": "Add new class" + }, + "panels/elements/ClassesPaneWidget.ts | classesSAdded": { + "message": "Classes {PH1} added" + }, + "panels/elements/ClassesPaneWidget.ts | classSAdded": { + "message": "Class {PH1} added" + }, + "panels/elements/ClassesPaneWidget.ts | elementClasses": { + "message": "Element Classes" + }, + "panels/elements/ColorSwatchPopoverIcon.ts | openCubicBezierEditor": { + "message": "Open cubic bezier editor" + }, + "panels/elements/ColorSwatchPopoverIcon.ts | openShadowEditor": { + "message": "Open shadow editor" + }, + "panels/elements/components/AccessibilityTreeNode.ts | ignored": { + "message": "Ignored" + }, + "panels/elements/components/AdornerSettingsPane.ts | closeButton": { + "message": "Close" + }, + "panels/elements/components/AdornerSettingsPane.ts | settingsTitle": { + "message": "Show badges" + }, + "panels/elements/components/ElementsBreadcrumbs.ts | breadcrumbs": { + "message": "DOM tree breadcrumbs" + }, + "panels/elements/components/ElementsBreadcrumbsUtils.ts | text": { + "message": "(text)" + }, + "panels/elements/components/LayoutPane.ts | chooseElementOverlayColor": { + "message": "Choose the overlay color for this element" + }, + "panels/elements/components/LayoutPane.ts | colorPickerOpened": { + "message": "Color picker opened." + }, + "panels/elements/components/LayoutPane.ts | flexbox": { + "message": "Flexbox" + }, + "panels/elements/components/LayoutPane.ts | flexboxOverlays": { + "message": "Flexbox overlays" + }, + "panels/elements/components/LayoutPane.ts | grid": { + "message": "Grid" + }, + "panels/elements/components/LayoutPane.ts | gridOverlays": { + "message": "Grid overlays" + }, + "panels/elements/components/LayoutPane.ts | noFlexboxLayoutsFoundOnThisPage": { + "message": "No flexbox layouts found on this page" + }, + "panels/elements/components/LayoutPane.ts | noGridLayoutsFoundOnThisPage": { + "message": "No grid layouts found on this page" + }, + "panels/elements/components/LayoutPane.ts | overlayDisplaySettings": { + "message": "Overlay display settings" + }, + "panels/elements/components/LayoutPane.ts | showElementInTheElementsPanel": { + "message": "Show element in the Elements panel" + }, + "panels/elements/components/StylePropertyEditor.ts | deselectButton": { + "message": "Remove {propertyName}: {propertyValue}" + }, + "panels/elements/components/StylePropertyEditor.ts | selectButton": { + "message": "Add {propertyName}: {propertyValue}" + }, + "panels/elements/ComputedStyleWidget.ts | filter": { + "message": "Filter" + }, + "panels/elements/ComputedStyleWidget.ts | filterComputedStyles": { + "message": "Filter Computed Styles" + }, + "panels/elements/ComputedStyleWidget.ts | group": { + "message": "Group" + }, + "panels/elements/ComputedStyleWidget.ts | navigateToSelectorSource": { + "message": "Navigate to selector source" + }, + "panels/elements/ComputedStyleWidget.ts | navigateToStyle": { + "message": "Navigate to style" + }, + "panels/elements/ComputedStyleWidget.ts | noMatchingProperty": { + "message": "No matching property" + }, + "panels/elements/ComputedStyleWidget.ts | showAll": { + "message": "Show all" + }, + "panels/elements/DOMLinkifier.ts | node": { + "message": "" + }, + "panels/elements/elements-meta.ts | captureAreaScreenshot": { + "message": "Capture area screenshot" + }, + "panels/elements/elements-meta.ts | copyStyles": { + "message": "Copy styles" + }, + "panels/elements/elements-meta.ts | disableDomWordWrap": { + "message": "Disable DOM word wrap" + }, + "panels/elements/elements-meta.ts | duplicateElement": { + "message": "Duplicate element" + }, + "panels/elements/elements-meta.ts | editAsHtml": { + "message": "Edit as HTML" + }, + "panels/elements/elements-meta.ts | elements": { + "message": "Elements" + }, + "panels/elements/elements-meta.ts | enableDomWordWrap": { + "message": "Enable DOM word wrap" + }, + "panels/elements/elements-meta.ts | eventListeners": { + "message": "Event Listeners" + }, + "panels/elements/elements-meta.ts | hideElement": { + "message": "Hide element" + }, + "panels/elements/elements-meta.ts | hideHtmlComments": { + "message": "Hide HTML comments" + }, + "panels/elements/elements-meta.ts | layout": { + "message": "Layout" + }, + "panels/elements/elements-meta.ts | properties": { + "message": "Properties" + }, + "panels/elements/elements-meta.ts | redo": { + "message": "Redo" + }, + "panels/elements/elements-meta.ts | revealDomNodeOnHover": { + "message": "Reveal DOM node on hover" + }, + "panels/elements/elements-meta.ts | selectAnElementInThePageTo": { + "message": "Select an element in the page to inspect it" + }, + "panels/elements/elements-meta.ts | showDetailedInspectTooltip": { + "message": "Show detailed inspect tooltip" + }, + "panels/elements/elements-meta.ts | showElements": { + "message": "Show Elements" + }, + "panels/elements/elements-meta.ts | showEventListeners": { + "message": "Show Event Listeners" + }, + "panels/elements/elements-meta.ts | showHtmlComments": { + "message": "Show HTML comments" + }, + "panels/elements/elements-meta.ts | showLayout": { + "message": "Show Layout" + }, + "panels/elements/elements-meta.ts | showProperties": { + "message": "Show Properties" + }, + "panels/elements/elements-meta.ts | showStackTrace": { + "message": "Show Stack Trace" + }, + "panels/elements/elements-meta.ts | showUserAgentShadowDOM": { + "message": "Show user agent shadow DOM" + }, + "panels/elements/elements-meta.ts | stackTrace": { + "message": "Stack Trace" + }, + "panels/elements/elements-meta.ts | undo": { + "message": "Undo" + }, + "panels/elements/elements-meta.ts | wordWrap": { + "message": "Word wrap" + }, + "panels/elements/ElementsPanel.ts | computed": { + "message": "Computed" + }, + "panels/elements/ElementsPanel.ts | domTreeExplorer": { + "message": "DOM tree explorer" + }, + "panels/elements/ElementsPanel.ts | elementStateS": { + "message": "Element state: {PH1}" + }, + "panels/elements/ElementsPanel.ts | findByStringSelectorOrXpath": { + "message": "Find by string, selector, or XPath" + }, + "panels/elements/ElementsPanel.ts | frame": { + "message": "Frame" + }, + "panels/elements/ElementsPanel.ts | hideComputedStylesSidebar": { + "message": "Hide Computed Styles sidebar" + }, + "panels/elements/ElementsPanel.ts | nodeCannotBeFoundInTheCurrent": { + "message": "Node cannot be found in the current page." + }, + "panels/elements/ElementsPanel.ts | revealInElementsPanel": { + "message": "Reveal in Elements panel" + }, + "panels/elements/ElementsPanel.ts | showComputedStylesSidebar": { + "message": "Show Computed Styles sidebar" + }, + "panels/elements/ElementsPanel.ts | sidePanelContent": { + "message": "Side panel content" + }, + "panels/elements/ElementsPanel.ts | sidePanelToolbar": { + "message": "Side panel toolbar" + }, + "panels/elements/ElementsPanel.ts | styles": { + "message": "Styles" + }, + "panels/elements/ElementsPanel.ts | switchToAccessibilityTreeView": { + "message": "Switch to Accessibility Tree view" + }, + "panels/elements/ElementsPanel.ts | switchToDomTreeView": { + "message": "Switch to DOM Tree view" + }, + "panels/elements/ElementsPanel.ts | theDeferredDomNodeCouldNotBe": { + "message": "The deferred DOM Node could not be resolved to a valid node." + }, + "panels/elements/ElementsPanel.ts | theRemoteObjectCouldNotBe": { + "message": "The remote object could not be resolved to a valid node." + }, + "panels/elements/ElementStatePaneWidget.ts | forceElementState": { + "message": "Force element state" + }, + "panels/elements/ElementStatePaneWidget.ts | toggleElementState": { + "message": "Toggle Element State" + }, + "panels/elements/ElementsTreeElement.ts | addAttribute": { + "message": "Add attribute" + }, + "panels/elements/ElementsTreeElement.ts | captureNodeScreenshot": { + "message": "Capture node screenshot" + }, + "panels/elements/ElementsTreeElement.ts | children": { + "message": "Children:" + }, + "panels/elements/ElementsTreeElement.ts | collapseChildren": { + "message": "Collapse children" + }, + "panels/elements/ElementsTreeElement.ts | copy": { + "message": "Copy" + }, + "panels/elements/ElementsTreeElement.ts | copyElement": { + "message": "Copy element" + }, + "panels/elements/ElementsTreeElement.ts | copyFullXpath": { + "message": "Copy full XPath" + }, + "panels/elements/ElementsTreeElement.ts | copyJsPath": { + "message": "Copy JS path" + }, + "panels/elements/ElementsTreeElement.ts | copyOuterhtml": { + "message": "Copy outerHTML" + }, + "panels/elements/ElementsTreeElement.ts | copySelector": { + "message": "Copy selector" + }, + "panels/elements/ElementsTreeElement.ts | copyStyles": { + "message": "Copy styles" + }, + "panels/elements/ElementsTreeElement.ts | copyXpath": { + "message": "Copy XPath" + }, + "panels/elements/ElementsTreeElement.ts | cut": { + "message": "Cut" + }, + "panels/elements/ElementsTreeElement.ts | deleteElement": { + "message": "Delete element" + }, + "panels/elements/ElementsTreeElement.ts | disableFlexMode": { + "message": "Disable flex mode" + }, + "panels/elements/ElementsTreeElement.ts | disableGridMode": { + "message": "Disable grid mode" + }, + "panels/elements/ElementsTreeElement.ts | disableScrollSnap": { + "message": "Disable scroll-snap overlay" + }, + "panels/elements/ElementsTreeElement.ts | duplicateElement": { + "message": "Duplicate element" + }, + "panels/elements/ElementsTreeElement.ts | editAsHtml": { + "message": "Edit as HTML" + }, + "panels/elements/ElementsTreeElement.ts | editAttribute": { + "message": "Edit attribute" + }, + "panels/elements/ElementsTreeElement.ts | editText": { + "message": "Edit text" + }, + "panels/elements/ElementsTreeElement.ts | enableFlexMode": { + "message": "Enable flex mode" + }, + "panels/elements/ElementsTreeElement.ts | enableGridMode": { + "message": "Enable grid mode" + }, + "panels/elements/ElementsTreeElement.ts | enableScrollSnap": { + "message": "Enable scroll-snap overlay" + }, + "panels/elements/ElementsTreeElement.ts | enterIsolationMode": { + "message": "Enter Isolation Mode" + }, + "panels/elements/ElementsTreeElement.ts | exitIsolationMode": { + "message": "Exit Isolation Mode" + }, + "panels/elements/ElementsTreeElement.ts | expandRecursively": { + "message": "Expand recursively" + }, + "panels/elements/ElementsTreeElement.ts | focus": { + "message": "Focus" + }, + "panels/elements/ElementsTreeElement.ts | forceState": { + "message": "Force state" + }, + "panels/elements/ElementsTreeElement.ts | hideElement": { + "message": "Hide element" + }, + "panels/elements/ElementsTreeElement.ts | paste": { + "message": "Paste" + }, + "panels/elements/ElementsTreeElement.ts | scrollIntoView": { + "message": "Scroll into view" + }, + "panels/elements/ElementsTreeElement.ts | showFrameDetails": { + "message": "Show iframe details" + }, + "panels/elements/ElementsTreeElement.ts | thisFrameWasIdentifiedAsAnAd": { + "message": "This frame was identified as an ad frame" + }, + "panels/elements/ElementsTreeElement.ts | useSInTheConsoleToReferToThis": { + "message": "Use {PH1} in the console to refer to this element." + }, + "panels/elements/ElementsTreeElement.ts | valueIsTooLargeToEdit": { + "message": "" + }, + "panels/elements/ElementsTreeOutline.ts | adornerSettings": { + "message": "Badge settings…" + }, + "panels/elements/ElementsTreeOutline.ts | pageDom": { + "message": "Page DOM" + }, + "panels/elements/ElementsTreeOutline.ts | reveal": { + "message": "reveal" + }, + "panels/elements/ElementsTreeOutline.ts | showAllNodesDMore": { + "message": "Show All Nodes ({PH1} More)" + }, + "panels/elements/ElementsTreeOutline.ts | storeAsGlobalVariable": { + "message": "Store as global variable" + }, + "panels/elements/EventListenersWidget.ts | all": { + "message": "All" + }, + "panels/elements/EventListenersWidget.ts | ancestors": { + "message": "Ancestors" + }, + "panels/elements/EventListenersWidget.ts | blocking": { + "message": "Blocking" + }, + "panels/elements/EventListenersWidget.ts | eventListenersCategory": { + "message": "Event listeners category" + }, + "panels/elements/EventListenersWidget.ts | frameworkListeners": { + "message": "Framework listeners" + }, + "panels/elements/EventListenersWidget.ts | passive": { + "message": "Passive" + }, + "panels/elements/EventListenersWidget.ts | refresh": { + "message": "Refresh" + }, + "panels/elements/EventListenersWidget.ts | resolveEventListenersBoundWith": { + "message": "Resolve event listeners bound with framework" + }, + "panels/elements/EventListenersWidget.ts | showListenersOnTheAncestors": { + "message": "Show listeners on the ancestors" + }, + "panels/elements/MarkerDecorator.ts | domBreakpoint": { + "message": "DOM Breakpoint" + }, + "panels/elements/MarkerDecorator.ts | elementIsHidden": { + "message": "Element is hidden" + }, + "panels/elements/NodeStackTraceWidget.ts | noStackTraceAvailable": { + "message": "No stack trace available" + }, + "panels/elements/PlatformFontsWidget.ts | dGlyphs": { + "message": "{n, plural, =1 {(# glyph)} other {(# glyphs)}}" + }, + "panels/elements/PlatformFontsWidget.ts | localFile": { + "message": "Local file" + }, + "panels/elements/PlatformFontsWidget.ts | networkResource": { + "message": "Network resource" + }, + "panels/elements/PlatformFontsWidget.ts | renderedFonts": { + "message": "Rendered Fonts" + }, + "panels/elements/StylePropertyTreeElement.ts | copyAllCssDeclarationsAsJs": { + "message": "Copy all declarations as JS" + }, + "panels/elements/StylePropertyTreeElement.ts | copyAllDeclarations": { + "message": "Copy all declarations" + }, + "panels/elements/StylePropertyTreeElement.ts | copyCssDeclarationAsJs": { + "message": "Copy declaration as JS" + }, + "panels/elements/StylePropertyTreeElement.ts | copyDeclaration": { + "message": "Copy declaration" + }, + "panels/elements/StylePropertyTreeElement.ts | copyProperty": { + "message": "Copy property" + }, + "panels/elements/StylePropertyTreeElement.ts | copyRule": { + "message": "Copy rule" + }, + "panels/elements/StylePropertyTreeElement.ts | copyValue": { + "message": "Copy value" + }, + "panels/elements/StylePropertyTreeElement.ts | flexboxEditorButton": { + "message": "Open flexbox editor" + }, + "panels/elements/StylePropertyTreeElement.ts | gridEditorButton": { + "message": "Open grid editor" + }, + "panels/elements/StylePropertyTreeElement.ts | openColorPickerS": { + "message": "Open color picker. {PH1}" + }, + "panels/elements/StylePropertyTreeElement.ts | revealInSourcesPanel": { + "message": "Reveal in Sources panel" + }, + "panels/elements/StylePropertyTreeElement.ts | shiftClickToChangeColorFormat": { + "message": "Shift + Click to change color format." + }, + "panels/elements/StylePropertyTreeElement.ts | togglePropertyAndContinueEditing": { + "message": "Toggle property and continue editing" + }, + "panels/elements/StylePropertyTreeElement.ts | valueForSettingSSIsOutsideThe": { + "message": "Value for setting “{PH1}” {PH2} is outside the supported range [{PH3}, {PH4}] for font-family “{PH5}”." + }, + "panels/elements/StylePropertyTreeElement.ts | viewComputedValue": { + "message": "View computed value" + }, + "panels/elements/StylesSidebarPane.ts | constructedStylesheet": { + "message": "constructed stylesheet" + }, + "panels/elements/StylesSidebarPane.ts | copyAllDeclarations": { + "message": "Copy all declarations" + }, + "panels/elements/StylesSidebarPane.ts | copyRule": { + "message": "Copy rule" + }, + "panels/elements/StylesSidebarPane.ts | copySelector": { + "message": "Copy selector" + }, + "panels/elements/StylesSidebarPane.ts | cssPropertyName": { + "message": "CSS property name" + }, + "panels/elements/StylesSidebarPane.ts | cssPropertyValue": { + "message": "CSS property value" + }, + "panels/elements/StylesSidebarPane.ts | cssSelector": { + "message": "CSS selector" + }, + "panels/elements/StylesSidebarPane.ts | filter": { + "message": "Filter" + }, + "panels/elements/StylesSidebarPane.ts | filterStyles": { + "message": "Filter Styles" + }, + "panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelHundred": { + "message": "Increment/decrement with mousewheel or up/down keys. {PH1}: ±100, Shift: ±10, Alt: ±0.1" + }, + "panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelOne": { + "message": "Increment/decrement with mousewheel or up/down keys. {PH1}: R ±1, Shift: G ±1, Alt: B ±1" + }, + "panels/elements/StylesSidebarPane.ts | inheritedFroms": { + "message": "Inherited from " + }, + "panels/elements/StylesSidebarPane.ts | injectedStylesheet": { + "message": "injected stylesheet" + }, + "panels/elements/StylesSidebarPane.ts | insertStyleRuleBelow": { + "message": "Insert Style Rule Below" + }, + "panels/elements/StylesSidebarPane.ts | invalidPropertyValue": { + "message": "Invalid property value" + }, + "panels/elements/StylesSidebarPane.ts | invalidString": { + "message": "{PH1}, property name: {PH2}, property value: {PH3}" + }, + "panels/elements/StylesSidebarPane.ts | newStyleRule": { + "message": "New Style Rule" + }, + "panels/elements/StylesSidebarPane.ts | noMatchingSelectorOrStyle": { + "message": "No matching selector or style" + }, + "panels/elements/StylesSidebarPane.ts | pseudoSElement": { + "message": "Pseudo ::{PH1} element" + }, + "panels/elements/StylesSidebarPane.ts | sattributesStyle": { + "message": "{PH1}[Attributes Style]" + }, + "panels/elements/StylesSidebarPane.ts | showAllPropertiesSMore": { + "message": "Show All Properties ({PH1} more)" + }, + "panels/elements/StylesSidebarPane.ts | styleAttribute": { + "message": "style attribute" + }, + "panels/elements/StylesSidebarPane.ts | unknownPropertyName": { + "message": "Unknown property name" + }, + "panels/elements/StylesSidebarPane.ts | userAgentStylesheet": { + "message": "user agent stylesheet" + }, + "panels/elements/StylesSidebarPane.ts | viaInspector": { + "message": "via inspector" + }, + "panels/emulation/DeviceModeToolbar.ts | addDevicePixelRatio": { + "message": "Add device pixel ratio" + }, + "panels/emulation/DeviceModeToolbar.ts | addDeviceType": { + "message": "Add device type" + }, + "panels/emulation/DeviceModeToolbar.ts | autoadjustZoom": { + "message": "Auto-adjust zoom" + }, + "panels/emulation/DeviceModeToolbar.ts | closeDevtools": { + "message": "Close DevTools" + }, + "panels/emulation/DeviceModeToolbar.ts | defaultF": { + "message": "Default: {PH1}" + }, + "panels/emulation/DeviceModeToolbar.ts | devicePixelRatio": { + "message": "Device pixel ratio" + }, + "panels/emulation/DeviceModeToolbar.ts | deviceType": { + "message": "Device type" + }, + "panels/emulation/DeviceModeToolbar.ts | dimensions": { + "message": "Dimensions" + }, + "panels/emulation/DeviceModeToolbar.ts | edit": { + "message": "Edit…" + }, + "panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeature": { + "message": "\"Experimental Web Platform Feature\" flag is enabled. Click to disable it." + }, + "panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeatureFlag": { + "message": "\"Experimental Web Platform Feature\" flag is disabled. Click to enable it." + }, + "panels/emulation/DeviceModeToolbar.ts | fitToWindowF": { + "message": "Fit to window ({PH1}%)" + }, + "panels/emulation/DeviceModeToolbar.ts | heightLeaveEmptyForFull": { + "message": "Height (leave empty for full)" + }, + "panels/emulation/DeviceModeToolbar.ts | hideDeviceFrame": { + "message": "Hide device frame" + }, + "panels/emulation/DeviceModeToolbar.ts | hideMediaQueries": { + "message": "Hide media queries" + }, + "panels/emulation/DeviceModeToolbar.ts | hideRulers": { + "message": "Hide rulers" + }, + "panels/emulation/DeviceModeToolbar.ts | landscape": { + "message": "Landscape" + }, + "panels/emulation/DeviceModeToolbar.ts | moreOptions": { + "message": "More options" + }, + "panels/emulation/DeviceModeToolbar.ts | none": { + "message": "None" + }, + "panels/emulation/DeviceModeToolbar.ts | portrait": { + "message": "Portrait" + }, + "panels/emulation/DeviceModeToolbar.ts | removeDevicePixelRatio": { + "message": "Remove device pixel ratio" + }, + "panels/emulation/DeviceModeToolbar.ts | removeDeviceType": { + "message": "Remove device type" + }, + "panels/emulation/DeviceModeToolbar.ts | resetToDefaults": { + "message": "Reset to defaults" + }, + "panels/emulation/DeviceModeToolbar.ts | responsive": { + "message": "Responsive" + }, + "panels/emulation/DeviceModeToolbar.ts | rotate": { + "message": "Rotate" + }, + "panels/emulation/DeviceModeToolbar.ts | screenOrientationOptions": { + "message": "Screen orientation options" + }, + "panels/emulation/DeviceModeToolbar.ts | showDeviceFrame": { + "message": "Show device frame" + }, + "panels/emulation/DeviceModeToolbar.ts | showMediaQueries": { + "message": "Show media queries" + }, + "panels/emulation/DeviceModeToolbar.ts | showRulers": { + "message": "Show rulers" + }, + "panels/emulation/DeviceModeToolbar.ts | toggleDualscreenMode": { + "message": "Toggle dual-screen mode" + }, + "panels/emulation/DeviceModeToolbar.ts | width": { + "message": "Width" + }, + "panels/emulation/DeviceModeToolbar.ts | zoom": { + "message": "Zoom" + }, + "panels/emulation/DeviceModeView.ts | doubleclickForFullHeight": { + "message": "Double-click for full height" + }, + "panels/emulation/DeviceModeView.ts | laptop": { + "message": "Laptop" + }, + "panels/emulation/DeviceModeView.ts | laptopL": { + "message": "Laptop L" + }, + "panels/emulation/DeviceModeView.ts | mobileL": { + "message": "Mobile L" + }, + "panels/emulation/DeviceModeView.ts | mobileM": { + "message": "Mobile M" + }, + "panels/emulation/DeviceModeView.ts | mobileS": { + "message": "Mobile S" + }, + "panels/emulation/DeviceModeView.ts | tablet": { + "message": "Tablet" + }, + "panels/emulation/emulation-meta.ts | captureFullSizeScreenshot": { + "message": "Capture full size screenshot" + }, + "panels/emulation/emulation-meta.ts | captureNodeScreenshot": { + "message": "Capture node screenshot" + }, + "panels/emulation/emulation-meta.ts | captureScreenshot": { + "message": "Capture screenshot" + }, + "panels/emulation/emulation-meta.ts | device": { + "message": "device" + }, + "panels/emulation/emulation-meta.ts | hideDeviceFrame": { + "message": "Hide device frame" + }, + "panels/emulation/emulation-meta.ts | hideMediaQueries": { + "message": "Hide media queries" + }, + "panels/emulation/emulation-meta.ts | hideRulers": { + "message": "Hide rulers in the Device Mode toolbar" + }, + "panels/emulation/emulation-meta.ts | showDeviceFrame": { + "message": "Show device frame" + }, + "panels/emulation/emulation-meta.ts | showMediaQueries": { + "message": "Show media queries" + }, + "panels/emulation/emulation-meta.ts | showRulers": { + "message": "Show rulers in the Device Mode toolbar" + }, + "panels/emulation/emulation-meta.ts | toggleDeviceToolbar": { + "message": "Toggle device toolbar" + }, + "panels/emulation/MediaQueryInspector.ts | revealInSourceCode": { + "message": "Reveal in source code" + }, + "panels/event_listeners/EventListenersView.ts | deleteEventListener": { + "message": "Delete event listener" + }, + "panels/event_listeners/EventListenersView.ts | noEventListeners": { + "message": "No event listeners" + }, + "panels/event_listeners/EventListenersView.ts | passive": { + "message": "Passive" + }, + "panels/event_listeners/EventListenersView.ts | remove": { + "message": "Remove" + }, + "panels/event_listeners/EventListenersView.ts | revealInElementsPanel": { + "message": "Reveal in Elements panel" + }, + "panels/event_listeners/EventListenersView.ts | togglePassive": { + "message": "Toggle Passive" + }, + "panels/event_listeners/EventListenersView.ts | toggleWhetherEventListenerIs": { + "message": "Toggle whether event listener is passive or blocking" + }, + "panels/help/help-meta.ts | bug": { + "message": "bug" + }, + "panels/help/help-meta.ts | doNotShowWhatsNewAfterEachUpdate": { + "message": "Do not show What's New after each update" + }, + "panels/help/help-meta.ts | releaseNotes": { + "message": "Release notes" + }, + "panels/help/help-meta.ts | reportADevtoolsIssue": { + "message": "Report a DevTools issue" + }, + "panels/help/help-meta.ts | reportTranslationIssue": { + "message": "Report a translation issue" + }, + "panels/help/help-meta.ts | showWhatsNew": { + "message": "Show What's New" + }, + "panels/help/help-meta.ts | showWhatsNewAfterEachUpdate": { + "message": "Show What's New after each update" + }, + "panels/help/help-meta.ts | whatsNew": { + "message": "What's New" + }, + "panels/help/ReleaseNoteView.ts | close": { + "message": "Close" + }, + "panels/help/ReleaseNoteView.ts | learnMore": { + "message": "Learn more" + }, + "panels/input/input-meta.ts | inputs": { + "message": "Inputs" + }, + "panels/input/input-meta.ts | pause": { + "message": "Pause" + }, + "panels/input/input-meta.ts | resume": { + "message": "Resume" + }, + "panels/input/input-meta.ts | showInputs": { + "message": "Show Inputs" + }, + "panels/input/input-meta.ts | startRecording": { + "message": "Start recording" + }, + "panels/input/input-meta.ts | startReplaying": { + "message": "Start replaying" + }, + "panels/input/input-meta.ts | stopRecording": { + "message": "Stop recording" + }, + "panels/input/InputTimeline.ts | clearAll": { + "message": "Clear all" + }, + "panels/input/InputTimeline.ts | loadProfile": { + "message": "Load profile…" + }, + "panels/input/InputTimeline.ts | saveProfile": { + "message": "Save profile…" + }, + "panels/issues/AffectedBlockedByResponseView.ts | blockedResource": { + "message": "Blocked Resource" + }, + "panels/issues/AffectedBlockedByResponseView.ts | nRequests": { + "message": "{n, plural, =1 {# request} other {# requests}}" + }, + "panels/issues/AffectedBlockedByResponseView.ts | parentFrame": { + "message": "Parent Frame" + }, + "panels/issues/AffectedBlockedByResponseView.ts | requestC": { + "message": "Request" + }, + "panels/issues/AffectedCookiesView.ts | domain": { + "message": "Domain" + }, + "panels/issues/AffectedCookiesView.ts | filterSetCookieTitle": { + "message": "Show network requests that include this Set-Cookie header in the network panel" + }, + "panels/issues/AffectedCookiesView.ts | name": { + "message": "Name" + }, + "panels/issues/AffectedCookiesView.ts | nCookies": { + "message": "{n, plural, =1 {# cookie} other {# cookies}}" + }, + "panels/issues/AffectedCookiesView.ts | nRawCookieLines": { + "message": "{n, plural, =1 {1 Raw Set-Cookie header} other {# Raw Set-Cookie headers}}" + }, + "panels/issues/AffectedCookiesView.ts | path": { + "message": "Path" + }, + "panels/issues/AffectedDirectivesView.ts | blocked": { + "message": "blocked" + }, + "panels/issues/AffectedDirectivesView.ts | clickToRevealTheViolatingDomNode": { + "message": "Click to reveal the violating DOM node in the Elements panel" + }, + "panels/issues/AffectedDirectivesView.ts | directiveC": { + "message": "Directive" + }, + "panels/issues/AffectedDirectivesView.ts | element": { + "message": "Element" + }, + "panels/issues/AffectedDirectivesView.ts | nDirectives": { + "message": "{n, plural, =1 {# directive} other {# directives}}" + }, + "panels/issues/AffectedDirectivesView.ts | reportonly": { + "message": "report-only" + }, + "panels/issues/AffectedDirectivesView.ts | resourceC": { + "message": "Resource" + }, + "panels/issues/AffectedDirectivesView.ts | sourceLocation": { + "message": "Source Location" + }, + "panels/issues/AffectedDirectivesView.ts | status": { + "message": "Status" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | documentInTheDOMTree": { + "message": "Document in the DOM tree" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | mode": { + "message": "Mode" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | nDocuments": { + "message": "{n, plural, =1 { document} other { documents}}" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | url": { + "message": "URL" + }, + "panels/issues/AffectedElementsView.ts | nElements": { + "message": "{n, plural, =1 {# element} other {# elements}}" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | contrastRatio": { + "message": "Contrast ratio" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | element": { + "message": "Element" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | minimumAA": { + "message": "Minimum AA ratio" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | minimumAAA": { + "message": "Minimum AAA ratio" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | textSize": { + "message": "Text size" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | textWeight": { + "message": "Text weight" + }, + "panels/issues/AffectedHeavyAdView.ts | cpuPeakLimit": { + "message": "CPU peak limit" + }, + "panels/issues/AffectedHeavyAdView.ts | cpuTotalLimit": { + "message": "CPU total limit" + }, + "panels/issues/AffectedHeavyAdView.ts | frameUrl": { + "message": "Frame URL" + }, + "panels/issues/AffectedHeavyAdView.ts | limitExceeded": { + "message": "Limit exceeded" + }, + "panels/issues/AffectedHeavyAdView.ts | networkLimit": { + "message": "Network limit" + }, + "panels/issues/AffectedHeavyAdView.ts | nResources": { + "message": "{n, plural, =1 {# resource} other {# resources}}" + }, + "panels/issues/AffectedHeavyAdView.ts | removed": { + "message": "Removed" + }, + "panels/issues/AffectedHeavyAdView.ts | resolutionStatus": { + "message": "Resolution Status" + }, + "panels/issues/AffectedHeavyAdView.ts | warned": { + "message": "Warned" + }, + "panels/issues/AffectedResourcesView.ts | clickToRevealTheFramesDomNodeIn": { + "message": "Click to reveal the frame's DOM node in the Elements panel" + }, + "panels/issues/AffectedResourcesView.ts | unavailable": { + "message": "unavailable" + }, + "panels/issues/AffectedResourcesView.ts | unknown": { + "message": "unknown" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | aSharedarraybufferWas": { + "message": "A SharedArrayBuffer was instantiated in a context that is not cross-origin isolated" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | blocked": { + "message": "blocked" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | instantiation": { + "message": "Instantiation" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | nViolations": { + "message": "{n, plural, =1 {# violation} other {# violations}}" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sharedarraybufferWasTransferedTo": { + "message": "SharedArrayBuffer was transfered to a context that is not cross-origin isolated" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sourceLocation": { + "message": "Source Location" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | status": { + "message": "Status" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | transfer": { + "message": "Transfer" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | trigger": { + "message": "Trigger" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | warning": { + "message": "warning" + }, + "panels/issues/AffectedSourcesView.ts | nSources": { + "message": "{n, plural, =1 {# source} other {# sources}}" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | nResources": { + "message": "{n, plural, =1 {# resource} other {# resources}}" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | packageName": { + "message": "Package name" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | packageSignature": { + "message": "Package signature" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | statusCode": { + "message": "Status code" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | url": { + "message": "Url" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | element": { + "message": "Element" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | frame": { + "message": "Frame" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | invalidEventSourceTriggerData": { + "message": "Invalid event-source-trigger-data" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | invalidSourceEventId": { + "message": "Invalid attributionsourceeventid" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | invalidTriggerData": { + "message": "Invalid trigger-data" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | nViolations": { + "message": "{n, plural, =1 {# violation} other {# violations}}" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | request": { + "message": "Request" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | untrustworthyOrigin": { + "message": "Untrustworthy origin" + }, + "panels/issues/components/HideIssuesMenu.ts | tooltipTitle": { + "message": "Hide issues" + }, + "panels/issues/CorsIssueDetailsView.ts | allowCredentialsValueFromHeader": { + "message": "Access-Control-Allow-Credentials Header Value" + }, + "panels/issues/CorsIssueDetailsView.ts | allowedOrigin": { + "message": "Allowed Origin (from header)" + }, + "panels/issues/CorsIssueDetailsView.ts | blocked": { + "message": "blocked" + }, + "panels/issues/CorsIssueDetailsView.ts | disallowedRequestHeader": { + "message": "Disallowed Request Header" + }, + "panels/issues/CorsIssueDetailsView.ts | disallowedRequestMethod": { + "message": "Disallowed Request Method" + }, + "panels/issues/CorsIssueDetailsView.ts | header": { + "message": "Header" + }, + "panels/issues/CorsIssueDetailsView.ts | initiatorAddressSpace": { + "message": "Initiator Address" + }, + "panels/issues/CorsIssueDetailsView.ts | initiatorContext": { + "message": "Initiator Context" + }, + "panels/issues/CorsIssueDetailsView.ts | insecure": { + "message": "insecure" + }, + "panels/issues/CorsIssueDetailsView.ts | invalidValue": { + "message": "Invalid Value (if available)" + }, + "panels/issues/CorsIssueDetailsView.ts | nRequests": { + "message": "{n, plural, =1 {# request} other {# requests}}" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightDisallowedRedirect": { + "message": "Response to preflight was a redirect" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightInvalidStatus": { + "message": "HTTP status of preflight request didn't indicate success" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightRequest": { + "message": "Preflight Request" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightRequestIfProblematic": { + "message": "Preflight Request (if problematic)" + }, + "panels/issues/CorsIssueDetailsView.ts | problem": { + "message": "Problem" + }, + "panels/issues/CorsIssueDetailsView.ts | problemInvalidValue": { + "message": "Invalid Value" + }, + "panels/issues/CorsIssueDetailsView.ts | problemMissingHeader": { + "message": "Missing Header" + }, + "panels/issues/CorsIssueDetailsView.ts | problemMultipleValues": { + "message": "Multiple Values" + }, + "panels/issues/CorsIssueDetailsView.ts | request": { + "message": "Request" + }, + "panels/issues/CorsIssueDetailsView.ts | resourceAddressSpace": { + "message": "Resource Address" + }, + "panels/issues/CorsIssueDetailsView.ts | secure": { + "message": "secure" + }, + "panels/issues/CorsIssueDetailsView.ts | sourceLocation": { + "message": "Source Location" + }, + "panels/issues/CorsIssueDetailsView.ts | status": { + "message": "Status" + }, + "panels/issues/CorsIssueDetailsView.ts | unsupportedScheme": { + "message": "Unsupported Scheme" + }, + "panels/issues/CorsIssueDetailsView.ts | warning": { + "message": "warning" + }, + "panels/issues/CSPViolationsView.ts | filter": { + "message": "Filter" + }, + "panels/issues/GenericIssueDetailsView.ts | frameId": { + "message": "Frame" + }, + "panels/issues/GenericIssueDetailsView.ts | nResources": { + "message": "{n, plural, =1 {# resource} other {# resources}}" + }, + "panels/issues/HiddenIssuesRow.ts | hiddenIssues": { + "message": "Hidden issues" + }, + "panels/issues/HiddenIssuesRow.ts | unhideAll": { + "message": "Unhide all" + }, + "panels/issues/IssueKindView.ts | hideAllCurrentBreakingChanges": { + "message": "Hide all current Breaking Changes" + }, + "panels/issues/IssueKindView.ts | hideAllCurrentImprovements": { + "message": "Hide all current Improvements" + }, + "panels/issues/IssueKindView.ts | hideAllCurrentPageErrors": { + "message": "Hide all current Page Errors" + }, + "panels/issues/issues-meta.ts | cspViolations": { + "message": "CSP Violations" + }, + "panels/issues/issues-meta.ts | issues": { + "message": "Issues" + }, + "panels/issues/issues-meta.ts | showCspViolations": { + "message": "Show CSP Violations" + }, + "panels/issues/issues-meta.ts | showIssues": { + "message": "Show Issues" + }, + "panels/issues/IssuesPane.ts | attributionReporting": { + "message": "Attribution Reporting API" + }, + "panels/issues/IssuesPane.ts | contentSecurityPolicy": { + "message": "Content Security Policy" + }, + "panels/issues/IssuesPane.ts | cors": { + "message": "Cross Origin Resource Sharing" + }, + "panels/issues/IssuesPane.ts | crossOriginEmbedderPolicy": { + "message": "Cross Origin Embedder Policy" + }, + "panels/issues/IssuesPane.ts | generic": { + "message": "Generic" + }, + "panels/issues/IssuesPane.ts | groupByCategory": { + "message": "Group by category" + }, + "panels/issues/IssuesPane.ts | groupByKind": { + "message": "Group by kind" + }, + "panels/issues/IssuesPane.ts | groupDisplayedIssuesUnder": { + "message": "Group displayed issues under associated categories" + }, + "panels/issues/IssuesPane.ts | groupDisplayedIssuesUnderKind": { + "message": "Group displayed issues as Page errors, Breaking changes and Improvements" + }, + "panels/issues/IssuesPane.ts | heavyAds": { + "message": "Heavy Ads" + }, + "panels/issues/IssuesPane.ts | includeCookieIssuesCausedBy": { + "message": "Include cookie Issues caused by third-party sites" + }, + "panels/issues/IssuesPane.ts | includeThirdpartyCookieIssues": { + "message": "Include third-party cookie issues" + }, + "panels/issues/IssuesPane.ts | lowTextContrast": { + "message": "Low Text Contrast" + }, + "panels/issues/IssuesPane.ts | mixedContent": { + "message": "Mixed Content" + }, + "panels/issues/IssuesPane.ts | noIssuesDetectedSoFar": { + "message": "No issues detected so far" + }, + "panels/issues/IssuesPane.ts | onlyThirdpartyCookieIssues": { + "message": "Only third-party cookie issues detected so far" + }, + "panels/issues/IssuesPane.ts | other": { + "message": "Other" + }, + "panels/issues/IssuesPane.ts | quirksMode": { + "message": "Quirks Mode" + }, + "panels/issues/IssuesPane.ts | samesiteCookie": { + "message": "SameSite Cookie" + }, + "panels/issues/IssuesPane.ts | trustedWebActivity": { + "message": "Trusted Web Activity" + }, + "panels/issues/IssueView.ts | affectedResources": { + "message": "Affected Resources" + }, + "panels/issues/IssueView.ts | automaticallyUpgraded": { + "message": "automatically upgraded" + }, + "panels/issues/IssueView.ts | blocked": { + "message": "blocked" + }, + "panels/issues/IssueView.ts | hideIssuesLikeThis": { + "message": "Hide issues like this" + }, + "panels/issues/IssueView.ts | learnMoreS": { + "message": "Learn more: {PH1}" + }, + "panels/issues/IssueView.ts | name": { + "message": "Name" + }, + "panels/issues/IssueView.ts | nRequests": { + "message": "{n, plural, =1 {# request} other {# requests}}" + }, + "panels/issues/IssueView.ts | nResources": { + "message": "{n, plural, =1 {# resource} other {# resources}}" + }, + "panels/issues/IssueView.ts | restrictionStatus": { + "message": "Restriction Status" + }, + "panels/issues/IssueView.ts | unhideIssuesLikeThis": { + "message": "Unhide issues like this" + }, + "panels/issues/IssueView.ts | warned": { + "message": "Warned" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | blocked": { + "message": "blocked" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | nModuleTransfers": { + "message": "{n, plural, =1 {# module} other {# modules}}" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | sourceOrigin": { + "message": "Source Origin" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | status": { + "message": "Status" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | targetOrigin": { + "message": "Target Origin" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | warned": { + "message": "warning" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | wasmModuleUrl": { + "message": "Wasm Module URL" + }, + "panels/js_profiler/js_profiler-meta.ts | profiler": { + "message": "Profiler" + }, + "panels/js_profiler/js_profiler-meta.ts | showProfiler": { + "message": "Show Profiler" + }, + "panels/js_profiler/js_profiler-meta.ts | startStopRecording": { + "message": "Start/stop recording" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateDown": { + "message": "Pan or rotate down" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateLeft": { + "message": "Pan or rotate left" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateRight": { + "message": "Pan or rotate right" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateUp": { + "message": "Pan or rotate up" + }, + "panels/layer_viewer/layer_viewer-meta.ts | resetView": { + "message": "Reset view" + }, + "panels/layer_viewer/layer_viewer-meta.ts | switchToPanMode": { + "message": "Switch to pan mode" + }, + "panels/layer_viewer/layer_viewer-meta.ts | switchToRotateMode": { + "message": "Switch to rotate mode" + }, + "panels/layer_viewer/layer_viewer-meta.ts | zoomIn": { + "message": "Zoom in" + }, + "panels/layer_viewer/layer_viewer-meta.ts | zoomOut": { + "message": "Zoom out" + }, + "panels/layer_viewer/LayerDetailsView.ts | compositingReasons": { + "message": "Compositing Reasons" + }, + "panels/layer_viewer/LayerDetailsView.ts | containingBlocRectangleDimensions": { + "message": "Containing Block {PH1} × {PH2} (at {PH3}, {PH4})" + }, + "panels/layer_viewer/LayerDetailsView.ts | mainThreadScrollingReason": { + "message": "Main thread scrolling reason" + }, + "panels/layer_viewer/LayerDetailsView.ts | memoryEstimate": { + "message": "Memory estimate" + }, + "panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingContaining": { + "message": "Nearest Layer Shifting Containing Block" + }, + "panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingStickyBox": { + "message": "Nearest Layer Shifting Sticky Box" + }, + "panels/layer_viewer/LayerDetailsView.ts | nonFastScrollable": { + "message": "Non fast scrollable" + }, + "panels/layer_viewer/LayerDetailsView.ts | paintCount": { + "message": "Paint count" + }, + "panels/layer_viewer/LayerDetailsView.ts | paintProfiler": { + "message": "Paint Profiler" + }, + "panels/layer_viewer/LayerDetailsView.ts | repaintsOnScroll": { + "message": "Repaints on scroll" + }, + "panels/layer_viewer/LayerDetailsView.ts | scrollRectangleDimensions": { + "message": "{PH1} {PH2} × {PH3} (at {PH4}, {PH5})" + }, + "panels/layer_viewer/LayerDetailsView.ts | selectALayerToSeeItsDetails": { + "message": "Select a layer to see its details" + }, + "panels/layer_viewer/LayerDetailsView.ts | size": { + "message": "Size" + }, + "panels/layer_viewer/LayerDetailsView.ts | slowScrollRegions": { + "message": "Slow scroll regions" + }, + "panels/layer_viewer/LayerDetailsView.ts | stickyAncenstorLayersS": { + "message": "{PH1}: {PH2} ({PH3})" + }, + "panels/layer_viewer/LayerDetailsView.ts | stickyBoxRectangleDimensions": { + "message": "Sticky Box {PH1} × {PH2} (at {PH3}, {PH4})" + }, + "panels/layer_viewer/LayerDetailsView.ts | stickyPositionConstraint": { + "message": "Sticky position constraint" + }, + "panels/layer_viewer/LayerDetailsView.ts | touchEventHandler": { + "message": "Touch event handler" + }, + "panels/layer_viewer/LayerDetailsView.ts | unnamed": { + "message": "" + }, + "panels/layer_viewer/LayerDetailsView.ts | updateRectangleDimensions": { + "message": "{PH1} × {PH2} (at {PH3}, {PH4})" + }, + "panels/layer_viewer/LayerDetailsView.ts | wheelEventHandler": { + "message": "Wheel event handler" + }, + "panels/layer_viewer/Layers3DView.ts | cantDisplayLayers": { + "message": "Can't display layers," + }, + "panels/layer_viewer/Layers3DView.ts | checkSForPossibleReasons": { + "message": "Check {PH1} for possible reasons." + }, + "panels/layer_viewer/Layers3DView.ts | dLayersView": { + "message": "3D Layers View" + }, + "panels/layer_viewer/Layers3DView.ts | layerInformationIsNotYet": { + "message": "Layer information is not yet available." + }, + "panels/layer_viewer/Layers3DView.ts | paints": { + "message": "Paints" + }, + "panels/layer_viewer/Layers3DView.ts | resetView": { + "message": "Reset View" + }, + "panels/layer_viewer/Layers3DView.ts | showPaintProfiler": { + "message": "Show Paint Profiler" + }, + "panels/layer_viewer/Layers3DView.ts | slowScrollRects": { + "message": "Slow scroll rects" + }, + "panels/layer_viewer/Layers3DView.ts | webglSupportIsDisabledInYour": { + "message": "WebGL support is disabled in your browser." + }, + "panels/layer_viewer/LayerTreeOutline.ts | layersTreePane": { + "message": "Layers Tree Pane" + }, + "panels/layer_viewer/LayerTreeOutline.ts | showPaintProfiler": { + "message": "Show Paint Profiler" + }, + "panels/layer_viewer/LayerTreeOutline.ts | updateChildDimension": { + "message": " ({PH1} × {PH2})" + }, + "panels/layer_viewer/LayerViewHost.ts | showInternalLayers": { + "message": "Show internal layers" + }, + "panels/layer_viewer/PaintProfilerView.ts | bitmap": { + "message": "Bitmap" + }, + "panels/layer_viewer/PaintProfilerView.ts | commandLog": { + "message": "Command Log" + }, + "panels/layer_viewer/PaintProfilerView.ts | misc": { + "message": "Misc" + }, + "panels/layer_viewer/PaintProfilerView.ts | profiling": { + "message": "Profiling…" + }, + "panels/layer_viewer/PaintProfilerView.ts | profilingResults": { + "message": "Profiling results" + }, + "panels/layer_viewer/PaintProfilerView.ts | shapes": { + "message": "Shapes" + }, + "panels/layer_viewer/PaintProfilerView.ts | text": { + "message": "Text" + }, + "panels/layer_viewer/TransformController.ts | panModeX": { + "message": "Pan mode (X)" + }, + "panels/layer_viewer/TransformController.ts | resetTransform": { + "message": "Reset transform (0)" + }, + "panels/layer_viewer/TransformController.ts | rotateModeV": { + "message": "Rotate mode (V)" + }, + "panels/layers/layers-meta.ts | layers": { + "message": "Layers" + }, + "panels/layers/layers-meta.ts | showLayers": { + "message": "Show Layers" + }, + "panels/layers/LayersPanel.ts | details": { + "message": "Details" + }, + "panels/layers/LayersPanel.ts | profiler": { + "message": "Profiler" + }, + "panels/lighthouse/lighthouse-meta.ts | showLighthouse": { + "message": "Show Lighthouse" + }, + "panels/lighthouse/LighthouseController.ts | accessibility": { + "message": "Accessibility" + }, + "panels/lighthouse/LighthouseController.ts | applyMobileEmulation": { + "message": "Apply mobile emulation" + }, + "panels/lighthouse/LighthouseController.ts | applyMobileEmulationDuring": { + "message": "Apply mobile emulation during auditing" + }, + "panels/lighthouse/LighthouseController.ts | atLeastOneCategoryMustBeSelected": { + "message": "At least one category must be selected." + }, + "panels/lighthouse/LighthouseController.ts | bestPractices": { + "message": "Best practices" + }, + "panels/lighthouse/LighthouseController.ts | canOnlyAuditHttphttpsPagesAnd": { + "message": "Can only audit HTTP/HTTPS pages and Chrome extensions. Navigate to a different page to start an audit." + }, + "panels/lighthouse/LighthouseController.ts | clearStorage": { + "message": "Clear storage" + }, + "panels/lighthouse/LighthouseController.ts | desktop": { + "message": "Desktop" + }, + "panels/lighthouse/LighthouseController.ts | doesThisPageFollowBestPractices": { + "message": "Does this page follow best practices for modern web development" + }, + "panels/lighthouse/LighthouseController.ts | doesThisPageMeetTheStandardOfA": { + "message": "Does this page meet the standard of a Progressive Web App" + }, + "panels/lighthouse/LighthouseController.ts | howLongDoesThisAppTakeToShow": { + "message": "How long does this app take to show content and become usable" + }, + "panels/lighthouse/LighthouseController.ts | indexeddb": { + "message": "IndexedDB" + }, + "panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForAdSpeedAnd": { + "message": "Is this page optimized for ad speed and quality" + }, + "panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForSearch": { + "message": "Is this page optimized for search engine results ranking" + }, + "panels/lighthouse/LighthouseController.ts | isThisPageUsableByPeopleWith": { + "message": "Is this page usable by people with disabilities or impairments" + }, + "panels/lighthouse/LighthouseController.ts | localStorage": { + "message": "Local Storage" + }, + "panels/lighthouse/LighthouseController.ts | mobile": { + "message": "Mobile" + }, + "panels/lighthouse/LighthouseController.ts | multipleTabsAreBeingControlledBy": { + "message": "Multiple tabs are being controlled by the same service worker. Close your other tabs on the same origin to audit this page." + }, + "panels/lighthouse/LighthouseController.ts | performance": { + "message": "Performance" + }, + "panels/lighthouse/LighthouseController.ts | progressiveWebApp": { + "message": "Progressive Web App" + }, + "panels/lighthouse/LighthouseController.ts | publisherAds": { + "message": "Publisher Ads" + }, + "panels/lighthouse/LighthouseController.ts | resetStorageLocalstorage": { + "message": "Reset storage (cache, service workers, etc) before auditing. (Good for performance & PWA testing)" + }, + "panels/lighthouse/LighthouseController.ts | seo": { + "message": "SEO" + }, + "panels/lighthouse/LighthouseController.ts | simulateASlowerPageLoadBasedOn": { + "message": "Simulate a slower page load, based on data from an initial unthrottled load. If disabled, the page is actually slowed with applied throttling." + }, + "panels/lighthouse/LighthouseController.ts | simulatedThrottling": { + "message": "Simulated throttling" + }, + "panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingLoadingPlural": { + "message": "There may be stored data affecting loading performance in these locations: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores." + }, + "panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingSingular": { + "message": "There may be stored data affecting loading performance in this location: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores." + }, + "panels/lighthouse/LighthouseController.ts | webSql": { + "message": "Web SQL" + }, + "panels/lighthouse/LighthousePanel.ts | cancelling": { + "message": "Cancelling" + }, + "panels/lighthouse/LighthousePanel.ts | clearAll": { + "message": "Clear all" + }, + "panels/lighthouse/LighthousePanel.ts | dropLighthouseJsonHere": { + "message": "Drop Lighthouse JSON here" + }, + "panels/lighthouse/LighthousePanel.ts | lighthouseSettings": { + "message": "Lighthouse settings" + }, + "panels/lighthouse/LighthousePanel.ts | performAnAudit": { + "message": "Perform an audit…" + }, + "panels/lighthouse/LighthousePanel.ts | printing": { + "message": "Printing" + }, + "panels/lighthouse/LighthousePanel.ts | thePrintPopupWindowIsOpenPlease": { + "message": "The print popup window is open. Please close it to continue." + }, + "panels/lighthouse/LighthouseReportRenderer.ts | thePerformanceMetricsAboveAre": { + "message": "The performance metrics above are simulated and won't match the timings found in this trace. Disable simulated throttling in \"Lighthouse Settings\" if you want the timings to match." + }, + "panels/lighthouse/LighthouseReportRenderer.ts | viewOriginalTrace": { + "message": "View Original Trace" + }, + "panels/lighthouse/LighthouseReportRenderer.ts | viewTrace": { + "message": "View Trace" + }, + "panels/lighthouse/LighthouseReportSelector.ts | newReport": { + "message": "(new report)" + }, + "panels/lighthouse/LighthouseReportSelector.ts | reports": { + "message": "Reports" + }, + "panels/lighthouse/LighthouseStartView.ts | categories": { + "message": "Categories" + }, + "panels/lighthouse/LighthouseStartView.ts | communityPluginsBeta": { + "message": "Community Plugins (beta)" + }, + "panels/lighthouse/LighthouseStartView.ts | device": { + "message": "Device" + }, + "panels/lighthouse/LighthouseStartView.ts | generateReport": { + "message": "Generate report" + }, + "panels/lighthouse/LighthouseStartView.ts | identifyAndFixCommonProblemsThat": { + "message": "Identify and fix common problems that affect your site's performance, accessibility, and user experience." + }, + "panels/lighthouse/LighthouseStartView.ts | learnMore": { + "message": "Learn more" + }, + "panels/lighthouse/LighthouseStatusView.ts | ahSorryWeRanIntoAnError": { + "message": "Ah, sorry! We ran into an error." + }, + "panels/lighthouse/LighthouseStatusView.ts | almostThereLighthouseIsNow": { + "message": "Almost there! Lighthouse is now generating your report." + }, + "panels/lighthouse/LighthouseStatusView.ts | asPageLoadTimeIncreasesFromOne": { + "message": "As page load time increases from one second to seven seconds, the probability of a mobile site visitor bouncing increases 113%. [Source: Think with Google]" + }, + "panels/lighthouse/LighthouseStatusView.ts | asTheNumberOfElementsOnAPage": { + "message": "As the number of elements on a page increases from 400 to 6,000, the probability of conversion drops 95%. [Source: Think with Google]" + }, + "panels/lighthouse/LighthouseStatusView.ts | auditingS": { + "message": "Auditing {PH1}" + }, + "panels/lighthouse/LighthouseStatusView.ts | auditingYourWebPage": { + "message": "Auditing your web page" + }, + "panels/lighthouse/LighthouseStatusView.ts | byReducingTheResponseSizeOfJson": { + "message": "By reducing the response size of JSON needed for displaying comments, Instagram saw increased impressions [Source: WPO Stats]" + }, + "panels/lighthouse/LighthouseStatusView.ts | cancel": { + "message": "Cancel" + }, + "panels/lighthouse/LighthouseStatusView.ts | cancelling": { + "message": "Cancelling…" + }, + "panels/lighthouse/LighthouseStatusView.ts | fastFactMessageWithPlaceholder": { + "message": "💡 {PH1}" + }, + "panels/lighthouse/LighthouseStatusView.ts | ifASiteTakesSecondToBecome": { + "message": "If a site takes >1 second to become interactive, users lose attention, and their perception of completing the page task is broken [Source: Google Developers Blog]" + }, + "panels/lighthouse/LighthouseStatusView.ts | ifThisIssueIsReproduciblePlease": { + "message": "If this issue is reproducible, please report it at the Lighthouse GitHub repo." + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsGatheringInformation": { + "message": "Lighthouse is gathering information about the page to compute your score." + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingThePage": { + "message": "Lighthouse is loading the page." + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPage": { + "message": "Lighthouse is loading your page" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWith": { + "message": "Lighthouse is loading your page with throttling to measure performance on a mobile device on 3G." + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithMobile": { + "message": "Lighthouse is loading your page with mobile emulation." + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithThrottling": { + "message": "Lighthouse is loading your page with throttling to measure performance on a slow desktop on 3G." + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsWarmingUp": { + "message": "Lighthouse is warming up…" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseOnlySimulatesMobile": { + "message": "Lighthouse only simulates mobile performance; to measure performance on a real device, try WebPageTest.org [Source: Lighthouse team]" + }, + "panels/lighthouse/LighthouseStatusView.ts | loading": { + "message": "Loading…" + }, + "panels/lighthouse/LighthouseStatusView.ts | mbTakesAMinimumOfSecondsTo": { + "message": "1MB takes a minimum of 5 seconds to download on a typical 3G connection [Source: WebPageTest and DevTools 3G definition]." + }, + "panels/lighthouse/LighthouseStatusView.ts | OfGlobalMobileUsersInWereOnGOrG": { + "message": "75% of global mobile users in 2016 were on 2G or 3G [Source: GSMA Mobile]" + }, + "panels/lighthouse/LighthouseStatusView.ts | OfMobilePagesTakeNearlySeconds": { + "message": "70% of mobile pages take nearly 7 seconds for the visual content above the fold to display on the screen. [Source: Think with Google]" + }, + "panels/lighthouse/LighthouseStatusView.ts | rebuildingPinterestPagesFor": { + "message": "Rebuilding Pinterest pages for performance increased conversion rates by 15% [Source: WPO Stats]" + }, + "panels/lighthouse/LighthouseStatusView.ts | SecondsIsTheAverageTimeAMobile": { + "message": "19 seconds is the average time a mobile web page takes to load on a 3G connection [Source: Google DoubleClick blog]" + }, + "panels/lighthouse/LighthouseStatusView.ts | theAverageUserDeviceCostsLess": { + "message": "The average user device costs less than 200 USD. [Source: International Data Corporation]" + }, + "panels/lighthouse/LighthouseStatusView.ts | tryToNavigateToTheUrlInAFresh": { + "message": "Try to navigate to the URL in a fresh Chrome profile without any other tabs or extensions open and try again." + }, + "panels/lighthouse/LighthouseStatusView.ts | walmartSawAIncreaseInRevenueFor": { + "message": "Walmart saw a 1% increase in revenue for every 100ms improvement in page load [Source: WPO Stats]" + }, + "panels/media/EventDisplayTable.ts | eventDisplay": { + "message": "Event display" + }, + "panels/media/EventDisplayTable.ts | eventName": { + "message": "Event name" + }, + "panels/media/EventDisplayTable.ts | timestamp": { + "message": "Timestamp" + }, + "panels/media/EventDisplayTable.ts | value": { + "message": "Value" + }, + "panels/media/EventTimelineView.ts | bufferingStatus": { + "message": "Buffering Status" + }, + "panels/media/EventTimelineView.ts | playbackStatus": { + "message": "Playback Status" + }, + "panels/media/media-meta.ts | media": { + "message": "Media" + }, + "panels/media/media-meta.ts | showMedia": { + "message": "Show Media" + }, + "panels/media/media-meta.ts | video": { + "message": "video" + }, + "panels/media/PlayerDetailView.ts | events": { + "message": "Events" + }, + "panels/media/PlayerDetailView.ts | messages": { + "message": "Messages" + }, + "panels/media/PlayerDetailView.ts | playerEvents": { + "message": "Player events" + }, + "panels/media/PlayerDetailView.ts | playerMessages": { + "message": "Player messages" + }, + "panels/media/PlayerDetailView.ts | playerProperties": { + "message": "Player properties" + }, + "panels/media/PlayerDetailView.ts | playerTimeline": { + "message": "Player timeline" + }, + "panels/media/PlayerDetailView.ts | properties": { + "message": "Properties" + }, + "panels/media/PlayerDetailView.ts | timeline": { + "message": "Timeline" + }, + "panels/media/PlayerListView.ts | hideAllOthers": { + "message": "Hide all others" + }, + "panels/media/PlayerListView.ts | hidePlayer": { + "message": "Hide player" + }, + "panels/media/PlayerListView.ts | players": { + "message": "Players" + }, + "panels/media/PlayerListView.ts | savePlayerInfo": { + "message": "Save player info" + }, + "panels/media/PlayerMessagesView.ts | all": { + "message": "All" + }, + "panels/media/PlayerMessagesView.ts | custom": { + "message": "Custom" + }, + "panels/media/PlayerMessagesView.ts | debug": { + "message": "Debug" + }, + "panels/media/PlayerMessagesView.ts | default": { + "message": "Default" + }, + "panels/media/PlayerMessagesView.ts | error": { + "message": "Error" + }, + "panels/media/PlayerMessagesView.ts | filterLogMessages": { + "message": "Filter log messages" + }, + "panels/media/PlayerMessagesView.ts | info": { + "message": "Info" + }, + "panels/media/PlayerMessagesView.ts | logLevel": { + "message": "Log level:" + }, + "panels/media/PlayerMessagesView.ts | warning": { + "message": "Warning" + }, + "panels/media/PlayerPropertiesView.ts | audio": { + "message": "Audio" + }, + "panels/media/PlayerPropertiesView.ts | bitrate": { + "message": "Bitrate" + }, + "panels/media/PlayerPropertiesView.ts | decoder": { + "message": "Decoder" + }, + "panels/media/PlayerPropertiesView.ts | decoderName": { + "message": "Decoder name" + }, + "panels/media/PlayerPropertiesView.ts | decryptingDemuxer": { + "message": "Decrypting demuxer" + }, + "panels/media/PlayerPropertiesView.ts | duration": { + "message": "Duration" + }, + "panels/media/PlayerPropertiesView.ts | encoderName": { + "message": "Encoder name" + }, + "panels/media/PlayerPropertiesView.ts | fileSize": { + "message": "File size" + }, + "panels/media/PlayerPropertiesView.ts | frameRate": { + "message": "Frame rate" + }, + "panels/media/PlayerPropertiesView.ts | hardwareDecoder": { + "message": "Hardware decoder" + }, + "panels/media/PlayerPropertiesView.ts | hardwareEncoder": { + "message": "Hardware encoder" + }, + "panels/media/PlayerPropertiesView.ts | noDecoder": { + "message": "No decoder" + }, + "panels/media/PlayerPropertiesView.ts | noEncoder": { + "message": "No encoder" + }, + "panels/media/PlayerPropertiesView.ts | noTextTracks": { + "message": "No text tracks" + }, + "panels/media/PlayerPropertiesView.ts | playbackFrameTitle": { + "message": "Playback frame title" + }, + "panels/media/PlayerPropertiesView.ts | playbackFrameUrl": { + "message": "Playback frame URL" + }, + "panels/media/PlayerPropertiesView.ts | properties": { + "message": "Properties" + }, + "panels/media/PlayerPropertiesView.ts | rangeHeaderSupport": { + "message": "Range header support" + }, + "panels/media/PlayerPropertiesView.ts | rendererName": { + "message": "Renderer name" + }, + "panels/media/PlayerPropertiesView.ts | resolution": { + "message": "Resolution" + }, + "panels/media/PlayerPropertiesView.ts | singleoriginPlayback": { + "message": "Single-origin playback" + }, + "panels/media/PlayerPropertiesView.ts | startTime": { + "message": "Start time" + }, + "panels/media/PlayerPropertiesView.ts | streaming": { + "message": "Streaming" + }, + "panels/media/PlayerPropertiesView.ts | textTrack": { + "message": "Text track" + }, + "panels/media/PlayerPropertiesView.ts | track": { + "message": "Track" + }, + "panels/media/PlayerPropertiesView.ts | video": { + "message": "Video" + }, + "panels/media/PlayerPropertiesView.ts | videoFreezingScore": { + "message": "Video freezing score" + }, + "panels/media/PlayerPropertiesView.ts | videoPlaybackRoughness": { + "message": "Video playback roughness" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | device": { + "message": "device" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | enableFastGThrottling": { + "message": "Enable fast 3G throttling" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | enableSlowGThrottling": { + "message": "Enable slow 3G throttling" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | goOffline": { + "message": "Go offline" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | goOnline": { + "message": "Go online" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | showThrottling": { + "message": "Show Throttling" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | throttling": { + "message": "Throttling" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | throttlingTag": { + "message": "throttling" + }, + "panels/mobile_throttling/MobileThrottlingSelector.ts | advanced": { + "message": "Advanced" + }, + "panels/mobile_throttling/MobileThrottlingSelector.ts | disabled": { + "message": "Disabled" + }, + "panels/mobile_throttling/MobileThrottlingSelector.ts | presets": { + "message": "Presets" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | acceptedEncodingOverrideSet": { + "message": "The set of accepted Content-Encoding headers has been modified by DevTools. See the Network Conditions panel." + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | networkThrottlingIsEnabled": { + "message": "Network throttling is enabled" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeBlocked": { + "message": "Requests may be blocked" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeRewrittenByLocal": { + "message": "Requests may be rewritten by local overrides" + }, + "panels/mobile_throttling/NetworkThrottlingSelector.ts | custom": { + "message": "Custom" + }, + "panels/mobile_throttling/NetworkThrottlingSelector.ts | disabled": { + "message": "Disabled" + }, + "panels/mobile_throttling/NetworkThrottlingSelector.ts | presets": { + "message": "Presets" + }, + "panels/mobile_throttling/ThrottlingManager.ts | add": { + "message": "Add…" + }, + "panels/mobile_throttling/ThrottlingManager.ts | addS": { + "message": "Add {PH1}" + }, + "panels/mobile_throttling/ThrottlingManager.ts | cpuThrottling": { + "message": "CPU throttling" + }, + "panels/mobile_throttling/ThrottlingManager.ts | cpuThrottlingIsEnabled": { + "message": "CPU throttling is enabled" + }, + "panels/mobile_throttling/ThrottlingManager.ts | dSlowdown": { + "message": "{PH1}× slowdown" + }, + "panels/mobile_throttling/ThrottlingManager.ts | forceDisconnectedFromNetwork": { + "message": "Force disconnected from network" + }, + "panels/mobile_throttling/ThrottlingManager.ts | noThrottling": { + "message": "No throttling" + }, + "panels/mobile_throttling/ThrottlingManager.ts | offline": { + "message": "Offline" + }, + "panels/mobile_throttling/ThrottlingManager.ts | sS": { + "message": "{PH1}: {PH2}" + }, + "panels/mobile_throttling/ThrottlingManager.ts | throttling": { + "message": "Throttling" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | checkNetworkAndPerformancePanels": { + "message": "Check Network and Performance panels" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | custom": { + "message": "Custom" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | fastGXCpuSlowdown": { + "message": "Fast 3G & 4x CPU slowdown" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | lowendMobile": { + "message": "Low-end mobile" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | midtierMobile": { + "message": "Mid-tier mobile" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | noInternetConnectivity": { + "message": "No internet connectivity" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | noThrottling": { + "message": "No throttling" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | slowGXCpuSlowdown": { + "message": "Slow 3G & 6x CPU slowdown" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | addCustomProfile": { + "message": "Add custom profile..." + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | dms": { + "message": "{PH1} ms" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | download": { + "message": "Download" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | dskbits": { + "message": "{PH1} kbit/s" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | fsmbits": { + "message": "{PH1} Mbit/s" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | latency": { + "message": "Latency" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | latencyMustBeAnIntegerBetweenSms": { + "message": "Latency must be an integer between {PH1} ms to {PH2} ms inclusive" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | networkThrottlingProfiles": { + "message": "Network Throttling Profiles" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | optional": { + "message": "optional" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | profileName": { + "message": "Profile Name" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | profileNameCharactersLengthMust": { + "message": "Profile Name characters length must be between 1 to {PH1} inclusive" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | sMustBeANumberBetweenSkbsToSkbs": { + "message": "{PH1} must be a number between {PH2} kbit/s to {PH3} kbit/s inclusive" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | upload": { + "message": "Upload" + }, + "panels/network/BinaryResourceView.ts | binaryViewType": { + "message": "Binary view type" + }, + "panels/network/BinaryResourceView.ts | copiedAsBase": { + "message": "Copied as Base64" + }, + "panels/network/BinaryResourceView.ts | copiedAsHex": { + "message": "Copied as Hex" + }, + "panels/network/BinaryResourceView.ts | copiedAsUtf": { + "message": "Copied as UTF-8" + }, + "panels/network/BinaryResourceView.ts | copyAsBase": { + "message": "Copy as Base64" + }, + "panels/network/BinaryResourceView.ts | copyAsHex": { + "message": "Copy as Hex" + }, + "panels/network/BinaryResourceView.ts | copyAsUtf": { + "message": "Copy as UTF-8" + }, + "panels/network/BinaryResourceView.ts | copyToClipboard": { + "message": "Copy to clipboard" + }, + "panels/network/BinaryResourceView.ts | hexViewer": { + "message": "Hex Viewer" + }, + "panels/network/BlockedURLsPane.ts | addNetworkRequestBlockingPattern": { + "message": "Add network request blocking pattern" + }, + "panels/network/BlockedURLsPane.ts | addPattern": { + "message": "Add pattern" + }, + "panels/network/BlockedURLsPane.ts | dBlocked": { + "message": "{PH1} blocked" + }, + "panels/network/BlockedURLsPane.ts | enableNetworkRequestBlocking": { + "message": "Enable network request blocking" + }, + "panels/network/BlockedURLsPane.ts | itemDeleted": { + "message": "Item successfully deleted" + }, + "panels/network/BlockedURLsPane.ts | networkRequestsAreNotBlockedS": { + "message": "Network requests are not blocked. {PH1}" + }, + "panels/network/BlockedURLsPane.ts | patternAlreadyExists": { + "message": "Pattern already exists." + }, + "panels/network/BlockedURLsPane.ts | patternInputCannotBeEmpty": { + "message": "Pattern input cannot be empty." + }, + "panels/network/BlockedURLsPane.ts | removeAllPatterns": { + "message": "Remove all patterns" + }, + "panels/network/BlockedURLsPane.ts | textPatternToBlockMatching": { + "message": "Text pattern to block matching requests; use * for wildcard" + }, + "panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas": { + "message": "A client-provided argument was malformed or otherwise invalid." + }, + "panels/network/components/RequestTrustTokensView.ts | eitherNoInputsForThisOperation": { + "message": "Either no inputs for this operation are available or the output exceeds the operations quota." + }, + "panels/network/components/RequestTrustTokensView.ts | failure": { + "message": "Failure" + }, + "panels/network/components/RequestTrustTokensView.ts | issuer": { + "message": "Issuer" + }, + "panels/network/components/RequestTrustTokensView.ts | issuers": { + "message": "Issuers" + }, + "panels/network/components/RequestTrustTokensView.ts | numberOfIssuedTokens": { + "message": "Number of issued tokens" + }, + "panels/network/components/RequestTrustTokensView.ts | parameters": { + "message": "Parameters" + }, + "panels/network/components/RequestTrustTokensView.ts | refreshPolicy": { + "message": "Refresh policy" + }, + "panels/network/components/RequestTrustTokensView.ts | result": { + "message": "Result" + }, + "panels/network/components/RequestTrustTokensView.ts | status": { + "message": "Status" + }, + "panels/network/components/RequestTrustTokensView.ts | success": { + "message": "Success" + }, + "panels/network/components/RequestTrustTokensView.ts | theOperationFailedForAnUnknown": { + "message": "The operation failed for an unknown reason." + }, + "panels/network/components/RequestTrustTokensView.ts | theOperationsResultWasServedFrom": { + "message": "The operations result was served from cache." + }, + "panels/network/components/RequestTrustTokensView.ts | theOperationWasFulfilledLocally": { + "message": "The operation was fulfilled locally, no request was sent." + }, + "panels/network/components/RequestTrustTokensView.ts | theServersResponseWasMalformedOr": { + "message": "The servers response was malformed or otherwise invalid." + }, + "panels/network/components/RequestTrustTokensView.ts | topLevelOrigin": { + "message": "Top level origin" + }, + "panels/network/components/RequestTrustTokensView.ts | type": { + "message": "Type" + }, + "panels/network/components/WebBundleInfoView.ts | bundledResource": { + "message": "Bundled resource" + }, + "panels/network/EventSourceMessagesView.ts | copyMessage": { + "message": "Copy message" + }, + "panels/network/EventSourceMessagesView.ts | data": { + "message": "Data" + }, + "panels/network/EventSourceMessagesView.ts | eventSource": { + "message": "Event Source" + }, + "panels/network/EventSourceMessagesView.ts | id": { + "message": "Id" + }, + "panels/network/EventSourceMessagesView.ts | time": { + "message": "Time" + }, + "panels/network/EventSourceMessagesView.ts | type": { + "message": "Type" + }, + "panels/network/network-meta.ts | colorCode": { + "message": "color code" + }, + "panels/network/network-meta.ts | colorCodeByResourceType": { + "message": "Color code by resource type" + }, + "panels/network/network-meta.ts | colorcodeResourceTypes": { + "message": "Color-code resource types" + }, + "panels/network/network-meta.ts | diskCache": { + "message": "disk cache" + }, + "panels/network/network-meta.ts | dontGroupNetworkLogItemsByFrame": { + "message": "Don't group network log items by frame" + }, + "panels/network/network-meta.ts | frame": { + "message": "frame" + }, + "panels/network/network-meta.ts | group": { + "message": "group" + }, + "panels/network/network-meta.ts | groupNetworkLogByFrame": { + "message": "Group network log by frame" + }, + "panels/network/network-meta.ts | groupNetworkLogItemsByFrame": { + "message": "Group network log items by frame" + }, + "panels/network/network-meta.ts | hideRequestDetails": { + "message": "Hide request details" + }, + "panels/network/network-meta.ts | network": { + "message": "Network" + }, + "panels/network/network-meta.ts | netWork": { + "message": "network" + }, + "panels/network/network-meta.ts | networkConditions": { + "message": "Network conditions" + }, + "panels/network/network-meta.ts | networkRequestBlocking": { + "message": "Network request blocking" + }, + "panels/network/network-meta.ts | networkThrottling": { + "message": "network throttling" + }, + "panels/network/network-meta.ts | recordNetworkLog": { + "message": "Record network log" + }, + "panels/network/network-meta.ts | resourceType": { + "message": "resource type" + }, + "panels/network/network-meta.ts | search": { + "message": "Search" + }, + "panels/network/network-meta.ts | showNetwork": { + "message": "Show Network" + }, + "panels/network/network-meta.ts | showNetworkConditions": { + "message": "Show Network conditions" + }, + "panels/network/network-meta.ts | showNetworkRequestBlocking": { + "message": "Show Network request blocking" + }, + "panels/network/network-meta.ts | showSearch": { + "message": "Show Search" + }, + "panels/network/network-meta.ts | stopRecordingNetworkLog": { + "message": "Stop recording network log" + }, + "panels/network/network-meta.ts | useDefaultColors": { + "message": "Use default colors" + }, + "panels/network/NetworkConfigView.ts | acceptedEncoding": { + "message": "Accepted Content-Encodings" + }, + "panels/network/NetworkConfigView.ts | caching": { + "message": "Caching" + }, + "panels/network/NetworkConfigView.ts | clientHintsStatusText": { + "message": "User agent updated." + }, + "panels/network/NetworkConfigView.ts | custom": { + "message": "Custom..." + }, + "panels/network/NetworkConfigView.ts | customUserAgentFieldIsRequired": { + "message": "Custom user agent field is required" + }, + "panels/network/NetworkConfigView.ts | disableCache": { + "message": "Disable cache" + }, + "panels/network/NetworkConfigView.ts | enterACustomUserAgent": { + "message": "Enter a custom user agent" + }, + "panels/network/NetworkConfigView.ts | networkThrottling": { + "message": "Network throttling" + }, + "panels/network/NetworkConfigView.ts | selectAutomatically": { + "message": "Use browser default" + }, + "panels/network/NetworkConfigView.ts | userAgent": { + "message": "User agent" + }, + "panels/network/NetworkDataGridNode.ts | blockeds": { + "message": "(blocked:{PH1})" + }, + "panels/network/NetworkDataGridNode.ts | blockedTooltip": { + "message": "This request was blocked due to misconfigured response headers, click to view the headers" + }, + "panels/network/NetworkDataGridNode.ts | canceled": { + "message": "(canceled)" + }, + "panels/network/NetworkDataGridNode.ts | corsError": { + "message": "CORS error" + }, + "panels/network/NetworkDataGridNode.ts | crossoriginResourceSharingErrorS": { + "message": "Cross-Origin Resource Sharing error: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | csp": { + "message": "csp" + }, + "panels/network/NetworkDataGridNode.ts | data": { + "message": "(data)" + }, + "panels/network/NetworkDataGridNode.ts | devtools": { + "message": "devtools" + }, + "panels/network/NetworkDataGridNode.ts | diskCache": { + "message": "(disk cache)" + }, + "panels/network/NetworkDataGridNode.ts | failed": { + "message": "(failed)" + }, + "panels/network/NetworkDataGridNode.ts | finished": { + "message": "Finished" + }, + "panels/network/NetworkDataGridNode.ts | level": { + "message": "level 1" + }, + "panels/network/NetworkDataGridNode.ts | memoryCache": { + "message": "(memory cache)" + }, + "panels/network/NetworkDataGridNode.ts | origin": { + "message": "origin" + }, + "panels/network/NetworkDataGridNode.ts | other": { + "message": "other" + }, + "panels/network/NetworkDataGridNode.ts | otherC": { + "message": "Other" + }, + "panels/network/NetworkDataGridNode.ts | parser": { + "message": "Parser" + }, + "panels/network/NetworkDataGridNode.ts | pending": { + "message": "Pending" + }, + "panels/network/NetworkDataGridNode.ts | pendingq": { + "message": "(pending)" + }, + "panels/network/NetworkDataGridNode.ts | prefetchCache": { + "message": "(prefetch cache)" + }, + "panels/network/NetworkDataGridNode.ts | preflight": { + "message": "Preflight" + }, + "panels/network/NetworkDataGridNode.ts | preload": { + "message": "Preload" + }, + "panels/network/NetworkDataGridNode.ts | push": { + "message": "Push / " + }, + "panels/network/NetworkDataGridNode.ts | redirect": { + "message": "Redirect" + }, + "panels/network/NetworkDataGridNode.ts | script": { + "message": "Script" + }, + "panels/network/NetworkDataGridNode.ts | selectPreflightRequest": { + "message": "Select preflight request" + }, + "panels/network/NetworkDataGridNode.ts | selectTheRequestThatTriggered": { + "message": "Select the request that triggered this preflight" + }, + "panels/network/NetworkDataGridNode.ts | servedFromDiskCacheResourceSizeS": { + "message": "Served from disk cache, resource size: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromMemoryCacheResource": { + "message": "Served from memory cache, resource size: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromPrefetchCacheResource": { + "message": "Served from prefetch cache, resource size: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromServiceworkerResource": { + "message": "Served from ServiceWorker, resource size: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromSignedHttpExchange": { + "message": "Served from Signed HTTP Exchange, resource size: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromWebBundle": { + "message": "Served from Web Bundle, resource size: {PH1}" + }, + "panels/network/NetworkDataGridNode.ts | serviceworker": { + "message": "(ServiceWorker)" + }, + "panels/network/NetworkDataGridNode.ts | signedexchange": { + "message": "signed-exchange" + }, + "panels/network/NetworkDataGridNode.ts | sPreflight": { + "message": "{PH1} + Preflight" + }, + "panels/network/NetworkDataGridNode.ts | timeSubtitleTooltipText": { + "message": "Latency (response received time - start time)" + }, + "panels/network/NetworkDataGridNode.ts | unknown": { + "message": "(unknown)" + }, + "panels/network/NetworkDataGridNode.ts | unknownExplanation": { + "message": "The request status cannot be shown here because the page that issued it unloaded while the request was in flight. You can use chrome://net-export to capture a network log and see all request details." + }, + "panels/network/NetworkDataGridNode.ts | webBundle": { + "message": "(Web Bundle)" + }, + "panels/network/NetworkDataGridNode.ts | webBundleError": { + "message": "Web Bundle error" + }, + "panels/network/NetworkDataGridNode.ts | webBundleInnerRequest": { + "message": "Served from Web Bundle" + }, + "panels/network/NetworkItemView.ts | cookies": { + "message": "Cookies" + }, + "panels/network/NetworkItemView.ts | eventstream": { + "message": "EventStream" + }, + "panels/network/NetworkItemView.ts | headers": { + "message": "Headers" + }, + "panels/network/NetworkItemView.ts | initiator": { + "message": "Initiator" + }, + "panels/network/NetworkItemView.ts | messages": { + "message": "Messages" + }, + "panels/network/NetworkItemView.ts | payload": { + "message": "Payload" + }, + "panels/network/NetworkItemView.ts | preview": { + "message": "Preview" + }, + "panels/network/NetworkItemView.ts | rawResponseData": { + "message": "Raw response data" + }, + "panels/network/NetworkItemView.ts | requestAndResponseCookies": { + "message": "Request and response cookies" + }, + "panels/network/NetworkItemView.ts | requestAndResponseTimeline": { + "message": "Request and response timeline" + }, + "panels/network/NetworkItemView.ts | requestInitiatorCallStack": { + "message": "Request initiator call stack" + }, + "panels/network/NetworkItemView.ts | response": { + "message": "Response" + }, + "panels/network/NetworkItemView.ts | responsePreview": { + "message": "Response preview" + }, + "panels/network/NetworkItemView.ts | signedexchangeError": { + "message": "SignedExchange error" + }, + "panels/network/NetworkItemView.ts | timing": { + "message": "Timing" + }, + "panels/network/NetworkItemView.ts | trustTokenOperationDetails": { + "message": "Trust Token operation details" + }, + "panels/network/NetworkItemView.ts | trustTokens": { + "message": "Trust Tokens" + }, + "panels/network/NetworkItemView.ts | websocketMessages": { + "message": "WebSocket messages" + }, + "panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowser": { + "message": "Are you sure you want to clear browser cache?" + }, + "panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowserCookies": { + "message": "Are you sure you want to clear browser cookies?" + }, + "panels/network/NetworkLogView.ts | blockedRequests": { + "message": "Blocked Requests" + }, + "panels/network/NetworkLogView.ts | blockRequestDomain": { + "message": "Block request domain" + }, + "panels/network/NetworkLogView.ts | blockRequestUrl": { + "message": "Block request URL" + }, + "panels/network/NetworkLogView.ts | clearBrowserCache": { + "message": "Clear browser cache" + }, + "panels/network/NetworkLogView.ts | clearBrowserCookies": { + "message": "Clear browser cookies" + }, + "panels/network/NetworkLogView.ts | copy": { + "message": "Copy" + }, + "panels/network/NetworkLogView.ts | copyAllAsCurl": { + "message": "Copy all as cURL" + }, + "panels/network/NetworkLogView.ts | copyAllAsCurlBash": { + "message": "Copy all as cURL (bash)" + }, + "panels/network/NetworkLogView.ts | copyAllAsCurlCmd": { + "message": "Copy all as cURL (cmd)" + }, + "panels/network/NetworkLogView.ts | copyAllAsFetch": { + "message": "Copy all as fetch" + }, + "panels/network/NetworkLogView.ts | copyAllAsHar": { + "message": "Copy all as HAR" + }, + "panels/network/NetworkLogView.ts | copyAllAsNodejsFetch": { + "message": "Copy all as Node.js fetch" + }, + "panels/network/NetworkLogView.ts | copyAllAsPowershell": { + "message": "Copy all as PowerShell" + }, + "panels/network/NetworkLogView.ts | copyAsCurl": { + "message": "Copy as cURL" + }, + "panels/network/NetworkLogView.ts | copyAsCurlBash": { + "message": "Copy as cURL (bash)" + }, + "panels/network/NetworkLogView.ts | copyAsCurlCmd": { + "message": "Copy as cURL (cmd)" + }, + "panels/network/NetworkLogView.ts | copyAsFetch": { + "message": "Copy as fetch" + }, + "panels/network/NetworkLogView.ts | copyAsNodejsFetch": { + "message": "Copy as Node.js fetch" + }, + "panels/network/NetworkLogView.ts | copyAsPowershell": { + "message": "Copy as PowerShell" + }, + "panels/network/NetworkLogView.ts | copyRequestHeaders": { + "message": "Copy request headers" + }, + "panels/network/NetworkLogView.ts | copyResponse": { + "message": "Copy response" + }, + "panels/network/NetworkLogView.ts | copyResponseHeaders": { + "message": "Copy response headers" + }, + "panels/network/NetworkLogView.ts | copyStacktrace": { + "message": "Copy stack trace" + }, + "panels/network/NetworkLogView.ts | domcontentloadedS": { + "message": "DOMContentLoaded: {PH1}" + }, + "panels/network/NetworkLogView.ts | dropHarFilesHere": { + "message": "Drop HAR files here" + }, + "panels/network/NetworkLogView.ts | finishS": { + "message": "Finish: {PH1}" + }, + "panels/network/NetworkLogView.ts | hasBlockedCookies": { + "message": "Has blocked cookies" + }, + "panels/network/NetworkLogView.ts | hideDataUrls": { + "message": "Hide data URLs" + }, + "panels/network/NetworkLogView.ts | hidesDataAndBlobUrls": { + "message": "Hides data: and blob: URLs" + }, + "panels/network/NetworkLogView.ts | invertFilter": { + "message": "Invert" + }, + "panels/network/NetworkLogView.ts | invertsFilter": { + "message": "Inverts the search filter" + }, + "panels/network/NetworkLogView.ts | learnMore": { + "message": "Learn more" + }, + "panels/network/NetworkLogView.ts | loadS": { + "message": "Load: {PH1}" + }, + "panels/network/NetworkLogView.ts | networkDataAvailable": { + "message": "Network Data Available" + }, + "panels/network/NetworkLogView.ts | onlyShowBlockedRequests": { + "message": "Only show blocked requests" + }, + "panels/network/NetworkLogView.ts | onlyShowRequestsWithBlocked": { + "message": "Only show requests with blocked response cookies" + }, + "panels/network/NetworkLogView.ts | onlyShowThirdPartyRequests": { + "message": "Shows only requests with origin different from page origin" + }, + "panels/network/NetworkLogView.ts | performARequestOrHitSToRecordThe": { + "message": "Perform a request or hit {PH1} to record the reload." + }, + "panels/network/NetworkLogView.ts | recordingNetworkActivity": { + "message": "Recording network activity…" + }, + "panels/network/NetworkLogView.ts | recordToDisplayNetworkActivity": { + "message": "Record network log ({PH1}) to display network activity." + }, + "panels/network/NetworkLogView.ts | replayXhr": { + "message": "Replay XHR" + }, + "panels/network/NetworkLogView.ts | resourceTypesToInclude": { + "message": "Resource types to include" + }, + "panels/network/NetworkLogView.ts | saveAllAsHarWithContent": { + "message": "Save all as HAR with content" + }, + "panels/network/NetworkLogView.ts | sBResourcesLoadedByThePage": { + "message": "{PH1} B resources loaded by the page" + }, + "panels/network/NetworkLogView.ts | sBSBResourcesLoadedByThePage": { + "message": "{PH1} B / {PH2} B resources loaded by the page" + }, + "panels/network/NetworkLogView.ts | sBSBTransferredOverNetwork": { + "message": "{PH1} B / {PH2} B transferred over network" + }, + "panels/network/NetworkLogView.ts | sBTransferredOverNetwork": { + "message": "{PH1} B transferred over network" + }, + "panels/network/NetworkLogView.ts | sRequests": { + "message": "{PH1} requests" + }, + "panels/network/NetworkLogView.ts | sResources": { + "message": "{PH1} resources" + }, + "panels/network/NetworkLogView.ts | sSRequests": { + "message": "{PH1} / {PH2} requests" + }, + "panels/network/NetworkLogView.ts | sSResources": { + "message": "{PH1} / {PH2} resources" + }, + "panels/network/NetworkLogView.ts | sSTransferred": { + "message": "{PH1} / {PH2} transferred" + }, + "panels/network/NetworkLogView.ts | sTransferred": { + "message": "{PH1} transferred" + }, + "panels/network/NetworkLogView.ts | thirdParty": { + "message": "3rd-party requests" + }, + "panels/network/NetworkLogView.ts | unblockS": { + "message": "Unblock {PH1}" + }, + "panels/network/NetworkLogViewColumns.ts | connectionId": { + "message": "Connection ID" + }, + "panels/network/NetworkLogViewColumns.ts | content": { + "message": "Content" + }, + "panels/network/NetworkLogViewColumns.ts | cookies": { + "message": "Cookies" + }, + "panels/network/NetworkLogViewColumns.ts | domain": { + "message": "Domain" + }, + "panels/network/NetworkLogViewColumns.ts | endTime": { + "message": "End Time" + }, + "panels/network/NetworkLogViewColumns.ts | initiator": { + "message": "Initiator" + }, + "panels/network/NetworkLogViewColumns.ts | initiatorAddressSpace": { + "message": "Initiator Address Space" + }, + "panels/network/NetworkLogViewColumns.ts | latency": { + "message": "Latency" + }, + "panels/network/NetworkLogViewColumns.ts | manageHeaderColumns": { + "message": "Manage Header Columns…" + }, + "panels/network/NetworkLogViewColumns.ts | method": { + "message": "Method" + }, + "panels/network/NetworkLogViewColumns.ts | name": { + "message": "Name" + }, + "panels/network/NetworkLogViewColumns.ts | networkLog": { + "message": "Network Log" + }, + "panels/network/NetworkLogViewColumns.ts | path": { + "message": "Path" + }, + "panels/network/NetworkLogViewColumns.ts | priority": { + "message": "Priority" + }, + "panels/network/NetworkLogViewColumns.ts | protocol": { + "message": "Protocol" + }, + "panels/network/NetworkLogViewColumns.ts | remoteAddress": { + "message": "Remote Address" + }, + "panels/network/NetworkLogViewColumns.ts | remoteAddressSpace": { + "message": "Remote Address Space" + }, + "panels/network/NetworkLogViewColumns.ts | responseHeaders": { + "message": "Response Headers" + }, + "panels/network/NetworkLogViewColumns.ts | responseTime": { + "message": "Response Time" + }, + "panels/network/NetworkLogViewColumns.ts | scheme": { + "message": "Scheme" + }, + "panels/network/NetworkLogViewColumns.ts | setCookies": { + "message": "Set Cookies" + }, + "panels/network/NetworkLogViewColumns.ts | size": { + "message": "Size" + }, + "panels/network/NetworkLogViewColumns.ts | startTime": { + "message": "Start Time" + }, + "panels/network/NetworkLogViewColumns.ts | status": { + "message": "Status" + }, + "panels/network/NetworkLogViewColumns.ts | text": { + "message": "Text" + }, + "panels/network/NetworkLogViewColumns.ts | time": { + "message": "Time" + }, + "panels/network/NetworkLogViewColumns.ts | totalDuration": { + "message": "Total Duration" + }, + "panels/network/NetworkLogViewColumns.ts | type": { + "message": "Type" + }, + "panels/network/NetworkLogViewColumns.ts | url": { + "message": "Url" + }, + "panels/network/NetworkLogViewColumns.ts | waterfall": { + "message": "Waterfall" + }, + "panels/network/NetworkManageCustomHeadersView.ts | addCustomHeader": { + "message": "Add custom header…" + }, + "panels/network/NetworkManageCustomHeadersView.ts | headerName": { + "message": "Header Name" + }, + "panels/network/NetworkManageCustomHeadersView.ts | manageHeaderColumns": { + "message": "Manage Header Columns" + }, + "panels/network/NetworkManageCustomHeadersView.ts | noCustomHeaders": { + "message": "No custom headers" + }, + "panels/network/NetworkPanel.ts | captureScreenshots": { + "message": "Capture screenshots" + }, + "panels/network/NetworkPanel.ts | captureScreenshotsWhenLoadingA": { + "message": "Capture screenshots when loading a page" + }, + "panels/network/NetworkPanel.ts | clear": { + "message": "Clear" + }, + "panels/network/NetworkPanel.ts | close": { + "message": "Close" + }, + "panels/network/NetworkPanel.ts | disableCache": { + "message": "Disable cache" + }, + "panels/network/NetworkPanel.ts | disableCacheWhileDevtoolsIsOpen": { + "message": "Disable cache (while DevTools is open)" + }, + "panels/network/NetworkPanel.ts | doNotClearLogOnPageReload": { + "message": "Do not clear log on page reload / navigation" + }, + "panels/network/NetworkPanel.ts | exportHar": { + "message": "Export HAR..." + }, + "panels/network/NetworkPanel.ts | fetchingFrames": { + "message": "Fetching frames..." + }, + "panels/network/NetworkPanel.ts | groupByFrame": { + "message": "Group by frame" + }, + "panels/network/NetworkPanel.ts | groupRequestsByTopLevelRequest": { + "message": "Group requests by top level request frame" + }, + "panels/network/NetworkPanel.ts | hitSToReloadAndCaptureFilmstrip": { + "message": "Hit {PH1} to reload and capture filmstrip." + }, + "panels/network/NetworkPanel.ts | importHarFile": { + "message": "Import HAR file..." + }, + "panels/network/NetworkPanel.ts | moreNetworkConditions": { + "message": "More network conditions…" + }, + "panels/network/NetworkPanel.ts | networkSettings": { + "message": "Network settings" + }, + "panels/network/NetworkPanel.ts | preserveLog": { + "message": "Preserve log" + }, + "panels/network/NetworkPanel.ts | recordingFrames": { + "message": "Recording frames..." + }, + "panels/network/NetworkPanel.ts | revealInNetworkPanel": { + "message": "Reveal in Network panel" + }, + "panels/network/NetworkPanel.ts | search": { + "message": "Search" + }, + "panels/network/NetworkPanel.ts | showMoreInformationInRequestRows": { + "message": "Show more information in request rows" + }, + "panels/network/NetworkPanel.ts | showOverview": { + "message": "Show overview" + }, + "panels/network/NetworkPanel.ts | showOverviewOfNetworkRequests": { + "message": "Show overview of network requests" + }, + "panels/network/NetworkPanel.ts | throttling": { + "message": "Throttling" + }, + "panels/network/NetworkPanel.ts | useLargeRequestRows": { + "message": "Use large request rows" + }, + "panels/network/NetworkSearchScope.ts | url": { + "message": "URL" + }, + "panels/network/NetworkTimeCalculator.ts | sDownload": { + "message": "{PH1} download" + }, + "panels/network/NetworkTimeCalculator.ts | sFromCache": { + "message": "{PH1} (from cache)" + }, + "panels/network/NetworkTimeCalculator.ts | sFromServiceworker": { + "message": "{PH1} (from ServiceWorker)" + }, + "panels/network/NetworkTimeCalculator.ts | sLatency": { + "message": "{PH1} latency" + }, + "panels/network/NetworkTimeCalculator.ts | sLatencySDownloadSTotal": { + "message": "{PH1} latency, {PH2} download ({PH3} total)" + }, + "panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromThe": { + "message": "Cookies that were received from the server in the 'set-cookie' header of the response" + }, + "panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromTheServer": { + "message": "Cookies that were received from the server in the 'set-cookie' header of the response but were malformed" + }, + "panels/network/RequestCookiesView.ts | cookiesThatWereSentToTheServerIn": { + "message": "Cookies that were sent to the server in the 'cookie' header of the request" + }, + "panels/network/RequestCookiesView.ts | malformedResponseCookies": { + "message": "Malformed Response Cookies" + }, + "panels/network/RequestCookiesView.ts | noRequestCookiesWereSent": { + "message": "No request cookies were sent." + }, + "panels/network/RequestCookiesView.ts | requestCookies": { + "message": "Request Cookies" + }, + "panels/network/RequestCookiesView.ts | responseCookies": { + "message": "Response Cookies" + }, + "panels/network/RequestCookiesView.ts | showFilteredOutRequestCookies": { + "message": "show filtered out request cookies" + }, + "panels/network/RequestCookiesView.ts | thisRequestHasNoCookies": { + "message": "This request has no cookies." + }, + "panels/network/RequestHeadersView.ts | activeClientExperimentVariation": { + "message": "Active client experiment variation IDs." + }, + "panels/network/RequestHeadersView.ts | activeClientExperimentVariationIds": { + "message": "Active client experiment variation IDs that trigger server-side behavior." + }, + "panels/network/RequestHeadersView.ts | chooseThisOptionIfTheResourceAnd": { + "message": "Choose this option if the resource and the document are served from the same site." + }, + "panels/network/RequestHeadersView.ts | copyValue": { + "message": "Copy value" + }, + "panels/network/RequestHeadersView.ts | decoded": { + "message": "Decoded:" + }, + "panels/network/RequestHeadersView.ts | fromDiskCache": { + "message": "(from disk cache)" + }, + "panels/network/RequestHeadersView.ts | fromMemoryCache": { + "message": "(from memory cache)" + }, + "panels/network/RequestHeadersView.ts | fromPrefetchCache": { + "message": "(from prefetch cache)" + }, + "panels/network/RequestHeadersView.ts | fromServiceWorker": { + "message": "(from service worker)" + }, + "panels/network/RequestHeadersView.ts | fromSignedexchange": { + "message": "(from signed-exchange)" + }, + "panels/network/RequestHeadersView.ts | fromWebBundle": { + "message": "(from Web Bundle)" + }, + "panels/network/RequestHeadersView.ts | general": { + "message": "General" + }, + "panels/network/RequestHeadersView.ts | learnMore": { + "message": "Learn more" + }, + "panels/network/RequestHeadersView.ts | learnMoreInTheIssuesTab": { + "message": "Learn more in the issues tab" + }, + "panels/network/RequestHeadersView.ts | onlyChooseThisOptionIfAn": { + "message": "Only choose this option if an arbitrary website including this resource does not impose a security risk." + }, + "panels/network/RequestHeadersView.ts | onlyProvisionalHeadersAre": { + "message": "Only provisional headers are available because this request was not sent over the network and instead was served from a local cache, which doesn’t store the original request headers. Disable cache to see full request headers." + }, + "panels/network/RequestHeadersView.ts | provisionalHeadersAreShown": { + "message": "Provisional headers are shown" + }, + "panels/network/RequestHeadersView.ts | provisionalHeadersAreShownS": { + "message": "Provisional headers are shown. Disable cache to see full headers." + }, + "panels/network/RequestHeadersView.ts | recordedAttribution": { + "message": "Recorded attribution with trigger-data: {PH1}" + }, + "panels/network/RequestHeadersView.ts | referrerPolicy": { + "message": "Referrer Policy" + }, + "panels/network/RequestHeadersView.ts | remoteAddress": { + "message": "Remote Address" + }, + "panels/network/RequestHeadersView.ts | requestHeaders": { + "message": "Request Headers" + }, + "panels/network/RequestHeadersView.ts | requestMethod": { + "message": "Request Method" + }, + "panels/network/RequestHeadersView.ts | requestUrl": { + "message": "Request URL" + }, + "panels/network/RequestHeadersView.ts | responseHeaders": { + "message": "Response Headers" + }, + "panels/network/RequestHeadersView.ts | showMore": { + "message": "Show more" + }, + "panels/network/RequestHeadersView.ts | statusCode": { + "message": "Status Code" + }, + "panels/network/RequestHeadersView.ts | thisDocumentWasBlockedFrom": { + "message": "This document was blocked from loading in an iframe with a sandbox attribute because this document specified a cross-origin opener policy." + }, + "panels/network/RequestHeadersView.ts | toEmbedThisFrameInYourDocument": { + "message": "To embed this frame in your document, the response needs to enable the cross-origin embedder policy by specifying the following response header:" + }, + "panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferent": { + "message": "To use this resource from a different origin, the server needs to specify a cross-origin resource policy in the response headers:" + }, + "panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentOrigin": { + "message": "To use this resource from a different origin, the server may relax the cross-origin resource policy response header:" + }, + "panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentSite": { + "message": "To use this resource from a different site, the server may relax the cross-origin resource policy response header:" + }, + "panels/network/RequestHeadersView.ts | viewParsed": { + "message": "View parsed" + }, + "panels/network/RequestHeadersView.ts | viewSource": { + "message": "View source" + }, + "panels/network/RequestInitiatorView.ts | requestCallStack": { + "message": "Request call stack" + }, + "panels/network/RequestInitiatorView.ts | requestInitiatorChain": { + "message": "Request initiator chain" + }, + "panels/network/RequestInitiatorView.ts | thisRequestHasNoInitiatorData": { + "message": "This request has no initiator data." + }, + "panels/network/RequestPayloadView.ts | copyValue": { + "message": "Copy value" + }, + "panels/network/RequestPayloadView.ts | empty": { + "message": "(empty)" + }, + "panels/network/RequestPayloadView.ts | formData": { + "message": "Form Data" + }, + "panels/network/RequestPayloadView.ts | queryStringParameters": { + "message": "Query String Parameters" + }, + "panels/network/RequestPayloadView.ts | requestPayload": { + "message": "Request Payload" + }, + "panels/network/RequestPayloadView.ts | showMore": { + "message": "Show more" + }, + "panels/network/RequestPayloadView.ts | unableToDecodeValue": { + "message": "(unable to decode value)" + }, + "panels/network/RequestPayloadView.ts | viewDecoded": { + "message": "View decoded" + }, + "panels/network/RequestPayloadView.ts | viewDecodedL": { + "message": "view decoded" + }, + "panels/network/RequestPayloadView.ts | viewParsed": { + "message": "View parsed" + }, + "panels/network/RequestPayloadView.ts | viewParsedL": { + "message": "view parsed" + }, + "panels/network/RequestPayloadView.ts | viewSource": { + "message": "View source" + }, + "panels/network/RequestPayloadView.ts | viewSourceL": { + "message": "view source" + }, + "panels/network/RequestPayloadView.ts | viewUrlEncoded": { + "message": "View URL-encoded" + }, + "panels/network/RequestPayloadView.ts | viewUrlEncodedL": { + "message": "view URL-encoded" + }, + "panels/network/RequestPreviewView.ts | failedToLoadResponseData": { + "message": "Failed to load response data" + }, + "panels/network/RequestPreviewView.ts | previewNotAvailable": { + "message": "Preview not available" + }, + "panels/network/RequestResponseView.ts | failedToLoadResponseData": { + "message": "Failed to load response data" + }, + "panels/network/RequestResponseView.ts | thisRequestHasNoResponseData": { + "message": "This request has no response data available." + }, + "panels/network/RequestTimingView.ts | cacheStorageCacheNameS": { + "message": "Cache storage cache name: {PH1}" + }, + "panels/network/RequestTimingView.ts | cacheStorageCacheNameUnknown": { + "message": "Cache storage cache name: Unknown" + }, + "panels/network/RequestTimingView.ts | cautionRequestIsNotFinishedYet": { + "message": "CAUTION: request is not finished yet!" + }, + "panels/network/RequestTimingView.ts | connectionStart": { + "message": "Connection Start" + }, + "panels/network/RequestTimingView.ts | contentDownload": { + "message": "Content Download" + }, + "panels/network/RequestTimingView.ts | dnsLookup": { + "message": "DNS Lookup" + }, + "panels/network/RequestTimingView.ts | duration": { + "message": "Duration" + }, + "panels/network/RequestTimingView.ts | durationC": { + "message": "DURATION" + }, + "panels/network/RequestTimingView.ts | duringDevelopmentYouCanUseSToAdd": { + "message": "During development, you can use {PH1} to add insights into the server-side timing of this request." + }, + "panels/network/RequestTimingView.ts | explanation": { + "message": "Explanation" + }, + "panels/network/RequestTimingView.ts | fallbackCode": { + "message": "Fallback code" + }, + "panels/network/RequestTimingView.ts | fromHttpCache": { + "message": "From HTTP cache" + }, + "panels/network/RequestTimingView.ts | initialConnection": { + "message": "Initial connection" + }, + "panels/network/RequestTimingView.ts | label": { + "message": "Label" + }, + "panels/network/RequestTimingView.ts | networkFetch": { + "message": "Network fetch" + }, + "panels/network/RequestTimingView.ts | originalRequest": { + "message": "Original Request" + }, + "panels/network/RequestTimingView.ts | proxyNegotiation": { + "message": "Proxy negotiation" + }, + "panels/network/RequestTimingView.ts | queuedAtS": { + "message": "Queued at {PH1}" + }, + "panels/network/RequestTimingView.ts | queueing": { + "message": "Queueing" + }, + "panels/network/RequestTimingView.ts | readingPush": { + "message": "Reading Push" + }, + "panels/network/RequestTimingView.ts | receivingPush": { + "message": "Receiving Push" + }, + "panels/network/RequestTimingView.ts | requestresponse": { + "message": "Request/Response" + }, + "panels/network/RequestTimingView.ts | requestSent": { + "message": "Request sent" + }, + "panels/network/RequestTimingView.ts | requestToServiceworker": { + "message": "Request to ServiceWorker" + }, + "panels/network/RequestTimingView.ts | resourceScheduling": { + "message": "Resource Scheduling" + }, + "panels/network/RequestTimingView.ts | respondwith": { + "message": "respondWith" + }, + "panels/network/RequestTimingView.ts | responseReceived": { + "message": "Response Received" + }, + "panels/network/RequestTimingView.ts | retrievalTimeS": { + "message": "Retrieval Time: {PH1}" + }, + "panels/network/RequestTimingView.ts | serverPush": { + "message": "Server Push" + }, + "panels/network/RequestTimingView.ts | serverTiming": { + "message": "Server Timing" + }, + "panels/network/RequestTimingView.ts | serviceworkerCacheStorage": { + "message": "ServiceWorker cache storage" + }, + "panels/network/RequestTimingView.ts | sourceOfResponseS": { + "message": "Source of response: {PH1}" + }, + "panels/network/RequestTimingView.ts | ssl": { + "message": "SSL" + }, + "panels/network/RequestTimingView.ts | stalled": { + "message": "Stalled" + }, + "panels/network/RequestTimingView.ts | startedAtS": { + "message": "Started at {PH1}" + }, + "panels/network/RequestTimingView.ts | startup": { + "message": "Startup" + }, + "panels/network/RequestTimingView.ts | theServerTimingApi": { + "message": "the Server Timing API" + }, + "panels/network/RequestTimingView.ts | time": { + "message": "TIME" + }, + "panels/network/RequestTimingView.ts | total": { + "message": "Total" + }, + "panels/network/RequestTimingView.ts | unknown": { + "message": "Unknown" + }, + "panels/network/RequestTimingView.ts | waitingTtfb": { + "message": "Waiting (TTFB)" + }, + "panels/network/RequestTimingView.ts | waterfall": { + "message": "Waterfall" + }, + "panels/network/ResourceWebSocketFrameView.ts | all": { + "message": "All" + }, + "panels/network/ResourceWebSocketFrameView.ts | binaryMessage": { + "message": "Binary Message" + }, + "panels/network/ResourceWebSocketFrameView.ts | clearAll": { + "message": "Clear All" + }, + "panels/network/ResourceWebSocketFrameView.ts | clearAllL": { + "message": "Clear all" + }, + "panels/network/ResourceWebSocketFrameView.ts | connectionCloseMessage": { + "message": "Connection Close Message" + }, + "panels/network/ResourceWebSocketFrameView.ts | continuationFrame": { + "message": "Continuation Frame" + }, + "panels/network/ResourceWebSocketFrameView.ts | copyMessage": { + "message": "Copy message" + }, + "panels/network/ResourceWebSocketFrameView.ts | copyMessageD": { + "message": "Copy message..." + }, + "panels/network/ResourceWebSocketFrameView.ts | data": { + "message": "Data" + }, + "panels/network/ResourceWebSocketFrameView.ts | enterRegex": { + "message": "Enter regex, for example: (web)?socket" + }, + "panels/network/ResourceWebSocketFrameView.ts | filter": { + "message": "Filter" + }, + "panels/network/ResourceWebSocketFrameView.ts | length": { + "message": "Length" + }, + "panels/network/ResourceWebSocketFrameView.ts | na": { + "message": "N/A" + }, + "panels/network/ResourceWebSocketFrameView.ts | pingMessage": { + "message": "Ping Message" + }, + "panels/network/ResourceWebSocketFrameView.ts | pongMessage": { + "message": "Pong Message" + }, + "panels/network/ResourceWebSocketFrameView.ts | receive": { + "message": "Receive" + }, + "panels/network/ResourceWebSocketFrameView.ts | selectMessageToBrowseItsContent": { + "message": "Select message to browse its content." + }, + "panels/network/ResourceWebSocketFrameView.ts | send": { + "message": "Send" + }, + "panels/network/ResourceWebSocketFrameView.ts | sOpcodeS": { + "message": "{PH1} (Opcode {PH2})" + }, + "panels/network/ResourceWebSocketFrameView.ts | sOpcodeSMask": { + "message": "{PH1} (Opcode {PH2}, mask)" + }, + "panels/network/ResourceWebSocketFrameView.ts | textMessage": { + "message": "Text Message" + }, + "panels/network/ResourceWebSocketFrameView.ts | time": { + "message": "Time" + }, + "panels/network/ResourceWebSocketFrameView.ts | webSocketFrame": { + "message": "Web Socket Frame" + }, + "panels/network/SignedExchangeInfoView.ts | certificate": { + "message": "Certificate" + }, + "panels/network/SignedExchangeInfoView.ts | certificateSha": { + "message": "Certificate SHA256" + }, + "panels/network/SignedExchangeInfoView.ts | certificateUrl": { + "message": "Certificate URL" + }, + "panels/network/SignedExchangeInfoView.ts | date": { + "message": "Date" + }, + "panels/network/SignedExchangeInfoView.ts | errors": { + "message": "Errors" + }, + "panels/network/SignedExchangeInfoView.ts | expires": { + "message": "Expires" + }, + "panels/network/SignedExchangeInfoView.ts | headerIntegrityHash": { + "message": "Header integrity hash" + }, + "panels/network/SignedExchangeInfoView.ts | integrity": { + "message": "Integrity" + }, + "panels/network/SignedExchangeInfoView.ts | issuer": { + "message": "Issuer" + }, + "panels/network/SignedExchangeInfoView.ts | label": { + "message": "Label" + }, + "panels/network/SignedExchangeInfoView.ts | learnmore": { + "message": "Learn more" + }, + "panels/network/SignedExchangeInfoView.ts | requestUrl": { + "message": "Request URL" + }, + "panels/network/SignedExchangeInfoView.ts | responseCode": { + "message": "Response code" + }, + "panels/network/SignedExchangeInfoView.ts | responseHeaders": { + "message": "Response headers" + }, + "panels/network/SignedExchangeInfoView.ts | signature": { + "message": "Signature" + }, + "panels/network/SignedExchangeInfoView.ts | signedHttpExchange": { + "message": "Signed HTTP exchange" + }, + "panels/network/SignedExchangeInfoView.ts | subject": { + "message": "Subject" + }, + "panels/network/SignedExchangeInfoView.ts | validFrom": { + "message": "Valid from" + }, + "panels/network/SignedExchangeInfoView.ts | validityUrl": { + "message": "Validity URL" + }, + "panels/network/SignedExchangeInfoView.ts | validUntil": { + "message": "Valid until" + }, + "panels/network/SignedExchangeInfoView.ts | viewCertificate": { + "message": "View certificate" + }, + "panels/performance_monitor/performance_monitor-meta.ts | activity": { + "message": "activity" + }, + "panels/performance_monitor/performance_monitor-meta.ts | metrics": { + "message": "metrics" + }, + "panels/performance_monitor/performance_monitor-meta.ts | monitor": { + "message": "monitor" + }, + "panels/performance_monitor/performance_monitor-meta.ts | performance": { + "message": "performance" + }, + "panels/performance_monitor/performance_monitor-meta.ts | performanceMonitor": { + "message": "Performance monitor" + }, + "panels/performance_monitor/performance_monitor-meta.ts | showPerformanceMonitor": { + "message": "Show Performance monitor" + }, + "panels/performance_monitor/performance_monitor-meta.ts | systemMonitor": { + "message": "system monitor" + }, + "panels/performance_monitor/PerformanceMonitor.ts | cpuUsage": { + "message": "CPU usage" + }, + "panels/performance_monitor/PerformanceMonitor.ts | documentFrames": { + "message": "Document Frames" + }, + "panels/performance_monitor/PerformanceMonitor.ts | documents": { + "message": "Documents" + }, + "panels/performance_monitor/PerformanceMonitor.ts | domNodes": { + "message": "DOM Nodes" + }, + "panels/performance_monitor/PerformanceMonitor.ts | graphsDisplayingARealtimeViewOf": { + "message": "Graphs displaying a real-time view of performance metrics" + }, + "panels/performance_monitor/PerformanceMonitor.ts | jsEventListeners": { + "message": "JS event listeners" + }, + "panels/performance_monitor/PerformanceMonitor.ts | jsHeapSize": { + "message": "JS heap size" + }, + "panels/performance_monitor/PerformanceMonitor.ts | layoutsSec": { + "message": "Layouts / sec" + }, + "panels/performance_monitor/PerformanceMonitor.ts | paused": { + "message": "Paused" + }, + "panels/performance_monitor/PerformanceMonitor.ts | styleRecalcsSec": { + "message": "Style recalcs / sec" + }, + "panels/profiler/CPUProfileView.ts | aggregatedSelfTime": { + "message": "Aggregated self time" + }, + "panels/profiler/CPUProfileView.ts | aggregatedTotalTime": { + "message": "Aggregated total time" + }, + "panels/profiler/CPUProfileView.ts | cpuProfiles": { + "message": "CPU PROFILES" + }, + "panels/profiler/CPUProfileView.ts | cpuProfilesShow": { + "message": "CPU profiles show where the execution time is spent in your page's JavaScript functions." + }, + "panels/profiler/CPUProfileView.ts | fms": { + "message": "{PH1} ms" + }, + "panels/profiler/CPUProfileView.ts | formatPercent": { + "message": "{PH1} %" + }, + "panels/profiler/CPUProfileView.ts | name": { + "message": "Name" + }, + "panels/profiler/CPUProfileView.ts | notOptimized": { + "message": "Not optimized" + }, + "panels/profiler/CPUProfileView.ts | recording": { + "message": "Recording…" + }, + "panels/profiler/CPUProfileView.ts | recordJavascriptCpuProfile": { + "message": "Record JavaScript CPU Profile" + }, + "panels/profiler/CPUProfileView.ts | selfTime": { + "message": "Self Time" + }, + "panels/profiler/CPUProfileView.ts | startCpuProfiling": { + "message": "Start CPU profiling" + }, + "panels/profiler/CPUProfileView.ts | stopCpuProfiling": { + "message": "Stop CPU profiling" + }, + "panels/profiler/CPUProfileView.ts | totalTime": { + "message": "Total Time" + }, + "panels/profiler/CPUProfileView.ts | url": { + "message": "URL" + }, + "panels/profiler/HeapProfilerPanel.ts | revealInSummaryView": { + "message": "Reveal in Summary view" + }, + "panels/profiler/HeapProfileView.ts | allocationSampling": { + "message": "Allocation sampling" + }, + "panels/profiler/HeapProfileView.ts | formatPercent": { + "message": "{PH1} %" + }, + "panels/profiler/HeapProfileView.ts | heapProfilerIsRecording": { + "message": "Heap profiler is recording" + }, + "panels/profiler/HeapProfileView.ts | itProvidesGoodApproximation": { + "message": "It provides good approximation of allocations broken down by JavaScript execution stack." + }, + "panels/profiler/HeapProfileView.ts | name": { + "message": "Name" + }, + "panels/profiler/HeapProfileView.ts | profileD": { + "message": "Profile {PH1}" + }, + "panels/profiler/HeapProfileView.ts | recording": { + "message": "Recording…" + }, + "panels/profiler/HeapProfileView.ts | recordMemoryAllocations": { + "message": "Record memory allocations using sampling method." + }, + "panels/profiler/HeapProfileView.ts | samplingProfiles": { + "message": "SAMPLING PROFILES" + }, + "panels/profiler/HeapProfileView.ts | sBytes": { + "message": "{PH1} bytes" + }, + "panels/profiler/HeapProfileView.ts | selectedSizeS": { + "message": "Selected size: {PH1}" + }, + "panels/profiler/HeapProfileView.ts | selfSize": { + "message": "Self size" + }, + "panels/profiler/HeapProfileView.ts | selfSizeBytes": { + "message": "Self Size (bytes)" + }, + "panels/profiler/HeapProfileView.ts | skb": { + "message": "{PH1} kB" + }, + "panels/profiler/HeapProfileView.ts | startHeapProfiling": { + "message": "Start heap profiling" + }, + "panels/profiler/HeapProfileView.ts | stopHeapProfiling": { + "message": "Stop heap profiling" + }, + "panels/profiler/HeapProfileView.ts | stopping": { + "message": "Stopping…" + }, + "panels/profiler/HeapProfileView.ts | thisProfileTypeHasMinimal": { + "message": "This profile type has minimal performance overhead and can be used for long running operations." + }, + "panels/profiler/HeapProfileView.ts | totalSize": { + "message": "Total size" + }, + "panels/profiler/HeapProfileView.ts | totalSizeBytes": { + "message": "Total Size (bytes)" + }, + "panels/profiler/HeapProfileView.ts | url": { + "message": "URL" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | allocation": { + "message": "Allocation" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | allocSize": { + "message": "Alloc. Size" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | constructorString": { + "message": "Constructor" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | count": { + "message": "Count" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | Deleted": { + "message": "# Deleted" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | Delta": { + "message": "# Delta" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | distance": { + "message": "Distance" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | distanceFromWindowObject": { + "message": "Distance from window object" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | freedSize": { + "message": "Freed Size" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | function": { + "message": "Function" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotConstructors": { + "message": "Heap Snapshot Constructors" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotDiff": { + "message": "Heap Snapshot Diff" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotRetainment": { + "message": "Heap Snapshot Retainment" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | liveCount": { + "message": "Live Count" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | liveSize": { + "message": "Live Size" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | New": { + "message": "# New" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | object": { + "message": "Object" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | retainedSize": { + "message": "Retained Size" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | shallowSize": { + "message": "Shallow Size" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | size": { + "message": "Size" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | sizeDelta": { + "message": "Size Delta" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectItselfInBytes": { + "message": "Size of the object itself in bytes" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectPlusTheGraphIt": { + "message": "Size of the object plus the graph it retains in bytes" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | detachedFromDomTree": { + "message": "Detached from DOM tree" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | genericStringsTwoPlaceholders": { + "message": "{PH1}, {PH2}" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | inElement": { + "message": "in" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | internalArray": { + "message": "(internal array)[]" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | previewIsNotAvailable": { + "message": "Preview is not available" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | revealInSummaryView": { + "message": "Reveal in Summary view" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | revealObjectSWithIdSInSummary": { + "message": "Reveal object ''{PH1}'' with id @{PH2} in Summary view" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | storeAsGlobalVariable": { + "message": "Store as global variable" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | summary": { + "message": "Summary" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | userObjectReachableFromWindow": { + "message": "User object reachable from window" + }, + "panels/profiler/HeapSnapshotProxy.ts | anErrorOccurredWhenACallToMethod": { + "message": "An error occurred when a call to method ''{PH1}'' was requested" + }, + "panels/profiler/HeapSnapshotView.ts | allObjects": { + "message": "All objects" + }, + "panels/profiler/HeapSnapshotView.ts | allocation": { + "message": "Allocation" + }, + "panels/profiler/HeapSnapshotView.ts | allocationInstrumentationOn": { + "message": "Allocation instrumentation on timeline" + }, + "panels/profiler/HeapSnapshotView.ts | allocationStack": { + "message": "Allocation stack" + }, + "panels/profiler/HeapSnapshotView.ts | allocationTimelines": { + "message": "ALLOCATION TIMELINES" + }, + "panels/profiler/HeapSnapshotView.ts | AllocationTimelinesShowInstrumented": { + "message": "Allocation timelines show instrumented JavaScript memory allocations over time. Once profile is recorded you can select a time interval to see objects that were allocated within it and still alive by the end of recording. Use this profile type to isolate memory leaks." + }, + "panels/profiler/HeapSnapshotView.ts | baseSnapshot": { + "message": "Base snapshot" + }, + "panels/profiler/HeapSnapshotView.ts | captureNumericValue": { + "message": "Include numerical values in capture" + }, + "panels/profiler/HeapSnapshotView.ts | classFilter": { + "message": "Class filter" + }, + "panels/profiler/HeapSnapshotView.ts | code": { + "message": "Code" + }, + "panels/profiler/HeapSnapshotView.ts | comparison": { + "message": "Comparison" + }, + "panels/profiler/HeapSnapshotView.ts | containment": { + "message": "Containment" + }, + "panels/profiler/HeapSnapshotView.ts | filter": { + "message": "Filter" + }, + "panels/profiler/HeapSnapshotView.ts | find": { + "message": "Find" + }, + "panels/profiler/HeapSnapshotView.ts | heapMemoryUsage": { + "message": "Heap memory usage" + }, + "panels/profiler/HeapSnapshotView.ts | heapSnapshot": { + "message": "Heap snapshot" + }, + "panels/profiler/HeapSnapshotView.ts | heapSnapshotProfilesShowMemory": { + "message": "Heap snapshot profiles show memory distribution among your page's JavaScript objects and related DOM nodes." + }, + "panels/profiler/HeapSnapshotView.ts | heapSnapshots": { + "message": "HEAP SNAPSHOTS" + }, + "panels/profiler/HeapSnapshotView.ts | jsArrays": { + "message": "JS arrays" + }, + "panels/profiler/HeapSnapshotView.ts | liveObjects": { + "message": "Live objects" + }, + "panels/profiler/HeapSnapshotView.ts | loading": { + "message": "Loading…" + }, + "panels/profiler/HeapSnapshotView.ts | objectsAllocatedBeforeS": { + "message": "Objects allocated before {PH1}" + }, + "panels/profiler/HeapSnapshotView.ts | objectsAllocatedBetweenSAndS": { + "message": "Objects allocated between {PH1} and {PH2}" + }, + "panels/profiler/HeapSnapshotView.ts | percentagePlaceholder": { + "message": "{PH1}%" + }, + "panels/profiler/HeapSnapshotView.ts | perspective": { + "message": "Perspective" + }, + "panels/profiler/HeapSnapshotView.ts | recordAllocationStacksExtra": { + "message": "Record stack traces of allocations (extra performance overhead)" + }, + "panels/profiler/HeapSnapshotView.ts | recording": { + "message": "Recording…" + }, + "panels/profiler/HeapSnapshotView.ts | retainers": { + "message": "Retainers" + }, + "panels/profiler/HeapSnapshotView.ts | savingD": { + "message": "Saving… {PH1}%" + }, + "panels/profiler/HeapSnapshotView.ts | selectedSizeS": { + "message": "Selected size: {PH1}" + }, + "panels/profiler/HeapSnapshotView.ts | sKb": { + "message": "{PH1} kB" + }, + "panels/profiler/HeapSnapshotView.ts | snapshotD": { + "message": "Snapshot {PH1}" + }, + "panels/profiler/HeapSnapshotView.ts | snapshotting": { + "message": "Snapshotting…" + }, + "panels/profiler/HeapSnapshotView.ts | stackWasNotRecordedForThisObject": { + "message": "Stack was not recorded for this object because it had been allocated before this profile recording started." + }, + "panels/profiler/HeapSnapshotView.ts | startRecordingHeapProfile": { + "message": "Start recording heap profile" + }, + "panels/profiler/HeapSnapshotView.ts | statistics": { + "message": "Statistics" + }, + "panels/profiler/HeapSnapshotView.ts | stopRecordingHeapProfile": { + "message": "Stop recording heap profile" + }, + "panels/profiler/HeapSnapshotView.ts | strings": { + "message": "Strings" + }, + "panels/profiler/HeapSnapshotView.ts | summary": { + "message": "Summary" + }, + "panels/profiler/HeapSnapshotView.ts | systemObjects": { + "message": "System objects" + }, + "panels/profiler/HeapSnapshotView.ts | takeHeapSnapshot": { + "message": "Take heap snapshot" + }, + "panels/profiler/HeapSnapshotView.ts | treatGlobalObjectsAsRoots": { + "message": "Treat global objects as roots (recommended, unchecking this exposes internal nodes and introduces excessive detail, but might help debugging cycles in retaining paths)" + }, + "panels/profiler/HeapSnapshotView.ts | typedArrays": { + "message": "Typed arrays" + }, + "panels/profiler/IsolateSelector.ts | changeRate": { + "message": "{PH1}/s" + }, + "panels/profiler/IsolateSelector.ts | decreasingBySPerSecond": { + "message": "decreasing by {PH1} per second" + }, + "panels/profiler/IsolateSelector.ts | empty": { + "message": "(empty)" + }, + "panels/profiler/IsolateSelector.ts | heapSizeChangeTrendOverTheLastS": { + "message": "Heap size change trend over the last {PH1} minutes." + }, + "panels/profiler/IsolateSelector.ts | heapSizeInUseByLiveJsObjects": { + "message": "Heap size in use by live JS objects." + }, + "panels/profiler/IsolateSelector.ts | increasingBySPerSecond": { + "message": "increasing by {PH1} per second" + }, + "panels/profiler/IsolateSelector.ts | javascriptVmInstances": { + "message": "JavaScript VM instances" + }, + "panels/profiler/IsolateSelector.ts | totalJsHeapSize": { + "message": "Total JS heap size" + }, + "panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeAcrossAllVm": { + "message": "Total page JS heap size across all VM instances." + }, + "panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeChangeTrend": { + "message": "Total page JS heap size change trend over the last {PH1} minutes." + }, + "panels/profiler/LiveHeapProfileView.ts | allocatedJsHeapSizeCurrentlyIn": { + "message": "Allocated JS heap size currently in use" + }, + "panels/profiler/LiveHeapProfileView.ts | anonymousScriptS": { + "message": "(Anonymous Script {PH1})" + }, + "panels/profiler/LiveHeapProfileView.ts | heapProfile": { + "message": "Heap Profile" + }, + "panels/profiler/LiveHeapProfileView.ts | jsHeap": { + "message": "JS Heap" + }, + "panels/profiler/LiveHeapProfileView.ts | kb": { + "message": "kB" + }, + "panels/profiler/LiveHeapProfileView.ts | numberOfVmsSharingTheSameScript": { + "message": "Number of VMs sharing the same script source" + }, + "panels/profiler/LiveHeapProfileView.ts | scriptUrl": { + "message": "Script URL" + }, + "panels/profiler/LiveHeapProfileView.ts | urlOfTheScriptSource": { + "message": "URL of the script source" + }, + "panels/profiler/LiveHeapProfileView.ts | vms": { + "message": "VMs" + }, + "panels/profiler/ModuleUIStrings.ts | buildingAllocationStatistics": { + "message": "Building allocation statistics…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingDominatedNodes": { + "message": "Building dominated nodes…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingDominatorTree": { + "message": "Building dominator tree…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingEdgeIndexes": { + "message": "Building edge indexes…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingLocations": { + "message": "Building locations…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingPostorderIndex": { + "message": "Building postorder index…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingRetainers": { + "message": "Building retainers…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingDistances": { + "message": "Calculating distances…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingNodeFlags": { + "message": "Calculating node flags…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingRetainedSizes": { + "message": "Calculating retained sizes…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingSamples": { + "message": "Calculating samples…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingStatistics": { + "message": "Calculating statistics…" + }, + "panels/profiler/ModuleUIStrings.ts | done": { + "message": "Done" + }, + "panels/profiler/ModuleUIStrings.ts | finishedProcessing": { + "message": "Finished processing." + }, + "panels/profiler/ModuleUIStrings.ts | loadingAllocationTracesD": { + "message": "Loading allocation traces… {PH1}%" + }, + "panels/profiler/ModuleUIStrings.ts | loadingEdgesD": { + "message": "Loading edges… {PH1}%" + }, + "panels/profiler/ModuleUIStrings.ts | loadingLocations": { + "message": "Loading locations…" + }, + "panels/profiler/ModuleUIStrings.ts | loadingNodesD": { + "message": "Loading nodes… {PH1}%" + }, + "panels/profiler/ModuleUIStrings.ts | loadingSamples": { + "message": "Loading samples…" + }, + "panels/profiler/ModuleUIStrings.ts | loadingSnapshotInfo": { + "message": "Loading snapshot info…" + }, + "panels/profiler/ModuleUIStrings.ts | loadingStrings": { + "message": "Loading strings…" + }, + "panels/profiler/ModuleUIStrings.ts | parsingStrings": { + "message": "Parsing strings…" + }, + "panels/profiler/ModuleUIStrings.ts | processingSnapshot": { + "message": "Processing snapshot…" + }, + "panels/profiler/ModuleUIStrings.ts | propagatingDomState": { + "message": "Propagating DOM state…" + }, + "panels/profiler/ProfileDataGrid.ts | genericTextTwoPlaceholders": { + "message": "{PH1}, {PH2}" + }, + "panels/profiler/ProfileDataGrid.ts | notOptimizedS": { + "message": "Not optimized: {PH1}" + }, + "panels/profiler/ProfileLauncherView.ts | load": { + "message": "Load" + }, + "panels/profiler/ProfileLauncherView.ts | selectJavascriptVmInstance": { + "message": "Select JavaScript VM instance" + }, + "panels/profiler/ProfileLauncherView.ts | selectProfilingType": { + "message": "Select profiling type" + }, + "panels/profiler/ProfileLauncherView.ts | start": { + "message": "Start" + }, + "panels/profiler/ProfileLauncherView.ts | stop": { + "message": "Stop" + }, + "panels/profiler/ProfileLauncherView.ts | takeSnapshot": { + "message": "Take snapshot" + }, + "panels/profiler/profiler-meta.ts | liveHeapProfile": { + "message": "Live Heap Profile" + }, + "panels/profiler/profiler-meta.ts | memory": { + "message": "Memory" + }, + "panels/profiler/profiler-meta.ts | showLiveHeapProfile": { + "message": "Show Live Heap Profile" + }, + "panels/profiler/profiler-meta.ts | showMemory": { + "message": "Show Memory" + }, + "panels/profiler/profiler-meta.ts | showNativeFunctions": { + "message": "Show native functions in JS Profile" + }, + "panels/profiler/profiler-meta.ts | startRecordingHeapAllocations": { + "message": "Start recording heap allocations" + }, + "panels/profiler/profiler-meta.ts | startRecordingHeapAllocationsAndReload": { + "message": "Start recording heap allocations and reload the page" + }, + "panels/profiler/profiler-meta.ts | startStopRecording": { + "message": "Start/stop recording" + }, + "panels/profiler/profiler-meta.ts | stopRecordingHeapAllocations": { + "message": "Stop recording heap allocations" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | delete": { + "message": "Delete" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | load": { + "message": "Load…" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | save": { + "message": "Save" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | saveWithEllipsis": { + "message": "Save…" + }, + "panels/profiler/ProfilesPanel.ts | cantLoadFileSupportedFile": { + "message": "Can’t load file. Supported file extensions: ''{PH1}''." + }, + "panels/profiler/ProfilesPanel.ts | cantLoadProfileWhileAnother": { + "message": "Can’t load profile while another profile is being recorded." + }, + "panels/profiler/ProfilesPanel.ts | clearAllProfiles": { + "message": "Clear all profiles" + }, + "panels/profiler/ProfilesPanel.ts | load": { + "message": "Load…" + }, + "panels/profiler/ProfilesPanel.ts | profileLoadingFailedS": { + "message": "Profile loading failed: {PH1}." + }, + "panels/profiler/ProfilesPanel.ts | profiles": { + "message": "Profiles" + }, + "panels/profiler/ProfilesPanel.ts | runD": { + "message": "Run {PH1}" + }, + "panels/profiler/ProfileView.ts | chart": { + "message": "Chart" + }, + "panels/profiler/ProfileView.ts | excludeSelectedFunction": { + "message": "Exclude selected function" + }, + "panels/profiler/ProfileView.ts | failedToReadFile": { + "message": "Failed to read file" + }, + "panels/profiler/ProfileView.ts | fileSReadErrorS": { + "message": "File ''{PH1}'' read error: {PH2}" + }, + "panels/profiler/ProfileView.ts | findByCostMsNameOrFile": { + "message": "Find by cost (>50ms), name or file" + }, + "panels/profiler/ProfileView.ts | focusSelectedFunction": { + "message": "Focus selected function" + }, + "panels/profiler/ProfileView.ts | function": { + "message": "Function" + }, + "panels/profiler/ProfileView.ts | heavyBottomUp": { + "message": "Heavy (Bottom Up)" + }, + "panels/profiler/ProfileView.ts | loaded": { + "message": "Loaded" + }, + "panels/profiler/ProfileView.ts | loading": { + "message": "Loading…" + }, + "panels/profiler/ProfileView.ts | loadingD": { + "message": "Loading… {PH1}%" + }, + "panels/profiler/ProfileView.ts | parsing": { + "message": "Parsing…" + }, + "panels/profiler/ProfileView.ts | profile": { + "message": "Profile" + }, + "panels/profiler/ProfileView.ts | profileD": { + "message": "Profile {PH1}" + }, + "panels/profiler/ProfileView.ts | profiler": { + "message": "Profiler" + }, + "panels/profiler/ProfileView.ts | profileViewMode": { + "message": "Profile view mode" + }, + "panels/profiler/ProfileView.ts | restoreAllFunctions": { + "message": "Restore all functions" + }, + "panels/profiler/ProfileView.ts | treeTopDown": { + "message": "Tree (Top Down)" + }, + "panels/protocol_monitor/protocol_monitor-meta.ts | protocolMonitor": { + "message": "Protocol monitor" + }, + "panels/protocol_monitor/protocol_monitor-meta.ts | showProtocolMonitor": { + "message": "Show Protocol monitor" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | clearAll": { + "message": "Clear all" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | documentation": { + "message": "Documentation" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | filter": { + "message": "Filter" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | method": { + "message": "Method" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | noMessageSelected": { + "message": "No message selected" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | record": { + "message": "Record" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | request": { + "message": "Request" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | response": { + "message": "Response" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | save": { + "message": "Save" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommand": { + "message": "Send a raw CDP command" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | session": { + "message": "Session" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | sMs": { + "message": "{PH1} ms" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | target": { + "message": "Target" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | timestamp": { + "message": "Timestamp" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | type": { + "message": "Type" + }, + "panels/screencast/ScreencastApp.ts | toggleScreencast": { + "message": "Toggle screencast" + }, + "panels/screencast/ScreencastView.ts | addressBar": { + "message": "Address bar" + }, + "panels/screencast/ScreencastView.ts | back": { + "message": "back" + }, + "panels/screencast/ScreencastView.ts | forward": { + "message": "forward" + }, + "panels/screencast/ScreencastView.ts | profilingInProgress": { + "message": "Profiling in progress" + }, + "panels/screencast/ScreencastView.ts | reload": { + "message": "reload" + }, + "panels/screencast/ScreencastView.ts | screencastViewOfDebugTarget": { + "message": "Screencast view of debug target" + }, + "panels/screencast/ScreencastView.ts | theTabIsInactive": { + "message": "The tab is inactive" + }, + "panels/search/SearchResultsPane.ts | lineS": { + "message": "Line {PH1}" + }, + "panels/search/SearchResultsPane.ts | matchesCountS": { + "message": "Matches Count {PH1}" + }, + "panels/search/SearchResultsPane.ts | showDMore": { + "message": "Show {PH1} more" + }, + "panels/search/SearchView.ts | clear": { + "message": "Clear" + }, + "panels/search/SearchView.ts | foundDMatchingLinesInDFiles": { + "message": "Found {PH1} matching lines in {PH2} files." + }, + "panels/search/SearchView.ts | foundDMatchingLinesInFile": { + "message": "Found {PH1} matching lines in 1 file." + }, + "panels/search/SearchView.ts | foundMatchingLineInFile": { + "message": "Found 1 matching line in 1 file." + }, + "panels/search/SearchView.ts | indexing": { + "message": "Indexing…" + }, + "panels/search/SearchView.ts | indexingInterrupted": { + "message": "Indexing interrupted." + }, + "panels/search/SearchView.ts | matchCase": { + "message": "Match Case" + }, + "panels/search/SearchView.ts | noMatchesFound": { + "message": "No matches found." + }, + "panels/search/SearchView.ts | refresh": { + "message": "Refresh" + }, + "panels/search/SearchView.ts | search": { + "message": "Search" + }, + "panels/search/SearchView.ts | searchFinished": { + "message": "Search finished." + }, + "panels/search/SearchView.ts | searching": { + "message": "Searching…" + }, + "panels/search/SearchView.ts | searchInterrupted": { + "message": "Search interrupted." + }, + "panels/search/SearchView.ts | searchQuery": { + "message": "Search Query" + }, + "panels/search/SearchView.ts | useRegularExpression": { + "message": "Use Regular Expression" + }, + "panels/security/security-meta.ts | security": { + "message": "Security" + }, + "panels/security/security-meta.ts | showSecurity": { + "message": "Show Security" + }, + "panels/security/SecurityModel.ts | cipherWithMAC": { + "message": "{PH1} with {PH2}" + }, + "panels/security/SecurityModel.ts | keyExchangeWithGroup": { + "message": "{PH1} with {PH2}" + }, + "panels/security/SecurityModel.ts | theSecurityOfThisPageIsUnknown": { + "message": "The security of this page is unknown." + }, + "panels/security/SecurityModel.ts | thisPageIsNotSecure": { + "message": "This page is not secure." + }, + "panels/security/SecurityModel.ts | thisPageIsNotSecureBrokenHttps": { + "message": "This page is not secure (broken HTTPS)." + }, + "panels/security/SecurityModel.ts | thisPageIsSecureValidHttps": { + "message": "This page is secure (valid HTTPS)." + }, + "panels/security/SecurityPanel.ts | activeContentWithCertificate": { + "message": "active content with certificate errors" + }, + "panels/security/SecurityPanel.ts | activeMixedContent": { + "message": "active mixed content" + }, + "panels/security/SecurityPanel.ts | allResourcesOnThisPageAreServed": { + "message": "All resources on this page are served securely." + }, + "panels/security/SecurityPanel.ts | allServedSecurely": { + "message": "all served securely" + }, + "panels/security/SecurityPanel.ts | blockedMixedContent": { + "message": "Blocked mixed content" + }, + "panels/security/SecurityPanel.ts | certificate": { + "message": "Certificate" + }, + "panels/security/SecurityPanel.ts | certificateExpiresSoon": { + "message": "Certificate expires soon" + }, + "panels/security/SecurityPanel.ts | certificateTransparency": { + "message": "Certificate Transparency" + }, + "panels/security/SecurityPanel.ts | chromeHasDeterminedThatThisSiteS": { + "message": "Chrome has determined that this site could be fake or fraudulent." + }, + "panels/security/SecurityPanel.ts | cipher": { + "message": "Cipher" + }, + "panels/security/SecurityPanel.ts | connection": { + "message": "Connection" + }, + "panels/security/SecurityPanel.ts | contentWithCertificateErrors": { + "message": "content with certificate errors" + }, + "panels/security/SecurityPanel.ts | flaggedByGoogleSafeBrowsing": { + "message": "Flagged by Google Safe Browsing" + }, + "panels/security/SecurityPanel.ts | hashAlgorithm": { + "message": "Hash algorithm" + }, + "panels/security/SecurityPanel.ts | hideFullDetails": { + "message": "Hide full details" + }, + "panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownIn": { + "message": "If you believe this is shown in error please visit https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals." + }, + "panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownInErrorSafety": { + "message": "If you believe this is shown in error please visit https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals." + }, + "panels/security/SecurityPanel.ts | info": { + "message": "Info" + }, + "panels/security/SecurityPanel.ts | insecureSha": { + "message": "insecure (SHA-1)" + }, + "panels/security/SecurityPanel.ts | issuedAt": { + "message": "Issued at" + }, + "panels/security/SecurityPanel.ts | issuer": { + "message": "Issuer" + }, + "panels/security/SecurityPanel.ts | keyExchange": { + "message": "Key exchange" + }, + "panels/security/SecurityPanel.ts | keyExchangeGroup": { + "message": "Key exchange group" + }, + "panels/security/SecurityPanel.ts | logId": { + "message": "Log ID" + }, + "panels/security/SecurityPanel.ts | logName": { + "message": "Log name" + }, + "panels/security/SecurityPanel.ts | mainOrigin": { + "message": "Main origin" + }, + "panels/security/SecurityPanel.ts | mainOriginNonsecure": { + "message": "Main origin (non-secure)" + }, + "panels/security/SecurityPanel.ts | mainOriginSecure": { + "message": "Main origin (secure)" + }, + "panels/security/SecurityPanel.ts | missing": { + "message": "missing" + }, + "panels/security/SecurityPanel.ts | mixedContent": { + "message": "mixed content" + }, + "panels/security/SecurityPanel.ts | na": { + "message": "(n/a)" + }, + "panels/security/SecurityPanel.ts | nonsecureForm": { + "message": "non-secure form" + }, + "panels/security/SecurityPanel.ts | nonsecureOrigins": { + "message": "Non-secure origins" + }, + "panels/security/SecurityPanel.ts | noSecurityDetailsAreAvailableFor": { + "message": "No security details are available for this origin." + }, + "panels/security/SecurityPanel.ts | noSecurityInformation": { + "message": "No security information" + }, + "panels/security/SecurityPanel.ts | notSecure": { + "message": "Not secure" + }, + "panels/security/SecurityPanel.ts | notSecureBroken": { + "message": "Not secure (broken)" + }, + "panels/security/SecurityPanel.ts | obsoleteConnectionSettings": { + "message": "obsolete connection settings" + }, + "panels/security/SecurityPanel.ts | openFullCertificateDetails": { + "message": "Open full certificate details" + }, + "panels/security/SecurityPanel.ts | origin": { + "message": "Origin" + }, + "panels/security/SecurityPanel.ts | overview": { + "message": "Overview" + }, + "panels/security/SecurityPanel.ts | possibleSpoofingUrl": { + "message": "Possible spoofing URL" + }, + "panels/security/SecurityPanel.ts | protocol": { + "message": "Protocol" + }, + "panels/security/SecurityPanel.ts | publickeypinningBypassed": { + "message": "Public-Key-Pinning bypassed" + }, + "panels/security/SecurityPanel.ts | publickeypinningWasBypassedByA": { + "message": "Public-Key-Pinning was bypassed by a local root certificate." + }, + "panels/security/SecurityPanel.ts | reloadThePageToRecordRequestsFor": { + "message": "Reload the page to record requests for HTTP resources." + }, + "panels/security/SecurityPanel.ts | reloadToViewDetails": { + "message": "Reload to view details" + }, + "panels/security/SecurityPanel.ts | resources": { + "message": "Resources" + }, + "panels/security/SecurityPanel.ts | rsaKeyExchangeIsObsoleteEnableAn": { + "message": "RSA key exchange is obsolete. Enable an ECDHE-based cipher suite." + }, + "panels/security/SecurityPanel.ts | sct": { + "message": "SCT" + }, + "panels/security/SecurityPanel.ts | secure": { + "message": "Secure" + }, + "panels/security/SecurityPanel.ts | secureConnectionSettings": { + "message": "secure connection settings" + }, + "panels/security/SecurityPanel.ts | secureOrigins": { + "message": "Secure origins" + }, + "panels/security/SecurityPanel.ts | securityOverview": { + "message": "Security overview" + }, + "panels/security/SecurityPanel.ts | showFullDetails": { + "message": "Show full details" + }, + "panels/security/SecurityPanel.ts | showLess": { + "message": "Show less" + }, + "panels/security/SecurityPanel.ts | showMoreSTotal": { + "message": "Show more ({PH1} total)" + }, + "panels/security/SecurityPanel.ts | signatureAlgorithm": { + "message": "Signature algorithm" + }, + "panels/security/SecurityPanel.ts | signatureData": { + "message": "Signature data" + }, + "panels/security/SecurityPanel.ts | sIsObsoleteEnableAnAesgcmbased": { + "message": "{PH1} is obsolete. Enable an AES-GCM-based cipher suite." + }, + "panels/security/SecurityPanel.ts | sIsObsoleteEnableTlsOrLater": { + "message": "{PH1} is obsolete. Enable TLS 1.2 or later." + }, + "panels/security/SecurityPanel.ts | source": { + "message": "Source" + }, + "panels/security/SecurityPanel.ts | subject": { + "message": "Subject" + }, + "panels/security/SecurityPanel.ts | subjectAlternativeNameMissing": { + "message": "Subject Alternative Name missing" + }, + "panels/security/SecurityPanel.ts | theCertificateChainForThisSite": { + "message": "The certificate chain for this site contains a certificate signed using SHA-1." + }, + "panels/security/SecurityPanel.ts | theCertificateForThisSiteDoesNot": { + "message": "The certificate for this site does not contain a Subject Alternative Name extension containing a domain name or IP address." + }, + "panels/security/SecurityPanel.ts | theCertificateForThisSiteExpires": { + "message": "The certificate for this site expires in less than 48 hours and needs to be renewed." + }, + "panels/security/SecurityPanel.ts | theConnectionToThisSiteIs": { + "message": "The connection to this site is encrypted and authenticated using {PH1}, {PH2}, and {PH3}." + }, + "panels/security/SecurityPanel.ts | theConnectionToThisSiteIsUsingA": { + "message": "The connection to this site is using a valid, trusted server certificate issued by {PH1}." + }, + "panels/security/SecurityPanel.ts | theSecurityDetailsAboveAreFrom": { + "message": "The security details above are from the first inspected response." + }, + "panels/security/SecurityPanel.ts | theServerSignatureUsesShaWhichIs": { + "message": "The server signature uses SHA-1, which is obsolete. Enable a SHA-2 signature algorithm instead. (Note this is different from the signature in the certificate.)" + }, + "panels/security/SecurityPanel.ts | thisIsAnErrorPage": { + "message": "This is an error page." + }, + "panels/security/SecurityPanel.ts | thisOriginIsANonhttpsSecure": { + "message": "This origin is a non-HTTPS secure origin." + }, + "panels/security/SecurityPanel.ts | thisPageHasANonhttpsSecureOrigin": { + "message": "This page has a non-HTTPS secure origin." + }, + "panels/security/SecurityPanel.ts | thisPageIncludesAFormWithA": { + "message": "This page includes a form with a non-secure \"action\" attribute." + }, + "panels/security/SecurityPanel.ts | thisPageIncludesHttpResources": { + "message": "This page includes HTTP resources." + }, + "panels/security/SecurityPanel.ts | thisPageIncludesResourcesThat": { + "message": "This page includes resources that were loaded with certificate errors." + }, + "panels/security/SecurityPanel.ts | thisPageIsDangerousFlaggedBy": { + "message": "This page is dangerous (flagged by Google Safe Browsing)." + }, + "panels/security/SecurityPanel.ts | thisPageIsInsecureUnencrypted": { + "message": "This page is insecure (unencrypted HTTP)." + }, + "panels/security/SecurityPanel.ts | thisPageIsSuspicious": { + "message": "This page is suspicious" + }, + "panels/security/SecurityPanel.ts | thisPageIsSuspiciousFlaggedBy": { + "message": "This page is suspicious (flagged by Chrome)." + }, + "panels/security/SecurityPanel.ts | thisRequestCompliesWithChromes": { + "message": "This request complies with Chrome's Certificate Transparency policy." + }, + "panels/security/SecurityPanel.ts | thisRequestDoesNotComplyWith": { + "message": "This request does not comply with Chrome's Certificate Transparency policy." + }, + "panels/security/SecurityPanel.ts | thisResponseWasLoadedFromCache": { + "message": "This response was loaded from cache. Some security details might be missing." + }, + "panels/security/SecurityPanel.ts | thisSiteIsMissingAValidTrusted": { + "message": "This site is missing a valid, trusted certificate ({PH1})." + }, + "panels/security/SecurityPanel.ts | thisSitesHostnameLooksSimilarToP": { + "message": "This site's hostname looks similar to {PH1}. Attackers sometimes mimic sites by making small, hard-to-see changes to the domain name." + }, + "panels/security/SecurityPanel.ts | toCheckThisPagesStatusVisit": { + "message": "To check this page's status, visit g.co/safebrowsingstatus." + }, + "panels/security/SecurityPanel.ts | unknownCanceled": { + "message": "Unknown / canceled" + }, + "panels/security/SecurityPanel.ts | validAndTrusted": { + "message": "valid and trusted" + }, + "panels/security/SecurityPanel.ts | validationStatus": { + "message": "Validation status" + }, + "panels/security/SecurityPanel.ts | validFrom": { + "message": "Valid from" + }, + "panels/security/SecurityPanel.ts | validUntil": { + "message": "Valid until" + }, + "panels/security/SecurityPanel.ts | viewCertificate": { + "message": "View certificate" + }, + "panels/security/SecurityPanel.ts | viewDRequestsInNetworkPanel": { + "message": "{n, plural, =1 {View # request in Network Panel} other {View # requests in Network Panel}}" + }, + "panels/security/SecurityPanel.ts | viewRequestsInNetworkPanel": { + "message": "View requests in Network Panel" + }, + "panels/security/SecurityPanel.ts | youHaveRecentlyAllowedContent": { + "message": "You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site." + }, + "panels/security/SecurityPanel.ts | youHaveRecentlyAllowedNonsecure": { + "message": "You have recently allowed non-secure content (such as scripts or iframes) to run on this site." + }, + "panels/security/SecurityPanel.ts | yourConnectionToThisOriginIsNot": { + "message": "Your connection to this origin is not secure." + }, + "panels/security/SecurityPanel.ts | yourPageRequestedNonsecure": { + "message": "Your page requested non-secure resources that were blocked." + }, + "panels/sensors/LocationsSettingsTab.ts | addLocation": { + "message": "Add location..." + }, + "panels/sensors/LocationsSettingsTab.ts | customLocations": { + "message": "Custom locations" + }, + "panels/sensors/LocationsSettingsTab.ts | lat": { + "message": "Lat" + }, + "panels/sensors/LocationsSettingsTab.ts | latitude": { + "message": "Latitude" + }, + "panels/sensors/LocationsSettingsTab.ts | latitudeMustBeANumber": { + "message": "Latitude must be a number" + }, + "panels/sensors/LocationsSettingsTab.ts | latitudeMustBeGreaterThanOrEqual": { + "message": "Latitude must be greater than or equal to {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | latitudeMustBeLessThanOrEqualToS": { + "message": "Latitude must be less than or equal to {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | locale": { + "message": "Locale" + }, + "panels/sensors/LocationsSettingsTab.ts | localeMustContainAlphabetic": { + "message": "Locale must contain alphabetic characters" + }, + "panels/sensors/LocationsSettingsTab.ts | locationName": { + "message": "Location name" + }, + "panels/sensors/LocationsSettingsTab.ts | locationNameCannotBeEmpty": { + "message": "Location name cannot be empty" + }, + "panels/sensors/LocationsSettingsTab.ts | locationNameMustBeLessThanS": { + "message": "Location name must be less than {PH1} characters" + }, + "panels/sensors/LocationsSettingsTab.ts | long": { + "message": "Long" + }, + "panels/sensors/LocationsSettingsTab.ts | longitude": { + "message": "Longitude" + }, + "panels/sensors/LocationsSettingsTab.ts | longitudeMustBeANumber": { + "message": "Longitude must be a number" + }, + "panels/sensors/LocationsSettingsTab.ts | longitudeMustBeGreaterThanOr": { + "message": "Longitude must be greater than or equal to {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | longitudeMustBeLessThanOrEqualTo": { + "message": "Longitude must be less than or equal to {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | timezoneId": { + "message": "Timezone ID" + }, + "panels/sensors/LocationsSettingsTab.ts | timezoneIdMustContainAlphabetic": { + "message": "Timezone ID must contain alphabetic characters" + }, + "panels/sensors/sensors-meta.ts | accelerometer": { + "message": "accelerometer" + }, + "panels/sensors/sensors-meta.ts | devicebased": { + "message": "Device-based" + }, + "panels/sensors/sensors-meta.ts | deviceOrientation": { + "message": "device orientation" + }, + "panels/sensors/sensors-meta.ts | emulateIdleDetectorState": { + "message": "Emulate Idle Detector state" + }, + "panels/sensors/sensors-meta.ts | forceEnabled": { + "message": "Force enabled" + }, + "panels/sensors/sensors-meta.ts | geolocation": { + "message": "geolocation" + }, + "panels/sensors/sensors-meta.ts | locale": { + "message": "locale" + }, + "panels/sensors/sensors-meta.ts | locales": { + "message": "locales" + }, + "panels/sensors/sensors-meta.ts | locations": { + "message": "Locations" + }, + "panels/sensors/sensors-meta.ts | noIdleEmulation": { + "message": "No idle emulation" + }, + "panels/sensors/sensors-meta.ts | sensors": { + "message": "Sensors" + }, + "panels/sensors/sensors-meta.ts | showLocations": { + "message": "Show Locations" + }, + "panels/sensors/sensors-meta.ts | showSensors": { + "message": "Show Sensors" + }, + "panels/sensors/sensors-meta.ts | timezones": { + "message": "timezones" + }, + "panels/sensors/sensors-meta.ts | touch": { + "message": "Touch" + }, + "panels/sensors/sensors-meta.ts | userActiveScreenLocked": { + "message": "User active, screen locked" + }, + "panels/sensors/sensors-meta.ts | userActiveScreenUnlocked": { + "message": "User active, screen unlocked" + }, + "panels/sensors/sensors-meta.ts | userIdleScreenLocked": { + "message": "User idle, screen locked" + }, + "panels/sensors/sensors-meta.ts | userIdleScreenUnlocked": { + "message": "User idle, screen unlocked" + }, + "panels/sensors/SensorsView.ts | adjustWithMousewheelOrUpdownKeys": { + "message": "Adjust with mousewheel or up/down keys. {PH1}: ±10, Shift: ±1, Alt: ±0.01" + }, + "panels/sensors/SensorsView.ts | alpha": { + "message": "α (alpha)" + }, + "panels/sensors/SensorsView.ts | beta": { + "message": "β (beta)" + }, + "panels/sensors/SensorsView.ts | customOrientation": { + "message": "Custom orientation" + }, + "panels/sensors/SensorsView.ts | deviceOrientationSetToAlphaSBeta": { + "message": "Device orientation set to alpha: {PH1}, beta: {PH2}, gamma: {PH3}" + }, + "panels/sensors/SensorsView.ts | displayDown": { + "message": "Display down" + }, + "panels/sensors/SensorsView.ts | displayUp": { + "message": "Display up" + }, + "panels/sensors/SensorsView.ts | enableOrientationToRotate": { + "message": "Enable orientation to rotate" + }, + "panels/sensors/SensorsView.ts | error": { + "message": "Error" + }, + "panels/sensors/SensorsView.ts | forcesSelectedIdleStateEmulation": { + "message": "Forces selected idle state emulation" + }, + "panels/sensors/SensorsView.ts | forcesTouchInsteadOfClick": { + "message": "Forces touch instead of click" + }, + "panels/sensors/SensorsView.ts | gamma": { + "message": "γ (gamma)" + }, + "panels/sensors/SensorsView.ts | landscapeLeft": { + "message": "Landscape left" + }, + "panels/sensors/SensorsView.ts | landscapeRight": { + "message": "Landscape right" + }, + "panels/sensors/SensorsView.ts | latitude": { + "message": "Latitude" + }, + "panels/sensors/SensorsView.ts | locale": { + "message": "Locale" + }, + "panels/sensors/SensorsView.ts | location": { + "message": "Location" + }, + "panels/sensors/SensorsView.ts | locationUnavailable": { + "message": "Location unavailable" + }, + "panels/sensors/SensorsView.ts | longitude": { + "message": "Longitude" + }, + "panels/sensors/SensorsView.ts | manage": { + "message": "Manage" + }, + "panels/sensors/SensorsView.ts | manageTheListOfLocations": { + "message": "Manage the list of locations" + }, + "panels/sensors/SensorsView.ts | noOverride": { + "message": "No override" + }, + "panels/sensors/SensorsView.ts | off": { + "message": "Off" + }, + "panels/sensors/SensorsView.ts | orientation": { + "message": "Orientation" + }, + "panels/sensors/SensorsView.ts | other": { + "message": "Other…" + }, + "panels/sensors/SensorsView.ts | overrides": { + "message": "Overrides" + }, + "panels/sensors/SensorsView.ts | portrait": { + "message": "Portrait" + }, + "panels/sensors/SensorsView.ts | portraitUpsideDown": { + "message": "Portrait upside down" + }, + "panels/sensors/SensorsView.ts | presets": { + "message": "Presets" + }, + "panels/sensors/SensorsView.ts | reset": { + "message": "Reset" + }, + "panels/sensors/SensorsView.ts | resetDeviceOrientation": { + "message": "Reset device orientation" + }, + "panels/sensors/SensorsView.ts | shiftdragHorizontallyToRotate": { + "message": "Shift+drag horizontally to rotate around the y-axis" + }, + "panels/sensors/SensorsView.ts | timezoneId": { + "message": "Timezone ID" + }, + "panels/settings/components/SyncSection.ts | preferencesSyncDisabled": { + "message": "To turn this setting on, you must first enable settings sync in Chrome." + }, + "panels/settings/components/SyncSection.ts | settings": { + "message": "Go to Settings" + }, + "panels/settings/components/SyncSection.ts | signedIn": { + "message": "Signed into Chrome as:" + }, + "panels/settings/components/SyncSection.ts | syncDisabled": { + "message": "To turn this setting on, you must enable Chrome sync." + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | addBrand": { + "message": "Add Brand" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | addedBrand": { + "message": "Added brand row" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecture": { + "message": "Architecture" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecturePlaceholder": { + "message": "Architecture (e.g. x86)" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandDeleteAriaLabel": { + "message": "Delete {PH1}" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandName": { + "message": "Brand" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandNameAriaLabel": { + "message": "Brand {PH1}" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandProperties": { + "message": "Brand properties" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brands": { + "message": "Brands" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandVersionAriaLabel": { + "message": "Version {PH1}" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deletedBrand": { + "message": "Deleted brand row" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deleteTooltip": { + "message": "Delete" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceModel": { + "message": "Device model" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceProperties": { + "message": "Device properties" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersion": { + "message": "Full browser version" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersionPlaceholder": { + "message": "Full browser version (e.g. 87.0.4280.88)" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | mobileCheckboxLabel": { + "message": "Mobile" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | notRepresentable": { + "message": "Not representable as structured headers string." + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformLabel": { + "message": "Platform" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformPlaceholder": { + "message": "Platform (e.g. Android)" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformProperties": { + "message": "Platform properties" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformVersion": { + "message": "Platform version" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | title": { + "message": "User agent client hints" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | update": { + "message": "Update" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | userAgentClientHintsInfo": { + "message": "User agent client hints are an alternative to the user agent string that identify the browser and the device in a more structured way with better privacy accounting. Click the button to learn more." + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | version": { + "message": "Version" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | addCustomDevice": { + "message": "Add custom device..." + }, + "panels/settings/emulation/DevicesSettingsTab.ts | device": { + "message": "Device" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceAddedOrUpdated": { + "message": "Device {PH1} successfully added/updated." + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceName": { + "message": "Device Name" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceNameCannotBeEmpty": { + "message": "Device name cannot be empty." + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceNameMustBeLessThanS": { + "message": "Device name must be less than {PH1} characters." + }, + "panels/settings/emulation/DevicesSettingsTab.ts | devicePixelRatio": { + "message": "Device pixel ratio" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | emulatedDevices": { + "message": "Emulated Devices" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | height": { + "message": "Height" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | userAgentString": { + "message": "User agent string" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | userAgentType": { + "message": "User agent type" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | width": { + "message": "Width" + }, + "panels/settings/emulation/emulation-meta.ts | devices": { + "message": "Devices" + }, + "panels/settings/emulation/emulation-meta.ts | showDevices": { + "message": "Show Devices" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | addFilenamePattern": { + "message": "Add filename pattern" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | addPattern": { + "message": "Add pattern..." + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | behavior": { + "message": "Behavior" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | debuggerWillSkipThroughThe": { + "message": "Debugger will skip through the scripts and will not stop on exceptions thrown by them." + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | disabled": { + "message": "Disabled" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | frameworkIgnoreList": { + "message": "Framework Ignore List" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreList": { + "message": "Ignore List" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreListContentScripts": { + "message": "Add content scripts to ignore list" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreListContentScriptsExtension": { + "message": "Add content scripts to ignore list (extension scripts in the page)" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreScriptsWhoseNamesMatchS": { + "message": "Ignore scripts whose names match ''{PH1}''" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | noIgnoreListPatterns": { + "message": "No ignore list patterns" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | pattern": { + "message": "Pattern" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | patternAlreadyExists": { + "message": "Pattern already exists" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | patternCannotBeEmpty": { + "message": "Pattern cannot be empty" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | patternMustBeAValidRegular": { + "message": "Pattern must be a valid regular expression" + }, + "panels/settings/KeybindsSettingsTab.ts | addAShortcut": { + "message": "Add a shortcut" + }, + "panels/settings/KeybindsSettingsTab.ts | confirmChanges": { + "message": "Confirm changes" + }, + "panels/settings/KeybindsSettingsTab.ts | discardChanges": { + "message": "Discard changes" + }, + "panels/settings/KeybindsSettingsTab.ts | editShortcut": { + "message": "Edit shortcut" + }, + "panels/settings/KeybindsSettingsTab.ts | FullListOfDevtoolsKeyboard": { + "message": "Full list of DevTools keyboard shortcuts and gestures" + }, + "panels/settings/KeybindsSettingsTab.ts | keyboardShortcutsList": { + "message": "Keyboard shortcuts list" + }, + "panels/settings/KeybindsSettingsTab.ts | matchShortcutsFromPreset": { + "message": "Match shortcuts from preset" + }, + "panels/settings/KeybindsSettingsTab.ts | noShortcutForAction": { + "message": "No shortcut for action" + }, + "panels/settings/KeybindsSettingsTab.ts | removeShortcut": { + "message": "Remove shortcut" + }, + "panels/settings/KeybindsSettingsTab.ts | ResetShortcutsForAction": { + "message": "Reset shortcuts for action" + }, + "panels/settings/KeybindsSettingsTab.ts | RestoreDefaultShortcuts": { + "message": "Restore default shortcuts" + }, + "panels/settings/KeybindsSettingsTab.ts | shortcutModified": { + "message": "Shortcut modified" + }, + "panels/settings/KeybindsSettingsTab.ts | shortcuts": { + "message": "Shortcuts" + }, + "panels/settings/KeybindsSettingsTab.ts | shortcutsCannotContainOnly": { + "message": "Shortcuts cannot contain only modifier keys." + }, + "panels/settings/KeybindsSettingsTab.ts | thisShortcutIsInUseByS": { + "message": "This shortcut is in use by {PH1}: {PH2}." + }, + "panels/settings/settings-meta.ts | documentation": { + "message": "Documentation" + }, + "panels/settings/settings-meta.ts | experiments": { + "message": "Experiments" + }, + "panels/settings/settings-meta.ts | ignoreList": { + "message": "Ignore List" + }, + "panels/settings/settings-meta.ts | preferences": { + "message": "Preferences" + }, + "panels/settings/settings-meta.ts | settings": { + "message": "Settings" + }, + "panels/settings/settings-meta.ts | shortcuts": { + "message": "Shortcuts" + }, + "panels/settings/settings-meta.ts | showExperiments": { + "message": "Show Experiments" + }, + "panels/settings/settings-meta.ts | showIgnoreList": { + "message": "Show Ignore List" + }, + "panels/settings/settings-meta.ts | showPreferences": { + "message": "Show Preferences" + }, + "panels/settings/settings-meta.ts | showShortcuts": { + "message": "Show Shortcuts" + }, + "panels/settings/SettingsScreen.ts | experiments": { + "message": "Experiments" + }, + "panels/settings/SettingsScreen.ts | filterExperimentsLabel": { + "message": "Filter" + }, + "panels/settings/SettingsScreen.ts | learnMore": { + "message": "Learn more" + }, + "panels/settings/SettingsScreen.ts | noResults": { + "message": "No experiments match the filter" + }, + "panels/settings/SettingsScreen.ts | oneOrMoreSettingsHaveChanged": { + "message": "One or more settings have changed which requires a reload to take effect." + }, + "panels/settings/SettingsScreen.ts | preferences": { + "message": "Preferences" + }, + "panels/settings/SettingsScreen.ts | restoreDefaultsAndReload": { + "message": "Restore defaults and reload" + }, + "panels/settings/SettingsScreen.ts | settings": { + "message": "Settings" + }, + "panels/settings/SettingsScreen.ts | shortcuts": { + "message": "Shortcuts" + }, + "panels/settings/SettingsScreen.ts | theseExperimentsAreParticularly": { + "message": "These experiments are particularly unstable. Enable at your own risk." + }, + "panels/settings/SettingsScreen.ts | theseExperimentsCouldBeUnstable": { + "message": "These experiments could be unstable or unreliable and may require you to restart DevTools." + }, + "panels/settings/SettingsScreen.ts | warning": { + "message": "WARNING:" + }, + "panels/snippets/ScriptSnippetFileSystem.ts | linkedTo": { + "message": "Linked to {PH1}" + }, + "panels/snippets/ScriptSnippetFileSystem.ts | scriptSnippet": { + "message": "Script snippet #{PH1}" + }, + "panels/snippets/SnippetsQuickOpen.ts | noSnippetsFound": { + "message": "No snippets found." + }, + "panels/snippets/SnippetsQuickOpen.ts | run": { + "message": "Run" + }, + "panels/snippets/SnippetsQuickOpen.ts | snippet": { + "message": "Snippet" + }, + "panels/sources/AddSourceMapURLDialog.ts | add": { + "message": "Add" + }, + "panels/sources/AddSourceMapURLDialog.ts | sourceMapUrl": { + "message": "Source map URL: " + }, + "panels/sources/BreakpointEditDialog.ts | breakpoint": { + "message": "Breakpoint" + }, + "panels/sources/BreakpointEditDialog.ts | breakpointType": { + "message": "Breakpoint type" + }, + "panels/sources/BreakpointEditDialog.ts | conditionalBreakpoint": { + "message": "Conditional breakpoint" + }, + "panels/sources/BreakpointEditDialog.ts | expressionToCheckBeforePausingEg": { + "message": "Expression to check before pausing, e.g. x > 5" + }, + "panels/sources/BreakpointEditDialog.ts | logAMessageToConsoleDoNotBreak": { + "message": "Log a message to Console, do not break" + }, + "panels/sources/BreakpointEditDialog.ts | logMessageEgXIsX": { + "message": "Log message, e.g. 'x is', x" + }, + "panels/sources/BreakpointEditDialog.ts | logpoint": { + "message": "Logpoint" + }, + "panels/sources/BreakpointEditDialog.ts | pauseOnlyWhenTheConditionIsTrue": { + "message": "Pause only when the condition is true" + }, + "panels/sources/CallStackSidebarPane.ts | addAllContentScriptsToIgnoreList": { + "message": "Add all content scripts to ignore list" + }, + "panels/sources/CallStackSidebarPane.ts | addScriptToIgnoreList": { + "message": "Add script to ignore list" + }, + "panels/sources/CallStackSidebarPane.ts | callFrameWarnings": { + "message": "Some call frames have warnings" + }, + "panels/sources/CallStackSidebarPane.ts | callStack": { + "message": "Call Stack" + }, + "panels/sources/CallStackSidebarPane.ts | copyStackTrace": { + "message": "Copy stack trace" + }, + "panels/sources/CallStackSidebarPane.ts | notPaused": { + "message": "Not paused" + }, + "panels/sources/CallStackSidebarPane.ts | onIgnoreList": { + "message": "on ignore list" + }, + "panels/sources/CallStackSidebarPane.ts | removeAllContentScriptsFrom": { + "message": "Remove all content scripts from ignore list" + }, + "panels/sources/CallStackSidebarPane.ts | removeFromIgnoreList": { + "message": "Remove from ignore list" + }, + "panels/sources/CallStackSidebarPane.ts | showIgnorelistedFrames": { + "message": "Show ignore-listed frames" + }, + "panels/sources/CallStackSidebarPane.ts | showMore": { + "message": "Show more" + }, + "panels/sources/CoveragePlugin.ts | clickToShowCoveragePanel": { + "message": "Click to show Coverage Panel" + }, + "panels/sources/CoveragePlugin.ts | coverageNa": { + "message": "Coverage: n/a" + }, + "panels/sources/CoveragePlugin.ts | coverageS": { + "message": "Coverage: {PH1}" + }, + "panels/sources/CoveragePlugin.ts | showDetails": { + "message": "Show Details" + }, + "panels/sources/CSSPlugin.ts | openColorPicker": { + "message": "Open color picker." + }, + "panels/sources/CSSPlugin.ts | openCubicBezierEditor": { + "message": "Open cubic bezier editor." + }, + "panels/sources/DebuggerPausedMessage.ts | attributeModifications": { + "message": "attribute modifications" + }, + "panels/sources/DebuggerPausedMessage.ts | childSAdded": { + "message": "Child {PH1} added" + }, + "panels/sources/DebuggerPausedMessage.ts | debuggerPaused": { + "message": "Debugger paused" + }, + "panels/sources/DebuggerPausedMessage.ts | descendantSAdded": { + "message": "Descendant {PH1} added" + }, + "panels/sources/DebuggerPausedMessage.ts | descendantSRemoved": { + "message": "Descendant {PH1} removed" + }, + "panels/sources/DebuggerPausedMessage.ts | nodeRemoval": { + "message": "node removal" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedBeforePotentialOutofmemory": { + "message": "Paused before potential out-of-memory crash" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnAssertion": { + "message": "Paused on assertion" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnBreakpoint": { + "message": "Paused on breakpoint" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnCspViolation": { + "message": "Paused on CSP violation" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnDebuggedFunction": { + "message": "Paused on debugged function" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnEventListener": { + "message": "Paused on event listener" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnException": { + "message": "Paused on exception" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnPromiseRejection": { + "message": "Paused on promise rejection" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnS": { + "message": "Paused on {PH1}" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnXhrOrFetch": { + "message": "Paused on XHR or fetch" + }, + "panels/sources/DebuggerPausedMessage.ts | subtreeModifications": { + "message": "subtree modifications" + }, + "panels/sources/DebuggerPausedMessage.ts | trustedTypePolicyViolation": { + "message": "Trusted Type Policy Violation" + }, + "panels/sources/DebuggerPausedMessage.ts | trustedTypeSinkViolation": { + "message": "Trusted Type Sink Violation" + }, + "panels/sources/DebuggerPlugin.ts | addBreakpoint": { + "message": "Add breakpoint" + }, + "panels/sources/DebuggerPlugin.ts | addConditionalBreakpoint": { + "message": "Add conditional breakpoint…" + }, + "panels/sources/DebuggerPlugin.ts | addLogpoint": { + "message": "Add logpoint…" + }, + "panels/sources/DebuggerPlugin.ts | addSourceMap": { + "message": "Add source map…" + }, + "panels/sources/DebuggerPlugin.ts | associatedFilesAreAvailable": { + "message": "Associated files are available via file tree or {PH1}." + }, + "panels/sources/DebuggerPlugin.ts | associatedFilesShouldBeAdded": { + "message": "Associated files should be added to the file tree. You can debug these resolved source files as regular JavaScript files." + }, + "panels/sources/DebuggerPlugin.ts | configure": { + "message": "Configure" + }, + "panels/sources/DebuggerPlugin.ts | disableBreakpoint": { + "message": "{n, plural, =1 {Disable breakpoint} other {Disable all breakpoints in line}}" + }, + "panels/sources/DebuggerPlugin.ts | editBreakpoint": { + "message": "Edit breakpoint…" + }, + "panels/sources/DebuggerPlugin.ts | enableBreakpoint": { + "message": "{n, plural, =1 {Enable breakpoint} other {Enable all breakpoints in line}}" + }, + "panels/sources/DebuggerPlugin.ts | neverPauseHere": { + "message": "Never pause here" + }, + "panels/sources/DebuggerPlugin.ts | prettyprint": { + "message": "Pretty-print" + }, + "panels/sources/DebuggerPlugin.ts | prettyprintingWillFormatThisFile": { + "message": "Pretty-printing will format this file in a new tab where you can continue debugging. You can also pretty-print this file by clicking the {PH1} button on the bottom status bar." + }, + "panels/sources/DebuggerPlugin.ts | prettyprintThisMinifiedFile": { + "message": "Pretty-print this minified file?" + }, + "panels/sources/DebuggerPlugin.ts | removeBreakpoint": { + "message": "{n, plural, =1 {Remove breakpoint} other {Remove all breakpoints in line}}" + }, + "panels/sources/DebuggerPlugin.ts | removeFromIgnoreList": { + "message": "Remove from ignore list" + }, + "panels/sources/DebuggerPlugin.ts | sourceMapDetected": { + "message": "Source map detected." + }, + "panels/sources/DebuggerPlugin.ts | sourceMapFoundButIgnoredForFile": { + "message": "Source map found, but ignored for file on ignore list." + }, + "panels/sources/DebuggerPlugin.ts | theDebuggerWillSkipStepping": { + "message": "The debugger will skip stepping through this script, and will not stop on exceptions." + }, + "panels/sources/DebuggerPlugin.ts | thisScriptIsOnTheDebuggersIgnore": { + "message": "This script is on the debugger's ignore list" + }, + "panels/sources/FilteredUISourceCodeListProvider.ts | noFilesFound": { + "message": "No files found" + }, + "panels/sources/GoToLineQuickOpen.ts | currentLineSTypeALineNumber": { + "message": "Current line: {PH1}. Type a line number between 1 and {PH2} to navigate to." + }, + "panels/sources/GoToLineQuickOpen.ts | currentPositionXsTypeAnOffset": { + "message": "Current position: 0x{PH1}. Type an offset between 0x{PH2} and 0x{PH3} to navigate to." + }, + "panels/sources/GoToLineQuickOpen.ts | goToLineS": { + "message": "Go to line {PH1}." + }, + "panels/sources/GoToLineQuickOpen.ts | goToLineSAndColumnS": { + "message": "Go to line {PH1} and column {PH2}." + }, + "panels/sources/GoToLineQuickOpen.ts | goToOffsetXs": { + "message": "Go to offset 0x{PH1}." + }, + "panels/sources/GoToLineQuickOpen.ts | noFileSelected": { + "message": "No file selected." + }, + "panels/sources/GoToLineQuickOpen.ts | noResultsFound": { + "message": "No results found" + }, + "panels/sources/GoToLineQuickOpen.ts | typeANumberToGoToThatLine": { + "message": "Type a number to go to that line." + }, + "panels/sources/InplaceFormatterEditorAction.ts | format": { + "message": "Format" + }, + "panels/sources/InplaceFormatterEditorAction.ts | formatS": { + "message": "Format {PH1}" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | activateBreakpoints": { + "message": "Activate breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | checked": { + "message": "checked" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | deactivateBreakpoints": { + "message": "Deactivate breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | disableAllBreakpoints": { + "message": "Disable all breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | disableBreakpointsInFile": { + "message": "Disable breakpoints in file" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | enableAllBreakpoints": { + "message": "Enable all breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | enableBreakpointsInFile": { + "message": "Enable breakpoints in file" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | mixed": { + "message": "mixed" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | noBreakpoints": { + "message": "No breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeAllBreakpoints": { + "message": "Remove all breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeAllBreakpointsInLine": { + "message": "Remove all breakpoints in line" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeBreakpoint": { + "message": "Remove breakpoint" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeOtherBreakpoints": { + "message": "Remove other breakpoints" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | revealLocation": { + "message": "Reveal location" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | sBreakpointHit": { + "message": "{PH1} breakpoint hit" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | unchecked": { + "message": "unchecked" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteAll": { + "message": "Are you sure you want to delete all overrides contained in this folder?" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteThis": { + "message": "Are you sure you want to delete this file?" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToExcludeThis": { + "message": "Are you sure you want to exclude this folder?" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToRemoveThis": { + "message": "Are you sure you want to remove this folder?" + }, + "panels/sources/NavigatorView.ts | delete": { + "message": "Delete" + }, + "panels/sources/NavigatorView.ts | deleteAllOverrides": { + "message": "Delete all overrides" + }, + "panels/sources/NavigatorView.ts | excludeFolder": { + "message": "Exclude folder" + }, + "panels/sources/NavigatorView.ts | makeACopy": { + "message": "Make a copy…" + }, + "panels/sources/NavigatorView.ts | newFile": { + "message": "New file" + }, + "panels/sources/NavigatorView.ts | noDomain": { + "message": "(no domain)" + }, + "panels/sources/NavigatorView.ts | openFolder": { + "message": "Open folder" + }, + "panels/sources/NavigatorView.ts | removeFolderFromWorkspace": { + "message": "Remove folder from workspace" + }, + "panels/sources/NavigatorView.ts | rename": { + "message": "Rename…" + }, + "panels/sources/NavigatorView.ts | searchInAllFiles": { + "message": "Search in all files" + }, + "panels/sources/NavigatorView.ts | searchInFolder": { + "message": "Search in folder" + }, + "panels/sources/NavigatorView.ts | sFromSourceMap": { + "message": "{PH1} (from source map)" + }, + "panels/sources/OutlineQuickOpen.ts | noFileSelected": { + "message": "No file selected." + }, + "panels/sources/OutlineQuickOpen.ts | noResultsFound": { + "message": "No results found" + }, + "panels/sources/OutlineQuickOpen.ts | openAJavascriptOrCssFileToSee": { + "message": "Open a JavaScript or CSS file to see symbols" + }, + "panels/sources/ProfilePlugin.ts | kb": { + "message": "kB" + }, + "panels/sources/ProfilePlugin.ts | mb": { + "message": "MB" + }, + "panels/sources/ProfilePlugin.ts | ms": { + "message": "ms" + }, + "panels/sources/ScopeChainSidebarPane.ts | closure": { + "message": "Closure" + }, + "panels/sources/ScopeChainSidebarPane.ts | closureS": { + "message": "Closure ({PH1})" + }, + "panels/sources/ScopeChainSidebarPane.ts | couldNotOpenLinearMemory": { + "message": "Could not open linear memory inspector: failed locating buffer." + }, + "panels/sources/ScopeChainSidebarPane.ts | exception": { + "message": "Exception" + }, + "panels/sources/ScopeChainSidebarPane.ts | loading": { + "message": "Loading..." + }, + "panels/sources/ScopeChainSidebarPane.ts | notPaused": { + "message": "Not paused" + }, + "panels/sources/ScopeChainSidebarPane.ts | noVariables": { + "message": "No variables" + }, + "panels/sources/ScopeChainSidebarPane.ts | returnValue": { + "message": "Return value" + }, + "panels/sources/ScopeChainSidebarPane.ts | revealInMemoryInspectorPanel": { + "message": "Reveal in Memory Inspector panel" + }, + "panels/sources/ScriptFormatterEditorAction.ts | prettyPrint": { + "message": "Pretty print" + }, + "panels/sources/ScriptFormatterEditorAction.ts | prettyPrintS": { + "message": "Pretty print {PH1}" + }, + "panels/sources/ScriptOriginPlugin.ts | providedViaDebugInfoByS": { + "message": "(provided via debug info by {PH1})" + }, + "panels/sources/ScriptOriginPlugin.ts | sourceMappedFromS": { + "message": "(source mapped from {PH1})" + }, + "panels/sources/SnippetsPlugin.ts | ctrlenter": { + "message": "Ctrl+Enter" + }, + "panels/sources/SnippetsPlugin.ts | enter": { + "message": "⌘+Enter" + }, + "panels/sources/sources-meta.ts | activateBreakpoints": { + "message": "Activate breakpoints" + }, + "panels/sources/sources-meta.ts | addFolderToWorkspace": { + "message": "Add folder to workspace" + }, + "panels/sources/sources-meta.ts | addSelectedTextToWatches": { + "message": "Add selected text to watches" + }, + "panels/sources/sources-meta.ts | all": { + "message": "All" + }, + "panels/sources/sources-meta.ts | allowScrollingPastEndOfFile": { + "message": "Allow scrolling past end of file" + }, + "panels/sources/sources-meta.ts | autocompletion": { + "message": "Autocompletion" + }, + "panels/sources/sources-meta.ts | automaticallyRevealFilesIn": { + "message": "Automatically reveal files in sidebar" + }, + "panels/sources/sources-meta.ts | bracketMatching": { + "message": "Bracket matching" + }, + "panels/sources/sources-meta.ts | breakpoints": { + "message": "Breakpoints" + }, + "panels/sources/sources-meta.ts | closeAll": { + "message": "Close All" + }, + "panels/sources/sources-meta.ts | closeTheActiveTab": { + "message": "Close the active tab" + }, + "panels/sources/sources-meta.ts | codeFolding": { + "message": "Code folding" + }, + "panels/sources/sources-meta.ts | createNewSnippet": { + "message": "Create new snippet" + }, + "panels/sources/sources-meta.ts | deactivateBreakpoints": { + "message": "Deactivate breakpoints" + }, + "panels/sources/sources-meta.ts | decrementCssUnitBy": { + "message": "Decrement CSS unit by {PH1}" + }, + "panels/sources/sources-meta.ts | detectIndentation": { + "message": "Detect indentation" + }, + "panels/sources/sources-meta.ts | disableAutocompletion": { + "message": "Disable autocompletion" + }, + "panels/sources/sources-meta.ts | disableAutoFocusOnDebuggerPaused": { + "message": "Do not focus Sources panel when triggering a breakpoint" + }, + "panels/sources/sources-meta.ts | disableBracketMatching": { + "message": "Disable bracket matching" + }, + "panels/sources/sources-meta.ts | disableCodeFolding": { + "message": "Disable code folding" + }, + "panels/sources/sources-meta.ts | disableCssSourceMaps": { + "message": "Disable CSS source maps" + }, + "panels/sources/sources-meta.ts | disableJavascriptSourceMaps": { + "message": "Disable JavaScript source maps" + }, + "panels/sources/sources-meta.ts | disableTabMovesFocus": { + "message": "Disable tab moves focus" + }, + "panels/sources/sources-meta.ts | disallowScrollingPastEndOfFile": { + "message": "Disallow scrolling past end of file" + }, + "panels/sources/sources-meta.ts | displayVariableValuesInlineWhile": { + "message": "Display variable values inline while debugging" + }, + "panels/sources/sources-meta.ts | doNotAutomaticallyRevealFilesIn": { + "message": "Do not automatically reveal files in sidebar" + }, + "panels/sources/sources-meta.ts | doNotDetectIndentation": { + "message": "Do not detect indentation" + }, + "panels/sources/sources-meta.ts | doNotDisplayVariableValuesInline": { + "message": "Do not display variable values inline while debugging" + }, + "panels/sources/sources-meta.ts | doNotSearchInAnonymousAndContent": { + "message": "Do not search in anonymous and content scripts" + }, + "panels/sources/sources-meta.ts | doNotShowWhitespaceCharacters": { + "message": "Do not show whitespace characters" + }, + "panels/sources/sources-meta.ts | enableAutocompletion": { + "message": "Enable autocompletion" + }, + "panels/sources/sources-meta.ts | enableAutoFocusOnDebuggerPaused": { + "message": "Focus Sources panel when triggering a breakpoint" + }, + "panels/sources/sources-meta.ts | enableBracketMatching": { + "message": "Enable bracket matching" + }, + "panels/sources/sources-meta.ts | enableCodeFolding": { + "message": "Enable code folding" + }, + "panels/sources/sources-meta.ts | enableCssSourceMaps": { + "message": "Enable CSS source maps" + }, + "panels/sources/sources-meta.ts | enableJavascriptSourceMaps": { + "message": "Enable JavaScript source maps" + }, + "panels/sources/sources-meta.ts | enableTabMovesFocus": { + "message": "Enable tab moves focus" + }, + "panels/sources/sources-meta.ts | evaluateSelectedTextInConsole": { + "message": "Evaluate selected text in console" + }, + "panels/sources/sources-meta.ts | file": { + "message": "File" + }, + "panels/sources/sources-meta.ts | filesystem": { + "message": "Filesystem" + }, + "panels/sources/sources-meta.ts | goTo": { + "message": "Go to" + }, + "panels/sources/sources-meta.ts | goToAFunctionDeclarationruleSet": { + "message": "Go to a function declaration/rule set" + }, + "panels/sources/sources-meta.ts | goToLine": { + "message": "Go to line" + }, + "panels/sources/sources-meta.ts | incrementCssUnitBy": { + "message": "Increment CSS unit by {PH1}" + }, + "panels/sources/sources-meta.ts | jumpToNextEditingLocation": { + "message": "Jump to next editing location" + }, + "panels/sources/sources-meta.ts | jumpToPreviousEditingLocation": { + "message": "Jump to previous editing location" + }, + "panels/sources/sources-meta.ts | line": { + "message": "Line" + }, + "panels/sources/sources-meta.ts | nextCallFrame": { + "message": "Next call frame" + }, + "panels/sources/sources-meta.ts | none": { + "message": "None" + }, + "panels/sources/sources-meta.ts | open": { + "message": "Open" + }, + "panels/sources/sources-meta.ts | pauseScriptExecution": { + "message": "Pause script execution" + }, + "panels/sources/sources-meta.ts | previousCallFrame": { + "message": "Previous call frame" + }, + "panels/sources/sources-meta.ts | quickSource": { + "message": "Quick source" + }, + "panels/sources/sources-meta.ts | rename": { + "message": "Rename" + }, + "panels/sources/sources-meta.ts | resumeScriptExecution": { + "message": "Resume script execution" + }, + "panels/sources/sources-meta.ts | runSnippet": { + "message": "Run snippet" + }, + "panels/sources/sources-meta.ts | save": { + "message": "Save" + }, + "panels/sources/sources-meta.ts | saveAll": { + "message": "Save all" + }, + "panels/sources/sources-meta.ts | scope": { + "message": "Scope" + }, + "panels/sources/sources-meta.ts | search": { + "message": "Search" + }, + "panels/sources/sources-meta.ts | searchInAnonymousAndContent": { + "message": "Search in anonymous and content scripts" + }, + "panels/sources/sources-meta.ts | showAllWhitespaceCharacters": { + "message": "Show all whitespace characters" + }, + "panels/sources/sources-meta.ts | showBreakpoints": { + "message": "Show Breakpoints" + }, + "panels/sources/sources-meta.ts | showFilesystem": { + "message": "Show Filesystem" + }, + "panels/sources/sources-meta.ts | showQuickSource": { + "message": "Show Quick source" + }, + "panels/sources/sources-meta.ts | showScope": { + "message": "Show Scope" + }, + "panels/sources/sources-meta.ts | showSearch": { + "message": "Show Search" + }, + "panels/sources/sources-meta.ts | showSnippets": { + "message": "Show Snippets" + }, + "panels/sources/sources-meta.ts | showSources": { + "message": "Show Sources" + }, + "panels/sources/sources-meta.ts | showThreads": { + "message": "Show Threads" + }, + "panels/sources/sources-meta.ts | showTrailingWhitespaceCharacters": { + "message": "Show trailing whitespace characters" + }, + "panels/sources/sources-meta.ts | showWatch": { + "message": "Show Watch" + }, + "panels/sources/sources-meta.ts | showWhitespaceCharacters": { + "message": "Show whitespace characters:" + }, + "panels/sources/sources-meta.ts | snippets": { + "message": "Snippets" + }, + "panels/sources/sources-meta.ts | sources": { + "message": "Sources" + }, + "panels/sources/sources-meta.ts | step": { + "message": "Step" + }, + "panels/sources/sources-meta.ts | stepIntoNextFunctionCall": { + "message": "Step into next function call" + }, + "panels/sources/sources-meta.ts | stepOutOfCurrentFunction": { + "message": "Step out of current function" + }, + "panels/sources/sources-meta.ts | stepOverNextFunctionCall": { + "message": "Step over next function call" + }, + "panels/sources/sources-meta.ts | switchFile": { + "message": "Switch file" + }, + "panels/sources/sources-meta.ts | symbol": { + "message": "Symbol" + }, + "panels/sources/sources-meta.ts | threads": { + "message": "Threads" + }, + "panels/sources/sources-meta.ts | toggleBreakpoint": { + "message": "Toggle breakpoint" + }, + "panels/sources/sources-meta.ts | toggleBreakpointEnabled": { + "message": "Toggle breakpoint enabled" + }, + "panels/sources/sources-meta.ts | toggleBreakpointInputWindow": { + "message": "Toggle breakpoint input window" + }, + "panels/sources/sources-meta.ts | trailing": { + "message": "Trailing" + }, + "panels/sources/sources-meta.ts | watch": { + "message": "Watch" + }, + "panels/sources/SourcesNavigator.ts | clearConfiguration": { + "message": "Clear configuration" + }, + "panels/sources/SourcesNavigator.ts | contentScriptsServedByExtensions": { + "message": "Content scripts served by extensions appear here" + }, + "panels/sources/SourcesNavigator.ts | createAndSaveCodeSnippetsFor": { + "message": "Create and save code snippets for later reuse" + }, + "panels/sources/SourcesNavigator.ts | createNewSnippet": { + "message": "Create new snippet" + }, + "panels/sources/SourcesNavigator.ts | learnMore": { + "message": "Learn more" + }, + "panels/sources/SourcesNavigator.ts | learnMoreAboutWorkspaces": { + "message": "Learn more about Workspaces" + }, + "panels/sources/SourcesNavigator.ts | newSnippet": { + "message": "New snippet" + }, + "panels/sources/SourcesNavigator.ts | overridePageAssetsWithFilesFromA": { + "message": "Override page assets with files from a local folder" + }, + "panels/sources/SourcesNavigator.ts | remove": { + "message": "Remove" + }, + "panels/sources/SourcesNavigator.ts | rename": { + "message": "Rename…" + }, + "panels/sources/SourcesNavigator.ts | run": { + "message": "Run" + }, + "panels/sources/SourcesNavigator.ts | saveAs": { + "message": "Save as..." + }, + "panels/sources/SourcesNavigator.ts | selectFolderForOverrides": { + "message": "Select folder for overrides" + }, + "panels/sources/SourcesNavigator.ts | syncChangesInDevtoolsWithThe": { + "message": "Sync changes in DevTools with the local filesystem" + }, + "panels/sources/SourcesPanel.ts | continueToHere": { + "message": "Continue to here" + }, + "panels/sources/SourcesPanel.ts | copyS": { + "message": "Copy {PH1}" + }, + "panels/sources/SourcesPanel.ts | copyStringAsJSLiteral": { + "message": "Copy string as JavaScript literal" + }, + "panels/sources/SourcesPanel.ts | copyStringAsJSONLiteral": { + "message": "Copy string as JSON literal" + }, + "panels/sources/SourcesPanel.ts | copyStringContents": { + "message": "Copy string contents" + }, + "panels/sources/SourcesPanel.ts | dontPauseOnExceptions": { + "message": "Don't pause on exceptions" + }, + "panels/sources/SourcesPanel.ts | dropWorkspaceFolderHere": { + "message": "Drop workspace folder here" + }, + "panels/sources/SourcesPanel.ts | groupByFolder": { + "message": "Group by folder" + }, + "panels/sources/SourcesPanel.ts | hideDebugger": { + "message": "Hide debugger" + }, + "panels/sources/SourcesPanel.ts | hideNavigator": { + "message": "Hide navigator" + }, + "panels/sources/SourcesPanel.ts | moreOptions": { + "message": "More options" + }, + "panels/sources/SourcesPanel.ts | openInSourcesPanel": { + "message": "Open in Sources panel" + }, + "panels/sources/SourcesPanel.ts | pauseOnCaughtExceptions": { + "message": "Pause on caught exceptions" + }, + "panels/sources/SourcesPanel.ts | pauseOnExceptions": { + "message": "Pause on exceptions" + }, + "panels/sources/SourcesPanel.ts | resumeWithAllPausesBlockedForMs": { + "message": "Resume with all pauses blocked for 500 ms" + }, + "panels/sources/SourcesPanel.ts | revealInSidebar": { + "message": "Reveal in sidebar" + }, + "panels/sources/SourcesPanel.ts | showDebugger": { + "message": "Show debugger" + }, + "panels/sources/SourcesPanel.ts | showFunctionDefinition": { + "message": "Show function definition" + }, + "panels/sources/SourcesPanel.ts | showNavigator": { + "message": "Show navigator" + }, + "panels/sources/SourcesPanel.ts | storeSAsGlobalVariable": { + "message": "Store {PH1} as global variable" + }, + "panels/sources/SourcesPanel.ts | terminateCurrentJavascriptCall": { + "message": "Terminate current JavaScript call" + }, + "panels/sources/SourcesView.ts | dropInAFolderToAddToWorkspace": { + "message": "Drop in a folder to add to workspace" + }, + "panels/sources/SourcesView.ts | openFile": { + "message": "Open file" + }, + "panels/sources/SourcesView.ts | runCommand": { + "message": "Run command" + }, + "panels/sources/SourcesView.ts | sourceViewActions": { + "message": "Source View Actions" + }, + "panels/sources/TabbedEditorContainer.ts | areYouSureYouWantToCloseUnsaved": { + "message": "Are you sure you want to close unsaved file: {PH1}?" + }, + "panels/sources/TabbedEditorContainer.ts | changesToThisFileWereNotSavedTo": { + "message": "Changes to this file were not saved to file system." + }, + "panels/sources/TabbedEditorContainer.ts | unableToLoadThisContent": { + "message": "Unable to load this content." + }, + "panels/sources/ThreadsSidebarPane.ts | paused": { + "message": "paused" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | addPropertyPathToWatch": { + "message": "Add property path to watch" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | addWatchExpression": { + "message": "Add watch expression" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | copyValue": { + "message": "Copy value" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | deleteAllWatchExpressions": { + "message": "Delete all watch expressions" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | deleteWatchExpression": { + "message": "Delete watch expression" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | notAvailable": { + "message": "" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | noWatchExpressions": { + "message": "No watch expressions" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | refreshWatchExpressions": { + "message": "Refresh watch expressions" + }, + "panels/timeline/components/WebVitalsTimeline.ts | fcp": { + "message": "FCP" + }, + "panels/timeline/components/WebVitalsTimeline.ts | firstContentfulPaint": { + "message": "First Contentful Paint" + }, + "panels/timeline/components/WebVitalsTimeline.ts | good": { + "message": "Good" + }, + "panels/timeline/components/WebVitalsTimeline.ts | largestContentfulPaint": { + "message": "Largest Contentful Paint" + }, + "panels/timeline/components/WebVitalsTimeline.ts | lcp": { + "message": "LCP" + }, + "panels/timeline/components/WebVitalsTimeline.ts | longTask": { + "message": "Long Task" + }, + "panels/timeline/components/WebVitalsTimeline.ts | longTasks": { + "message": "Long Tasks" + }, + "panels/timeline/components/WebVitalsTimeline.ts | ls": { + "message": "LS" + }, + "panels/timeline/components/WebVitalsTimeline.ts | needsImprovement": { + "message": "Needs improvement" + }, + "panels/timeline/components/WebVitalsTimeline.ts | poor": { + "message": "Poor" + }, + "panels/timeline/CountersGraph.ts | documents": { + "message": "Documents" + }, + "panels/timeline/CountersGraph.ts | gpuMemory": { + "message": "GPU Memory" + }, + "panels/timeline/CountersGraph.ts | jsHeap": { + "message": "JS Heap" + }, + "panels/timeline/CountersGraph.ts | listeners": { + "message": "Listeners" + }, + "panels/timeline/CountersGraph.ts | nodes": { + "message": "Nodes" + }, + "panels/timeline/CountersGraph.ts | ss": { + "message": "[{PH1} – {PH2}]" + }, + "panels/timeline/EventsTimelineTreeView.ts | all": { + "message": "All" + }, + "panels/timeline/EventsTimelineTreeView.ts | Dms": { + "message": "{PH1} ms" + }, + "panels/timeline/EventsTimelineTreeView.ts | durationFilter": { + "message": "Duration filter" + }, + "panels/timeline/EventsTimelineTreeView.ts | filterEventLog": { + "message": "Filter event log" + }, + "panels/timeline/EventsTimelineTreeView.ts | startTime": { + "message": "Start Time" + }, + "panels/timeline/timeline-meta.ts | hideChromeFrameInLayersView": { + "message": "Hide chrome frame in Layers view" + }, + "panels/timeline/timeline-meta.ts | javascriptProfiler": { + "message": "JavaScript Profiler" + }, + "panels/timeline/timeline-meta.ts | loadProfile": { + "message": "Load profile…" + }, + "panels/timeline/timeline-meta.ts | nextFrame": { + "message": "Next frame" + }, + "panels/timeline/timeline-meta.ts | nextRecording": { + "message": "Next recording" + }, + "panels/timeline/timeline-meta.ts | performance": { + "message": "Performance" + }, + "panels/timeline/timeline-meta.ts | previousFrame": { + "message": "Previous frame" + }, + "panels/timeline/timeline-meta.ts | previousRecording": { + "message": "Previous recording" + }, + "panels/timeline/timeline-meta.ts | record": { + "message": "Record" + }, + "panels/timeline/timeline-meta.ts | saveProfile": { + "message": "Save profile…" + }, + "panels/timeline/timeline-meta.ts | showJavascriptProfiler": { + "message": "Show JavaScript Profiler" + }, + "panels/timeline/timeline-meta.ts | showPerformance": { + "message": "Show Performance" + }, + "panels/timeline/timeline-meta.ts | showRecentTimelineSessions": { + "message": "Show recent timeline sessions" + }, + "panels/timeline/timeline-meta.ts | startProfilingAndReloadPage": { + "message": "Start profiling and reload page" + }, + "panels/timeline/timeline-meta.ts | startStopRecording": { + "message": "Start/stop recording" + }, + "panels/timeline/timeline-meta.ts | stop": { + "message": "Stop" + }, + "panels/timeline/TimelineController.ts | cpuProfileForATargetIsNot": { + "message": "CPU profile for a target is not available." + }, + "panels/timeline/TimelineController.ts | tracingNotSupported": { + "message": "Performance trace recording not supported for this type of target" + }, + "panels/timeline/TimelineDetailsView.ts | bottomup": { + "message": "Bottom-Up" + }, + "panels/timeline/TimelineDetailsView.ts | callTree": { + "message": "Call Tree" + }, + "panels/timeline/TimelineDetailsView.ts | estimated": { + "message": "estimated" + }, + "panels/timeline/TimelineDetailsView.ts | eventLog": { + "message": "Event Log" + }, + "panels/timeline/TimelineDetailsView.ts | layers": { + "message": "Layers" + }, + "panels/timeline/TimelineDetailsView.ts | learnMore": { + "message": "Learn more" + }, + "panels/timeline/TimelineDetailsView.ts | paintProfiler": { + "message": "Paint Profiler" + }, + "panels/timeline/TimelineDetailsView.ts | rangeSS": { + "message": "Range: {PH1} – {PH2}" + }, + "panels/timeline/TimelineDetailsView.ts | summary": { + "message": "Summary" + }, + "panels/timeline/TimelineDetailsView.ts | totalBlockingTimeSmss": { + "message": "Total blocking time: {PH1}ms{PH2}" + }, + "panels/timeline/TimelineEventOverview.ts | coverage": { + "message": "COVERAGE" + }, + "panels/timeline/TimelineEventOverview.ts | cpu": { + "message": "CPU" + }, + "panels/timeline/TimelineEventOverview.ts | fps": { + "message": "FPS" + }, + "panels/timeline/TimelineEventOverview.ts | heap": { + "message": "HEAP" + }, + "panels/timeline/TimelineEventOverview.ts | net": { + "message": "NET" + }, + "panels/timeline/TimelineEventOverview.ts | sSDash": { + "message": "{PH1} – {PH2}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | animation": { + "message": "Animation" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | console": { + "message": "Console" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | droppedFrame": { + "message": "Dropped Frame" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | experience": { + "message": "Experience" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | frame": { + "message": "Frame" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | frames": { + "message": "Frames" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | frameS": { + "message": "Frame — {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | gpu": { + "message": "GPU" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | idleFrame": { + "message": "Idle Frame" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | input": { + "message": "Input" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | interactions": { + "message": "Interactions" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | longFrame": { + "message": "Long frame" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | main": { + "message": "Main" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | mainS": { + "message": "Main — {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | occurrencesS": { + "message": "Occurrences: {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | onIgnoreList": { + "message": "On ignore list" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | raster": { + "message": "Raster" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | rasterizerThreadS": { + "message": "Rasterizer Thread {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | sFfps": { + "message": "{PH1} ~ {PH2} fps" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | sSelfS": { + "message": "{PH1} (self {PH2})" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | subframe": { + "message": "Subframe" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | thread": { + "message": "Thread" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | threadS": { + "message": "Thread {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | timings": { + "message": "Timings" + }, + "panels/timeline/TimelineFlameChartNetworkDataProvider.ts | network": { + "message": "Network" + }, + "panels/timeline/TimelineFlameChartView.ts | sAtS": { + "message": "{PH1} at {PH2}" + }, + "panels/timeline/TimelineHistoryManager.ts | currentSessionSS": { + "message": "Current Session: {PH1}. {PH2}" + }, + "panels/timeline/TimelineHistoryManager.ts | moments": { + "message": "moments" + }, + "panels/timeline/TimelineHistoryManager.ts | noRecordings": { + "message": "(no recordings)" + }, + "panels/timeline/TimelineHistoryManager.ts | sAgo": { + "message": "({PH1} ago)" + }, + "panels/timeline/TimelineHistoryManager.ts | sD": { + "message": "{PH1} #{PH2}" + }, + "panels/timeline/TimelineHistoryManager.ts | selectTimelineSession": { + "message": "Select Timeline Session" + }, + "panels/timeline/TimelineHistoryManager.ts | sH": { + "message": "{PH1} h" + }, + "panels/timeline/TimelineHistoryManager.ts | sM": { + "message": "{PH1} m" + }, + "panels/timeline/TimelineLoader.ts | legacyTimelineFormatIsNot": { + "message": "Legacy Timeline format is not supported." + }, + "panels/timeline/TimelineLoader.ts | malformedCpuProfileFormat": { + "message": "Malformed CPU profile format" + }, + "panels/timeline/TimelineLoader.ts | malformedTimelineDataS": { + "message": "Malformed timeline data: {PH1}" + }, + "panels/timeline/TimelineLoader.ts | malformedTimelineDataUnknownJson": { + "message": "Malformed timeline data: Unknown JSON format" + }, + "panels/timeline/TimelineLoader.ts | malformedTimelineInputWrongJson": { + "message": "Malformed timeline input, wrong JSON brackets balance" + }, + "panels/timeline/TimelinePanel.ts | afterRecordingSelectAnAreaOf": { + "message": "After recording, select an area of interest in the overview by dragging. Then, zoom and pan the timeline with the mousewheel or {PH1} keys. {PH2}" + }, + "panels/timeline/TimelinePanel.ts | bufferUsage": { + "message": "Buffer usage" + }, + "panels/timeline/TimelinePanel.ts | capturesAdvancedPaint": { + "message": "Captures advanced paint instrumentation, introduces significant performance overhead" + }, + "panels/timeline/TimelinePanel.ts | captureScreenshots": { + "message": "Capture screenshots" + }, + "panels/timeline/TimelinePanel.ts | captureSettings": { + "message": "Capture settings" + }, + "panels/timeline/TimelinePanel.ts | clear": { + "message": "Clear" + }, + "panels/timeline/TimelinePanel.ts | clickTheRecordButtonSOrHitSTo": { + "message": "Click the record button {PH1} or hit {PH2} to start a new recording." + }, + "panels/timeline/TimelinePanel.ts | clickTheReloadButtonSOrHitSTo": { + "message": "Click the reload button {PH1} or hit {PH2} to record the page load." + }, + "panels/timeline/TimelinePanel.ts | close": { + "message": "Close" + }, + "panels/timeline/TimelinePanel.ts | coverage": { + "message": "Coverage" + }, + "panels/timeline/TimelinePanel.ts | cpu": { + "message": "CPU:" + }, + "panels/timeline/TimelinePanel.ts | CpuThrottlingIsEnabled": { + "message": "- CPU throttling is enabled" + }, + "panels/timeline/TimelinePanel.ts | description": { + "message": "Description" + }, + "panels/timeline/TimelinePanel.ts | disableJavascriptSamples": { + "message": "Disable JavaScript samples" + }, + "panels/timeline/TimelinePanel.ts | disablesJavascriptSampling": { + "message": "Disables JavaScript sampling, reduces overhead when running against mobile devices" + }, + "panels/timeline/TimelinePanel.ts | dropTimelineFileOrUrlHere": { + "message": "Drop timeline file or URL here" + }, + "panels/timeline/TimelinePanel.ts | enableAdvancedPaint": { + "message": "Enable advanced paint instrumentation (slow)" + }, + "panels/timeline/TimelinePanel.ts | failedToSaveTimelineSSS": { + "message": "Failed to save timeline: {PH1} ({PH2}, {PH3})" + }, + "panels/timeline/TimelinePanel.ts | initializingProfiler": { + "message": "Initializing profiler…" + }, + "panels/timeline/TimelinePanel.ts | JavascriptSamplingIsDisabled": { + "message": "- JavaScript sampling is disabled" + }, + "panels/timeline/TimelinePanel.ts | learnmore": { + "message": "Learn more" + }, + "panels/timeline/TimelinePanel.ts | loadingProfile": { + "message": "Loading profile…" + }, + "panels/timeline/TimelinePanel.ts | loadProfile": { + "message": "Load profile…" + }, + "panels/timeline/TimelinePanel.ts | memory": { + "message": "Memory" + }, + "panels/timeline/TimelinePanel.ts | network": { + "message": "Network:" + }, + "panels/timeline/TimelinePanel.ts | networkConditions": { + "message": "Network conditions" + }, + "panels/timeline/TimelinePanel.ts | NetworkThrottlingIsEnabled": { + "message": "- Network throttling is enabled" + }, + "panels/timeline/TimelinePanel.ts | processingProfile": { + "message": "Processing profile…" + }, + "panels/timeline/TimelinePanel.ts | profiling": { + "message": "Profiling…" + }, + "panels/timeline/TimelinePanel.ts | received": { + "message": "Received" + }, + "panels/timeline/TimelinePanel.ts | recordCoverageWithPerformance": { + "message": "Record coverage with performance trace" + }, + "panels/timeline/TimelinePanel.ts | recordingFailed": { + "message": "Recording failed" + }, + "panels/timeline/TimelinePanel.ts | saveProfile": { + "message": "Save profile…" + }, + "panels/timeline/TimelinePanel.ts | screenshots": { + "message": "Screenshots" + }, + "panels/timeline/TimelinePanel.ts | showMemoryTimeline": { + "message": "Show memory timeline" + }, + "panels/timeline/TimelinePanel.ts | showWebVitals": { + "message": "Show Web Vitals" + }, + "panels/timeline/TimelinePanel.ts | SignificantOverheadDueToPaint": { + "message": "- Significant overhead due to paint instrumentation" + }, + "panels/timeline/TimelinePanel.ts | ssec": { + "message": "{PH1} sec" + }, + "panels/timeline/TimelinePanel.ts | status": { + "message": "Status" + }, + "panels/timeline/TimelinePanel.ts | stop": { + "message": "Stop" + }, + "panels/timeline/TimelinePanel.ts | stoppingTimeline": { + "message": "Stopping timeline…" + }, + "panels/timeline/TimelinePanel.ts | time": { + "message": "Time" + }, + "panels/timeline/TimelinePanel.ts | wasd": { + "message": "WASD" + }, + "panels/timeline/TimelinePanel.ts | webVitals": { + "message": "Web Vitals" + }, + "panels/timeline/TimelineTreeView.ts | activity": { + "message": "Activity" + }, + "panels/timeline/TimelineTreeView.ts | chromeExtensionsOverhead": { + "message": "[Chrome extensions overhead]" + }, + "panels/timeline/TimelineTreeView.ts | filter": { + "message": "Filter" + }, + "panels/timeline/TimelineTreeView.ts | filterBottomup": { + "message": "Filter bottom-up" + }, + "panels/timeline/TimelineTreeView.ts | filterCallTree": { + "message": "Filter call tree" + }, + "panels/timeline/TimelineTreeView.ts | fms": { + "message": "{PH1} ms" + }, + "panels/timeline/TimelineTreeView.ts | groupBy": { + "message": "Group by" + }, + "panels/timeline/TimelineTreeView.ts | groupByActivity": { + "message": "Group by Activity" + }, + "panels/timeline/TimelineTreeView.ts | groupByCategory": { + "message": "Group by Category" + }, + "panels/timeline/TimelineTreeView.ts | groupByDomain": { + "message": "Group by Domain" + }, + "panels/timeline/TimelineTreeView.ts | groupByFrame": { + "message": "Group by Frame" + }, + "panels/timeline/TimelineTreeView.ts | groupBySubdomain": { + "message": "Group by Subdomain" + }, + "panels/timeline/TimelineTreeView.ts | groupByUrl": { + "message": "Group by URL" + }, + "panels/timeline/TimelineTreeView.ts | heaviestStack": { + "message": "Heaviest stack" + }, + "panels/timeline/TimelineTreeView.ts | hideHeaviestStack": { + "message": "Hide Heaviest stack" + }, + "panels/timeline/TimelineTreeView.ts | javascript": { + "message": "JavaScript" + }, + "panels/timeline/TimelineTreeView.ts | noGrouping": { + "message": "No Grouping" + }, + "panels/timeline/TimelineTreeView.ts | notOptimizedS": { + "message": "Not optimized: {PH1}" + }, + "panels/timeline/TimelineTreeView.ts | page": { + "message": "Page" + }, + "panels/timeline/TimelineTreeView.ts | percentPlaceholder": { + "message": "{PH1} %" + }, + "panels/timeline/TimelineTreeView.ts | performance": { + "message": "Performance" + }, + "panels/timeline/TimelineTreeView.ts | selectItemForDetails": { + "message": "Select item for details." + }, + "panels/timeline/TimelineTreeView.ts | selfTime": { + "message": "Self Time" + }, + "panels/timeline/TimelineTreeView.ts | showHeaviestStack": { + "message": "Show Heaviest stack" + }, + "panels/timeline/TimelineTreeView.ts | timelineStack": { + "message": "Timeline Stack" + }, + "panels/timeline/TimelineTreeView.ts | totalTime": { + "message": "Total Time" + }, + "panels/timeline/TimelineTreeView.ts | unattributed": { + "message": "[unattributed]" + }, + "panels/timeline/TimelineTreeView.ts | vRuntime": { + "message": "[V8 Runtime]" + }, + "panels/timeline/TimelineUIUtils.ts | aggregatedTime": { + "message": "Aggregated Time" + }, + "panels/timeline/TimelineUIUtils.ts | allottedTime": { + "message": "Allotted Time" + }, + "panels/timeline/TimelineUIUtils.ts | animation": { + "message": "Animation" + }, + "panels/timeline/TimelineUIUtils.ts | animationFrameFired": { + "message": "Animation Frame Fired" + }, + "panels/timeline/TimelineUIUtils.ts | animationFrameRequested": { + "message": "Animation Frame Requested" + }, + "panels/timeline/TimelineUIUtils.ts | async": { + "message": "Async" + }, + "panels/timeline/TimelineUIUtils.ts | asyncTask": { + "message": "Async Task" + }, + "panels/timeline/TimelineUIUtils.ts | cachedWasmModule": { + "message": "Cached Wasm Module" + }, + "panels/timeline/TimelineUIUtils.ts | cacheModule": { + "message": "Cache Module Code" + }, + "panels/timeline/TimelineUIUtils.ts | cacheScript": { + "message": "Cache Script Code" + }, + "panels/timeline/TimelineUIUtils.ts | callbackFunction": { + "message": "Callback Function" + }, + "panels/timeline/TimelineUIUtils.ts | callbackId": { + "message": "Callback ID" + }, + "panels/timeline/TimelineUIUtils.ts | callStacks": { + "message": "Call Stacks" + }, + "panels/timeline/TimelineUIUtils.ts | cancelAnimationFrame": { + "message": "Cancel Animation Frame" + }, + "panels/timeline/TimelineUIUtils.ts | cancelIdleCallback": { + "message": "Cancel Idle Callback" + }, + "panels/timeline/TimelineUIUtils.ts | changedAttributeToSs": { + "message": "(changed attribute to \"{PH1}\"{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedClassToSs": { + "message": "(changed class to \"{PH1}\"{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedIdToSs": { + "message": "(changed id to \"{PH1}\"{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedPesudoToSs": { + "message": "(changed pseudo to \"{PH1}\"{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedSs": { + "message": "(changed \"{PH1}\"{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | click": { + "message": "Click" + }, + "panels/timeline/TimelineUIUtils.ts | collected": { + "message": "Collected" + }, + "panels/timeline/TimelineUIUtils.ts | compilationCacheSize": { + "message": "Compilation cache size" + }, + "panels/timeline/TimelineUIUtils.ts | compilationCacheStatus": { + "message": "Compilation cache status" + }, + "panels/timeline/TimelineUIUtils.ts | compile": { + "message": "Compile" + }, + "panels/timeline/TimelineUIUtils.ts | compileCode": { + "message": "Compile Code" + }, + "panels/timeline/TimelineUIUtils.ts | compiledWasmModule": { + "message": "Compiled Wasm Module" + }, + "panels/timeline/TimelineUIUtils.ts | compileModule": { + "message": "Compile Module" + }, + "panels/timeline/TimelineUIUtils.ts | compileScript": { + "message": "Compile Script" + }, + "panels/timeline/TimelineUIUtils.ts | compositeLayers": { + "message": "Composite Layers" + }, + "panels/timeline/TimelineUIUtils.ts | computeIntersections": { + "message": "Compute Intersections" + }, + "panels/timeline/TimelineUIUtils.ts | consoleTime": { + "message": "Console Time" + }, + "panels/timeline/TimelineUIUtils.ts | consumedCacheSize": { + "message": "Consumed Cache Size" + }, + "panels/timeline/TimelineUIUtils.ts | contextMenu": { + "message": "Context Menu" + }, + "panels/timeline/TimelineUIUtils.ts | cpuTime": { + "message": "CPU time" + }, + "panels/timeline/TimelineUIUtils.ts | createWebsocket": { + "message": "Create WebSocket" + }, + "panels/timeline/TimelineUIUtils.ts | cumulativeLayoutShifts": { + "message": "Cumulative Layout Shifts" + }, + "panels/timeline/TimelineUIUtils.ts | cumulativeScore": { + "message": "Cumulative Score" + }, + "panels/timeline/TimelineUIUtils.ts | currentClusterId": { + "message": "Current Cluster ID" + }, + "panels/timeline/TimelineUIUtils.ts | currentClusterScore": { + "message": "Current Cluster Score" + }, + "panels/timeline/TimelineUIUtils.ts | decodedBody": { + "message": "Decoded Body" + }, + "panels/timeline/TimelineUIUtils.ts | decrypt": { + "message": "Decrypt" + }, + "panels/timeline/TimelineUIUtils.ts | decryptReply": { + "message": "Decrypt Reply" + }, + "panels/timeline/TimelineUIUtils.ts | destroyWebsocket": { + "message": "Destroy WebSocket" + }, + "panels/timeline/TimelineUIUtils.ts | details": { + "message": "Details" + }, + "panels/timeline/TimelineUIUtils.ts | digest": { + "message": "Digest" + }, + "panels/timeline/TimelineUIUtils.ts | digestReply": { + "message": "Digest Reply" + }, + "panels/timeline/TimelineUIUtils.ts | dimensions": { + "message": "Dimensions" + }, + "panels/timeline/TimelineUIUtils.ts | domcontentloadedEvent": { + "message": "DOMContentLoaded Event" + }, + "panels/timeline/TimelineUIUtils.ts | domGc": { + "message": "DOM GC" + }, + "panels/timeline/TimelineUIUtils.ts | drag": { + "message": "Drag" + }, + "panels/timeline/TimelineUIUtils.ts | drawFrame": { + "message": "Draw Frame" + }, + "panels/timeline/TimelineUIUtils.ts | duration": { + "message": "Duration" + }, + "panels/timeline/TimelineUIUtils.ts | eagerCompile": { + "message": "Compiling all functions eagerly" + }, + "panels/timeline/TimelineUIUtils.ts | elementsAffected": { + "message": "Elements Affected" + }, + "panels/timeline/TimelineUIUtils.ts | embedderCallback": { + "message": "Embedder Callback" + }, + "panels/timeline/TimelineUIUtils.ts | emptyPlaceholder": { + "message": "{PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | emptyPlaceholderColon": { + "message": ": {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | encodedData": { + "message": "Encoded Data" + }, + "panels/timeline/TimelineUIUtils.ts | encrypt": { + "message": "Encrypt" + }, + "panels/timeline/TimelineUIUtils.ts | encryptReply": { + "message": "Encrypt Reply" + }, + "panels/timeline/TimelineUIUtils.ts | evaluateModule": { + "message": "Evaluate Module" + }, + "panels/timeline/TimelineUIUtils.ts | evaluateScript": { + "message": "Evaluate Script" + }, + "panels/timeline/TimelineUIUtils.ts | event": { + "message": "Event" + }, + "panels/timeline/TimelineUIUtils.ts | evolvedClsLink": { + "message": "evolved" + }, + "panels/timeline/TimelineUIUtils.ts | experience": { + "message": "Experience" + }, + "panels/timeline/TimelineUIUtils.ts | failedToLoadScriptFromCache": { + "message": "failed to load script from cache" + }, + "panels/timeline/TimelineUIUtils.ts | finishLoading": { + "message": "Finish Loading" + }, + "panels/timeline/TimelineUIUtils.ts | fireIdleCallback": { + "message": "Fire Idle Callback" + }, + "panels/timeline/TimelineUIUtils.ts | firstContentfulPaint": { + "message": "First Contentful Paint" + }, + "panels/timeline/TimelineUIUtils.ts | firstInvalidated": { + "message": "First Invalidated" + }, + "panels/timeline/TimelineUIUtils.ts | firstLayoutInvalidation": { + "message": "First Layout Invalidation" + }, + "panels/timeline/TimelineUIUtils.ts | firstPaint": { + "message": "First Paint" + }, + "panels/timeline/TimelineUIUtils.ts | fling": { + "message": "Fling" + }, + "panels/timeline/TimelineUIUtils.ts | flingHalt": { + "message": "Fling Halt" + }, + "panels/timeline/TimelineUIUtils.ts | flingStart": { + "message": "Fling Start" + }, + "panels/timeline/TimelineUIUtils.ts | forcedReflow": { + "message": "Forced reflow" + }, + "panels/timeline/TimelineUIUtils.ts | fps": { + "message": "FPS" + }, + "panels/timeline/TimelineUIUtils.ts | frame": { + "message": "Frame" + }, + "panels/timeline/TimelineUIUtils.ts | frameStart": { + "message": "Frame Start" + }, + "panels/timeline/TimelineUIUtils.ts | frameStartedLoading": { + "message": "Frame Started Loading" + }, + "panels/timeline/TimelineUIUtils.ts | frameStartMainThread": { + "message": "Frame Start (main thread)" + }, + "panels/timeline/TimelineUIUtils.ts | FromCache": { + "message": " (from cache)" + }, + "panels/timeline/TimelineUIUtils.ts | FromMemoryCache": { + "message": " (from memory cache)" + }, + "panels/timeline/TimelineUIUtils.ts | FromPush": { + "message": " (from push)" + }, + "panels/timeline/TimelineUIUtils.ts | FromServiceWorker": { + "message": " (from service worker)" + }, + "panels/timeline/TimelineUIUtils.ts | function": { + "message": "Function" + }, + "panels/timeline/TimelineUIUtils.ts | functionCall": { + "message": "Function Call" + }, + "panels/timeline/TimelineUIUtils.ts | gcEvent": { + "message": "GC Event" + }, + "panels/timeline/TimelineUIUtils.ts | gpu": { + "message": "GPU" + }, + "panels/timeline/TimelineUIUtils.ts | hadRecentInput": { + "message": "Had recent input" + }, + "panels/timeline/TimelineUIUtils.ts | handlerTookS": { + "message": "Handler took {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | hitTest": { + "message": "Hit Test" + }, + "panels/timeline/TimelineUIUtils.ts | idle": { + "message": "Idle" + }, + "panels/timeline/TimelineUIUtils.ts | idleCallbackExecutionExtended": { + "message": "Idle callback execution extended beyond deadline by {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | idleCallbackRequested": { + "message": "Idle Callback Requested" + }, + "panels/timeline/TimelineUIUtils.ts | imageDecode": { + "message": "Image Decode" + }, + "panels/timeline/TimelineUIUtils.ts | imageResize": { + "message": "Image Resize" + }, + "panels/timeline/TimelineUIUtils.ts | imageUrl": { + "message": "Image URL" + }, + "panels/timeline/TimelineUIUtils.ts | initiator": { + "message": "Initiator" + }, + "panels/timeline/TimelineUIUtils.ts | inputLatency": { + "message": "Input Latency" + }, + "panels/timeline/TimelineUIUtils.ts | installTimer": { + "message": "Install Timer" + }, + "panels/timeline/TimelineUIUtils.ts | invalidateLayout": { + "message": "Invalidate Layout" + }, + "panels/timeline/TimelineUIUtils.ts | invalidations": { + "message": "Invalidations" + }, + "panels/timeline/TimelineUIUtils.ts | invokedByTimeout": { + "message": "Invoked by Timeout" + }, + "panels/timeline/TimelineUIUtils.ts | jank": { + "message": "jank" + }, + "panels/timeline/TimelineUIUtils.ts | jsFrame": { + "message": "JS Frame" + }, + "panels/timeline/TimelineUIUtils.ts | keyCharacter": { + "message": "Key — Character" + }, + "panels/timeline/TimelineUIUtils.ts | keyDown": { + "message": "Key Down" + }, + "panels/timeline/TimelineUIUtils.ts | keyUp": { + "message": "Key Up" + }, + "panels/timeline/TimelineUIUtils.ts | largestContentfulPaint": { + "message": "Largest Contentful Paint" + }, + "panels/timeline/TimelineUIUtils.ts | layerRoot": { + "message": "Layer Root" + }, + "panels/timeline/TimelineUIUtils.ts | layerTree": { + "message": "Layer tree" + }, + "panels/timeline/TimelineUIUtils.ts | layout": { + "message": "Layout" + }, + "panels/timeline/TimelineUIUtils.ts | layoutForced": { + "message": "Layout Forced" + }, + "panels/timeline/TimelineUIUtils.ts | layoutInvalidations": { + "message": "Layout Invalidations" + }, + "panels/timeline/TimelineUIUtils.ts | layoutRoot": { + "message": "Layout root" + }, + "panels/timeline/TimelineUIUtils.ts | layoutShift": { + "message": "Layout Shift" + }, + "panels/timeline/TimelineUIUtils.ts | learnMore": { + "message": "Learn more" + }, + "panels/timeline/TimelineUIUtils.ts | loadFromCache": { + "message": "load from cache" + }, + "panels/timeline/TimelineUIUtils.ts | loading": { + "message": "Loading" + }, + "panels/timeline/TimelineUIUtils.ts | location": { + "message": "Location" + }, + "panels/timeline/TimelineUIUtils.ts | longTask": { + "message": "Long task" + }, + "panels/timeline/TimelineUIUtils.ts | majorGc": { + "message": "Major GC" + }, + "panels/timeline/TimelineUIUtils.ts | message": { + "message": "Message" + }, + "panels/timeline/TimelineUIUtils.ts | mimeType": { + "message": "Mime Type" + }, + "panels/timeline/TimelineUIUtils.ts | mimeTypeCaps": { + "message": "MIME Type" + }, + "panels/timeline/TimelineUIUtils.ts | minorGc": { + "message": "Minor GC" + }, + "panels/timeline/TimelineUIUtils.ts | module": { + "message": "Module" + }, + "panels/timeline/TimelineUIUtils.ts | mouseDown": { + "message": "Mouse Down" + }, + "panels/timeline/TimelineUIUtils.ts | mouseMove": { + "message": "Mouse Move" + }, + "panels/timeline/TimelineUIUtils.ts | mouseUp": { + "message": "Mouse Up" + }, + "panels/timeline/TimelineUIUtils.ts | mouseWheel": { + "message": "Mouse Wheel" + }, + "panels/timeline/TimelineUIUtils.ts | movedFrom": { + "message": "Moved from" + }, + "panels/timeline/TimelineUIUtils.ts | movedTo": { + "message": "Moved to" + }, + "panels/timeline/TimelineUIUtils.ts | networkRequest": { + "message": "Network request" + }, + "panels/timeline/TimelineUIUtils.ts | networkTransfer": { + "message": "network transfer" + }, + "panels/timeline/TimelineUIUtils.ts | no": { + "message": "No" + }, + "panels/timeline/TimelineUIUtils.ts | node": { + "message": "Node:" + }, + "panels/timeline/TimelineUIUtils.ts | nodes": { + "message": "Nodes:" + }, + "panels/timeline/TimelineUIUtils.ts | nodesThatNeedLayout": { + "message": "Nodes That Need Layout" + }, + "panels/timeline/TimelineUIUtils.ts | notOptimized": { + "message": "Not optimized" + }, + "panels/timeline/TimelineUIUtils.ts | onloadEvent": { + "message": "Onload Event" + }, + "panels/timeline/TimelineUIUtils.ts | optimizeCode": { + "message": "Optimize Code" + }, + "panels/timeline/TimelineUIUtils.ts | other": { + "message": "Other" + }, + "panels/timeline/TimelineUIUtils.ts | otherInvalidations": { + "message": "Other Invalidations" + }, + "panels/timeline/TimelineUIUtils.ts | ownerElement": { + "message": "Owner Element" + }, + "panels/timeline/TimelineUIUtils.ts | paint": { + "message": "Paint" + }, + "panels/timeline/TimelineUIUtils.ts | paintImage": { + "message": "Paint Image" + }, + "panels/timeline/TimelineUIUtils.ts | painting": { + "message": "Painting" + }, + "panels/timeline/TimelineUIUtils.ts | paintProfiler": { + "message": "Paint Profiler" + }, + "panels/timeline/TimelineUIUtils.ts | paintSetup": { + "message": "Paint Setup" + }, + "panels/timeline/TimelineUIUtils.ts | parse": { + "message": "Parse" + }, + "panels/timeline/TimelineUIUtils.ts | parseAndCompile": { + "message": "Parse and Compile" + }, + "panels/timeline/TimelineUIUtils.ts | parseHtml": { + "message": "Parse HTML" + }, + "panels/timeline/TimelineUIUtils.ts | parseStylesheet": { + "message": "Parse Stylesheet" + }, + "panels/timeline/TimelineUIUtils.ts | pendingFor": { + "message": "Pending for" + }, + "panels/timeline/TimelineUIUtils.ts | pinchBegin": { + "message": "Pinch Begin" + }, + "panels/timeline/TimelineUIUtils.ts | pinchEnd": { + "message": "Pinch End" + }, + "panels/timeline/TimelineUIUtils.ts | pinchUpdate": { + "message": "Pinch Update" + }, + "panels/timeline/TimelineUIUtils.ts | preview": { + "message": "Preview" + }, + "panels/timeline/TimelineUIUtils.ts | priority": { + "message": "Priority" + }, + "panels/timeline/TimelineUIUtils.ts | producedCacheSize": { + "message": "Produced Cache Size" + }, + "panels/timeline/TimelineUIUtils.ts | range": { + "message": "Range" + }, + "panels/timeline/TimelineUIUtils.ts | rasterizePaint": { + "message": "Rasterize Paint" + }, + "panels/timeline/TimelineUIUtils.ts | recalculateStyle": { + "message": "Recalculate Style" + }, + "panels/timeline/TimelineUIUtils.ts | recalculationForced": { + "message": "Recalculation Forced" + }, + "panels/timeline/TimelineUIUtils.ts | receiveData": { + "message": "Receive Data" + }, + "panels/timeline/TimelineUIUtils.ts | receiveResponse": { + "message": "Receive Response" + }, + "panels/timeline/TimelineUIUtils.ts | receiveWebsocketHandshake": { + "message": "Receive WebSocket Handshake" + }, + "panels/timeline/TimelineUIUtils.ts | recurringHandlerTookS": { + "message": "Recurring handler took {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | relatedNode": { + "message": "Related Node" + }, + "panels/timeline/TimelineUIUtils.ts | removeTimer": { + "message": "Remove Timer" + }, + "panels/timeline/TimelineUIUtils.ts | rendering": { + "message": "Rendering" + }, + "panels/timeline/TimelineUIUtils.ts | repeats": { + "message": "Repeats" + }, + "panels/timeline/TimelineUIUtils.ts | requestAnimationFrame": { + "message": "Request Animation Frame" + }, + "panels/timeline/TimelineUIUtils.ts | requestIdleCallback": { + "message": "Request Idle Callback" + }, + "panels/timeline/TimelineUIUtils.ts | requestMainThreadFrame": { + "message": "Request Main Thread Frame" + }, + "panels/timeline/TimelineUIUtils.ts | requestMethod": { + "message": "Request Method" + }, + "panels/timeline/TimelineUIUtils.ts | resource": { + "message": "Resource" + }, + "panels/timeline/TimelineUIUtils.ts | response": { + "message": "Response" + }, + "panels/timeline/TimelineUIUtils.ts | reveal": { + "message": "Reveal" + }, + "panels/timeline/TimelineUIUtils.ts | runMicrotasks": { + "message": "Run Microtasks" + }, + "panels/timeline/TimelineUIUtils.ts | sAndS": { + "message": "{PH1} and {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sAndSOther": { + "message": "{PH1}, {PH2}, and 1 other" + }, + "panels/timeline/TimelineUIUtils.ts | sAtS": { + "message": "{PH1} at {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sAtSParentheses": { + "message": "{PH1} (at {PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | sBytes": { + "message": "{n, plural, =1 {# Byte} other {# Bytes}}" + }, + "panels/timeline/TimelineUIUtils.ts | scheduleStyleRecalculation": { + "message": "Schedule Style Recalculation" + }, + "panels/timeline/TimelineUIUtils.ts | sChildren": { + "message": "{PH1} (children)" + }, + "panels/timeline/TimelineUIUtils.ts | sCLSInformation": { + "message": "{PH1} can result in poor user experiences. It has recently {PH2}." + }, + "panels/timeline/TimelineUIUtils.ts | sCollected": { + "message": "{PH1} collected" + }, + "panels/timeline/TimelineUIUtils.ts | score": { + "message": "Score" + }, + "panels/timeline/TimelineUIUtils.ts | script": { + "message": "Script" + }, + "panels/timeline/TimelineUIUtils.ts | scripting": { + "message": "Scripting" + }, + "panels/timeline/TimelineUIUtils.ts | scriptLoadedFromCache": { + "message": "script loaded from cache" + }, + "panels/timeline/TimelineUIUtils.ts | scriptNotEligible": { + "message": "script not eligible" + }, + "panels/timeline/TimelineUIUtils.ts | scroll": { + "message": "Scroll" + }, + "panels/timeline/TimelineUIUtils.ts | scrollBegin": { + "message": "Scroll Begin" + }, + "panels/timeline/TimelineUIUtils.ts | scrollEnd": { + "message": "Scroll End" + }, + "panels/timeline/TimelineUIUtils.ts | scrollUpdate": { + "message": "Scroll Update" + }, + "panels/timeline/TimelineUIUtils.ts | selfTime": { + "message": "Self Time" + }, + "panels/timeline/TimelineUIUtils.ts | sendRequest": { + "message": "Send Request" + }, + "panels/timeline/TimelineUIUtils.ts | sendWebsocketHandshake": { + "message": "Send WebSocket Handshake" + }, + "panels/timeline/TimelineUIUtils.ts | sForS": { + "message": "{PH1} for {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | show": { + "message": "Show" + }, + "panels/timeline/TimelineUIUtils.ts | sign": { + "message": "Sign" + }, + "panels/timeline/TimelineUIUtils.ts | signReply": { + "message": "Sign Reply" + }, + "panels/timeline/TimelineUIUtils.ts | sIsALikelyPerformanceBottleneck": { + "message": "{PH1} is a likely performance bottleneck." + }, + "panels/timeline/TimelineUIUtils.ts | size": { + "message": "Size" + }, + "panels/timeline/TimelineUIUtils.ts | sLongFrameTimesAreAnIndicationOf": { + "message": "{PH1}. Long frame times are an indication of {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sOfS": { + "message": "{PH1} of {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sS": { + "message": "{PH1}: {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sSAndSOthers": { + "message": "{PH1}, {PH2}, and {PH3} others" + }, + "panels/timeline/TimelineUIUtils.ts | sSCurlyBrackets": { + "message": "({PH1}, {PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | sSDimensions": { + "message": "{PH1} × {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sSDot": { + "message": "{PH1}. {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sSelf": { + "message": "{PH1} (self)" + }, + "panels/timeline/TimelineUIUtils.ts | sSs": { + "message": "{PH1} [{PH2}…{PH3}]" + }, + "panels/timeline/TimelineUIUtils.ts | sSSquareBrackets": { + "message": "{PH1} [{PH2}…]" + }, + "panels/timeline/TimelineUIUtils.ts | SSSResourceLoading": { + "message": " ({PH1} {PH2} + {PH3} resource loading)" + }, + "panels/timeline/TimelineUIUtils.ts | stackTrace": { + "message": "Stack Trace" + }, + "panels/timeline/TimelineUIUtils.ts | stackTraceColon": { + "message": "Stack trace:" + }, + "panels/timeline/TimelineUIUtils.ts | state": { + "message": "State" + }, + "panels/timeline/TimelineUIUtils.ts | statusCode": { + "message": "Status Code" + }, + "panels/timeline/TimelineUIUtils.ts | sTookS": { + "message": "{PH1} took {PH2}." + }, + "panels/timeline/TimelineUIUtils.ts | streamed": { + "message": "Streamed" + }, + "panels/timeline/TimelineUIUtils.ts | streamingCompileTask": { + "message": "Streaming Compile Task" + }, + "panels/timeline/TimelineUIUtils.ts | streamingWasmResponse": { + "message": "Streaming Wasm Response" + }, + "panels/timeline/TimelineUIUtils.ts | styleInvalidations": { + "message": "Style Invalidations" + }, + "panels/timeline/TimelineUIUtils.ts | stylesheetUrl": { + "message": "Stylesheet URL" + }, + "panels/timeline/TimelineUIUtils.ts | system": { + "message": "System" + }, + "panels/timeline/TimelineUIUtils.ts | tap": { + "message": "Tap" + }, + "panels/timeline/TimelineUIUtils.ts | tapBegin": { + "message": "Tap Begin" + }, + "panels/timeline/TimelineUIUtils.ts | tapDown": { + "message": "Tap Down" + }, + "panels/timeline/TimelineUIUtils.ts | tapHalt": { + "message": "Tap Halt" + }, + "panels/timeline/TimelineUIUtils.ts | task": { + "message": "Task" + }, + "panels/timeline/TimelineUIUtils.ts | timeout": { + "message": "Timeout" + }, + "panels/timeline/TimelineUIUtils.ts | timerFired": { + "message": "Timer Fired" + }, + "panels/timeline/TimelineUIUtils.ts | timerId": { + "message": "Timer ID" + }, + "panels/timeline/TimelineUIUtils.ts | timerInstalled": { + "message": "Timer Installed" + }, + "panels/timeline/TimelineUIUtils.ts | timeSpentInRendering": { + "message": "Time spent in rendering" + }, + "panels/timeline/TimelineUIUtils.ts | timestamp": { + "message": "Timestamp" + }, + "panels/timeline/TimelineUIUtils.ts | timeWaitingForMainThread": { + "message": "Time Waiting for Main Thread" + }, + "panels/timeline/TimelineUIUtils.ts | totalTime": { + "message": "Total Time" + }, + "panels/timeline/TimelineUIUtils.ts | touchCancel": { + "message": "Touch Cancel" + }, + "panels/timeline/TimelineUIUtils.ts | touchEnd": { + "message": "Touch End" + }, + "panels/timeline/TimelineUIUtils.ts | touchMove": { + "message": "Touch Move" + }, + "panels/timeline/TimelineUIUtils.ts | touchStart": { + "message": "Touch Start" + }, + "panels/timeline/TimelineUIUtils.ts | type": { + "message": "Type" + }, + "panels/timeline/TimelineUIUtils.ts | uncategorized": { + "message": "Uncategorized" + }, + "panels/timeline/TimelineUIUtils.ts | unknown": { + "message": "unknown" + }, + "panels/timeline/TimelineUIUtils.ts | unknownCause": { + "message": "Unknown cause" + }, + "panels/timeline/TimelineUIUtils.ts | UnknownNode": { + "message": "[ unknown node ]" + }, + "panels/timeline/TimelineUIUtils.ts | updateLayer": { + "message": "Update Layer" + }, + "panels/timeline/TimelineUIUtils.ts | updateLayerTree": { + "message": "Update Layer Tree" + }, + "panels/timeline/TimelineUIUtils.ts | url": { + "message": "Url" + }, + "panels/timeline/TimelineUIUtils.ts | userTiming": { + "message": "User Timing" + }, + "panels/timeline/TimelineUIUtils.ts | verify": { + "message": "Verify" + }, + "panels/timeline/TimelineUIUtils.ts | verifyReply": { + "message": "Verify Reply" + }, + "panels/timeline/TimelineUIUtils.ts | waitingForNetwork": { + "message": "Waiting for Network" + }, + "panels/timeline/TimelineUIUtils.ts | warning": { + "message": "Warning" + }, + "panels/timeline/TimelineUIUtils.ts | wasmModuleCacheHit": { + "message": "Wasm Module Cache Hit" + }, + "panels/timeline/TimelineUIUtils.ts | wasmModuleCacheInvalid": { + "message": "Wasm Module Cache Invalid" + }, + "panels/timeline/TimelineUIUtils.ts | websocketProtocol": { + "message": "WebSocket Protocol" + }, + "panels/timeline/TimelineUIUtils.ts | willSendRequest": { + "message": "Will Send Request" + }, + "panels/timeline/TimelineUIUtils.ts | xhrLoad": { + "message": "XHR Load" + }, + "panels/timeline/TimelineUIUtils.ts | xhrReadyStateChange": { + "message": "XHR Ready State Change" + }, + "panels/timeline/TimelineUIUtils.ts | yes": { + "message": "Yes" + }, + "panels/timeline/UIDevtoolsUtils.ts | drawFrame": { + "message": "Draw Frame" + }, + "panels/timeline/UIDevtoolsUtils.ts | drawing": { + "message": "Drawing" + }, + "panels/timeline/UIDevtoolsUtils.ts | frameStart": { + "message": "Frame Start" + }, + "panels/timeline/UIDevtoolsUtils.ts | idle": { + "message": "Idle" + }, + "panels/timeline/UIDevtoolsUtils.ts | layout": { + "message": "Layout" + }, + "panels/timeline/UIDevtoolsUtils.ts | painting": { + "message": "Painting" + }, + "panels/timeline/UIDevtoolsUtils.ts | rasterizing": { + "message": "Rasterizing" + }, + "panels/timeline/UIDevtoolsUtils.ts | system": { + "message": "System" + }, + "panels/web_audio/AudioContextContentBuilder.ts | callbackBufferSize": { + "message": "Callback Buffer Size" + }, + "panels/web_audio/AudioContextContentBuilder.ts | callbackInterval": { + "message": "Callback Interval" + }, + "panels/web_audio/AudioContextContentBuilder.ts | currentTime": { + "message": "Current Time" + }, + "panels/web_audio/AudioContextContentBuilder.ts | maxOutputChannels": { + "message": "Max Output Channels" + }, + "panels/web_audio/AudioContextContentBuilder.ts | renderCapacity": { + "message": "Render Capacity" + }, + "panels/web_audio/AudioContextContentBuilder.ts | sampleRate": { + "message": "Sample Rate" + }, + "panels/web_audio/AudioContextContentBuilder.ts | state": { + "message": "State" + }, + "panels/web_audio/AudioContextSelector.ts | audioContextS": { + "message": "Audio context: {PH1}" + }, + "panels/web_audio/AudioContextSelector.ts | noRecordings": { + "message": "(no recordings)" + }, + "panels/web_audio/web_audio-meta.ts | audio": { + "message": "audio" + }, + "panels/web_audio/web_audio-meta.ts | showWebaudio": { + "message": "Show WebAudio" + }, + "panels/web_audio/web_audio-meta.ts | webaudio": { + "message": "WebAudio" + }, + "panels/web_audio/WebAudioView.ts | openAPageThatUsesWebAudioApiTo": { + "message": "Open a page that uses Web Audio API to start monitoring." + }, + "panels/webauthn/webauthn-meta.ts | showWebauthn": { + "message": "Show WebAuthn" + }, + "panels/webauthn/webauthn-meta.ts | webauthn": { + "message": "WebAuthn" + }, + "panels/webauthn/WebauthnPane.ts | actions": { + "message": "Actions" + }, + "panels/webauthn/WebauthnPane.ts | active": { + "message": "Active" + }, + "panels/webauthn/WebauthnPane.ts | add": { + "message": "Add" + }, + "panels/webauthn/WebauthnPane.ts | addAuthenticator": { + "message": "Add authenticator" + }, + "panels/webauthn/WebauthnPane.ts | authenticatorS": { + "message": "Authenticator {PH1}" + }, + "panels/webauthn/WebauthnPane.ts | credentials": { + "message": "Credentials" + }, + "panels/webauthn/WebauthnPane.ts | editName": { + "message": "Edit name" + }, + "panels/webauthn/WebauthnPane.ts | enableVirtualAuthenticator": { + "message": "Enable virtual authenticator environment" + }, + "panels/webauthn/WebauthnPane.ts | export": { + "message": "Export" + }, + "panels/webauthn/WebauthnPane.ts | id": { + "message": "ID" + }, + "panels/webauthn/WebauthnPane.ts | isResident": { + "message": "Is Resident" + }, + "panels/webauthn/WebauthnPane.ts | learnMore": { + "message": "Learn more" + }, + "panels/webauthn/WebauthnPane.ts | newAuthenticator": { + "message": "New authenticator" + }, + "panels/webauthn/WebauthnPane.ts | no": { + "message": "No" + }, + "panels/webauthn/WebauthnPane.ts | noCredentialsTryCallingSFromYour": { + "message": "No credentials. Try calling {PH1} from your website." + }, + "panels/webauthn/WebauthnPane.ts | privateKeypem": { + "message": "Private key.pem" + }, + "panels/webauthn/WebauthnPane.ts | protocol": { + "message": "Protocol" + }, + "panels/webauthn/WebauthnPane.ts | remove": { + "message": "Remove" + }, + "panels/webauthn/WebauthnPane.ts | rpId": { + "message": "RP ID" + }, + "panels/webauthn/WebauthnPane.ts | saveName": { + "message": "Save name" + }, + "panels/webauthn/WebauthnPane.ts | setSAsTheActiveAuthenticator": { + "message": "Set {PH1} as the active authenticator" + }, + "panels/webauthn/WebauthnPane.ts | signCount": { + "message": "Signature Count" + }, + "panels/webauthn/WebauthnPane.ts | supportsResidentKeys": { + "message": "Supports resident keys" + }, + "panels/webauthn/WebauthnPane.ts | supportsUserVerification": { + "message": "Supports user verification" + }, + "panels/webauthn/WebauthnPane.ts | transport": { + "message": "Transport" + }, + "panels/webauthn/WebauthnPane.ts | userHandle": { + "message": "User Handle" + }, + "panels/webauthn/WebauthnPane.ts | useWebauthnForPhishingresistant": { + "message": "Use WebAuthn for phishing-resistant authentication" + }, + "panels/webauthn/WebauthnPane.ts | uuid": { + "message": "UUID" + }, + "panels/webauthn/WebauthnPane.ts | yes": { + "message": "Yes" + }, + "ui/components/data_grid/DataGrid.ts | headerOptions": { + "message": "Header Options" + }, + "ui/components/data_grid/DataGrid.ts | resetColumns": { + "message": "Reset Columns" + }, + "ui/components/data_grid/DataGrid.ts | sortBy": { + "message": "Sort By" + }, + "ui/components/diff_view/DiffView.ts | additions": { + "message": "Addition:" + }, + "ui/components/diff_view/DiffView.ts | changesDiffViewer": { + "message": "Changes diff viewer" + }, + "ui/components/diff_view/DiffView.ts | deletions": { + "message": "Deletion:" + }, + "ui/components/diff_view/DiffView.ts | SkippingDMatchingLines": { + "message": "( … Skipping {PH1} matching lines … )" + }, + "ui/components/issue_counter/IssueCounter.ts | breakingChanges": { + "message": "{issueCount, plural, =1 {# breaking change} other {# breaking changes}}" + }, + "ui/components/issue_counter/IssueCounter.ts | pageErrors": { + "message": "{issueCount, plural, =1 {# page error} other {# page errors}}" + }, + "ui/components/issue_counter/IssueCounter.ts | possibleImprovements": { + "message": "{issueCount, plural, =1 {# possible improvement} other {# possible improvements}}" + }, + "ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssue": { + "message": "Click to show issue in the issues tab" + }, + "ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssueWithTitle": { + "message": "Click to open the issue tab and show issue: {title}" + }, + "ui/components/issue_counter/IssueLinkIcon.ts | issueUnavailable": { + "message": "Issue unavailable at this time" + }, + "ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | memoryInspector": { + "message": "Memory Inspector" + }, + "ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | showMemoryInspector": { + "message": "Show Memory Inspector" + }, + "ui/components/linear_memory_inspector/LinearMemoryInspector.ts | addressHasToBeANumberBetweenSAnd": { + "message": "Address has to be a number between {PH1} and {PH2}" + }, + "ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts | noOpenInspections": { + "message": "No open inspections" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | enterAddress": { + "message": "Enter address" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goBackInAddressHistory": { + "message": "Go back in address history" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goForwardInAddressHistory": { + "message": "Go forward in address history" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | nextPage": { + "message": "Next page" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | previousPage": { + "message": "Previous page" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | refresh": { + "message": "Refresh" + }, + "ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | changeEndianness": { + "message": "Change Endianness" + }, + "ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | toggleValueTypeSettings": { + "message": "Toggle value type settings" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | addressOutOfRange": { + "message": "Address out of memory range" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | changeValueTypeMode": { + "message": "Change mode" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | jumpToPointer": { + "message": "Jump to address" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | signedValue": { + "message": "Signed value" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | unsignedValue": { + "message": "Unsigned value" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplayUtils.ts | notApplicable": { + "message": "N/A" + }, + "ui/components/linear_memory_inspector/ValueInterpreterSettings.ts | otherGroup": { + "message": "Other" + }, + "ui/components/panel_feedback/FeedbackButton.ts | feedback": { + "message": "Feedback" + }, + "ui/components/panel_feedback/PanelFeedback.ts | previewFeature": { + "message": "Preview feature" + }, + "ui/components/panel_feedback/PanelFeedback.ts | previewText": { + "message": "Our team is actively working on this feature and we would love to know what you think." + }, + "ui/components/panel_feedback/PanelFeedback.ts | previewTextFeedbackLink": { + "message": "Send us your feedback." + }, + "ui/components/panel_feedback/PanelFeedback.ts | videoAndDocumentation": { + "message": "Video and documentation" + }, + "ui/components/request_link_icon/RequestLinkIcon.ts | clickToShowRequestInTheNetwork": { + "message": "Click to open the network panel and show request for URL: {url}" + }, + "ui/components/request_link_icon/RequestLinkIcon.ts | requestUnavailableInTheNetwork": { + "message": "Request unavailable in the network panel, try reloading the inspected page" + }, + "ui/components/request_link_icon/RequestLinkIcon.ts | shortenedURL": { + "message": "Shortened URL" + }, + "ui/components/survey_link/SurveyLink.ts | anErrorOccurredWithTheSurvey": { + "message": "An error occurred with the survey" + }, + "ui/components/survey_link/SurveyLink.ts | openingSurvey": { + "message": "Opening survey …" + }, + "ui/components/survey_link/SurveyLink.ts | thankYouForYourFeedback": { + "message": "Thank you for your feedback" + }, + "ui/components/text_editor/config.ts | codeEditor": { + "message": "Code editor" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | aa": { + "message": "AA" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | aaa": { + "message": "AAA" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | apca": { + "message": "APCA" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | contrastRatio": { + "message": "Contrast ratio" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | noContrastInformationAvailable": { + "message": "No contrast information available" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | pickBackgroundColor": { + "message": "Pick background color" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | placeholderWithColon": { + "message": ": {PH1}" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | showLess": { + "message": "Show less" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | showMore": { + "message": "Show more" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | toggleBackgroundColorPicker": { + "message": "Toggle background color picker" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | useSuggestedColorStoFixLow": { + "message": "Use suggested color {PH1}to fix low contrast" + }, + "ui/legacy/components/color_picker/Spectrum.ts | addToPalette": { + "message": "Add to palette" + }, + "ui/legacy/components/color_picker/Spectrum.ts | changeAlpha": { + "message": "Change alpha" + }, + "ui/legacy/components/color_picker/Spectrum.ts | changeColorFormat": { + "message": "Change color format" + }, + "ui/legacy/components/color_picker/Spectrum.ts | changeHue": { + "message": "Change hue" + }, + "ui/legacy/components/color_picker/Spectrum.ts | clearPalette": { + "message": "Clear palette" + }, + "ui/legacy/components/color_picker/Spectrum.ts | colorPalettes": { + "message": "Color Palettes" + }, + "ui/legacy/components/color_picker/Spectrum.ts | colorS": { + "message": "Color {PH1}" + }, + "ui/legacy/components/color_picker/Spectrum.ts | copyColorToClipboard": { + "message": "Copy color to clipboard" + }, + "ui/legacy/components/color_picker/Spectrum.ts | hex": { + "message": "HEX" + }, + "ui/legacy/components/color_picker/Spectrum.ts | longclickOrLongpressSpaceToShow": { + "message": "Long-click or long-press space to show alternate shades of {PH1}" + }, + "ui/legacy/components/color_picker/Spectrum.ts | pressArrowKeysMessage": { + "message": "Press arrow keys with or without modifiers to move swatch position. Arrow key with Shift key moves position largely, with Ctrl key it is less and with Alt key it is even less" + }, + "ui/legacy/components/color_picker/Spectrum.ts | previewPalettes": { + "message": "Preview palettes" + }, + "ui/legacy/components/color_picker/Spectrum.ts | removeAllToTheRight": { + "message": "Remove all to the right" + }, + "ui/legacy/components/color_picker/Spectrum.ts | removeColor": { + "message": "Remove color" + }, + "ui/legacy/components/color_picker/Spectrum.ts | returnToColorPicker": { + "message": "Return to color picker" + }, + "ui/legacy/components/color_picker/Spectrum.ts | sInS": { + "message": "{PH1} in {PH2}" + }, + "ui/legacy/components/color_picker/Spectrum.ts | toggleColorPicker": { + "message": "Toggle color picker" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | cookies": { + "message": "Cookies" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | editableCookies": { + "message": "Editable Cookies" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | na": { + "message": "N/A" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | name": { + "message": "Name" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | opaquePartitionKey": { + "message": "(opaque)" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | session": { + "message": "Session" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | showIssueAssociatedWithThis": { + "message": "Show issue associated with this cookie" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | showRequestsWithThisCookie": { + "message": "Show Requests With This Cookie" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | size": { + "message": "Size" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | sourcePortTooltip": { + "message": "Shows the source port (range 1-65535) the cookie was set on. If the port is unknown, this shows -1." + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | sourceSchemeTooltip": { + "message": "Shows the source scheme (Secure, NonSecure) the cookie was set on. If the scheme is unknown, this shows Unset." + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | timeAfter": { + "message": "after {date}" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | timeAfterTooltip": { + "message": "The expiration timestamp is {seconds}, which corresponds to a date after {date}" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | value": { + "message": "Value" + }, + "ui/legacy/components/data_grid/DataGrid.ts | addNew": { + "message": "Add new" + }, + "ui/legacy/components/data_grid/DataGrid.ts | checked": { + "message": "checked" + }, + "ui/legacy/components/data_grid/DataGrid.ts | collapsed": { + "message": "collapsed" + }, + "ui/legacy/components/data_grid/DataGrid.ts | delete": { + "message": "Delete" + }, + "ui/legacy/components/data_grid/DataGrid.ts | editS": { + "message": "Edit \"{PH1}\"" + }, + "ui/legacy/components/data_grid/DataGrid.ts | emptyRowCreated": { + "message": "An empty table row has been created. You may double click or use context menu to edit." + }, + "ui/legacy/components/data_grid/DataGrid.ts | expanded": { + "message": "expanded" + }, + "ui/legacy/components/data_grid/DataGrid.ts | headerOptions": { + "message": "Header Options" + }, + "ui/legacy/components/data_grid/DataGrid.ts | levelS": { + "message": "level {PH1}" + }, + "ui/legacy/components/data_grid/DataGrid.ts | refresh": { + "message": "Refresh" + }, + "ui/legacy/components/data_grid/DataGrid.ts | resetColumns": { + "message": "Reset Columns" + }, + "ui/legacy/components/data_grid/DataGrid.ts | rowsS": { + "message": "Rows: {PH1}" + }, + "ui/legacy/components/data_grid/DataGrid.ts | sortByString": { + "message": "Sort By" + }, + "ui/legacy/components/data_grid/DataGrid.ts | sRowS": { + "message": "{PH1} Row {PH2}" + }, + "ui/legacy/components/data_grid/DataGrid.ts | sSUseTheUpAndDownArrowKeysTo": { + "message": "{PH1} {PH2}, use the up and down arrow keys to navigate and interact with the rows of the table; Use browse mode to read cell by cell." + }, + "ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showAllD": { + "message": "Show all {PH1}" + }, + "ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDAfter": { + "message": "Show {PH1} after" + }, + "ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDBefore": { + "message": "Show {PH1} before" + }, + "ui/legacy/components/data_grid/ViewportDataGrid.ts | collapsed": { + "message": "collapsed" + }, + "ui/legacy/components/inline_editor/ColorSwatch.ts | shiftclickToChangeColorFormat": { + "message": "Shift-click to change color format" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | blur": { + "message": "Blur" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | spread": { + "message": "Spread" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | type": { + "message": "Type" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | xOffset": { + "message": "X offset" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | yOffset": { + "message": "Y offset" + }, + "ui/legacy/components/inline_editor/CSSVarSwatch.ts | sIsNotDefined": { + "message": "{PH1} is not defined" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | cssProperties": { + "message": "CSS Properties" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | deleteS": { + "message": "Delete {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fallbackS": { + "message": "Fallback {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontFamily": { + "message": "Font Family" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontSelectorDeletedAtIndexS": { + "message": "Font Selector deleted at index: {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontSize": { + "message": "Font Size" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontWeight": { + "message": "Font Weight" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | lineHeight": { + "message": "Line Height" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | PleaseEnterAValidValueForSText": { + "message": "* Please enter a valid value for {PH1} text input" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | selectorInputMode": { + "message": "Selector Input Mode" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sKeyValueSelector": { + "message": "{PH1} Key Value Selector" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sliderInputMode": { + "message": "Slider Input Mode" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | spacing": { + "message": "Spacing" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sSliderInput": { + "message": "{PH1} Slider Input" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sTextInput": { + "message": "{PH1} Text Input" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sToggleInputType": { + "message": "{PH1} toggle input type" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sUnitInput": { + "message": "{PH1} Unit Input" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | thereIsNoValueToDeleteAtIndexS": { + "message": "There is no value to delete at index: {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | thisPropertyIsSetToContainUnits": { + "message": "This property is set to contain units but does not have a defined corresponding unitsArray: {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | units": { + "message": "Units" + }, + "ui/legacy/components/object_ui/CustomPreviewComponent.ts | showAsJavascriptObject": { + "message": "Show as JavaScript object" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | collapseChildren": { + "message": "Collapse children" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copy": { + "message": "Copy" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyPropertyPath": { + "message": "Copy property path" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyValue": { + "message": "Copy value" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | dots": { + "message": "(...)" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | exceptionS": { + "message": "[Exception: {PH1}]" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | expandRecursively": { + "message": "Expand recursively" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | invokePropertyGetter": { + "message": "Invoke property getter" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | longTextWasTruncatedS": { + "message": "long text was truncated ({PH1})" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | noProperties": { + "message": "No properties" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | noPropertyGetter": { + "message": "No property getter" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showAllD": { + "message": "Show all {PH1}" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showMoreS": { + "message": "Show more ({PH1})" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | stringIsTooLargeToEdit": { + "message": "" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | unknown": { + "message": "unknown" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | unreadable": { + "message": "" + }, + "ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | empty": { + "message": "empty" + }, + "ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | emptyD": { + "message": "empty × {PH1}" + }, + "ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | thePropertyIsComputedWithAGetter": { + "message": "The property is computed with a getter" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | doubleclickToZoomImageClickTo": { + "message": "Doubleclick to zoom image. Click to view preceding requests." + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | nextFrame": { + "message": "Next frame" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | previousFrame": { + "message": "Previous frame" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | screenshot": { + "message": "Screenshot" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | screenshotForSSelectToView": { + "message": "Screenshot for {PH1} - select to view preceding requests." + }, + "ui/legacy/components/perf_ui/FlameChart.ts | flameChart": { + "message": "Flame Chart" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sCollapsed": { + "message": "{PH1} collapsed" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sExpanded": { + "message": "{PH1} expanded" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sHovered": { + "message": "{PH1} hovered" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sSelected": { + "message": "{PH1} selected" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | high": { + "message": "High" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | highest": { + "message": "Highest" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | low": { + "message": "Low" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | lowest": { + "message": "Lowest" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | medium": { + "message": "Medium" + }, + "ui/legacy/components/perf_ui/OverviewGrid.ts | leftResizer": { + "message": "Left Resizer" + }, + "ui/legacy/components/perf_ui/OverviewGrid.ts | overviewGridWindow": { + "message": "Overview grid window" + }, + "ui/legacy/components/perf_ui/OverviewGrid.ts | rightResizer": { + "message": "Right Resizer" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | collectGarbage": { + "message": "Collect garbage" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | flamechartMouseWheelAction": { + "message": "Flamechart mouse wheel action:" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | hideLiveMemoryAllocation": { + "message": "Hide live memory allocation annotations" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | liveMemoryAllocationAnnotations": { + "message": "Live memory allocation annotations" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | scroll": { + "message": "Scroll" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | showLiveMemoryAllocation": { + "message": "Show live memory allocation annotations" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | zoom": { + "message": "Zoom" + }, + "ui/legacy/components/perf_ui/PieChart.ts | total": { + "message": "Total" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | command": { + "message": "Command" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | noCommandsFound": { + "message": "No commands found" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | oneOrMoreSettingsHaveChanged": { + "message": "One or more settings have changed which requires a reload to take effect." + }, + "ui/legacy/components/quick_open/CommandMenu.ts | run": { + "message": "Run" + }, + "ui/legacy/components/quick_open/FilteredListWidget.ts | noResultsFound": { + "message": "No results found" + }, + "ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpen": { + "message": "Quick open" + }, + "ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpenPrompt": { + "message": "Quick open prompt" + }, + "ui/legacy/components/quick_open/quick_open-meta.ts | openFile": { + "message": "Open file" + }, + "ui/legacy/components/quick_open/quick_open-meta.ts | runCommand": { + "message": "Run command" + }, + "ui/legacy/components/quick_open/QuickInput.ts | pressEnterToConfirmOrEscapeTo": { + "message": "{PH1} (Press 'Enter' to confirm or 'Escape' to cancel.)" + }, + "ui/legacy/components/quick_open/QuickOpen.ts | useTabToSwitchCommandsTypeToSeeAvailableCommands": { + "message": "Use Tab to switch commands. Type '?' to see available commands" + }, + "ui/legacy/components/source_frame/FontView.ts | font": { + "message": "Font" + }, + "ui/legacy/components/source_frame/FontView.ts | previewOfFontFromS": { + "message": "Preview of font from {PH1}" + }, + "ui/legacy/components/source_frame/ImageView.ts | copyImageAsDataUri": { + "message": "Copy image as data URI" + }, + "ui/legacy/components/source_frame/ImageView.ts | copyImageUrl": { + "message": "Copy image URL" + }, + "ui/legacy/components/source_frame/ImageView.ts | dD": { + "message": "{PH1} × {PH2}" + }, + "ui/legacy/components/source_frame/ImageView.ts | download": { + "message": "download" + }, + "ui/legacy/components/source_frame/ImageView.ts | dropImageFileHere": { + "message": "Drop image file here" + }, + "ui/legacy/components/source_frame/ImageView.ts | image": { + "message": "Image" + }, + "ui/legacy/components/source_frame/ImageView.ts | imageFromS": { + "message": "Image from {PH1}" + }, + "ui/legacy/components/source_frame/ImageView.ts | openImageInNewTab": { + "message": "Open image in new tab" + }, + "ui/legacy/components/source_frame/ImageView.ts | saveImageAs": { + "message": "Save image as..." + }, + "ui/legacy/components/source_frame/JSONView.ts | find": { + "message": "Find" + }, + "ui/legacy/components/source_frame/PreviewFactory.ts | nothingToPreview": { + "message": "Nothing to preview" + }, + "ui/legacy/components/source_frame/ResourceSourceFrame.ts | find": { + "message": "Find" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | defaultIndentation": { + "message": "Default indentation:" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | eSpaces": { + "message": "8 spaces" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | fSpaces": { + "message": "4 spaces" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToESpaces": { + "message": "Set indentation to 8 spaces" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToFSpaces": { + "message": "Set indentation to 4 spaces" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToSpaces": { + "message": "Set indentation to 2 spaces" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToTabCharacter": { + "message": "Set indentation to tab character" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | Spaces": { + "message": "2 spaces" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | tabCharacter": { + "message": "Tab character" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | bytecodePositionXs": { + "message": "Bytecode position 0x{PH1}" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | dCharactersSelected": { + "message": "{PH1} characters selected" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | dLinesDCharactersSelected": { + "message": "{PH1} lines, {PH2} characters selected" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | dSelectionRegions": { + "message": "{PH1} selection regions" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | lineSColumnS": { + "message": "Line {PH1}, Column {PH2}" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | loading": { + "message": "Loading…" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | prettyPrint": { + "message": "Pretty print" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | source": { + "message": "Source" + }, + "ui/legacy/components/source_frame/XMLView.ts | find": { + "message": "Find" + }, + "ui/legacy/components/utils/ImagePreview.ts | currentSource": { + "message": "Current source:" + }, + "ui/legacy/components/utils/ImagePreview.ts | fileSize": { + "message": "File size:" + }, + "ui/legacy/components/utils/ImagePreview.ts | imageFromS": { + "message": "Image from {PH1}" + }, + "ui/legacy/components/utils/ImagePreview.ts | intrinsicAspectRatio": { + "message": "Intrinsic aspect ratio:" + }, + "ui/legacy/components/utils/ImagePreview.ts | intrinsicSize": { + "message": "Intrinsic size:" + }, + "ui/legacy/components/utils/ImagePreview.ts | renderedAspectRatio": { + "message": "Rendered aspect ratio:" + }, + "ui/legacy/components/utils/ImagePreview.ts | renderedSize": { + "message": "Rendered size:" + }, + "ui/legacy/components/utils/ImagePreview.ts | unknownSource": { + "message": "unknown source" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | addToIgnore": { + "message": "Add script to ignore list" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | removeFromIgnore": { + "message": "Remove from ignore list" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | showSMoreFrames": { + "message": "{n, plural, =1 {Show # more frame} other {Show # more frames}}" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | unknownSource": { + "message": "unknown" + }, + "ui/legacy/components/utils/Linkifier.ts | auto": { + "message": "auto" + }, + "ui/legacy/components/utils/Linkifier.ts | linkHandling": { + "message": "Link handling:" + }, + "ui/legacy/components/utils/Linkifier.ts | openUsingS": { + "message": "Open using {PH1}" + }, + "ui/legacy/components/utils/Linkifier.ts | reveal": { + "message": "Reveal" + }, + "ui/legacy/components/utils/Linkifier.ts | revealInS": { + "message": "Reveal in {PH1}" + }, + "ui/legacy/components/utils/Linkifier.ts | unknown": { + "message": "(unknown)" + }, + "ui/legacy/components/utils/TargetDetachedDialog.ts | websocketDisconnected": { + "message": "WebSocket disconnected" + }, + "ui/legacy/DockController.ts | close": { + "message": "Close" + }, + "ui/legacy/DockController.ts | dockToBottom": { + "message": "Dock to bottom" + }, + "ui/legacy/DockController.ts | dockToLeft": { + "message": "Dock to left" + }, + "ui/legacy/DockController.ts | dockToRight": { + "message": "Dock to right" + }, + "ui/legacy/DockController.ts | undockIntoSeparateWindow": { + "message": "Undock into separate window" + }, + "ui/legacy/EmptyWidget.ts | learnMore": { + "message": "Learn more" + }, + "ui/legacy/FilterBar.ts | allStrings": { + "message": "All" + }, + "ui/legacy/FilterBar.ts | clearFilter": { + "message": "Clear input" + }, + "ui/legacy/FilterBar.ts | egSmalldUrlacomb": { + "message": "e.g. /small[d]+/ url:a.com/b" + }, + "ui/legacy/FilterBar.ts | filter": { + "message": "Filter" + }, + "ui/legacy/FilterBar.ts | sclickToSelectMultipleTypes": { + "message": "{PH1}Click to select multiple types" + }, + "ui/legacy/Infobar.ts | close": { + "message": "Close" + }, + "ui/legacy/Infobar.ts | dontShowAgain": { + "message": "Don't show again" + }, + "ui/legacy/Infobar.ts | learnMore": { + "message": "Learn more" + }, + "ui/legacy/InspectorView.ts | closeDrawer": { + "message": "Close drawer" + }, + "ui/legacy/InspectorView.ts | devToolsLanguageMissmatch": { + "message": "DevTools is now available in {PH1}!" + }, + "ui/legacy/InspectorView.ts | drawer": { + "message": "Tool drawer" + }, + "ui/legacy/InspectorView.ts | drawerHidden": { + "message": "Drawer hidden" + }, + "ui/legacy/InspectorView.ts | drawerShown": { + "message": "Drawer shown" + }, + "ui/legacy/InspectorView.ts | mainToolbar": { + "message": "Main toolbar" + }, + "ui/legacy/InspectorView.ts | moreTools": { + "message": "More Tools" + }, + "ui/legacy/InspectorView.ts | moveToBottom": { + "message": "Move to bottom" + }, + "ui/legacy/InspectorView.ts | moveToTop": { + "message": "Move to top" + }, + "ui/legacy/InspectorView.ts | panels": { + "message": "Panels" + }, + "ui/legacy/InspectorView.ts | reloadDevtools": { + "message": "Reload DevTools" + }, + "ui/legacy/InspectorView.ts | setToBrowserLanguage": { + "message": "Always match Chrome's language" + }, + "ui/legacy/InspectorView.ts | setToSpecificLanguage": { + "message": "Switch DevTools to {PH1}" + }, + "ui/legacy/ListWidget.ts | addString": { + "message": "Add" + }, + "ui/legacy/ListWidget.ts | cancelString": { + "message": "Cancel" + }, + "ui/legacy/ListWidget.ts | editString": { + "message": "Edit" + }, + "ui/legacy/ListWidget.ts | removeString": { + "message": "Remove" + }, + "ui/legacy/ListWidget.ts | saveString": { + "message": "Save" + }, + "ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectDevtools": { + "message": "Reconnect DevTools" + }, + "ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectWhenReadyByReopening": { + "message": "Reconnect when ready by reopening DevTools." + }, + "ui/legacy/SearchableView.ts | cancel": { + "message": "Cancel" + }, + "ui/legacy/SearchableView.ts | dMatches": { + "message": "{PH1} matches" + }, + "ui/legacy/SearchableView.ts | dOfD": { + "message": "{PH1} of {PH2}" + }, + "ui/legacy/SearchableView.ts | findString": { + "message": "Find" + }, + "ui/legacy/SearchableView.ts | matchCase": { + "message": "Match Case" + }, + "ui/legacy/SearchableView.ts | matchString": { + "message": "1 match" + }, + "ui/legacy/SearchableView.ts | replace": { + "message": "Replace" + }, + "ui/legacy/SearchableView.ts | replaceAll": { + "message": "Replace all" + }, + "ui/legacy/SearchableView.ts | searchNext": { + "message": "Search next" + }, + "ui/legacy/SearchableView.ts | searchPrevious": { + "message": "Search previous" + }, + "ui/legacy/SearchableView.ts | useRegularExpression": { + "message": "Use Regular Expression" + }, + "ui/legacy/SettingsUI.ts | oneOrMoreSettingsHaveChanged": { + "message": "One or more settings have changed which requires a reload to take effect." + }, + "ui/legacy/SettingsUI.ts | srequiresReload": { + "message": "*Requires reload" + }, + "ui/legacy/SoftContextMenu.ts | checked": { + "message": "checked" + }, + "ui/legacy/SoftContextMenu.ts | sS": { + "message": "{PH1}, {PH2}" + }, + "ui/legacy/SoftContextMenu.ts | sSS": { + "message": "{PH1}, {PH2}, {PH3}" + }, + "ui/legacy/SoftContextMenu.ts | unchecked": { + "message": "unchecked" + }, + "ui/legacy/SoftDropDown.ts | noItemSelected": { + "message": "(no item selected)" + }, + "ui/legacy/SuggestBox.ts | sSuggestionSOfS": { + "message": "{PH1}, suggestion {PH2} of {PH3}" + }, + "ui/legacy/SuggestBox.ts | sSuggestionSSelected": { + "message": "{PH1}, suggestion selected" + }, + "ui/legacy/TabbedPane.ts | close": { + "message": "Close" + }, + "ui/legacy/TabbedPane.ts | closeAll": { + "message": "Close all" + }, + "ui/legacy/TabbedPane.ts | closeOthers": { + "message": "Close others" + }, + "ui/legacy/TabbedPane.ts | closeS": { + "message": "Close {PH1}" + }, + "ui/legacy/TabbedPane.ts | closeTabsToTheRight": { + "message": "Close tabs to the right" + }, + "ui/legacy/TabbedPane.ts | moreTabs": { + "message": "More tabs" + }, + "ui/legacy/TabbedPane.ts | previewFeature": { + "message": "Preview feature" + }, + "ui/legacy/TargetCrashedScreen.ts | devtoolsWasDisconnectedFromThe": { + "message": "DevTools was disconnected from the page." + }, + "ui/legacy/TargetCrashedScreen.ts | oncePageIsReloadedDevtoolsWill": { + "message": "Once page is reloaded, DevTools will automatically reconnect." + }, + "ui/legacy/Toolbar.ts | notPressed": { + "message": "not pressed" + }, + "ui/legacy/Toolbar.ts | pressed": { + "message": "pressed" + }, + "ui/legacy/UIUtils.ts | anonymous": { + "message": "(anonymous)" + }, + "ui/legacy/UIUtils.ts | anotherProfilerIsAlreadyActive": { + "message": "Another profiler is already active" + }, + "ui/legacy/UIUtils.ts | asyncCall": { + "message": "Async Call" + }, + "ui/legacy/UIUtils.ts | cancel": { + "message": "Cancel" + }, + "ui/legacy/UIUtils.ts | close": { + "message": "Close" + }, + "ui/legacy/UIUtils.ts | copyFileName": { + "message": "Copy file name" + }, + "ui/legacy/UIUtils.ts | copyLinkAddress": { + "message": "Copy link address" + }, + "ui/legacy/UIUtils.ts | ok": { + "message": "OK" + }, + "ui/legacy/UIUtils.ts | openInNewTab": { + "message": "Open in new tab" + }, + "ui/legacy/UIUtils.ts | promiseRejectedAsync": { + "message": "Promise rejected (async)" + }, + "ui/legacy/UIUtils.ts | promiseResolvedAsync": { + "message": "Promise resolved (async)" + }, + "ui/legacy/UIUtils.ts | sAsync": { + "message": "{PH1} (async)" + }, + "ui/legacy/ViewManager.ts | sPanel": { + "message": "{PH1} panel" + } +} diff --git a/chii/core/i18n/locales/zh.json b/chii/core/i18n/locales/zh.json new file mode 100644 index 00000000..031feb4b --- /dev/null +++ b/chii/core/i18n/locales/zh.json @@ -0,0 +1,12287 @@ +{ + "core/common/ResourceType.ts | cspviolationreport": { + "message": "CSPViolationReport" + }, + "core/common/ResourceType.ts | css": { + "message": "CSS" + }, + "core/common/ResourceType.ts | doc": { + "message": "文档" + }, + "core/common/ResourceType.ts | document": { + "message": "文档" + }, + "core/common/ResourceType.ts | documents": { + "message": "文档" + }, + "core/common/ResourceType.ts | eventsource": { + "message": "EventSource" + }, + "core/common/ResourceType.ts | fetch": { + "message": "Fetch" + }, + "core/common/ResourceType.ts | font": { + "message": "字体" + }, + "core/common/ResourceType.ts | fonts": { + "message": "字体" + }, + "core/common/ResourceType.ts | image": { + "message": "图片" + }, + "core/common/ResourceType.ts | images": { + "message": "图片" + }, + "core/common/ResourceType.ts | img": { + "message": "图片" + }, + "core/common/ResourceType.ts | js": { + "message": "JS" + }, + "core/common/ResourceType.ts | manifest": { + "message": "清单" + }, + "core/common/ResourceType.ts | media": { + "message": "媒体" + }, + "core/common/ResourceType.ts | other": { + "message": "其他" + }, + "core/common/ResourceType.ts | ping": { + "message": "Ping" + }, + "core/common/ResourceType.ts | preflight": { + "message": "预检" + }, + "core/common/ResourceType.ts | script": { + "message": "脚本" + }, + "core/common/ResourceType.ts | scripts": { + "message": "脚本" + }, + "core/common/ResourceType.ts | signedexchange": { + "message": "SignedExchange" + }, + "core/common/ResourceType.ts | stylesheet": { + "message": "样式表" + }, + "core/common/ResourceType.ts | stylesheets": { + "message": "样式表" + }, + "core/common/ResourceType.ts | texttrack": { + "message": "TextTrack" + }, + "core/common/ResourceType.ts | wasm": { + "message": "Wasm" + }, + "core/common/ResourceType.ts | webassembly": { + "message": "WebAssembly" + }, + "core/common/ResourceType.ts | webbundle": { + "message": "WebBundle" + }, + "core/common/ResourceType.ts | websocket": { + "message": "WebSocket" + }, + "core/common/ResourceType.ts | websockets": { + "message": "WebSocket" + }, + "core/common/ResourceType.ts | webtransport": { + "message": "WebTransport" + }, + "core/common/ResourceType.ts | ws": { + "message": "WS" + }, + "core/common/ResourceType.ts | xhrAndFetch": { + "message": "XHR 和 Fetch" + }, + "core/common/Revealer.ts | applicationPanel": { + "message": "“应用”面板" + }, + "core/common/Revealer.ts | changesDrawer": { + "message": "变更抽屉式导航栏" + }, + "core/common/Revealer.ts | elementsPanel": { + "message": "元素面板" + }, + "core/common/Revealer.ts | issuesView": { + "message": "“问题”视图" + }, + "core/common/Revealer.ts | networkPanel": { + "message": "“网络”面板" + }, + "core/common/Revealer.ts | sourcesPanel": { + "message": "“来源”面板" + }, + "core/common/Revealer.ts | stylesSidebar": { + "message": "样式边栏" + }, + "core/common/SettingRegistration.ts | adorner": { + "message": "装饰器" + }, + "core/common/SettingRegistration.ts | appearance": { + "message": "外观" + }, + "core/common/SettingRegistration.ts | console": { + "message": "控制台" + }, + "core/common/SettingRegistration.ts | debugger": { + "message": "调试程序" + }, + "core/common/SettingRegistration.ts | elements": { + "message": "元素" + }, + "core/common/SettingRegistration.ts | extension": { + "message": "扩展名" + }, + "core/common/SettingRegistration.ts | global": { + "message": "全局" + }, + "core/common/SettingRegistration.ts | grid": { + "message": "网格" + }, + "core/common/SettingRegistration.ts | memory": { + "message": "内存" + }, + "core/common/SettingRegistration.ts | mobile": { + "message": "移动设备" + }, + "core/common/SettingRegistration.ts | network": { + "message": "网络" + }, + "core/common/SettingRegistration.ts | performance": { + "message": "性能" + }, + "core/common/SettingRegistration.ts | persistence": { + "message": "持久性" + }, + "core/common/SettingRegistration.ts | rendering": { + "message": "渲染" + }, + "core/common/SettingRegistration.ts | sources": { + "message": "源代码" + }, + "core/common/SettingRegistration.ts | sync": { + "message": "同步" + }, + "core/host/InspectorFrontendHost.ts | devtoolsS": { + "message": "DevTools - {PH1}" + }, + "core/host/ResourceLoader.ts | cacheError": { + "message": "缓存错误" + }, + "core/host/ResourceLoader.ts | certificateError": { + "message": "证书错误" + }, + "core/host/ResourceLoader.ts | certificateManagerError": { + "message": "证书管理工具错误" + }, + "core/host/ResourceLoader.ts | connectionError": { + "message": "连接错误" + }, + "core/host/ResourceLoader.ts | decodingDataUrlFailed": { + "message": "数据网址解码失败" + }, + "core/host/ResourceLoader.ts | dnsResolverError": { + "message": "DNS 解析器错误" + }, + "core/host/ResourceLoader.ts | ftpError": { + "message": "FTP 错误" + }, + "core/host/ResourceLoader.ts | httpError": { + "message": "HTTP 错误" + }, + "core/host/ResourceLoader.ts | httpErrorStatusCodeSS": { + "message": "HTTP 错误:状态代码 {PH1},{PH2}" + }, + "core/host/ResourceLoader.ts | invalidUrl": { + "message": "网址无效" + }, + "core/host/ResourceLoader.ts | signedExchangeError": { + "message": "Signed Exchange 错误" + }, + "core/host/ResourceLoader.ts | systemError": { + "message": "系统错误" + }, + "core/host/ResourceLoader.ts | unknownError": { + "message": "未知错误" + }, + "core/i18n/time-utilities.ts | fdays": { + "message": "{PH1} 天" + }, + "core/i18n/time-utilities.ts | fhrs": { + "message": "{PH1} 小时" + }, + "core/i18n/time-utilities.ts | fmin": { + "message": "{PH1} 分钟" + }, + "core/i18n/time-utilities.ts | fmms": { + "message": "{PH1} 微秒" + }, + "core/i18n/time-utilities.ts | fms": { + "message": "{PH1} 毫秒" + }, + "core/i18n/time-utilities.ts | fs": { + "message": "{PH1} 秒" + }, + "core/sdk/CPUProfileDataModel.ts | devtoolsCpuProfileParserIsFixing": { + "message": "DevTools:CPU 性能分析报告解析器正在修复 {PH1} 个缺少的样本。" + }, + "core/sdk/CPUProfilerModel.ts | profileD": { + "message": "性能分析报告 {PH1}" + }, + "core/sdk/CSSStyleSheetHeader.ts | couldNotFindTheOriginalStyle": { + "message": "无法找到原始样式表。" + }, + "core/sdk/CSSStyleSheetHeader.ts | thereWasAnErrorRetrievingThe": { + "message": "检索源代码样式时出错。" + }, + "core/sdk/CompilerSourceMappingContentProvider.ts | couldNotLoadContentForSS": { + "message": "无法加载 {PH1} 的内容({PH2})" + }, + "core/sdk/ConsoleModel.ts | failedToSaveToTempVariable": { + "message": "未能保存到临时变量中。" + }, + "core/sdk/ConsoleModel.ts | navigatedToS": { + "message": "已转到 {PH1}" + }, + "core/sdk/ConsoleModel.ts | profileSFinished": { + "message": "性能分析报告“{PH1}”已完成。" + }, + "core/sdk/ConsoleModel.ts | profileSStarted": { + "message": "性能分析报告“{PH1}”已开始。" + }, + "core/sdk/DOMDebuggerModel.ts | animation": { + "message": "动画" + }, + "core/sdk/DOMDebuggerModel.ts | animationFrameFired": { + "message": "动画帧已触发" + }, + "core/sdk/DOMDebuggerModel.ts | cancelAnimationFrame": { + "message": "取消动画帧" + }, + "core/sdk/DOMDebuggerModel.ts | canvas": { + "message": "画布" + }, + "core/sdk/DOMDebuggerModel.ts | clipboard": { + "message": "剪贴板" + }, + "core/sdk/DOMDebuggerModel.ts | closeAudiocontext": { + "message": "关闭 AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | control": { + "message": "控制" + }, + "core/sdk/DOMDebuggerModel.ts | createAudiocontext": { + "message": "创建 AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | createCanvasContext": { + "message": "创建画布背景" + }, + "core/sdk/DOMDebuggerModel.ts | device": { + "message": "设备" + }, + "core/sdk/DOMDebuggerModel.ts | domMutation": { + "message": "DOM 变更" + }, + "core/sdk/DOMDebuggerModel.ts | dragDrop": { + "message": "拖/放" + }, + "core/sdk/DOMDebuggerModel.ts | geolocation": { + "message": "地理定位" + }, + "core/sdk/DOMDebuggerModel.ts | keyboard": { + "message": "键盘" + }, + "core/sdk/DOMDebuggerModel.ts | load": { + "message": "加载" + }, + "core/sdk/DOMDebuggerModel.ts | media": { + "message": "媒体" + }, + "core/sdk/DOMDebuggerModel.ts | mouse": { + "message": "鼠标" + }, + "core/sdk/DOMDebuggerModel.ts | notification": { + "message": "通知" + }, + "core/sdk/DOMDebuggerModel.ts | parse": { + "message": "解析" + }, + "core/sdk/DOMDebuggerModel.ts | pictureinpicture": { + "message": "画中画" + }, + "core/sdk/DOMDebuggerModel.ts | pointer": { + "message": "指针" + }, + "core/sdk/DOMDebuggerModel.ts | policyViolations": { + "message": "违反政策" + }, + "core/sdk/DOMDebuggerModel.ts | requestAnimationFrame": { + "message": "请求动画帧" + }, + "core/sdk/DOMDebuggerModel.ts | resumeAudiocontext": { + "message": "恢复 AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | script": { + "message": "脚本" + }, + "core/sdk/DOMDebuggerModel.ts | scriptBlockedByContentSecurity": { + "message": "脚本因内容安全政策而被屏蔽" + }, + "core/sdk/DOMDebuggerModel.ts | scriptBlockedDueToContent": { + "message": "脚本因以下内容安全政策指令而被屏蔽:{PH1}" + }, + "core/sdk/DOMDebuggerModel.ts | scriptFirstStatement": { + "message": "脚本的第一个语句" + }, + "core/sdk/DOMDebuggerModel.ts | setInnerhtml": { + "message": "设置 innerHTML" + }, + "core/sdk/DOMDebuggerModel.ts | setTimeoutOrIntervalFired": { + "message": "{PH1} 已触发" + }, + "core/sdk/DOMDebuggerModel.ts | sinkViolations": { + "message": "接收器违规行为" + }, + "core/sdk/DOMDebuggerModel.ts | suspendAudiocontext": { + "message": "暂停 AudioContext" + }, + "core/sdk/DOMDebuggerModel.ts | timer": { + "message": "定时器" + }, + "core/sdk/DOMDebuggerModel.ts | touch": { + "message": "轻触" + }, + "core/sdk/DOMDebuggerModel.ts | trustedTypeViolations": { + "message": "Trusted Type 违规问题" + }, + "core/sdk/DOMDebuggerModel.ts | webaudio": { + "message": "WebAudio" + }, + "core/sdk/DOMDebuggerModel.ts | webglErrorFired": { + "message": "WebGL 错误已触发" + }, + "core/sdk/DOMDebuggerModel.ts | webglErrorFiredS": { + "message": "WebGL 错误已触发 ({PH1})" + }, + "core/sdk/DOMDebuggerModel.ts | webglWarningFired": { + "message": "WebGL 警告已触发" + }, + "core/sdk/DOMDebuggerModel.ts | window": { + "message": "窗口" + }, + "core/sdk/DOMDebuggerModel.ts | worker": { + "message": "Worker" + }, + "core/sdk/DOMDebuggerModel.ts | xhr": { + "message": "XHR" + }, + "core/sdk/DebuggerModel.ts | block": { + "message": "代码块" + }, + "core/sdk/DebuggerModel.ts | closure": { + "message": "闭包" + }, + "core/sdk/DebuggerModel.ts | expression": { + "message": "表达式" + }, + "core/sdk/DebuggerModel.ts | global": { + "message": "全局" + }, + "core/sdk/DebuggerModel.ts | local": { + "message": "本地" + }, + "core/sdk/DebuggerModel.ts | module": { + "message": "模块" + }, + "core/sdk/DebuggerModel.ts | script": { + "message": "脚本" + }, + "core/sdk/DebuggerModel.ts | withBlock": { + "message": "With 代码块" + }, + "core/sdk/NetworkManager.ts | crossoriginReadBlockingCorb": { + "message": "Cross-Origin Read Blocking (CORB) 已屏蔽 MIME 类型为 {PH2} 的跨域响应 {PH1}。如需了解详情,请参阅 https://www.chromestatus.com/feature/5629709824032768。" + }, + "core/sdk/NetworkManager.ts | fastG": { + "message": "高速 3G" + }, + "core/sdk/NetworkManager.ts | noContentForPreflight": { + "message": "对于预检请求,没有可显示的内容" + }, + "core/sdk/NetworkManager.ts | noContentForRedirect": { + "message": "没有可显示的内容,因为此请求被重定向了" + }, + "core/sdk/NetworkManager.ts | noContentForWebSocket": { + "message": "尚不支持显示 WebSockets 内容" + }, + "core/sdk/NetworkManager.ts | noThrottling": { + "message": "已停用节流模式" + }, + "core/sdk/NetworkManager.ts | offline": { + "message": "离线" + }, + "core/sdk/NetworkManager.ts | requestWasBlockedByDevtoolsS": { + "message": "请求被 DevTools 屏蔽:“{PH1}”" + }, + "core/sdk/NetworkManager.ts | sFailedLoadingSS": { + "message": "{PH1} 加载失败:{PH2}“{PH3}”。" + }, + "core/sdk/NetworkManager.ts | sFinishedLoadingSS": { + "message": "{PH1} 已完成加载:{PH2}“{PH3}”。" + }, + "core/sdk/NetworkManager.ts | slowG": { + "message": "低速 3G" + }, + "core/sdk/NetworkRequest.ts | anUnknownErrorWasEncounteredWhenTrying": { + "message": "尝试存储此 Cookie 时发生未知错误。" + }, + "core/sdk/NetworkRequest.ts | binary": { + "message": "(二进制)" + }, + "core/sdk/NetworkRequest.ts | blockedReasonInvalidDomain": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头的“Domain”属性对当前的主机网址而言无效。" + }, + "core/sdk/NetworkRequest.ts | blockedReasonInvalidPrefix": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头在名称中使用了“__Secure-”或“__Host-”前缀,该做法违反了包含这些前缀的 Cookie 所适用的附加规则,如 https://tools.ietf.org/html/draft-west-cookie-prefixes-05 中所定义。" + }, + "core/sdk/NetworkRequest.ts | blockedReasonOverwriteSecure": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头不是通过安全连接发送的,而且会覆盖具有“Secure”属性的 Cookie。" + }, + "core/sdk/NetworkRequest.ts | blockedReasonSameSiteNoneInsecure": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头具有“SameSite=None”属性但缺少使用“SameSite=None”所需的“Secure”属性。" + }, + "core/sdk/NetworkRequest.ts | blockedReasonSameSiteStrictLax": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头具有“{PH1}”属性但来自一个跨网站响应,而该响应并不是对顶级导航操作的响应。" + }, + "core/sdk/NetworkRequest.ts | blockedReasonSameSiteUnspecifiedTreatedAsLax": { + "message": "此 Set-Cookie 标头未指定“SameSite”属性,默认为“SameSite=Lax,”,并且已被屏蔽,因为它来自一个跨网站响应,而该响应并不是对顶级导航操作的响应。此 Set-Cookie 必须在设置时指定“SameSite=None”,才能跨网站使用。" + }, + "core/sdk/NetworkRequest.ts | blockedReasonSecureOnly": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头具有“Secure”属性但不是通过安全连接接收的。" + }, + "core/sdk/NetworkRequest.ts | domainMismatch": { + "message": "此 Cookie 已被屏蔽,因为请求网址的网域与此 Cookie 的网域不完全一致,也不是此 Cookie 的“Domain”属性值的子网域。" + }, + "core/sdk/NetworkRequest.ts | nameValuePairExceedsMaxSize": { + "message": "此 Cookie 已被屏蔽,因为它太大。名称和值的总大小不得超过 4096 个字符。" + }, + "core/sdk/NetworkRequest.ts | notOnPath": { + "message": "此 Cookie 已被屏蔽,因为它的路径与请求网址的路径不完全匹配或不是其超目录。" + }, + "core/sdk/NetworkRequest.ts | samePartyFromCrossPartyContext": { + "message": "此 Cookie 已被屏蔽,因为它具有“SameParty”属性,但相应请求是跨多方请求。由于资源网址的网域和资源所属框架/文档的网域不是同一 First-Party Set 的所有者或成员,因此系统判定这是跨多方请求。" + }, + "core/sdk/NetworkRequest.ts | sameSiteLax": { + "message": "此 Cookie 已被屏蔽,因为它具有“SameSite=Lax”属性,但相应请求是通过另一网站发出的,而且不是由顶级导航操作发出的。" + }, + "core/sdk/NetworkRequest.ts | sameSiteNoneInsecure": { + "message": "此 Cookie 已被屏蔽,因为它具有“SameSite=None”属性但未被标记为“Secure”。无“SameSite”限制的 Cookie 必须被标记为“Secure”并通过安全连接发送。" + }, + "core/sdk/NetworkRequest.ts | sameSiteStrict": { + "message": "此 Cookie 已被屏蔽,因为它具有“SameSite=Strict”属性但相应请求是通过另一网站发出的。这包括其他网站发出的顶级导航请求。" + }, + "core/sdk/NetworkRequest.ts | sameSiteUnspecifiedTreatedAsLax": { + "message": "此 Cookie 在存储时未指定“SameSite”属性,因而采用了默认值“SameSite=Lax”;该 Cookie 已被屏蔽,因为相应请求来自其他网站,而且不是由顶级导航操作发出。此 Cookie 必须在设置时指定“SameSite=None”,才能跨网站使用。" + }, + "core/sdk/NetworkRequest.ts | schemefulSameSiteLax": { + "message": "此 Cookie 已被屏蔽,因为它具有“SameSite=Lax”属性,但相应请求是跨网站请求且不是由顶级导航操作发出的。由于网址架构与当前网站的架构不同,因此系统判定这是跨网站请求。" + }, + "core/sdk/NetworkRequest.ts | schemefulSameSiteStrict": { + "message": "此 Cookie 已被屏蔽,因为它具有“SameSite=Strict”属性但相应请求是跨网站请求。这包括其他网站发出的顶级导航请求。由于网址架构与当前网站的架构不同,因此系统判定这是跨网站请求。" + }, + "core/sdk/NetworkRequest.ts | schemefulSameSiteUnspecifiedTreatedAsLax": { + "message": "此 Cookie 在存储时未指定“SameSite”属性,默认为“SameSite=Lax\"”,并且已被屏蔽,因为相应请求是跨网站请求,而且不是由顶级导航操作发出。由于网址架构与当前网站的架构不同,因此系统判定这是跨网站请求。" + }, + "core/sdk/NetworkRequest.ts | secureOnly": { + "message": "此 Cookie 已被屏蔽,因为它具有“Secure”属性但相应连接不安全。" + }, + "core/sdk/NetworkRequest.ts | setcookieHeaderIsIgnoredIn": { + "message": "Set-Cookie 标头在以下网址的响应中被忽略:{PH1}。名称和值的总大小不得超过 4096 个字符。" + }, + "core/sdk/NetworkRequest.ts | theSchemeOfThisConnectionIsNot": { + "message": "此连接的架构不能存储 Cookie。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieDidntSpecifyASamesite": { + "message": "此 Set-Cookie 标头未指定“SameSite”属性,默认为“SameSite=Lax\"”,并且已被屏蔽,因为它来自一个跨网站响应,而该响应并不是对顶级导航操作的响应。该响应之所以被视为跨网站,是因为网址架构与当前网站的架构不同。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieHadInvalidSyntax": { + "message": "此 Set-Cookie 标头的语法无效。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSameparty": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头具有“SameParty”属性,但相应请求是跨多方请求。该请求之所以被视为跨多方,是因为资源网址的网域和资源所属框架/文档的网域不是同一 First-Party Set 的所有者或成员。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头既具有“SameParty”属性又具有与该属性冲突的其他属性。Chrome 要求那些使用“SameParty”属性的 Cookie 也使用“Secure”属性且不受“SameSite=Strict”限制。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头具有“{PH1}”属性但来自一个跨网站响应,而该响应并不是对顶级导航操作的响应。该响应之所以被视为跨网站,是因为网址架构与当前网站的架构不同。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此 Cookie 太大。名称和值的总大小不得超过 4096 个字符。" + }, + "core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueToUser": { + "message": "尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为用户指定了偏好设置。" + }, + "core/sdk/NetworkRequest.ts | unknownError": { + "message": "尝试发送此 Cookie 时发生未知错误。" + }, + "core/sdk/NetworkRequest.ts | userPreferences": { + "message": "此 Cookie 因用户偏好设置而被屏蔽。" + }, + "core/sdk/OverlayModel.ts | pausedInDebugger": { + "message": "已在调试程序中暂停" + }, + "core/sdk/PageResourceLoader.ts | loadCanceledDueToLoadTimeout": { + "message": "加载因超时而取消" + }, + "core/sdk/PageResourceLoader.ts | loadCanceledDueToReloadOf": { + "message": "由于系统重新加载已检查的网页,加载操作已取消" + }, + "core/sdk/Script.ts | scriptRemovedOrDeleted": { + "message": "脚本已移除或已删除。" + }, + "core/sdk/Script.ts | unableToFetchScriptSource": { + "message": "无法获取脚本源代码。" + }, + "core/sdk/ServerTiming.ts | deprecatedSyntaxFoundPleaseUse": { + "message": "发现已弃用的语法。请使用:;dur=;desc=" + }, + "core/sdk/ServerTiming.ts | duplicateParameterSIgnored": { + "message": "已忽略重复参数“{PH1}”。" + }, + "core/sdk/ServerTiming.ts | extraneousTrailingCharacters": { + "message": "无关的尾随字符。" + }, + "core/sdk/ServerTiming.ts | noValueFoundForParameterS": { + "message": "找不到“{PH1}”参数的值。" + }, + "core/sdk/ServerTiming.ts | unableToParseSValueS": { + "message": "无法解析“{PH1}”值:“{PH2}”。" + }, + "core/sdk/ServerTiming.ts | unrecognizedParameterS": { + "message": "无法识别的参数“{PH1}”。" + }, + "core/sdk/ServiceWorkerCacheModel.ts | serviceworkercacheagentError": { + "message": "删除缓存中的缓存条目 {PH1} 时出现 ServiceWorkerCacheAgent 错误:{PH2}" + }, + "core/sdk/ServiceWorkerManager.ts | activated": { + "message": "已启用" + }, + "core/sdk/ServiceWorkerManager.ts | activating": { + "message": "正在启用" + }, + "core/sdk/ServiceWorkerManager.ts | installed": { + "message": "已安装" + }, + "core/sdk/ServiceWorkerManager.ts | installing": { + "message": "正在安装" + }, + "core/sdk/ServiceWorkerManager.ts | new": { + "message": "新版" + }, + "core/sdk/ServiceWorkerManager.ts | redundant": { + "message": "冗余" + }, + "core/sdk/ServiceWorkerManager.ts | running": { + "message": "正在运行" + }, + "core/sdk/ServiceWorkerManager.ts | sSS": { + "message": "{PH1} #{PH2}({PH3})" + }, + "core/sdk/ServiceWorkerManager.ts | starting": { + "message": "正在启动" + }, + "core/sdk/ServiceWorkerManager.ts | stopped": { + "message": "已停止" + }, + "core/sdk/ServiceWorkerManager.ts | stopping": { + "message": "正在停止" + }, + "core/sdk/SourceMap.ts | couldNotLoadContentForSS": { + "message": "无法加载 {PH1} 的内容:{PH2}" + }, + "core/sdk/SourceMap.ts | couldNotParseContentForSS": { + "message": "无法解析 {PH1} 的内容:{PH2}" + }, + "core/sdk/SourceMapManager.ts | devtoolsFailedToLoadSourcemapS": { + "message": "DevTools 无法加载来源映射:{PH1}" + }, + "core/sdk/sdk-meta.ts | achromatopsia": { + "message": "全色盲" + }, + "core/sdk/sdk-meta.ts | blurredVision": { + "message": "视力模糊" + }, + "core/sdk/sdk-meta.ts | captureAsyncStackTraces": { + "message": "捕获异步堆栈轨迹" + }, + "core/sdk/sdk-meta.ts | deuteranopia": { + "message": "绿色盲" + }, + "core/sdk/sdk-meta.ts | disableAsyncStackTraces": { + "message": "停用异步堆栈轨迹" + }, + "core/sdk/sdk-meta.ts | disableAvifFormat": { + "message": "停用 AVIF 格式" + }, + "core/sdk/sdk-meta.ts | disableCache": { + "message": "停用缓存(在开发者工具已打开时)" + }, + "core/sdk/sdk-meta.ts | disableJavascript": { + "message": "停用 JavaScript" + }, + "core/sdk/sdk-meta.ts | disableJpegXlFormat": { + "message": "停用 JPEG XL 格式" + }, + "core/sdk/sdk-meta.ts | disableLocalFonts": { + "message": "停用本地字体" + }, + "core/sdk/sdk-meta.ts | disableNetworkRequestBlocking": { + "message": "停用网络请求屏蔽" + }, + "core/sdk/sdk-meta.ts | disableWebpFormat": { + "message": "停用 WebP 格式" + }, + "core/sdk/sdk-meta.ts | disabledDarkMode": { + "message": "停用" + }, + "core/sdk/sdk-meta.ts | doNotCaptureAsyncStackTraces": { + "message": "不捕获异步堆栈轨迹" + }, + "core/sdk/sdk-meta.ts | doNotEmulateAFocusedPage": { + "message": "不模拟所聚焦的网页" + }, + "core/sdk/sdk-meta.ts | doNotEmulateAnyVisionDeficiency": { + "message": "不模拟任何视觉缺陷" + }, + "core/sdk/sdk-meta.ts | doNotEmulateCss": { + "message": "不模拟 CSS {PH1}" + }, + "core/sdk/sdk-meta.ts | doNotEmulateCssMediaType": { + "message": "不模拟 CSS 媒体类型" + }, + "core/sdk/sdk-meta.ts | doNotExtendGridLines": { + "message": "不延长网格线" + }, + "core/sdk/sdk-meta.ts | doNotHighlightAdFrames": { + "message": "不突出显示广告框架" + }, + "core/sdk/sdk-meta.ts | doNotPauseOnExceptions": { + "message": "不在遇到异常时暂停" + }, + "core/sdk/sdk-meta.ts | doNotPreserveLogUponNavigation": { + "message": "浏览时不保留日志" + }, + "core/sdk/sdk-meta.ts | doNotShowGridNamedAreas": { + "message": "不显示网格命名区域" + }, + "core/sdk/sdk-meta.ts | doNotShowGridTrackSizes": { + "message": "不显示网格轨迹大小" + }, + "core/sdk/sdk-meta.ts | emulateAFocusedPage": { + "message": "模拟所聚焦的网页" + }, + "core/sdk/sdk-meta.ts | emulateAchromatopsia": { + "message": "模拟全色盲" + }, + "core/sdk/sdk-meta.ts | emulateAutoDarkMode": { + "message": "模拟自动深色模式" + }, + "core/sdk/sdk-meta.ts | emulateBlurredVision": { + "message": "模拟视力模糊" + }, + "core/sdk/sdk-meta.ts | emulateCss": { + "message": "模拟 CSS {PH1}" + }, + "core/sdk/sdk-meta.ts | emulateCssMediaFeature": { + "message": "模拟 CSS 媒体功能 {PH1}" + }, + "core/sdk/sdk-meta.ts | emulateCssMediaType": { + "message": "模拟 CSS 媒体类型" + }, + "core/sdk/sdk-meta.ts | emulateCssPrintMediaType": { + "message": "模拟 CSS 打印媒体类型" + }, + "core/sdk/sdk-meta.ts | emulateCssScreenMediaType": { + "message": "模拟 CSS 屏幕媒体类型" + }, + "core/sdk/sdk-meta.ts | emulateDeuteranopia": { + "message": "模拟绿色盲" + }, + "core/sdk/sdk-meta.ts | emulateProtanopia": { + "message": "模拟红色盲" + }, + "core/sdk/sdk-meta.ts | emulateTritanopia": { + "message": "模拟蓝色盲" + }, + "core/sdk/sdk-meta.ts | emulateVisionDeficiencies": { + "message": "模拟视觉缺陷" + }, + "core/sdk/sdk-meta.ts | enableAvifFormat": { + "message": "启用 AVIF 格式" + }, + "core/sdk/sdk-meta.ts | enableCache": { + "message": "启用缓存" + }, + "core/sdk/sdk-meta.ts | enableCustomFormatters": { + "message": "启用自定义格式设置工具" + }, + "core/sdk/sdk-meta.ts | enableJavascript": { + "message": "启用 JavaScript" + }, + "core/sdk/sdk-meta.ts | enableJpegXlFormat": { + "message": "启用 JPEG XL 格式" + }, + "core/sdk/sdk-meta.ts | enableLocalFonts": { + "message": "启用本地字体" + }, + "core/sdk/sdk-meta.ts | enableNetworkRequestBlocking": { + "message": "启用网络请求屏蔽功能" + }, + "core/sdk/sdk-meta.ts | enableWebpFormat": { + "message": "启用 WebP 格式" + }, + "core/sdk/sdk-meta.ts | enabledDarkMode": { + "message": "启用" + }, + "core/sdk/sdk-meta.ts | extendGridLines": { + "message": "延长网格线" + }, + "core/sdk/sdk-meta.ts | hideCoreWebVitalsOverlay": { + "message": "隐藏核心网页指标叠加层" + }, + "core/sdk/sdk-meta.ts | hideFramesPerSecondFpsMeter": { + "message": "隐藏每秒帧数 (FPS) 计量器" + }, + "core/sdk/sdk-meta.ts | hideHittestBorders": { + "message": "隐藏命中测试边界" + }, + "core/sdk/sdk-meta.ts | hideLayerBorders": { + "message": "隐藏图层边框" + }, + "core/sdk/sdk-meta.ts | hideLayoutShiftRegions": { + "message": "隐藏布局偏移区域" + }, + "core/sdk/sdk-meta.ts | hideLineLabels": { + "message": "隐藏网格线标签" + }, + "core/sdk/sdk-meta.ts | hidePaintFlashingRectangles": { + "message": "隐藏突出显示的矩形绘制区域" + }, + "core/sdk/sdk-meta.ts | hideScrollPerformanceBottlenecks": { + "message": "隐藏滚动性能瓶颈" + }, + "core/sdk/sdk-meta.ts | highlightAdFrames": { + "message": "突出显示广告框架" + }, + "core/sdk/sdk-meta.ts | noEmulation": { + "message": "无模拟" + }, + "core/sdk/sdk-meta.ts | pauseOnExceptions": { + "message": "在遇到异常时暂停" + }, + "core/sdk/sdk-meta.ts | preserveLogUponNavigation": { + "message": "在浏览时保留日志" + }, + "core/sdk/sdk-meta.ts | print": { + "message": "打印" + }, + "core/sdk/sdk-meta.ts | protanopia": { + "message": "红色盲" + }, + "core/sdk/sdk-meta.ts | query": { + "message": "查询" + }, + "core/sdk/sdk-meta.ts | screen": { + "message": "屏幕" + }, + "core/sdk/sdk-meta.ts | showAreaNames": { + "message": "显示区域名称" + }, + "core/sdk/sdk-meta.ts | showCoreWebVitalsOverlay": { + "message": "显示核心网页指标叠加层" + }, + "core/sdk/sdk-meta.ts | showFramesPerSecondFpsMeter": { + "message": "显示每秒帧数 (FPS) 计量器" + }, + "core/sdk/sdk-meta.ts | showGridNamedAreas": { + "message": "显示网格命名区域" + }, + "core/sdk/sdk-meta.ts | showGridTrackSizes": { + "message": "显示网格轨迹大小" + }, + "core/sdk/sdk-meta.ts | showHittestBorders": { + "message": "显示命中测试边界" + }, + "core/sdk/sdk-meta.ts | showLayerBorders": { + "message": "显示图层边框" + }, + "core/sdk/sdk-meta.ts | showLayoutShiftRegions": { + "message": "显示布局偏移区域" + }, + "core/sdk/sdk-meta.ts | showLineLabels": { + "message": "显示网格线标签" + }, + "core/sdk/sdk-meta.ts | showLineNames": { + "message": "显示网格线名称" + }, + "core/sdk/sdk-meta.ts | showLineNumbers": { + "message": "显示行号" + }, + "core/sdk/sdk-meta.ts | showPaintFlashingRectangles": { + "message": "显示突出显示的矩形绘制区域" + }, + "core/sdk/sdk-meta.ts | showRulers": { + "message": "显示标尺" + }, + "core/sdk/sdk-meta.ts | showScrollPerformanceBottlenecks": { + "message": "显示滚动性能瓶颈" + }, + "core/sdk/sdk-meta.ts | showTrackSizes": { + "message": "显示轨迹大小" + }, + "core/sdk/sdk-meta.ts | tritanopia": { + "message": "蓝色盲" + }, + "entrypoints/inspector_main/InspectorMain.ts | javascriptIsDisabled": { + "message": "JavaScript 已停用" + }, + "entrypoints/inspector_main/InspectorMain.ts | main": { + "message": "主要" + }, + "entrypoints/inspector_main/InspectorMain.ts | openDedicatedTools": { + "message": "打开 Node.js 的专用开发者工具" + }, + "entrypoints/inspector_main/RenderingOptions.ts | coreWebVitals": { + "message": "核心网页指标" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableAvifImageFormat": { + "message": "停用 AVIF 图片格式" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableJpegXlImageFormat": { + "message": "停用 JPEG XL 图片格式" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableLocalFonts": { + "message": "停用本地字体" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disableWebpImageFormat": { + "message": "停用 WebP 图片格式" + }, + "entrypoints/inspector_main/RenderingOptions.ts | disablesLocalSourcesInFontface": { + "message": "在 @font-face 规则中停用 local() 来源。需要重新加载网页才能应用。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | emulateAFocusedPage": { + "message": "模拟所聚焦的网页" + }, + "entrypoints/inspector_main/RenderingOptions.ts | emulatesAFocusedPage": { + "message": "模拟所聚焦的网页。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | emulatesAutoDarkMode": { + "message": "为被检查的网页启用自动深色模式。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssColorgamutMediaFeature": { + "message": "强制使用 CSS color-gamut 媒体功能" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscolorschemeMedia": { + "message": "强制使用 CSS prefers-color-scheme 媒体功能" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscontrastMedia": { + "message": "强制使用 CSS prefers-contrast 媒体功能" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreduceddataMedia": { + "message": "强制使用 CSS prefers-reduced-data 媒体功能" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedmotion": { + "message": "强制使用 CSS prefers-reduced-motion 媒体功能" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesMediaTypeForTestingPrint": { + "message": "强制采用测试打印和屏幕样式的媒体类型" + }, + "entrypoints/inspector_main/RenderingOptions.ts | forcesVisionDeficiencyEmulation": { + "message": "强制模拟视觉缺陷" + }, + "entrypoints/inspector_main/RenderingOptions.ts | frameRenderingStats": { + "message": "帧渲染统计信息" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightAdFrames": { + "message": "突出显示广告框架" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageBlueThat": { + "message": "突出显示网页上偏移的区域(蓝色)。可能不适合患有光敏性癫痫的用户。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageGreen": { + "message": "突出显示需要重新绘制的网页区域(绿色)。可能不适合患有光敏性癫痫的用户。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsElementsTealThatCan": { + "message": "突出显示可能会减慢滚动速度的元素(蓝绿色),包括轻触和滚轮事件处理脚本以及其他主线程滚动情况。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | highlightsFramesRedDetectedToBe": { + "message": "突出显示被检测为广告的框架(红色)。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | hittestBorders": { + "message": "命中测试边界" + }, + "entrypoints/inspector_main/RenderingOptions.ts | layerBorders": { + "message": "图层边框" + }, + "entrypoints/inspector_main/RenderingOptions.ts | layoutShiftRegions": { + "message": "布局偏移区域" + }, + "entrypoints/inspector_main/RenderingOptions.ts | paintFlashing": { + "message": "突出显示绘制区域" + }, + "entrypoints/inspector_main/RenderingOptions.ts | plotsFrameThroughputDropped": { + "message": "绘制帧吞吐量、丢帧分布和 GPU 内存。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | requiresAPageReloadToApplyAnd": { + "message": "需要重新加载网页,才能对图片请求采用和停用缓存。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | scrollingPerformanceIssues": { + "message": "滚动性能问题" + }, + "entrypoints/inspector_main/RenderingOptions.ts | showsAnOverlayWithCoreWebVitals": { + "message": "根据核心网页指标显示叠加层。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | showsBordersAroundHittestRegions": { + "message": "显示命中测试区域的边界。" + }, + "entrypoints/inspector_main/RenderingOptions.ts | showsLayerBordersOrangeoliveAnd": { + "message": "显示图层边框(橙色/橄榄色)和图块(青色)。" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | autoOpenDevTools": { + "message": "为弹出式窗口自动打开 DevTools" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | blockAds": { + "message": "屏蔽此网站上的广告" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | colorVisionDeficiency": { + "message": "色觉缺陷" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | cssMediaFeature": { + "message": "CSS 媒体功能" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | cssMediaType": { + "message": "CSS 媒体类型" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | disablePaused": { + "message": "停用已暂停的状态叠加层" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | doNotAutoOpen": { + "message": "不为弹出式窗口自动打开 DevTools" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | forceAdBlocking": { + "message": "在此网站上强制屏蔽广告" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | fps": { + "message": "fps" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | hardReloadPage": { + "message": "强制重新加载网页" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | layout": { + "message": "布局" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | paint": { + "message": "绘制" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | reloadPage": { + "message": "重新加载网页" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | rendering": { + "message": "渲染" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | showAds": { + "message": "在此网站上显示广告(如果允许)" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | showRendering": { + "message": "显示“渲染”工具" + }, + "entrypoints/inspector_main/inspector_main-meta.ts | visionDeficiency": { + "message": "视觉缺陷" + }, + "entrypoints/js_app/JsMain.ts | main": { + "message": "主要" + }, + "entrypoints/main/MainImpl.ts | customizeAndControlDevtools": { + "message": "自定义和控制 DevTools" + }, + "entrypoints/main/MainImpl.ts | dockSide": { + "message": "停靠侧" + }, + "entrypoints/main/MainImpl.ts | dockToBottom": { + "message": "停靠至底部" + }, + "entrypoints/main/MainImpl.ts | dockToLeft": { + "message": "停靠至左侧" + }, + "entrypoints/main/MainImpl.ts | dockToRight": { + "message": "停靠至右侧" + }, + "entrypoints/main/MainImpl.ts | focusDebuggee": { + "message": "焦点调试对象" + }, + "entrypoints/main/MainImpl.ts | help": { + "message": "帮助" + }, + "entrypoints/main/MainImpl.ts | hideConsoleDrawer": { + "message": "隐藏控制台抽屉栏" + }, + "entrypoints/main/MainImpl.ts | moreTools": { + "message": "更多工具" + }, + "entrypoints/main/MainImpl.ts | placementOfDevtoolsRelativeToThe": { + "message": "DevTools 相对于网页的位置。(按 {PH1} 即可恢复上一个位置)" + }, + "entrypoints/main/MainImpl.ts | showConsoleDrawer": { + "message": "显示控制台抽屉栏" + }, + "entrypoints/main/MainImpl.ts | theSystempreferredColorSchemeHas": { + "message": "系统首选配色方案已更改。如需将此更改应用到 DevTools,请重新加载。" + }, + "entrypoints/main/MainImpl.ts | undockIntoSeparateWindow": { + "message": "取消停靠至单独的窗口" + }, + "entrypoints/main/main-meta.ts | asAuthored": { + "message": "按原始格式设置" + }, + "entrypoints/main/main-meta.ts | auto": { + "message": "自动" + }, + "entrypoints/main/main-meta.ts | bottom": { + "message": "底部" + }, + "entrypoints/main/main-meta.ts | browserLanguage": { + "message": "浏览器界面语言" + }, + "entrypoints/main/main-meta.ts | cancelSearch": { + "message": "取消搜索" + }, + "entrypoints/main/main-meta.ts | colorFormat": { + "message": "颜色格式:" + }, + "entrypoints/main/main-meta.ts | darkCapital": { + "message": "深色" + }, + "entrypoints/main/main-meta.ts | darkLower": { + "message": "深色" + }, + "entrypoints/main/main-meta.ts | devtoolsDefault": { + "message": "DevTools(默认)" + }, + "entrypoints/main/main-meta.ts | dockToBottom": { + "message": "停靠至底部" + }, + "entrypoints/main/main-meta.ts | dockToLeft": { + "message": "停靠至左侧" + }, + "entrypoints/main/main-meta.ts | dockToRight": { + "message": "停靠至右侧" + }, + "entrypoints/main/main-meta.ts | enableCtrlShortcutToSwitchPanels": { + "message": "启用 Ctrl + 1-9 快捷键切换面板" + }, + "entrypoints/main/main-meta.ts | enableShortcutToSwitchPanels": { + "message": "启用 ⌘ + 1-9 快捷键切换面板" + }, + "entrypoints/main/main-meta.ts | enableSync": { + "message": "启用设置同步" + }, + "entrypoints/main/main-meta.ts | findNextResult": { + "message": "查找下一个结果" + }, + "entrypoints/main/main-meta.ts | findPreviousResult": { + "message": "查找上一个结果" + }, + "entrypoints/main/main-meta.ts | focusDebuggee": { + "message": "焦点调试对象" + }, + "entrypoints/main/main-meta.ts | horizontal": { + "message": "横向" + }, + "entrypoints/main/main-meta.ts | language": { + "message": "语言:" + }, + "entrypoints/main/main-meta.ts | left": { + "message": "左侧" + }, + "entrypoints/main/main-meta.ts | lightCapital": { + "message": "浅色" + }, + "entrypoints/main/main-meta.ts | lightLower": { + "message": "浅色" + }, + "entrypoints/main/main-meta.ts | nextPanel": { + "message": "下一个面板" + }, + "entrypoints/main/main-meta.ts | panelLayout": { + "message": "面板布局:" + }, + "entrypoints/main/main-meta.ts | previousPanel": { + "message": "上一个面板" + }, + "entrypoints/main/main-meta.ts | reloadDevtools": { + "message": "重新加载 DevTools" + }, + "entrypoints/main/main-meta.ts | resetZoomLevel": { + "message": "重置缩放级别" + }, + "entrypoints/main/main-meta.ts | restoreLastDockPosition": { + "message": "恢复上一个停靠位置" + }, + "entrypoints/main/main-meta.ts | right": { + "message": "右侧" + }, + "entrypoints/main/main-meta.ts | searchInPanel": { + "message": "在面板中搜索" + }, + "entrypoints/main/main-meta.ts | setColorFormatAsAuthored": { + "message": "按原始格式设置颜色格式" + }, + "entrypoints/main/main-meta.ts | setColorFormatToHex": { + "message": "将颜色格式设为 HEX" + }, + "entrypoints/main/main-meta.ts | setColorFormatToHsl": { + "message": "将颜色格式设为 HSL" + }, + "entrypoints/main/main-meta.ts | setColorFormatToRgb": { + "message": "将颜色格式设为 RGB" + }, + "entrypoints/main/main-meta.ts | switchToDarkTheme": { + "message": "切换到深色主题" + }, + "entrypoints/main/main-meta.ts | switchToLightTheme": { + "message": "切换到浅色主题" + }, + "entrypoints/main/main-meta.ts | switchToSystemPreferredColor": { + "message": "切换到系统首选颜色主题" + }, + "entrypoints/main/main-meta.ts | systemPreference": { + "message": "系统偏好设置" + }, + "entrypoints/main/main-meta.ts | theme": { + "message": "主题:" + }, + "entrypoints/main/main-meta.ts | toggleDrawer": { + "message": "显示/隐藏抽屉栏" + }, + "entrypoints/main/main-meta.ts | undockIntoSeparateWindow": { + "message": "取消停靠至单独的窗口" + }, + "entrypoints/main/main-meta.ts | undocked": { + "message": "已取消停靠" + }, + "entrypoints/main/main-meta.ts | useAutomaticPanelLayout": { + "message": "使用自动面板布局" + }, + "entrypoints/main/main-meta.ts | useHorizontalPanelLayout": { + "message": "使用水平面板布局" + }, + "entrypoints/main/main-meta.ts | useVerticalPanelLayout": { + "message": "使用垂直面板布局" + }, + "entrypoints/main/main-meta.ts | vertical": { + "message": "纵向" + }, + "entrypoints/main/main-meta.ts | zoomIn": { + "message": "放大" + }, + "entrypoints/main/main-meta.ts | zoomOut": { + "message": "缩小" + }, + "entrypoints/node_app/node_app-meta.ts | node": { + "message": "节点" + }, + "entrypoints/node_app/node_app-meta.ts | showNode": { + "message": "节点" + }, + "entrypoints/node_main/NodeConnectionsPanel.ts | addConnection": { + "message": "添加网络连接" + }, + "entrypoints/node_main/NodeConnectionsPanel.ts | networkAddressEgLocalhost": { + "message": "网络地址(例如,localhost:9229)" + }, + "entrypoints/node_main/NodeConnectionsPanel.ts | noConnectionsSpecified": { + "message": "未指定连接" + }, + "entrypoints/node_main/NodeConnectionsPanel.ts | nodejsDebuggingGuide": { + "message": "Node.js 调试指南" + }, + "entrypoints/node_main/NodeConnectionsPanel.ts | specifyNetworkEndpointAnd": { + "message": "只要您指定网络端点,DevTools 就会自动连接到该端点。如需了解详情,请阅读 {PH1}。" + }, + "entrypoints/node_main/NodeMain.ts | main": { + "message": "主要" + }, + "entrypoints/node_main/NodeMain.ts | nodejsS": { + "message": "Node.js:{PH1}" + }, + "entrypoints/node_main/node_main-meta.ts | connection": { + "message": "网络连接" + }, + "entrypoints/node_main/node_main-meta.ts | node": { + "message": "节点" + }, + "entrypoints/node_main/node_main-meta.ts | showConnection": { + "message": "显示“连接”" + }, + "entrypoints/worker_app/WorkerMain.ts | main": { + "message": "主要" + }, + "models/bindings/ContentProviderBasedProject.ts | unknownErrorLoadingFile": { + "message": "加载文件时发生未知错误" + }, + "models/bindings/DebuggerLanguagePlugins.ts | errorInDebuggerLanguagePlugin": { + "message": "调试程序语言插件发生错误:{PH1}" + }, + "models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsFor": { + "message": "[{PH1}] 无法加载 {PH2} 的调试符号({PH3})" + }, + "models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsForFunction": { + "message": "函数“{PH1}”缺少调试符号" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForButDidnt": { + "message": "[{PH1}] 已加载 {PH2} 的调试符号,但找不到任何源文件" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForFound": { + "message": "[{PH1}] 已加载 {PH2} 的调试符号,找到了 {PH3} 个源文件" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsFor": { + "message": "[{PH1}] 正在加载 {PH2} 的调试符号…" + }, + "models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsForVia": { + "message": "[{PH1}] 正在通过 {PH3} 加载 {PH2} 的调试符号…" + }, + "models/bindings/DebuggerLanguagePlugins.ts | symbolFileNotFound": { + "message": "找不到符号文件“{PH1}”" + }, + "models/bindings/ResourceScriptMapping.ts | liveEditCompileFailed": { + "message": "LiveEdit 编译失败:{PH1}" + }, + "models/bindings/ResourceScriptMapping.ts | liveEditFailed": { + "message": "LiveEdit 失败:{PH1}" + }, + "models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeANumberOr": { + "message": "设备像素比必须为数字或为空。" + }, + "models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeGreater": { + "message": "设备像素比必须大于或等于 {PH1}。" + }, + "models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeLessThanOr": { + "message": "设备像素比必须小于或等于 {PH1}。" + }, + "models/emulation/DeviceModeModel.ts | heightMustBeANumber": { + "message": "高度必须是数字。" + }, + "models/emulation/DeviceModeModel.ts | heightMustBeGreaterThanOrEqualTo": { + "message": "高度必须大于或等于 {PH1}。" + }, + "models/emulation/DeviceModeModel.ts | heightMustBeLessThanOrEqualToS": { + "message": "高度必须小于或等于 {PH1}。" + }, + "models/emulation/DeviceModeModel.ts | widthMustBeANumber": { + "message": "宽度必须是数字。" + }, + "models/emulation/DeviceModeModel.ts | widthMustBeGreaterThanOrEqualToS": { + "message": "宽度必须大于或等于 {PH1}。" + }, + "models/emulation/DeviceModeModel.ts | widthMustBeLessThanOrEqualToS": { + "message": "宽度必须小于或等于 {PH1}。" + }, + "models/emulation/EmulatedDevices.ts | laptopWithHiDPIScreen": { + "message": "配有 HiDPI 屏幕的笔记本电脑" + }, + "models/emulation/EmulatedDevices.ts | laptopWithMDPIScreen": { + "message": "配有 MDPI 屏幕的笔记本电脑" + }, + "models/emulation/EmulatedDevices.ts | laptopWithTouch": { + "message": "配有触控装置的笔记本电脑" + }, + "models/har/Writer.ts | collectingContent": { + "message": "正在收集内容…" + }, + "models/har/Writer.ts | writingFile": { + "message": "正在写入文件…" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyEval": { + "message": "内容安全政策 - Eval" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyInlineCode": { + "message": "内容安全政策 - 内嵌代码" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicySource": { + "message": "内容安全政策 - 来源许可名单" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesFixViolations": { + "message": "Trusted Types - 修正违规问题" + }, + "models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesPolicyViolation": { + "message": "Trusted Types - 违反政策" + }, + "models/issues_manager/CorsIssue.ts | CORS": { + "message": "跨域资源共享 (CORS)" + }, + "models/issues_manager/CorsIssue.ts | corsForPrivateNetworksRfc": { + "message": "专用网络的 CORS (RFC1918)" + }, + "models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | coopAndCoep": { + "message": "COOP 和 COEP" + }, + "models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | samesiteAndSameorigin": { + "message": "Same-Site 和 Same-Origin" + }, + "models/issues_manager/GenericIssue.ts | crossOriginPortalPostMessage": { + "message": "门户 - 同源通信渠道" + }, + "models/issues_manager/HeavyAdIssue.ts | handlingHeavyAdInterventions": { + "message": "针对消耗过多资源的广告的干预措施" + }, + "models/issues_manager/Issue.ts | breakingChangeIssue": { + "message": "破坏性更改问题:网页在即将发布的 Chrome 版本中可能无法正常运行" + }, + "models/issues_manager/Issue.ts | breakingChanges": { + "message": "重大变更" + }, + "models/issues_manager/Issue.ts | improvementIssue": { + "message": "可改进的问题:网页有改进空间" + }, + "models/issues_manager/Issue.ts | improvements": { + "message": "改进" + }, + "models/issues_manager/Issue.ts | pageErrorIssue": { + "message": "网页错误问题:网页无法正常运行" + }, + "models/issues_manager/Issue.ts | pageErrors": { + "message": "网页错误" + }, + "models/issues_manager/LowTextContrastIssue.ts | colorAndContrastAccessibility": { + "message": "颜色和对比度无障碍功能" + }, + "models/issues_manager/MixedContentIssue.ts | preventingMixedContent": { + "message": "防止混合内容" + }, + "models/issues_manager/NavigatorUserAgentIssue.ts | userAgentReduction": { + "message": "用户代理字符串缩短" + }, + "models/issues_manager/QuirksModeIssue.ts | documentCompatibilityMode": { + "message": "文档兼容模式" + }, + "models/issues_manager/SameSiteCookieIssue.ts | aSecure": { + "message": "安全的" + }, + "models/issues_manager/SameSiteCookieIssue.ts | anInsecure": { + "message": "不安全的" + }, + "models/issues_manager/SameSiteCookieIssue.ts | firstPartySetsExplained": { + "message": "First-Party Sets 和 SameParty 属性" + }, + "models/issues_manager/SameSiteCookieIssue.ts | howSchemefulSamesiteWorks": { + "message": "Schemeful Same-Site 的运作方式" + }, + "models/issues_manager/SameSiteCookieIssue.ts | samesiteCookiesExplained": { + "message": "SameSite Cookie 说明" + }, + "models/issues_manager/SharedArrayBufferIssue.ts | enablingSharedArrayBuffer": { + "message": "启用 SharedArrayBuffer" + }, + "models/issues_manager/TrustedWebActivityIssue.ts | changesToQualityCriteriaForPwas": { + "message": "使用 Trusted Web Activity 时 PWA 的画质标准出现变化" + }, + "models/issues_manager/WasmCrossOriginModuleSharingIssue.ts | linkTitle": { + "message": "将 Wasm 模块共享功能限制为同源" + }, + "models/logs/NetworkLog.ts | anonymous": { + "message": "<匿名>" + }, + "models/logs/logs-meta.ts | clear": { + "message": "清除" + }, + "models/logs/logs-meta.ts | doNotPreserveLogOnPageReload": { + "message": "重新加载/浏览网页时不保留日志" + }, + "models/logs/logs-meta.ts | preserve": { + "message": "保留" + }, + "models/logs/logs-meta.ts | preserveLog": { + "message": "保留日志" + }, + "models/logs/logs-meta.ts | preserveLogOnPageReload": { + "message": "重新加载/浏览网页时保留日志" + }, + "models/logs/logs-meta.ts | recordNetworkLog": { + "message": "录制网络日志" + }, + "models/logs/logs-meta.ts | reset": { + "message": "重置" + }, + "models/persistence/Automapping.ts | theAttemptToBindSInTheWorkspace": { + "message": "由于此 URI 格式不正确,因此在工作区尝试绑定“{PH1}”时失败。" + }, + "models/persistence/EditFileSystemView.ts | add": { + "message": "添加" + }, + "models/persistence/EditFileSystemView.ts | enterAPath": { + "message": "输入路径" + }, + "models/persistence/EditFileSystemView.ts | enterAUniquePath": { + "message": "请输入唯一路径" + }, + "models/persistence/EditFileSystemView.ts | excludedFolders": { + "message": "排除的文件夹" + }, + "models/persistence/EditFileSystemView.ts | folderPath": { + "message": "文件夹路径" + }, + "models/persistence/EditFileSystemView.ts | none": { + "message": "无" + }, + "models/persistence/EditFileSystemView.ts | sViaDevtools": { + "message": "{PH1}(通过 .devtools)" + }, + "models/persistence/IsolatedFileSystem.ts | blobCouldNotBeLoaded": { + "message": "无法加载 blob。" + }, + "models/persistence/IsolatedFileSystem.ts | cantReadFileSS": { + "message": "无法读取文件:{PH1} - {PH2}" + }, + "models/persistence/IsolatedFileSystem.ts | fileSystemErrorS": { + "message": "文件系统错误:{PH1}" + }, + "models/persistence/IsolatedFileSystem.ts | linkedToS": { + "message": "已链接到 {PH1}" + }, + "models/persistence/IsolatedFileSystem.ts | unknownErrorReadingFileS": { + "message": "读取以下文件时发生未知错误:{PH1}" + }, + "models/persistence/IsolatedFileSystemManager.ts | unableToAddFilesystemS": { + "message": "无法添加文件系统:{PH1}" + }, + "models/persistence/PersistenceActions.ts | openInContainingFolder": { + "message": "在包含此文件的文件夹中打开" + }, + "models/persistence/PersistenceActions.ts | saveAs": { + "message": "另存为…" + }, + "models/persistence/PersistenceActions.ts | saveForOverrides": { + "message": "保存并覆盖" + }, + "models/persistence/PersistenceActions.ts | saveImage": { + "message": "保存图片" + }, + "models/persistence/PersistenceUtils.ts | linkedToS": { + "message": "已链接到 {PH1}" + }, + "models/persistence/PersistenceUtils.ts | linkedToSourceMapS": { + "message": "已链接到来源映射的网址:{PH1}" + }, + "models/persistence/PlatformFileSystem.ts | unableToReadFilesWithThis": { + "message": "PlatformFileSystem 无法读取文件。" + }, + "models/persistence/WorkspaceSettingsTab.ts | addFolder": { + "message": "添加文件夹…" + }, + "models/persistence/WorkspaceSettingsTab.ts | folderExcludePattern": { + "message": "文件夹排除模式" + }, + "models/persistence/WorkspaceSettingsTab.ts | mappingsAreInferredAutomatically": { + "message": "映射是系统自动推断出的。" + }, + "models/persistence/WorkspaceSettingsTab.ts | remove": { + "message": "移除" + }, + "models/persistence/WorkspaceSettingsTab.ts | workspace": { + "message": "工作区" + }, + "models/persistence/persistence-meta.ts | disableOverrideNetworkRequests": { + "message": "禁止替换网络请求" + }, + "models/persistence/persistence-meta.ts | enableLocalOverrides": { + "message": "启用本地替换" + }, + "models/persistence/persistence-meta.ts | enableOverrideNetworkRequests": { + "message": "启用覆盖网络请求" + }, + "models/persistence/persistence-meta.ts | interception": { + "message": "拦截" + }, + "models/persistence/persistence-meta.ts | network": { + "message": "网络" + }, + "models/persistence/persistence-meta.ts | override": { + "message": "override" + }, + "models/persistence/persistence-meta.ts | request": { + "message": "请求" + }, + "models/persistence/persistence-meta.ts | rewrite": { + "message": "重写" + }, + "models/persistence/persistence-meta.ts | showWorkspace": { + "message": "显示工作区" + }, + "models/persistence/persistence-meta.ts | workspace": { + "message": "工作区" + }, + "models/timeline_model/TimelineIRModel.ts | twoFlingsAtTheSameTimeSVsS": { + "message": "同时快滑两次?{PH1}与 {PH2}" + }, + "models/timeline_model/TimelineIRModel.ts | twoTouchesAtTheSameTimeSVsS": { + "message": "同时轻触两次?{PH1}与 {PH2}" + }, + "models/timeline_model/TimelineJSProfile.ts | threadS": { + "message": "线程 {PH1}" + }, + "models/timeline_model/TimelineModel.ts | dedicatedWorker": { + "message": "专用 Worker" + }, + "models/timeline_model/TimelineModel.ts | threadS": { + "message": "线程 {PH1}" + }, + "models/timeline_model/TimelineModel.ts | workerS": { + "message": "Worker - {PH1}" + }, + "models/timeline_model/TimelineModel.ts | workerSS": { + "message": "Worker:{PH1} - {PH2}" + }, + "models/workspace/UISourceCode.ts | index": { + "message": "(索引)" + }, + "models/workspace/UISourceCode.ts | thisFileWasChangedExternally": { + "message": "此文件已在外部发生更改。是否要重新加载?" + }, + "panels/accessibility/ARIAAttributesView.ts | ariaAttributes": { + "message": "ARIA 属性" + }, + "panels/accessibility/ARIAAttributesView.ts | noAriaAttributes": { + "message": "没有任何 ARIA 属性" + }, + "panels/accessibility/AXBreadcrumbsPane.ts | accessibilityTree": { + "message": "无障碍功能树" + }, + "panels/accessibility/AXBreadcrumbsPane.ts | ignored": { + "message": "已忽略" + }, + "panels/accessibility/AXBreadcrumbsPane.ts | scrollIntoView": { + "message": "滚动到视野范围内" + }, + "panels/accessibility/AccessibilityNodeView.ts | accessibilityNodeNotExposed": { + "message": "未公开无障碍功能节点" + }, + "panels/accessibility/AccessibilityNodeView.ts | ancestorChildrenAreAll": { + "message": "祖先的后代均为展示性元素:" + }, + "panels/accessibility/AccessibilityNodeView.ts | computedProperties": { + "message": "计算后的属性" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementHasEmptyAltText": { + "message": "元素包含空的替代文本。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementHasPlaceholder": { + "message": "元素包含 {PH1}。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsHiddenBy": { + "message": "元素已被正在使用的模态对话框隐藏:" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsInAnInertSubTree": { + "message": "此元素位于具有 inert 属性的子树中:" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsInert": { + "message": "元素为 inert。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsNotRendered": { + "message": "元素未渲染。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsNotVisible": { + "message": "元素不可见。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsPlaceholder": { + "message": "元素为 {PH1}。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementIsPresentational": { + "message": "这是一个演示性元素。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementNotInteresting": { + "message": "无障碍功能引擎不感兴趣的元素。" + }, + "panels/accessibility/AccessibilityNodeView.ts | elementsInheritsPresentational": { + "message": "元素从以下项目继承展示性角色:" + }, + "panels/accessibility/AccessibilityNodeView.ts | invalidSource": { + "message": "来源无效。" + }, + "panels/accessibility/AccessibilityNodeView.ts | labelFor": { + "message": "标签所属元素" + }, + "panels/accessibility/AccessibilityNodeView.ts | noAccessibilityNode": { + "message": "没有无障碍功能节点" + }, + "panels/accessibility/AccessibilityNodeView.ts | noNodeWithThisId": { + "message": "未找到此 ID 对应的节点。" + }, + "panels/accessibility/AccessibilityNodeView.ts | noTextContent": { + "message": "无文本内容。" + }, + "panels/accessibility/AccessibilityNodeView.ts | notSpecified": { + "message": "未指定" + }, + "panels/accessibility/AccessibilityNodeView.ts | partOfLabelElement": { + "message": "属于标签元素:" + }, + "panels/accessibility/AccessibilityNodeView.ts | placeholderIsPlaceholderOnAncestor": { + "message": "在祖先节点上 {PH1} 为 {PH2}:" + }, + "panels/accessibility/AccessibilityStrings.ts | aHumanreadableVersionOfTheValue": { + "message": "简单易懂的范围微件值(如有必要)。" + }, + "panels/accessibility/AccessibilityStrings.ts | activeDescendant": { + "message": "活跃后代" + }, + "panels/accessibility/AccessibilityStrings.ts | atomicLiveRegions": { + "message": "Atomic(动态区域)" + }, + "panels/accessibility/AccessibilityStrings.ts | busyLiveRegions": { + "message": "Busy(动态区域)" + }, + "panels/accessibility/AccessibilityStrings.ts | canSetValue": { + "message": "可以设置值" + }, + "panels/accessibility/AccessibilityStrings.ts | checked": { + "message": "已选中" + }, + "panels/accessibility/AccessibilityStrings.ts | contents": { + "message": "目录" + }, + "panels/accessibility/AccessibilityStrings.ts | controls": { + "message": "控件" + }, + "panels/accessibility/AccessibilityStrings.ts | describedBy": { + "message": "说明元素" + }, + "panels/accessibility/AccessibilityStrings.ts | description": { + "message": "说明" + }, + "panels/accessibility/AccessibilityStrings.ts | disabled": { + "message": "已停用" + }, + "panels/accessibility/AccessibilityStrings.ts | editable": { + "message": "可修改" + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichFormThe": { + "message": "一个或多个构成此元素的说明的元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichMayFormThe": { + "message": "此元素的名称中可能包含的一个或多个元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichShouldBe": { + "message": "一个或多个应视为此元素的子项(尽管不是 DOM 中的子项)的元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhoseContentOr": { + "message": "内容或存在状态由此微件控制的一个或多个元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | elementToWhichTheUserMayChooseTo": { + "message": "用户在转到当前元素后可以选择转到的元素,而非按 DOM 顺序的下一个元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | expanded": { + "message": "已展开" + }, + "panels/accessibility/AccessibilityStrings.ts | focusable": { + "message": "可聚焦" + }, + "panels/accessibility/AccessibilityStrings.ts | focused": { + "message": "已聚焦" + }, + "panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMaximumAllowed": { + "message": "(针对范围微件)允许的最大值。" + }, + "panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMinimumAllowed": { + "message": "(针对范围微件)允许的最小值。" + }, + "panels/accessibility/AccessibilityStrings.ts | fromAttribute": { + "message": "所属的属性" + }, + "panels/accessibility/AccessibilityStrings.ts | fromCaption": { + "message": "来自 caption" + }, + "panels/accessibility/AccessibilityStrings.ts | fromDescription": { + "message": "源自:description" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLabel": { + "message": "来自 label" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLabelFor": { + "message": "来自 label(for= 属性)" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLabelWrapped": { + "message": "来自封装该元素的 label" + }, + "panels/accessibility/AccessibilityStrings.ts | fromLegend": { + "message": "来自 legend" + }, + "panels/accessibility/AccessibilityStrings.ts | fromNativeHtml": { + "message": "来自原生 HTML" + }, + "panels/accessibility/AccessibilityStrings.ts | fromPlaceholderAttribute": { + "message": "所属的占位符属性" + }, + "panels/accessibility/AccessibilityStrings.ts | fromRubyAnnotation": { + "message": "来自 Ruby 注解" + }, + "panels/accessibility/AccessibilityStrings.ts | fromStyle": { + "message": "所属样式" + }, + "panels/accessibility/AccessibilityStrings.ts | fromTitle": { + "message": "From title" + }, + "panels/accessibility/AccessibilityStrings.ts | hasAutocomplete": { + "message": "支持自动补全" + }, + "panels/accessibility/AccessibilityStrings.ts | hasPopup": { + "message": "带有弹出式组件" + }, + "panels/accessibility/AccessibilityStrings.ts | help": { + "message": "帮助" + }, + "panels/accessibility/AccessibilityStrings.ts | ifAndHowThisElementCanBeEdited": { + "message": "此元素是否可修改以及如何修改。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLive": { + "message": "如果此元素可能接收到实时更新,用户是否会在变更时看到整个实时区域,还是仅看到变更的节点。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdates": { + "message": "如果此元素可能接收到实时更新,哪些类型的更新应触发通知。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdatesThe": { + "message": "如果此元素可以收到实时更新,它即是所在动态区域的根元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCanReceiveFocus": { + "message": "若为 true,则此元素可以获得焦点。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyCannot": { + "message": "若为 true,则当前无法与此元素交互。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyHas": { + "message": "如果为 true,则表示此元素目前已获得焦点。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementMayBeInteracted": { + "message": "若为 true,那么您可以与此元素进行交互,但其值无法更改。" + }, + "panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementsUserentered": { + "message": "如果为 true,用户为此元素输入的值便不符合验证要求。" + }, + "panels/accessibility/AccessibilityStrings.ts | implicit": { + "message": "隐式" + }, + "panels/accessibility/AccessibilityStrings.ts | implicitValue": { + "message": "隐式值。" + }, + "panels/accessibility/AccessibilityStrings.ts | indicatesThePurposeOfThisElement": { + "message": "指示此元素的用途,例如微件的界面习语,或文档内的结构角色。" + }, + "panels/accessibility/AccessibilityStrings.ts | invalidUserEntry": { + "message": "用户输入无效" + }, + "panels/accessibility/AccessibilityStrings.ts | labeledBy": { + "message": "标签添加者:" + }, + "panels/accessibility/AccessibilityStrings.ts | level": { + "message": "级别" + }, + "panels/accessibility/AccessibilityStrings.ts | liveRegion": { + "message": "实时区域" + }, + "panels/accessibility/AccessibilityStrings.ts | liveRegionRoot": { + "message": "动态区域的根级" + }, + "panels/accessibility/AccessibilityStrings.ts | maximumValue": { + "message": "最大值" + }, + "panels/accessibility/AccessibilityStrings.ts | minimumValue": { + "message": "最小值" + }, + "panels/accessibility/AccessibilityStrings.ts | multiline": { + "message": "多行" + }, + "panels/accessibility/AccessibilityStrings.ts | multiselectable": { + "message": "可多选" + }, + "panels/accessibility/AccessibilityStrings.ts | orientation": { + "message": "方向" + }, + "panels/accessibility/AccessibilityStrings.ts | pressed": { + "message": "已按下" + }, + "panels/accessibility/AccessibilityStrings.ts | readonlyString": { + "message": "只读" + }, + "panels/accessibility/AccessibilityStrings.ts | relatedElement": { + "message": "相关元素" + }, + "panels/accessibility/AccessibilityStrings.ts | relevantLiveRegions": { + "message": "相关(动态区域)" + }, + "panels/accessibility/AccessibilityStrings.ts | requiredString": { + "message": "必需" + }, + "panels/accessibility/AccessibilityStrings.ts | role": { + "message": "角色" + }, + "panels/accessibility/AccessibilityStrings.ts | selectedString": { + "message": "已选择" + }, + "panels/accessibility/AccessibilityStrings.ts | theAccessibleDescriptionForThis": { + "message": "此元素的可访问说明。" + }, + "panels/accessibility/AccessibilityStrings.ts | theComputedHelpTextForThis": { + "message": "此元素经计算得出的帮助文本。" + }, + "panels/accessibility/AccessibilityStrings.ts | theComputedNameOfThisElement": { + "message": "此元素经计算得出的名称。" + }, + "panels/accessibility/AccessibilityStrings.ts | theDescendantOfThisElementWhich": { + "message": "此元素的活跃后代;即应向其委托焦点的元素。" + }, + "panels/accessibility/AccessibilityStrings.ts | theHierarchicalLevelOfThis": { + "message": "此元素的层级。" + }, + "panels/accessibility/AccessibilityStrings.ts | theValueOfThisElementThisMayBe": { + "message": "此元素的值;可以由用户或开发者提供,视元素而定。" + }, + "panels/accessibility/AccessibilityStrings.ts | value": { + "message": "值" + }, + "panels/accessibility/AccessibilityStrings.ts | valueDescription": { + "message": "值说明" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromAttribute": { + "message": "来自属性的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromDescriptionElement": { + "message": "来自 description 元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromElementContents": { + "message": "来自元素内容的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromFigcaptionElement": { + "message": "来自 figcaption 元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLabelElement": { + "message": "来自 label 元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWithFor": { + "message": "来自具有 for= 属性的 label 元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWrapped": { + "message": "来自封装该元素的 label 元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromLegendElement": { + "message": "来自 legend 元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlRuby": { + "message": "来自普通 HTML Ruby 注解的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlUnknownSource": { + "message": "来自原生 HTML 的值(未知来源)。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromPlaceholderAttribute": { + "message": "来自 placeholder 属性的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromRelatedElement": { + "message": "相关元素中的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromStyle": { + "message": "来自样式的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromTableCaption": { + "message": "来自 table caption 的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | valueFromTitleAttribute": { + "message": "来自标题属性的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherAUserMaySelectMoreThanOne": { + "message": "用户是否会从此微件选择多个选项。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherAndWhatPriorityOfLive": { + "message": "此元素是否需要实时更新以及需要何种实时更新优先级。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherAndWhatTypeOfAutocomplete": { + "message": "此元素目前是否提供了自动补全建议以及提供了何种自动补全建议。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherTheOptionRepresentedBy": { + "message": "目前是否已选择此元素所表示的选项。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherTheValueOfThisElementCan": { + "message": "是否可以设置此元素的值。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisCheckboxRadioButtonOr": { + "message": "此复选框、单选按钮或树状目录项处于选中状态、未选中状态还是混合状态(例如,既有已选中的子级,也有未选中的子级)。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementHasCausedSome": { + "message": "此元素是否导致某类内容(例如菜单)弹出。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementIsARequired": { + "message": "此元素是否为表单中的必填字段。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrAnother": { + "message": "此元素或它控制的另一个分组元素是否已展开。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrItsSubtree": { + "message": "此元素或其子树当前是否正在更新(因此可能状态不一致)。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisLinearElements": { + "message": "此线性元素的方向是水平方向还是垂直方向。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisTextBoxMayHaveMore": { + "message": "此文本框是否可以拥有超过一行内容。" + }, + "panels/accessibility/AccessibilityStrings.ts | whetherThisToggleButtonIs": { + "message": "此切换按钮当前是否处于已按下状态。" + }, + "panels/accessibility/SourceOrderView.ts | noSourceOrderInformation": { + "message": "无可用的源代码顺序信息" + }, + "panels/accessibility/SourceOrderView.ts | showSourceOrder": { + "message": "显示源代码顺序" + }, + "panels/accessibility/SourceOrderView.ts | sourceOrderViewer": { + "message": "来源顺序查看器" + }, + "panels/accessibility/SourceOrderView.ts | thereMayBeADelayInDisplaying": { + "message": "在为包含很多子项的元素显示源代码顺序时,可能会有延迟" + }, + "panels/accessibility/accessibility-meta.ts | accessibility": { + "message": "无障碍功能" + }, + "panels/accessibility/accessibility-meta.ts | shoAccessibility": { + "message": "显示“无障碍功能”" + }, + "panels/animation/AnimationTimeline.ts | animationPreviewS": { + "message": "动画预览 {PH1}" + }, + "panels/animation/AnimationTimeline.ts | animationPreviews": { + "message": "动画预览" + }, + "panels/animation/AnimationTimeline.ts | clearAll": { + "message": "全部清除" + }, + "panels/animation/AnimationTimeline.ts | pause": { + "message": "暂停" + }, + "panels/animation/AnimationTimeline.ts | pauseAll": { + "message": "全部暂停" + }, + "panels/animation/AnimationTimeline.ts | pauseTimeline": { + "message": "暂停时间轴" + }, + "panels/animation/AnimationTimeline.ts | playTimeline": { + "message": "播放时间轴" + }, + "panels/animation/AnimationTimeline.ts | playbackRatePlaceholder": { + "message": "{PH1}%" + }, + "panels/animation/AnimationTimeline.ts | playbackRates": { + "message": "播放速率" + }, + "panels/animation/AnimationTimeline.ts | replayTimeline": { + "message": "重放时间轴" + }, + "panels/animation/AnimationTimeline.ts | resumeAll": { + "message": "全部恢复" + }, + "panels/animation/AnimationTimeline.ts | selectAnEffectAboveToInspectAnd": { + "message": "从上方选择一种效果以检查和修改。" + }, + "panels/animation/AnimationTimeline.ts | setSpeedToS": { + "message": "将速度设为 {PH1}" + }, + "panels/animation/AnimationTimeline.ts | waitingForAnimations": { + "message": "正在等待动画…" + }, + "panels/animation/AnimationUI.ts | animationEndpointSlider": { + "message": "动画端点滑块" + }, + "panels/animation/AnimationUI.ts | animationKeyframeSlider": { + "message": "动画关键帧滑块" + }, + "panels/animation/AnimationUI.ts | sSlider": { + "message": "{PH1} 滑块" + }, + "panels/animation/animation-meta.ts | animations": { + "message": "动画" + }, + "panels/animation/animation-meta.ts | showAnimations": { + "message": "显示“动画”工具" + }, + "panels/application/AppManifestView.ts | aUrlInTheManifestContainsA": { + "message": "清单中的某个网址包含用户名、密码或端口" + }, + "panels/application/AppManifestView.ts | actualHeightSpxOfSSDoesNotMatch": { + "message": "{PH2} {PH3} 的实际高度({PH1} 像素)与指定高度({PH4} 像素)不匹配" + }, + "panels/application/AppManifestView.ts | actualSizeSspxOfSSDoesNotMatch": { + "message": "{PH3} {PH4} 的实际大小({PH1}×{PH2} 像素)与指定大小({PH5}×{PH6} 像素)不一致" + }, + "panels/application/AppManifestView.ts | actualWidthSpxOfSSDoesNotMatch": { + "message": "{PH2} {PH3} 的实际宽度({PH1} 像素)与指定宽度({PH4} 像素)不一致" + }, + "panels/application/AppManifestView.ts | appIdExplainer": { + "message": "浏览器会根据此 ID 判断清单是否应该更新现有应用,或者清单是否引用的是可安装的新 Web 应用。" + }, + "panels/application/AppManifestView.ts | appIdNote": { + "message": "{PH1}您未在清单中指定 {PH2},而是使用了 {PH3}。若要指定一个与当前标识符匹配的应用 ID,请将“{PH4}”字段设为 {PH5}{PH6}。" + }, + "panels/application/AppManifestView.ts | appManifest": { + "message": "应用清单" + }, + "panels/application/AppManifestView.ts | avoidPurposeAnyAndMaskable": { + "message": "最好不要使用 purpose: \"any maskable\" 来声明图标。否则,相应图标可能会因内边距过大或过小而无法在某些平台上正确显示。" + }, + "panels/application/AppManifestView.ts | backgroundColor": { + "message": "背景颜色" + }, + "panels/application/AppManifestView.ts | computedAppId": { + "message": "计算出的应用 Id" + }, + "panels/application/AppManifestView.ts | copyToClipboard": { + "message": "复制到剪贴板" + }, + "panels/application/AppManifestView.ts | couldNotCheckServiceWorker": { + "message": "如果清单不含“start_url”字段,则无法检查 service worker" + }, + "panels/application/AppManifestView.ts | couldNotDownloadARequiredIcon": { + "message": "无法从清单下载必需的图标" + }, + "panels/application/AppManifestView.ts | description": { + "message": "说明" + }, + "panels/application/AppManifestView.ts | descriptionMayBeTruncated": { + "message": "说明可能被截断了。" + }, + "panels/application/AppManifestView.ts | display": { + "message": "显示" + }, + "panels/application/AppManifestView.ts | documentationOnMaskableIcons": { + "message": "有关可遮罩式图标的文档" + }, + "panels/application/AppManifestView.ts | downloadedIconWasEmptyOr": { + "message": "下载的图标为空或已损坏" + }, + "panels/application/AppManifestView.ts | errorsAndWarnings": { + "message": "错误和警告" + }, + "panels/application/AppManifestView.ts | icon": { + "message": "图标" + }, + "panels/application/AppManifestView.ts | icons": { + "message": "图标" + }, + "panels/application/AppManifestView.ts | identity": { + "message": "身份" + }, + "panels/application/AppManifestView.ts | imageFromS": { + "message": "图片来自 {PH1}" + }, + "panels/application/AppManifestView.ts | installability": { + "message": "可安装性" + }, + "panels/application/AppManifestView.ts | learnMore": { + "message": "了解详情" + }, + "panels/application/AppManifestView.ts | manifestContainsDisplayoverride": { + "message": "清单包含“display_override”字段,并且第一个受支持的显示模式必须是“standalone”、“fullscreen”或“minimal-ui”之一" + }, + "panels/application/AppManifestView.ts | manifestCouldNotBeFetchedIsEmpty": { + "message": "清单无法提取、为空或无法解析" + }, + "panels/application/AppManifestView.ts | manifestDisplayPropertyMustBeOne": { + "message": "清单“display”属性必须是“standalone”、“fullscreen”或“minimal-ui”之一" + }, + "panels/application/AppManifestView.ts | manifestDoesNotContainANameOr": { + "message": "清单未包含“name”或“short_name”字段" + }, + "panels/application/AppManifestView.ts | manifestDoesNotContainASuitable": { + "message": "清单未包含合适的图标 - 必须提供不小于 {PH1} 像素的 PNG、SVG 或 WebP 格式图标;必须设置 sizes 属性;如果设置了 purpose 属性,其中必须包含“\"any\"”。" + }, + "panels/application/AppManifestView.ts | manifestSpecifies": { + "message": "清单中指定了 prefer_related_applications:true" + }, + "panels/application/AppManifestView.ts | manifestStartUrlIsNotValid": { + "message": "清单起始URL无效" + }, + "panels/application/AppManifestView.ts | name": { + "message": "名称" + }, + "panels/application/AppManifestView.ts | needHelpReadOurS": { + "message": "需要帮助?请阅读 {PH1} 上的文章。" + }, + "panels/application/AppManifestView.ts | newNoteUrl": { + "message": "新备注网址" + }, + "panels/application/AppManifestView.ts | noManifestDetected": { + "message": "未检测到任何清单" + }, + "panels/application/AppManifestView.ts | noMatchingServiceWorkerDetected": { + "message": "未检测到任何匹配的 service worker。您可能需要重新加载网页,或检查当前网页的 service worker 范围是否包含清单中的范围和起始网址。" + }, + "panels/application/AppManifestView.ts | noPlayStoreIdProvided": { + "message": "未提供 Play 商店 ID" + }, + "panels/application/AppManifestView.ts | noSuppliedIconIsAtLeastSpxSquare": { + "message": "未提供不小于 {PH1} 正方形像素的 PNG、SVG 或 WebP 格式图标,而且 purpose 属性设为\"any\"或未设置。" + }, + "panels/application/AppManifestView.ts | note": { + "message": "注意:" + }, + "panels/application/AppManifestView.ts | orientation": { + "message": "方向" + }, + "panels/application/AppManifestView.ts | pageDoesNotWorkOffline": { + "message": "该网页无法离线使用" + }, + "panels/application/AppManifestView.ts | pageDoesNotWorkOfflineThePage": { + "message": "该网页无法离线使用。从 Chrome 93 开始,可安装性标准已发生变化,与该网站对应的应用将不再可安装。如需了解详情,请参阅 {PH1}。" + }, + "panels/application/AppManifestView.ts | pageHasNoManifestLinkUrl": { + "message": "网页没有清单 URL" + }, + "panels/application/AppManifestView.ts | pageIsLoadedInAnIncognitoWindow": { + "message": "该网页是在无痕式窗口中加载的" + }, + "panels/application/AppManifestView.ts | pageIsNotLoadedInTheMainFrame": { + "message": "该网页不是在主框架中加载的" + }, + "panels/application/AppManifestView.ts | pageIsNotServedFromASecureOrigin": { + "message": "该网页不是从安全来源提供的" + }, + "panels/application/AppManifestView.ts | preferrelatedapplicationsIsOnly": { + "message": "仅 Android 设备上的 Chrome Beta 版和稳定版支持 prefer_related_applications。" + }, + "panels/application/AppManifestView.ts | presentation": { + "message": "演示文稿" + }, + "panels/application/AppManifestView.ts | primaryIconasUsedByChrome": { + "message": "Chrome 使用的主图标" + }, + "panels/application/AppManifestView.ts | primaryManifestIconFromS": { + "message": "来自 {PH1} 的清单主图标" + }, + "panels/application/AppManifestView.ts | sSDoesNotSpecifyItsSizeInThe": { + "message": "{PH1} {PH2} 未在清单中指定其大小" + }, + "panels/application/AppManifestView.ts | sSFailedToLoad": { + "message": "{PH1} {PH2} 无法加载" + }, + "panels/application/AppManifestView.ts | sSHeightDoesNotComplyWithRatioRequirement": { + "message": "{PH1} {PH2} 高度不能超过宽度的 2.3 倍" + }, + "panels/application/AppManifestView.ts | sSShouldHaveSquareIcon": { + "message": "大多数操作系统都需要方形图标。请在数组中包含至少一个方形图标。" + }, + "panels/application/AppManifestView.ts | sSShouldSpecifyItsSizeAs": { + "message": "{PH1} {PH2} 应将其大小指定为 [width]x[height]" + }, + "panels/application/AppManifestView.ts | sSSizeShouldBeAtLeast320": { + "message": "{PH1} {PH2} 尺寸至少应为 320×320" + }, + "panels/application/AppManifestView.ts | sSSizeShouldBeAtMost3840": { + "message": "{PH1} {PH2} 的大小不应超过 3840×3840" + }, + "panels/application/AppManifestView.ts | sSWidthDoesNotComplyWithRatioRequirement": { + "message": "{PH1} {PH2} 宽度不能超过高度的 2.3 倍" + }, + "panels/application/AppManifestView.ts | sSrcIsNotSet": { + "message": "{PH1} src 未设置" + }, + "panels/application/AppManifestView.ts | sUrlSFailedToParse": { + "message": "未能解析{PH1}网址“{PH2}”" + }, + "panels/application/AppManifestView.ts | screenshot": { + "message": "屏幕截图" + }, + "panels/application/AppManifestView.ts | screenshotPixelSize": { + "message": "屏幕截图 {url} 应将一种像素尺寸 [width]x[height](而非 \"any\")指定为尺寸列表中的第一个条目。" + }, + "panels/application/AppManifestView.ts | screenshotS": { + "message": "屏幕截图 #{PH1}" + }, + "panels/application/AppManifestView.ts | shortName": { + "message": "简称" + }, + "panels/application/AppManifestView.ts | shortcutS": { + "message": "快捷方式 {PH1}" + }, + "panels/application/AppManifestView.ts | shortcutSShouldIncludeAXPixel": { + "message": "第 {PH1} 个快捷方式应当包含 96x96 像素的图标" + }, + "panels/application/AppManifestView.ts | showOnlyTheMinimumSafeAreaFor": { + "message": "仅显示可遮盖式图标的最小安全区域" + }, + "panels/application/AppManifestView.ts | startUrl": { + "message": "起始网址" + }, + "panels/application/AppManifestView.ts | theAppIsAlreadyInstalled": { + "message": "该应用已安装" + }, + "panels/application/AppManifestView.ts | thePlayStoreAppUrlAndPlayStoreId": { + "message": "Play 商店应用网址与 Play 商店 ID 不符" + }, + "panels/application/AppManifestView.ts | theSpecifiedApplicationPlatform": { + "message": "指定的应用平台在 Android 设备上不受支持" + }, + "panels/application/AppManifestView.ts | themeColor": { + "message": "主题颜色" + }, + "panels/application/ApplicationPanelCacheSection.ts | backForwardCache": { + "message": "往返缓存" + }, + "panels/application/ApplicationPanelCacheSection.ts | cacheStorage": { + "message": "缓存空间" + }, + "panels/application/ApplicationPanelCacheSection.ts | delete": { + "message": "删除" + }, + "panels/application/ApplicationPanelCacheSection.ts | refreshCaches": { + "message": "刷新缓存" + }, + "panels/application/ApplicationPanelSidebar.ts | application": { + "message": "应用" + }, + "panels/application/ApplicationPanelSidebar.ts | backgroundServices": { + "message": "后台服务" + }, + "panels/application/ApplicationPanelSidebar.ts | cache": { + "message": "缓存" + }, + "panels/application/ApplicationPanelSidebar.ts | clear": { + "message": "清除" + }, + "panels/application/ApplicationPanelSidebar.ts | cookies": { + "message": "Cookie" + }, + "panels/application/ApplicationPanelSidebar.ts | cookiesUsedByFramesFromS": { + "message": "来自 {PH1} 的框架使用的 Cookie" + }, + "panels/application/ApplicationPanelSidebar.ts | documentNotAvailable": { + "message": "文档不可用" + }, + "panels/application/ApplicationPanelSidebar.ts | frames": { + "message": "帧" + }, + "panels/application/ApplicationPanelSidebar.ts | indexeddb": { + "message": "IndexedDB" + }, + "panels/application/ApplicationPanelSidebar.ts | keyPathS": { + "message": "关键路径:{PH1}" + }, + "panels/application/ApplicationPanelSidebar.ts | localFiles": { + "message": "本地文件" + }, + "panels/application/ApplicationPanelSidebar.ts | localStorage": { + "message": "本地存储空间" + }, + "panels/application/ApplicationPanelSidebar.ts | manifest": { + "message": "清单" + }, + "panels/application/ApplicationPanelSidebar.ts | openedWindows": { + "message": "已打开的窗口" + }, + "panels/application/ApplicationPanelSidebar.ts | refreshIndexeddb": { + "message": "刷新 IndexedDB" + }, + "panels/application/ApplicationPanelSidebar.ts | sessionStorage": { + "message": "会话存储空间" + }, + "panels/application/ApplicationPanelSidebar.ts | storage": { + "message": "存储" + }, + "panels/application/ApplicationPanelSidebar.ts | theContentOfThisDocumentHasBeen": { + "message": "已通过“document.write()”动态生成此文档的内容。" + }, + "panels/application/ApplicationPanelSidebar.ts | versionS": { + "message": "版本:{PH1}" + }, + "panels/application/ApplicationPanelSidebar.ts | versionSEmpty": { + "message": "版本:{PH1}(空)" + }, + "panels/application/ApplicationPanelSidebar.ts | webSql": { + "message": "Web SQL" + }, + "panels/application/ApplicationPanelSidebar.ts | webWorkers": { + "message": "网络工作器" + }, + "panels/application/ApplicationPanelSidebar.ts | windowWithoutTitle": { + "message": "没有标题的窗口" + }, + "panels/application/ApplicationPanelSidebar.ts | worker": { + "message": "worker" + }, + "panels/application/BackForwardCacheStrings.ts | HTTPMethodNotGET": { + "message": "只有通过 GET 请求进行加载的网页才能储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | HTTPStatusNotOK": { + "message": "只有状态代码为 2XX 的网页才能被缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | JavaScriptExecution": { + "message": "Chrome 检测到一项在储存于缓存期间执行 JavaScript 的意图。" + }, + "panels/application/BackForwardCacheStrings.ts | appBanner": { + "message": "已请求 AppBanner 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabled": { + "message": "往返缓存被相关 flag 停用了。请在此设备上访问 chrome://flags/#back-forward-cache 以从本地启用该功能。" + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledByCommandLine": { + "message": "往返缓存已被命令行停用。" + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledByLowMemory": { + "message": "因为内存不足,往返缓存已被停用。" + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledForDelegate": { + "message": "委托行为不支持往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | backForwardCacheDisabledForPrerender": { + "message": "已针对预渲染程序停用往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | broadcastChannel": { + "message": "该网页无法缓存,因为它包含的 BroadcastChannel 实例具有已注册的监听器。" + }, + "panels/application/BackForwardCacheStrings.ts | cacheControlNoStore": { + "message": "含 cache-control:no-store 标头的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | cacheFlushed": { + "message": "缓存被刻意清除了。" + }, + "panels/application/BackForwardCacheStrings.ts | cacheLimit": { + "message": "该网页被逐出了缓存,以使另一个网页能够缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | containsPlugins": { + "message": "包含插件的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentFileChooser": { + "message": "使用 FileChooser API 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentFileSystemAccess": { + "message": "使用 File System Access API 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaDevicesDispatcherHost": { + "message": "使用媒体设备调度程序的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaPlay": { + "message": "媒体播放器正在播放内容时用户就离开了网页。" + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaSession": { + "message": "使用 MediaSession API 并设置了播放状态的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentMediaSessionService": { + "message": "使用 MediaSession API 并设置了操作处理程序的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentSecurityHandler": { + "message": "使用 SecurityHandler 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentSerial": { + "message": "使用 Serial API 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentWebAuthenticationAPI": { + "message": "使用 WebAuthetication API 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentWebBluetooth": { + "message": "使用 WebBluetooth API 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | contentWebUSB": { + "message": "使用 WebUSB API 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | dedicatedWorkerOrWorklet": { + "message": "使用专用 Worker 或 Worklet 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | documentLoaded": { + "message": "该文档还未加载完毕时用户就离开了。" + }, + "panels/application/BackForwardCacheStrings.ts | embedderAppBannerManager": { + "message": "EmbedderAppBannerManager" + }, + "panels/application/BackForwardCacheStrings.ts | embedderChromePasswordManagerClientBindCredentialManager": { + "message": "EmbedderChromePasswordManagerClientBindCredentialManager" + }, + "panels/application/BackForwardCacheStrings.ts | embedderDomDistillerSelfDeletingRequestDelegate": { + "message": "EmbedderDomDistillerSelfDeletingRequestDelegate" + }, + "panels/application/BackForwardCacheStrings.ts | embedderDomDistillerViewerSource": { + "message": "EmbedderDomDistillerViewerSource" + }, + "panels/application/BackForwardCacheStrings.ts | embedderExtensionMessaging": { + "message": "EmbedderExtensionMessaging" + }, + "panels/application/BackForwardCacheStrings.ts | embedderExtensionMessagingForOpenPort": { + "message": "EmbedderExtensionMessagingForOpenPort" + }, + "panels/application/BackForwardCacheStrings.ts | embedderExtensionSentMessageToCachedFrame": { + "message": "EmbedderExtensionSentMessageToCachedFrame" + }, + "panels/application/BackForwardCacheStrings.ts | embedderExtensions": { + "message": "EmbedderExtensions" + }, + "panels/application/BackForwardCacheStrings.ts | embedderModalDialog": { + "message": "EmbedderModalDialog" + }, + "panels/application/BackForwardCacheStrings.ts | embedderOfflinePage": { + "message": "EmbedderOfflinePage" + }, + "panels/application/BackForwardCacheStrings.ts | embedderOomInterventionTabHelper": { + "message": "EmbedderOomInterventionTabHelper" + }, + "panels/application/BackForwardCacheStrings.ts | embedderPermissionRequestManager": { + "message": "EmbedderPermissionRequestManager" + }, + "panels/application/BackForwardCacheStrings.ts | embedderPopupBlockerTabHelper": { + "message": "EmbedderPopupBlockerTabHelper" + }, + "panels/application/BackForwardCacheStrings.ts | embedderSafeBrowsingThreatDetails": { + "message": "EmbedderSafeBrowsingThreatDetails" + }, + "panels/application/BackForwardCacheStrings.ts | embedderSafeBrowsingTriggeredPopupBlocker": { + "message": "EmbedderSafeBrowsingTriggeredPopupBlocker" + }, + "panels/application/BackForwardCacheStrings.ts | enteredBackForwardCacheBeforeServiceWorkerHostAdded": { + "message": "在该网页储存于往返缓存期间,有一个 Service Worker 被启用了。" + }, + "panels/application/BackForwardCacheStrings.ts | foregroundCacheLimit": { + "message": "该网页被逐出了缓存,以使另一个网页能够缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | grantedMediaStreamAccess": { + "message": "已被授予媒体流访问权的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | haveInnerContents": { + "message": "使用门户的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | idleManager": { + "message": "使用 IdleManager 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | indexedDBConnection": { + "message": "具备开放的 IndexedDB 连接的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | ineligibleAPI": { + "message": "使用了不符合条件的 API。" + }, + "panels/application/BackForwardCacheStrings.ts | injectedJavascript": { + "message": "已被扩展程序注入 JavaScript 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | injectedStyleSheet": { + "message": "已被扩展程序注入样式表的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | internalError": { + "message": "内部出错了。" + }, + "panels/application/BackForwardCacheStrings.ts | keyboardLock": { + "message": "使用“键盘锁定”功能的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | loading": { + "message": "该网页还未加载完毕时用户就离开了。" + }, + "panels/application/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoCache": { + "message": "主资源包含 ache-control:no-cache 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoStore": { + "message": "主资源包含 ache-control:no-store 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | navigationCancelledWhileRestoring": { + "message": "该网页还没从往返缓存中恢复时导航就被取消了。" + }, + "panels/application/BackForwardCacheStrings.ts | networkExceedsBufferLimit": { + "message": "该网页被逐出了缓存,因为有一项使用中的网络连接收到了太多数据。Chrome 会限制网页在缓存期间可接收的数据量。" + }, + "panels/application/BackForwardCacheStrings.ts | networkRequestDatapipeDrainedAsBytesConsumer": { + "message": "包含传输中的 fetch() 或 XHR 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | networkRequestRedirected": { + "message": "该网页被逐出了往返缓存,因为有一项使用中的网络请求涉及了重定向。" + }, + "panels/application/BackForwardCacheStrings.ts | networkRequestTimeout": { + "message": "该网页被逐出了缓存,因为有一项网络连接处于开放状态的时间太长。Chrome 会限制网页在缓存期间可接收数据的时长。" + }, + "panels/application/BackForwardCacheStrings.ts | noResponseHead": { + "message": "不含有效响应标头的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | notMainFrame": { + "message": "导航是在主框架之外的某个框架中发生的。" + }, + "panels/application/BackForwardCacheStrings.ts | optInUnloadHeaderNotPresent": { + "message": "该网页的卸载处理程序不含用以表明选择启用往返缓存的标头。" + }, + "panels/application/BackForwardCacheStrings.ts | outstandingIndexedDBTransaction": { + "message": "正在针对已建立索引的数据库处理事务的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestDirectSocket": { + "message": "包含传输中的网络请求的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestFetch": { + "message": "包含传输中的 fetch() 网络请求的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestOthers": { + "message": "包含传输中的网络请求的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | outstandingNetworkRequestXHR": { + "message": "包含传输中的 XHR 网络请求的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | paymentManager": { + "message": "使用 PaymentManager 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | pictureInPicture": { + "message": "使用“画中画”功能的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | portal": { + "message": "使用门户的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | printing": { + "message": "显示打印界面的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | relatedActiveContentsExist": { + "message": "该网页是使用 window.open() 打开的,而另一个标签页引用了该网页;或者,该网页打开了一个窗口。" + }, + "panels/application/BackForwardCacheStrings.ts | rendererProcessCrashed": { + "message": "储存在往返缓存中的网页的渲染程序进程崩溃了。" + }, + "panels/application/BackForwardCacheStrings.ts | rendererProcessKilled": { + "message": "储存于往返缓存中的网页的渲染程序进程被终止了。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedAudioCapturePermission": { + "message": "已请求音频截取权的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedBackForwardCacheBlockedSensors": { + "message": "已请求传感器使用权的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedBackgroundWorkPermission": { + "message": "已请求后台同步或提取权限的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedMIDIPermission": { + "message": "已请求 MIDI 权限的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedNotificationsPermission": { + "message": "已请求通知权限的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedStorageAccessGrant": { + "message": "已请求存储空间使用权的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | requestedVideoCapturePermission": { + "message": "已请求视频拍摄权的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | schemeNotHTTPOrHTTPS": { + "message": "只有网址架构为 HTTP / HTTPS 的网页才能被缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerClaim": { + "message": "在储存于往返缓存期间,该网页被一个 Service Worker 认领了。" + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerPostMessage": { + "message": "有一个 Service Worker 尝试向储存于往返缓存中的网页发送 MessageEvent。" + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerUnregistration": { + "message": "在网页储存于往返缓存期间,ServiceWorker 被取消注册了。" + }, + "panels/application/BackForwardCacheStrings.ts | serviceWorkerVersionActivation": { + "message": "该网页被逐出了往返缓存,因为有一个 Service Worker 被启用了。" + }, + "panels/application/BackForwardCacheStrings.ts | sessionRestored": { + "message": "Chrome 重启了,因而清除了往返缓存条目。" + }, + "panels/application/BackForwardCacheStrings.ts | sharedWorker": { + "message": "使用 SharedWorker 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | speechRecognizer": { + "message": "使用 SpeechRecognizer 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | speechSynthesis": { + "message": "使用 SpeechSynthesis 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | subframeIsNavigating": { + "message": "该网页上某个 iframe 发起的导航并未完成。" + }, + "panels/application/BackForwardCacheStrings.ts | subresourceHasCacheControlNoCache": { + "message": "子资源包含 ache-control:no-cache 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | subresourceHasCacheControlNoStore": { + "message": "子资源包含 cache-control:no-store 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | timeout": { + "message": "该网页超出了往返缓存中的储存时长上限,因而已过期。" + }, + "panels/application/BackForwardCacheStrings.ts | timeoutPuttingInCache": { + "message": "该网页在储存至往返缓存时超时了(可能是因为 pagehide 处理程序长时间运行)。" + }, + "panels/application/BackForwardCacheStrings.ts | unloadHandlerExistsInMainFrame": { + "message": "该网页的主框架中含有一款卸载处理程序。" + }, + "panels/application/BackForwardCacheStrings.ts | unloadHandlerExistsInSubFrame": { + "message": "该网页的子框架中含有一款卸载处理程序。" + }, + "panels/application/BackForwardCacheStrings.ts | userAgentOverrideDiffers": { + "message": "浏览器更改了用户代理替换标头。" + }, + "panels/application/BackForwardCacheStrings.ts | wasGrantedMediaAccess": { + "message": "已被授予视频/音频录制权的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webDatabase": { + "message": "使用 WebDatabase 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webHID": { + "message": "使用 WebHID 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webLocks": { + "message": "使用 WebLocks 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webNfc": { + "message": "使用 WebNfc 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webOTPService": { + "message": "使用 WebOTPService 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webRTC": { + "message": "使用 WebRTC 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webShare": { + "message": "使用 Webshare 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webSocket": { + "message": "使用 WebSocket 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webTransport": { + "message": "使用 WebTransport 的网页无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheStrings.ts | webXR": { + "message": "使用 WebXR 的网页目前无法储存至往返缓存。" + }, + "panels/application/BackForwardCacheView.ts | backForwardCacheTitle": { + "message": "往返缓存" + }, + "panels/application/BackForwardCacheView.ts | bfcacheStatus": { + "message": "往返缓存状态" + }, + "panels/application/BackForwardCacheView.ts | circumstantial": { + "message": "无法解决" + }, + "panels/application/BackForwardCacheView.ts | circumstantialExplanation": { + "message": "这些原因无法作为行动依据,即:缓存被阻止的原因超出了该网页的直接控制范围。" + }, + "panels/application/BackForwardCacheView.ts | mainFrame": { + "message": "主框架" + }, + "panels/application/BackForwardCacheView.ts | normalNavigation": { + "message": "正常导航(而非从往返缓存恢复)" + }, + "panels/application/BackForwardCacheView.ts | pageSupportNeeded": { + "message": "有待解决" + }, + "panels/application/BackForwardCacheView.ts | pageSupportNeededExplanation": { + "message": "这些原因可作为行动依据,即:网页在排除这些原因后便能储存至往返缓存。" + }, + "panels/application/BackForwardCacheView.ts | restoredFromBFCache": { + "message": "已从往返缓存恢复" + }, + "panels/application/BackForwardCacheView.ts | runTest": { + "message": "运行测试" + }, + "panels/application/BackForwardCacheView.ts | supportPending": { + "message": "尚不支持" + }, + "panels/application/BackForwardCacheView.ts | supportPendingExplanation": { + "message": "Chrome 将会针对这些原因提供应对支持,即:在 Chrome 的某个未来版本中,这些原因将不会阻止该网页储存至往返缓存。" + }, + "panels/application/BackForwardCacheView.ts | unavailable": { + "message": "不可用" + }, + "panels/application/BackForwardCacheView.ts | unknown": { + "message": "未知" + }, + "panels/application/BackForwardCacheView.ts | url": { + "message": "网址" + }, + "panels/application/BackgroundServiceView.ts | backgroundFetch": { + "message": "后台提取" + }, + "panels/application/BackgroundServiceView.ts | backgroundServices": { + "message": "后台服务" + }, + "panels/application/BackgroundServiceView.ts | backgroundSync": { + "message": "后台同步" + }, + "panels/application/BackgroundServiceView.ts | clear": { + "message": "清除" + }, + "panels/application/BackgroundServiceView.ts | clickTheRecordButtonSOrHitSTo": { + "message": "点击录制按钮 {PH1} 或按 {PH2} 即可开始录制。" + }, + "panels/application/BackgroundServiceView.ts | devtoolsWillRecordAllSActivity": { + "message": "对于所有{PH1}活动,DevTools 会记录最多 3 天,即使处于关闭状态也不例外。" + }, + "panels/application/BackgroundServiceView.ts | empty": { + "message": "空白" + }, + "panels/application/BackgroundServiceView.ts | event": { + "message": "事件" + }, + "panels/application/BackgroundServiceView.ts | instanceId": { + "message": "实例 ID" + }, + "panels/application/BackgroundServiceView.ts | learnMore": { + "message": "了解详情" + }, + "panels/application/BackgroundServiceView.ts | noMetadataForThisEvent": { + "message": "此事件无任何元数据" + }, + "panels/application/BackgroundServiceView.ts | notifications": { + "message": "通知" + }, + "panels/application/BackgroundServiceView.ts | origin": { + "message": "来源" + }, + "panels/application/BackgroundServiceView.ts | paymentHandler": { + "message": "付款处理程序" + }, + "panels/application/BackgroundServiceView.ts | periodicBackgroundSync": { + "message": "定期后台同步" + }, + "panels/application/BackgroundServiceView.ts | pushMessaging": { + "message": "推送消息" + }, + "panels/application/BackgroundServiceView.ts | recordingSActivity": { + "message": "正在录制{PH1}活动…" + }, + "panels/application/BackgroundServiceView.ts | saveEvents": { + "message": "保存事件" + }, + "panels/application/BackgroundServiceView.ts | selectAnEntryToViewMetadata": { + "message": "选择条目以查看元数据" + }, + "panels/application/BackgroundServiceView.ts | showEventsFromOtherDomains": { + "message": "显示其他网域的事件" + }, + "panels/application/BackgroundServiceView.ts | startRecordingEvents": { + "message": "启动录制事件" + }, + "panels/application/BackgroundServiceView.ts | stopRecordingEvents": { + "message": "停止记录事件" + }, + "panels/application/BackgroundServiceView.ts | swScope": { + "message": "Service Worker 范围" + }, + "panels/application/BackgroundServiceView.ts | timestamp": { + "message": "时间戳" + }, + "panels/application/CookieItemsView.ts | clearAllCookies": { + "message": "清除所有 Cookie" + }, + "panels/application/CookieItemsView.ts | clearFilteredCookies": { + "message": "清除过滤出的 Cookie" + }, + "panels/application/CookieItemsView.ts | cookies": { + "message": "Cookie" + }, + "panels/application/CookieItemsView.ts | numberOfCookiesShownInTableS": { + "message": "表格中显示的 Cookie 数量:{PH1}" + }, + "panels/application/CookieItemsView.ts | onlyShowCookiesWhichHaveAn": { + "message": "仅显示具有相关问题的 Cookie" + }, + "panels/application/CookieItemsView.ts | onlyShowCookiesWithAnIssue": { + "message": "仅显示有问题的 Cookie" + }, + "panels/application/CookieItemsView.ts | selectACookieToPreviewItsValue": { + "message": "选择一个 Cookie 以预览其值" + }, + "panels/application/CookieItemsView.ts | showUrlDecoded": { + "message": "显示已编码网址" + }, + "panels/application/DOMStorageItemsView.ts | domStorage": { + "message": "DOM 存储空间" + }, + "panels/application/DOMStorageItemsView.ts | domStorageItemDeleted": { + "message": "此存储项已被删除。" + }, + "panels/application/DOMStorageItemsView.ts | domStorageItems": { + "message": "DOM 存储项" + }, + "panels/application/DOMStorageItemsView.ts | domStorageNumberEntries": { + "message": "表格中显示的条目的数量:{PH1}" + }, + "panels/application/DOMStorageItemsView.ts | key": { + "message": "密钥" + }, + "panels/application/DOMStorageItemsView.ts | selectAValueToPreview": { + "message": "选择一个值以预览" + }, + "panels/application/DOMStorageItemsView.ts | value": { + "message": "值" + }, + "panels/application/DatabaseModel.ts | anUnexpectedErrorSOccurred": { + "message": "发生意外错误 {PH1}。" + }, + "panels/application/DatabaseModel.ts | databaseNoLongerHasExpected": { + "message": "数据库不再有预期版本。" + }, + "panels/application/DatabaseQueryView.ts | databaseQuery": { + "message": "数据库查询" + }, + "panels/application/DatabaseQueryView.ts | queryS": { + "message": "查询:{PH1}" + }, + "panels/application/DatabaseTableView.ts | anErrorOccurredTryingToreadTheS": { + "message": "尝试读取“{PH1}”表时发生错误。" + }, + "panels/application/DatabaseTableView.ts | database": { + "message": "数据库" + }, + "panels/application/DatabaseTableView.ts | refresh": { + "message": "刷新" + }, + "panels/application/DatabaseTableView.ts | theStableIsEmpty": { + "message": "“{PH1}”表格为空。" + }, + "panels/application/DatabaseTableView.ts | visibleColumns": { + "message": "可见列" + }, + "panels/application/IndexedDBViews.ts | clearObjectStore": { + "message": "清除对象仓库" + }, + "panels/application/IndexedDBViews.ts | collapse": { + "message": "收起" + }, + "panels/application/IndexedDBViews.ts | dataMayBeStale": { + "message": "数据可能已过时" + }, + "panels/application/IndexedDBViews.ts | deleteDatabase": { + "message": "删除数据库" + }, + "panels/application/IndexedDBViews.ts | deleteSelected": { + "message": "删除所选项" + }, + "panels/application/IndexedDBViews.ts | expandRecursively": { + "message": "以递归方式展开" + }, + "panels/application/IndexedDBViews.ts | idb": { + "message": "IDB" + }, + "panels/application/IndexedDBViews.ts | indexedDb": { + "message": "Indexed DB" + }, + "panels/application/IndexedDBViews.ts | keyGeneratorValueS": { + "message": "密钥生成器值:{PH1}" + }, + "panels/application/IndexedDBViews.ts | keyPath": { + "message": "键路径: " + }, + "panels/application/IndexedDBViews.ts | keyString": { + "message": "密钥" + }, + "panels/application/IndexedDBViews.ts | loading": { + "message": "正在加载…" + }, + "panels/application/IndexedDBViews.ts | objectStores": { + "message": "对象存储区" + }, + "panels/application/IndexedDBViews.ts | pleaseConfirmDeleteOfSDatabase": { + "message": "请确认您要删除“{PH1}”数据库。" + }, + "panels/application/IndexedDBViews.ts | primaryKey": { + "message": "主键" + }, + "panels/application/IndexedDBViews.ts | refresh": { + "message": "刷新" + }, + "panels/application/IndexedDBViews.ts | refreshDatabase": { + "message": "刷新数据库" + }, + "panels/application/IndexedDBViews.ts | securityOrigin": { + "message": "安全来源" + }, + "panels/application/IndexedDBViews.ts | showNextPage": { + "message": "显示下一页" + }, + "panels/application/IndexedDBViews.ts | showPreviousPage": { + "message": "显示上一页" + }, + "panels/application/IndexedDBViews.ts | someEntriesMayHaveBeenModified": { + "message": "部分条目可能已被修改" + }, + "panels/application/IndexedDBViews.ts | startFromKey": { + "message": "从键开始" + }, + "panels/application/IndexedDBViews.ts | totalEntriesS": { + "message": "总条目数:{PH1}" + }, + "panels/application/IndexedDBViews.ts | valueString": { + "message": "值" + }, + "panels/application/IndexedDBViews.ts | version": { + "message": "版本" + }, + "panels/application/OpenedWindowDetailsView.ts | accessToOpener": { + "message": "访问打开者" + }, + "panels/application/OpenedWindowDetailsView.ts | clickToRevealInElementsPanel": { + "message": "点击即可在“元素”面板中显示" + }, + "panels/application/OpenedWindowDetailsView.ts | closed": { + "message": "已关闭" + }, + "panels/application/OpenedWindowDetailsView.ts | crossoriginEmbedderPolicy": { + "message": "跨源嵌入器政策" + }, + "panels/application/OpenedWindowDetailsView.ts | document": { + "message": "文档" + }, + "panels/application/OpenedWindowDetailsView.ts | no": { + "message": "否" + }, + "panels/application/OpenedWindowDetailsView.ts | openerFrame": { + "message": "Opener 框架" + }, + "panels/application/OpenedWindowDetailsView.ts | reportingTo": { + "message": "报告对象:" + }, + "panels/application/OpenedWindowDetailsView.ts | security": { + "message": "安全" + }, + "panels/application/OpenedWindowDetailsView.ts | securityIsolation": { + "message": "安全与隔离" + }, + "panels/application/OpenedWindowDetailsView.ts | showsWhetherTheOpenedWindowIs": { + "message": "显示打开的窗口是否能够访问其打开者,反之亦然" + }, + "panels/application/OpenedWindowDetailsView.ts | type": { + "message": "类型" + }, + "panels/application/OpenedWindowDetailsView.ts | unknown": { + "message": "未知" + }, + "panels/application/OpenedWindowDetailsView.ts | url": { + "message": "网址" + }, + "panels/application/OpenedWindowDetailsView.ts | webWorker": { + "message": "网络工作器" + }, + "panels/application/OpenedWindowDetailsView.ts | windowWithoutTitle": { + "message": "没有标题的窗口" + }, + "panels/application/OpenedWindowDetailsView.ts | worker": { + "message": "worker" + }, + "panels/application/OpenedWindowDetailsView.ts | yes": { + "message": "是" + }, + "panels/application/ReportingApiReportsView.ts | clickToDisplayBody": { + "message": "点击任一报告即可显示相应正文" + }, + "panels/application/ReportingApiTreeElement.ts | reportingApi": { + "message": "报告 API" + }, + "panels/application/ServiceWorkerCacheViews.ts | cache": { + "message": "缓存" + }, + "panels/application/ServiceWorkerCacheViews.ts | deleteSelected": { + "message": "删除所选项" + }, + "panels/application/ServiceWorkerCacheViews.ts | filterByPath": { + "message": "按路径过滤" + }, + "panels/application/ServiceWorkerCacheViews.ts | headers": { + "message": "标头" + }, + "panels/application/ServiceWorkerCacheViews.ts | matchingEntriesS": { + "message": "匹配的条目数:{PH1}" + }, + "panels/application/ServiceWorkerCacheViews.ts | name": { + "message": "名称" + }, + "panels/application/ServiceWorkerCacheViews.ts | preview": { + "message": "预览" + }, + "panels/application/ServiceWorkerCacheViews.ts | refresh": { + "message": "刷新" + }, + "panels/application/ServiceWorkerCacheViews.ts | selectACacheEntryAboveToPreview": { + "message": "选择上方的缓存条目进行预览" + }, + "panels/application/ServiceWorkerCacheViews.ts | serviceWorkerCache": { + "message": "Service Worker 缓存" + }, + "panels/application/ServiceWorkerCacheViews.ts | timeCached": { + "message": "缓存时长" + }, + "panels/application/ServiceWorkerCacheViews.ts | totalEntriesS": { + "message": "总条目数:{PH1}" + }, + "panels/application/ServiceWorkerCacheViews.ts | varyHeaderWarning": { + "message": "⚠️ 匹配此条目时将 ignoreVary 设为 true" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | endTimeS": { + "message": "结束时间:{PH1}" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | startTimeS": { + "message": "开始时间:{PH1}" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | timeline": { + "message": "时间轴" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | updateActivity": { + "message": "更新活动" + }, + "panels/application/ServiceWorkerUpdateCycleView.ts | version": { + "message": "版本" + }, + "panels/application/ServiceWorkersView.ts | bypassForNetwork": { + "message": "绕过以转到网络" + }, + "panels/application/ServiceWorkersView.ts | bypassTheServiceWorkerAndLoad": { + "message": "绕过 service worker 并从网络加载资源" + }, + "panels/application/ServiceWorkersView.ts | clients": { + "message": "客户端" + }, + "panels/application/ServiceWorkersView.ts | focus": { + "message": "聚焦" + }, + "panels/application/ServiceWorkersView.ts | inspect": { + "message": "检查" + }, + "panels/application/ServiceWorkersView.ts | networkRequests": { + "message": "网络请求" + }, + "panels/application/ServiceWorkersView.ts | onPageReloadForceTheService": { + "message": "网页重新加载时,强制更新并激活 service worker" + }, + "panels/application/ServiceWorkersView.ts | periodicSync": { + "message": "定期同步" + }, + "panels/application/ServiceWorkersView.ts | periodicSyncTag": { + "message": "定期同步标记" + }, + "panels/application/ServiceWorkersView.ts | pushData": { + "message": "推送数据" + }, + "panels/application/ServiceWorkersView.ts | pushString": { + "message": "推送" + }, + "panels/application/ServiceWorkersView.ts | receivedS": { + "message": "接收时间:{PH1}" + }, + "panels/application/ServiceWorkersView.ts | sActivatedAndIsS": { + "message": "已激活 #{PH1} 次,当前{PH2}" + }, + "panels/application/ServiceWorkersView.ts | sDeleted": { + "message": "{PH1} - 已删除" + }, + "panels/application/ServiceWorkersView.ts | sIsRedundant": { + "message": "第 {PH1} 项为多余项" + }, + "panels/application/ServiceWorkersView.ts | sRegistrationErrors": { + "message": "{PH1} 个注册错误" + }, + "panels/application/ServiceWorkersView.ts | sTryingToInstall": { + "message": "#{PH1} 正在尝试安装" + }, + "panels/application/ServiceWorkersView.ts | sWaitingToActivate": { + "message": "#{PH1} 个正在等待激活" + }, + "panels/application/ServiceWorkersView.ts | seeAllRegistrations": { + "message": "查看所有注册" + }, + "panels/application/ServiceWorkersView.ts | serviceWorkerForS": { + "message": "{PH1} 的 Service worker" + }, + "panels/application/ServiceWorkersView.ts | serviceWorkersFromOtherOrigins": { + "message": "来自其他来源的 Service Worker" + }, + "panels/application/ServiceWorkersView.ts | source": { + "message": "来源" + }, + "panels/application/ServiceWorkersView.ts | startString": { + "message": "开始" + }, + "panels/application/ServiceWorkersView.ts | status": { + "message": "状态" + }, + "panels/application/ServiceWorkersView.ts | stopString": { + "message": "停止" + }, + "panels/application/ServiceWorkersView.ts | syncString": { + "message": "同步" + }, + "panels/application/ServiceWorkersView.ts | syncTag": { + "message": "同步标记" + }, + "panels/application/ServiceWorkersView.ts | testPushMessageFromDevtools": { + "message": "测试来自 DevTools 的推送消息。" + }, + "panels/application/ServiceWorkersView.ts | unregister": { + "message": "取消注册" + }, + "panels/application/ServiceWorkersView.ts | unregisterServiceWorker": { + "message": "取消注册 Service Worker" + }, + "panels/application/ServiceWorkersView.ts | update": { + "message": "更新" + }, + "panels/application/ServiceWorkersView.ts | updateCycle": { + "message": "更新周期" + }, + "panels/application/ServiceWorkersView.ts | updateOnReload": { + "message": "重新加载时更新" + }, + "panels/application/ServiceWorkersView.ts | workerS": { + "message": "工作器:{PH1}" + }, + "panels/application/StorageItemsView.ts | clearAll": { + "message": "全部清除" + }, + "panels/application/StorageItemsView.ts | deleteSelected": { + "message": "删除所选项" + }, + "panels/application/StorageItemsView.ts | filter": { + "message": "过滤" + }, + "panels/application/StorageItemsView.ts | refresh": { + "message": "刷新" + }, + "panels/application/StorageItemsView.ts | refreshedStatus": { + "message": "已刷新表" + }, + "panels/application/StorageView.ts | application": { + "message": "应用" + }, + "panels/application/StorageView.ts | cache": { + "message": "缓存" + }, + "panels/application/StorageView.ts | cacheStorage": { + "message": "缓存空间" + }, + "panels/application/StorageView.ts | clearSiteData": { + "message": "清除网站数据" + }, + "panels/application/StorageView.ts | clearing": { + "message": "正在清除…" + }, + "panels/application/StorageView.ts | cookies": { + "message": "Cookie" + }, + "panels/application/StorageView.ts | fileSystem": { + "message": "文件系统" + }, + "panels/application/StorageView.ts | includingThirdPartyCookies": { + "message": "包括第三方 Cookie" + }, + "panels/application/StorageView.ts | indexDB": { + "message": "IndexedDB" + }, + "panels/application/StorageView.ts | internalError": { + "message": "内部错误" + }, + "panels/application/StorageView.ts | learnMore": { + "message": "了解详情" + }, + "panels/application/StorageView.ts | localAndSessionStorage": { + "message": "本地存储空间和会话存储空间" + }, + "panels/application/StorageView.ts | mb": { + "message": "MB" + }, + "panels/application/StorageView.ts | numberMustBeNonNegative": { + "message": "数字必须是非负数" + }, + "panels/application/StorageView.ts | other": { + "message": "其他" + }, + "panels/application/StorageView.ts | pleaseEnterANumber": { + "message": "请输入一个数字" + }, + "panels/application/StorageView.ts | sFailedToLoad": { + "message": "{PH1}(无法加载)" + }, + "panels/application/StorageView.ts | serviceWorkers": { + "message": "Service Worker" + }, + "panels/application/StorageView.ts | simulateCustomStorage": { + "message": "模拟自定义存储空间配额" + }, + "panels/application/StorageView.ts | storageQuotaIsLimitedIn": { + "message": "在无痕模式下,存储空间配额有限。" + }, + "panels/application/StorageView.ts | storageQuotaUsed": { + "message": "已使用 {PH1} 存储空间配额,共 {PH2}" + }, + "panels/application/StorageView.ts | storageQuotaUsedWithBytes": { + "message": "已使用 {PH1} 字节(共 {PH2} 字节存储空间配额)" + }, + "panels/application/StorageView.ts | storageTitle": { + "message": "存储" + }, + "panels/application/StorageView.ts | storageUsage": { + "message": "存储空间用量" + }, + "panels/application/StorageView.ts | storageWithCustomMarker": { + "message": "{PH1}(自定义)" + }, + "panels/application/StorageView.ts | unregisterServiceWorker": { + "message": "取消注册 Service Worker" + }, + "panels/application/StorageView.ts | usage": { + "message": "用量" + }, + "panels/application/StorageView.ts | webSql": { + "message": "Web SQL" + }, + "panels/application/TrustTokensTreeElement.ts | trustTokens": { + "message": "信任令牌" + }, + "panels/application/application-meta.ts | application": { + "message": "应用" + }, + "panels/application/application-meta.ts | clearSiteData": { + "message": "清除网站数据" + }, + "panels/application/application-meta.ts | clearSiteDataIncludingThirdparty": { + "message": "清除网站数据(包括第三方 Cookie)" + }, + "panels/application/application-meta.ts | pwa": { + "message": "pwa" + }, + "panels/application/application-meta.ts | showApplication": { + "message": "显示应用" + }, + "panels/application/application-meta.ts | startRecordingEvents": { + "message": "启动录制事件" + }, + "panels/application/application-meta.ts | stopRecordingEvents": { + "message": "停止记录事件" + }, + "panels/application/components/EndpointsGrid.ts | noEndpointsToDisplay": { + "message": "没有可显示的端点" + }, + "panels/application/components/FrameDetailsView.ts | aFrameAncestorIsAnInsecure": { + "message": "祖先框架是非安全上下文" + }, + "panels/application/components/FrameDetailsView.ts | adStatus": { + "message": "广告状态" + }, + "panels/application/components/FrameDetailsView.ts | additionalInformation": { + "message": "其他信息" + }, + "panels/application/components/FrameDetailsView.ts | apiAvailability": { + "message": "API 可用性" + }, + "panels/application/components/FrameDetailsView.ts | availabilityOfCertainApisDepends": { + "message": "某些 API 的可用性取决于正在被跨源隔离的文档。" + }, + "panels/application/components/FrameDetailsView.ts | available": { + "message": "可用" + }, + "panels/application/components/FrameDetailsView.ts | availableNotTransferable": { + "message": "可用,不可传输" + }, + "panels/application/components/FrameDetailsView.ts | availableTransferable": { + "message": "可用,可传输" + }, + "panels/application/components/FrameDetailsView.ts | child": { + "message": "子级" + }, + "panels/application/components/FrameDetailsView.ts | childDescription": { + "message": "此框架已被识别为某个广告的子框架" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInElementsPanel": { + "message": "点击即可在“元素”面板中显示" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanel": { + "message": "点击即可在“网络”面板中显示" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanelMight": { + "message": "点击即可在“网络”面板中显示(可能需要重新加载页面)" + }, + "panels/application/components/FrameDetailsView.ts | clickToRevealInSourcesPanel": { + "message": "点击即可在“来源”面板中显示" + }, + "panels/application/components/FrameDetailsView.ts | createdByAdScriptExplanation": { + "message": "创建此框架时使用的(异步)堆栈中有广告脚本。检查此框架的创建堆栈轨迹或许有助于深入了解这一问题。" + }, + "panels/application/components/FrameDetailsView.ts | creationStackTrace": { + "message": "框架创建堆栈轨迹" + }, + "panels/application/components/FrameDetailsView.ts | creationStackTraceExplanation": { + "message": "此框架是以编程方式创建的。堆栈轨迹会显示此操作的发生位置。" + }, + "panels/application/components/FrameDetailsView.ts | crossoriginEmbedderPolicy": { + "message": "跨源嵌入器政策" + }, + "panels/application/components/FrameDetailsView.ts | crossoriginIsolated": { + "message": "已跨源隔离" + }, + "panels/application/components/FrameDetailsView.ts | crossoriginOpenerPolicy": { + "message": "跨源打开者政策" + }, + "panels/application/components/FrameDetailsView.ts | document": { + "message": "文档" + }, + "panels/application/components/FrameDetailsView.ts | frameId": { + "message": "框架 ID" + }, + "panels/application/components/FrameDetailsView.ts | learnMore": { + "message": "了解详情" + }, + "panels/application/components/FrameDetailsView.ts | localhostIsAlwaysASecureContext": { + "message": "Localhost 始终是安全的情境" + }, + "panels/application/components/FrameDetailsView.ts | matchedBlockingRuleExplanation": { + "message": "此框架被视为广告框架,因为它目前(或以前)的主文档是广告资源。" + }, + "panels/application/components/FrameDetailsView.ts | measureMemory": { + "message": "衡量内存" + }, + "panels/application/components/FrameDetailsView.ts | no": { + "message": "否" + }, + "panels/application/components/FrameDetailsView.ts | origin": { + "message": "来源" + }, + "panels/application/components/FrameDetailsView.ts | originTrials": { + "message": "源试用" + }, + "panels/application/components/FrameDetailsView.ts | ownerElement": { + "message": "所有者元素" + }, + "panels/application/components/FrameDetailsView.ts | parentIsAdExplanation": { + "message": "此框架被视为广告框架,因为它的父框架是广告框架。" + }, + "panels/application/components/FrameDetailsView.ts | reportingTo": { + "message": "报告对象:" + }, + "panels/application/components/FrameDetailsView.ts | requiresCrossoriginIsolated": { + "message": "需要跨域隔离的上下文" + }, + "panels/application/components/FrameDetailsView.ts | root": { + "message": "根" + }, + "panels/application/components/FrameDetailsView.ts | rootDescription": { + "message": "此框架已被识别为广告的根框架" + }, + "panels/application/components/FrameDetailsView.ts | secureContext": { + "message": "安全上下文" + }, + "panels/application/components/FrameDetailsView.ts | securityIsolation": { + "message": "安全与隔离" + }, + "panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIs": { + "message": "可以使用 SharedArrayBuffer 构造函数,且可通过 postMessage 传输 SAB" + }, + "panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIsAvailable": { + "message": "可以使用 SharedArrayBuffer 构造函数,但无法通过 postMessage 传输 SAB" + }, + "panels/application/components/FrameDetailsView.ts | theFramesSchemeIsInsecure": { + "message": "框架的架构不安全" + }, + "panels/application/components/FrameDetailsView.ts | thePerformanceAPI": { + "message": "performance.measureUserAgentSpecificMemory() API 可用" + }, + "panels/application/components/FrameDetailsView.ts | thePerformancemeasureuseragentspecificmemory": { + "message": "performance.measureUserAgentSpecificMemory() API 不可用" + }, + "panels/application/components/FrameDetailsView.ts | thisAdditionalDebugging": { + "message": "显示此额外(调试)信息是因为已启用“协议监视器”实验。" + }, + "panels/application/components/FrameDetailsView.ts | transferRequiresCrossoriginIsolatedPermission": { + "message": "若要传输 SharedArrayBuffer,必须启用以下权限政策:" + }, + "panels/application/components/FrameDetailsView.ts | unavailable": { + "message": "不可用" + }, + "panels/application/components/FrameDetailsView.ts | unreachableUrl": { + "message": "无法访问的网址" + }, + "panels/application/components/FrameDetailsView.ts | url": { + "message": "网址" + }, + "panels/application/components/FrameDetailsView.ts | willRequireCrossoriginIsolated": { + "message": "⚠️ 未来将需要跨源隔离上下文" + }, + "panels/application/components/FrameDetailsView.ts | yes": { + "message": "是" + }, + "panels/application/components/OriginTrialTreeView.ts | expiryTime": { + "message": "到期时间" + }, + "panels/application/components/OriginTrialTreeView.ts | isThirdParty": { + "message": "第三方" + }, + "panels/application/components/OriginTrialTreeView.ts | matchSubDomains": { + "message": "子域名匹配" + }, + "panels/application/components/OriginTrialTreeView.ts | origin": { + "message": "源" + }, + "panels/application/components/OriginTrialTreeView.ts | rawTokenText": { + "message": "原始令牌" + }, + "panels/application/components/OriginTrialTreeView.ts | status": { + "message": "令牌状态" + }, + "panels/application/components/OriginTrialTreeView.ts | token": { + "message": "令牌" + }, + "panels/application/components/OriginTrialTreeView.ts | tokens": { + "message": "{PH1} 个令牌" + }, + "panels/application/components/OriginTrialTreeView.ts | trialName": { + "message": "试用版名称" + }, + "panels/application/components/OriginTrialTreeView.ts | usageRestriction": { + "message": "使用限制" + }, + "panels/application/components/PermissionsPolicySection.ts | allowedFeatures": { + "message": "允许的功能" + }, + "panels/application/components/PermissionsPolicySection.ts | clickToShowHeader": { + "message": "点击即可显示哪项请求的“Permissions-Policy”HTTP 标头会停用此功能。" + }, + "panels/application/components/PermissionsPolicySection.ts | clickToShowIframe": { + "message": "点击即可在“元素”面板中显示不允许使用此功能的最顶部 iframe。" + }, + "panels/application/components/PermissionsPolicySection.ts | disabledByHeader": { + "message": "已被“Permissions-Policy”标头停用" + }, + "panels/application/components/PermissionsPolicySection.ts | disabledByIframe": { + "message": "未纳入 iframe 的“allow”属性中" + }, + "panels/application/components/PermissionsPolicySection.ts | disabledFeatures": { + "message": "停用的功能" + }, + "panels/application/components/PermissionsPolicySection.ts | hideDetails": { + "message": "隐藏详细信息" + }, + "panels/application/components/PermissionsPolicySection.ts | showDetails": { + "message": "显示详细信息" + }, + "panels/application/components/ReportsGrid.ts | noReportsToDisplay": { + "message": "没有可显示的报告" + }, + "panels/application/components/StackTrace.ts | cannotRenderStackTrace": { + "message": "无法渲染堆栈轨迹" + }, + "panels/application/components/StackTrace.ts | showSMoreFrames": { + "message": "{n,plural, =1{显示另外 # 个框架}other{显示另外 # 个框架}}" + }, + "panels/application/components/TrustTokensView.ts | allStoredTrustTokensAvailableIn": { + "message": "在此浏览器实例中可用的所有已存储信任令牌。" + }, + "panels/application/components/TrustTokensView.ts | deleteTrustTokens": { + "message": "删除 {PH1} 上提供的所有已存储信任令牌。" + }, + "panels/application/components/TrustTokensView.ts | issuer": { + "message": "颁发者" + }, + "panels/application/components/TrustTokensView.ts | noTrustTokensStored": { + "message": "尚未存储任何信任令牌。" + }, + "panels/application/components/TrustTokensView.ts | storedTokenCount": { + "message": "已存储的令牌数" + }, + "panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts | breakpointHit": { + "message": "断点命中" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | attributeModified": { + "message": "已修改属性" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakOn": { + "message": "发生中断的条件" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointHit": { + "message": "断点命中" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointRemoved": { + "message": "移除了断点" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | breakpointSet": { + "message": "断点设置" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | checked": { + "message": "已勾选" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | domBreakpointsList": { + "message": "DOM 断点列表" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | noBreakpoints": { + "message": "无断点" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | nodeRemoved": { + "message": "节点已移除" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeAllDomBreakpoints": { + "message": "移除所有 DOM 断点" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | removeBreakpoint": { + "message": "移除断点" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | revealDomNodeInElementsPanel": { + "message": "在“元素”面板中显示 DOM 节点" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sBreakpointHit": { + "message": "遇到{PH1}断点" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | sS": { + "message": "{PH1}:{PH2}" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | subtreeModified": { + "message": "已修改子树" + }, + "panels/browser_debugger/DOMBreakpointsSidebarPane.ts | unchecked": { + "message": "未选中" + }, + "panels/browser_debugger/ObjectEventListenersSidebarPane.ts | refreshGlobalListeners": { + "message": "刷新全局监听器" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addBreakpoint": { + "message": "添加断点" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | addXhrfetchBreakpoint": { + "message": "添加 XHR/Fetch 断点" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | anyXhrOrFetch": { + "message": "任何 XHR 或提取" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakWhenUrlContains": { + "message": "网址包含以下内容时中断:" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | breakpointHit": { + "message": "断点命中" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | noBreakpoints": { + "message": "无断点" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeAllBreakpoints": { + "message": "移除所有断点" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | removeBreakpoint": { + "message": "移除断点" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlBreakpoint": { + "message": "网址断点" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | urlContainsS": { + "message": "网址包含“{PH1}”" + }, + "panels/browser_debugger/XHRBreakpointsSidebarPane.ts | xhrfetchBreakpoints": { + "message": "XHR/提取断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | contentScripts": { + "message": "内容脚本" + }, + "panels/browser_debugger/browser_debugger-meta.ts | cspViolationBreakpoints": { + "message": "CSP 违规断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | domBreakpoints": { + "message": "DOM 断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | eventListenerBreakpoints": { + "message": "事件监听器断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | globalListeners": { + "message": "全局监听器" + }, + "panels/browser_debugger/browser_debugger-meta.ts | overrides": { + "message": "替换" + }, + "panels/browser_debugger/browser_debugger-meta.ts | page": { + "message": "网页" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showContentScripts": { + "message": "显示内容脚本" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showCspViolationBreakpoints": { + "message": "显示 CSP 违规断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showDomBreakpoints": { + "message": "显示 DOM 断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showEventListenerBreakpoints": { + "message": "显示事件监听器断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showGlobalListeners": { + "message": "显示“全局监听器\"" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showOverrides": { + "message": "显示“替换”工具" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showPage": { + "message": "显示“网页”标签页" + }, + "panels/browser_debugger/browser_debugger-meta.ts | showXhrfetchBreakpoints": { + "message": "显示 XHR/提取断点" + }, + "panels/browser_debugger/browser_debugger-meta.ts | xhrfetchBreakpoints": { + "message": "XHR/提取断点" + }, + "panels/changes/ChangesSidebar.ts | sFromSourceMap": { + "message": "{PH1}(来自来源映射)" + }, + "panels/changes/ChangesView.ts | binaryData": { + "message": "二进制数据" + }, + "panels/changes/ChangesView.ts | noChanges": { + "message": "无更改" + }, + "panels/changes/ChangesView.ts | revertAllChangesToCurrentFile": { + "message": "还原对当前文件所做的所有更改" + }, + "panels/changes/ChangesView.ts | sDeletions": { + "message": "{n,plural, =1{# 行删除代码 (-)}other{# 行删除代码 (-)}}" + }, + "panels/changes/ChangesView.ts | sInsertions": { + "message": "{n,plural, =1{# 行插入代码 (+)}other{# 行插入代码 (+)}}" + }, + "panels/changes/changes-meta.ts | changes": { + "message": "变更" + }, + "panels/changes/changes-meta.ts | showChanges": { + "message": "显示“更改”工具" + }, + "panels/console/ConsoleContextSelector.ts | extension": { + "message": "扩展程序" + }, + "panels/console/ConsoleContextSelector.ts | javascriptContextNotSelected": { + "message": "JavaScript 上下文:未选择" + }, + "panels/console/ConsoleContextSelector.ts | javascriptContextS": { + "message": "JavaScript 上下文:{PH1}" + }, + "panels/console/ConsolePinPane.ts | evaluateAllowingSideEffects": { + "message": "评估,允许有副作用" + }, + "panels/console/ConsolePinPane.ts | expression": { + "message": "表达式" + }, + "panels/console/ConsolePinPane.ts | liveExpressionEditor": { + "message": "实时表达式编辑器" + }, + "panels/console/ConsolePinPane.ts | notAvailable": { + "message": "不可用" + }, + "panels/console/ConsolePinPane.ts | removeAllExpressions": { + "message": "移除所有表达式" + }, + "panels/console/ConsolePinPane.ts | removeBlankExpression": { + "message": "移除空白表达式" + }, + "panels/console/ConsolePinPane.ts | removeExpression": { + "message": "移除表达式" + }, + "panels/console/ConsolePinPane.ts | removeExpressionS": { + "message": "移除表达式:{PH1}" + }, + "panels/console/ConsolePrompt.ts | consolePrompt": { + "message": "控制台提示" + }, + "panels/console/ConsoleSidebar.ts | dErrors": { + "message": "{n,plural, =0{无错误}=1{# 个错误}other{# 个错误}}" + }, + "panels/console/ConsoleSidebar.ts | dInfo": { + "message": "{n,plural, =0{无信息}=1{# 条信息}other{# 条信息}}" + }, + "panels/console/ConsoleSidebar.ts | dMessages": { + "message": "{n,plural, =0{没有任何消息}=1{# 条消息}other{# 条消息}}" + }, + "panels/console/ConsoleSidebar.ts | dUserMessages": { + "message": "{n,plural, =0{没有用户消息}=1{# 条用户消息}other{# 条用户消息}}" + }, + "panels/console/ConsoleSidebar.ts | dVerbose": { + "message": "{n,plural, =0{无详细消息}=1{# 条详细消息}other{# 条详细消息}}" + }, + "panels/console/ConsoleSidebar.ts | dWarnings": { + "message": "{n,plural, =0{无警告}=1{# 条警告}other{# 条警告}}" + }, + "panels/console/ConsoleSidebar.ts | other": { + "message": "<其他>" + }, + "panels/console/ConsoleView.ts | allLevels": { + "message": "所有级别" + }, + "panels/console/ConsoleView.ts | consoleCleared": { + "message": "已清除控制台" + }, + "panels/console/ConsoleView.ts | consoleSettings": { + "message": "控制台设置" + }, + "panels/console/ConsoleView.ts | copyVisibleStyledSelection": { + "message": "复制带有可见样式的选择内容" + }, + "panels/console/ConsoleView.ts | customLevels": { + "message": "自定义级别" + }, + "panels/console/ConsoleView.ts | default": { + "message": "默认" + }, + "panels/console/ConsoleView.ts | defaultLevels": { + "message": "默认级别" + }, + "panels/console/ConsoleView.ts | doNotClearLogOnPageReload": { + "message": "网页重新加载/导航时不清除日志" + }, + "panels/console/ConsoleView.ts | eagerlyEvaluateTextInThePrompt": { + "message": "及早评估提示文字" + }, + "panels/console/ConsoleView.ts | egEventdCdnUrlacom": { + "message": "例如:/eventd/ -cdn url:a.com" + }, + "panels/console/ConsoleView.ts | errors": { + "message": "错误" + }, + "panels/console/ConsoleView.ts | filter": { + "message": "过滤" + }, + "panels/console/ConsoleView.ts | filteredMessagesInConsole": { + "message": "控制台中有 {PH1} 条消息" + }, + "panels/console/ConsoleView.ts | findStringInLogs": { + "message": "在日志中查找字符串" + }, + "panels/console/ConsoleView.ts | groupSimilarMessagesInConsole": { + "message": "在控制台中对相似消息进行分组" + }, + "panels/console/ConsoleView.ts | hideAll": { + "message": "隐藏全部" + }, + "panels/console/ConsoleView.ts | hideConsoleSidebar": { + "message": "隐藏控制台边栏" + }, + "panels/console/ConsoleView.ts | hideMessagesFromS": { + "message": "隐藏来自 {PH1} 的消息" + }, + "panels/console/ConsoleView.ts | hideNetwork": { + "message": "隐藏网络" + }, + "panels/console/ConsoleView.ts | info": { + "message": "信息" + }, + "panels/console/ConsoleView.ts | issueToolbarClickToGoToTheIssuesTab": { + "message": "点击即可转到“问题”标签页" + }, + "panels/console/ConsoleView.ts | issueToolbarClickToView": { + "message": "点击即可查看 {issueEnumeration}" + }, + "panels/console/ConsoleView.ts | issueToolbarTooltipGeneral": { + "message": "某些问题不再生成控制台消息,但会显示在“问题”标签页中。" + }, + "panels/console/ConsoleView.ts | issuesWithColon": { + "message": "{n,plural, =0{无问题}=1{# 个问题:}other{# 个问题:}}" + }, + "panels/console/ConsoleView.ts | logLevelS": { + "message": "日志级别:{PH1}" + }, + "panels/console/ConsoleView.ts | logLevels": { + "message": "日志级别" + }, + "panels/console/ConsoleView.ts | onlyShowMessagesFromTheCurrentContext": { + "message": "仅显示来自当前上下文(top、iframe、worker、扩展程序)的消息" + }, + "panels/console/ConsoleView.ts | overriddenByFilterSidebar": { + "message": "已被过滤器边栏覆盖" + }, + "panels/console/ConsoleView.ts | preserveLog": { + "message": "保留日志" + }, + "panels/console/ConsoleView.ts | replayXhr": { + "message": "重放 XHR" + }, + "panels/console/ConsoleView.ts | sHidden": { + "message": "{n,plural, =1{# 条已隐藏}other{# 条已隐藏}}" + }, + "panels/console/ConsoleView.ts | sOnly": { + "message": "仅限{PH1}" + }, + "panels/console/ConsoleView.ts | saveAs": { + "message": "另存为…" + }, + "panels/console/ConsoleView.ts | searching": { + "message": "正在搜索…" + }, + "panels/console/ConsoleView.ts | selectedContextOnly": { + "message": "仅限已选择的上下文" + }, + "panels/console/ConsoleView.ts | showConsoleSidebar": { + "message": "显示控制台边栏" + }, + "panels/console/ConsoleView.ts | showCorsErrorsInConsole": { + "message": "在控制台中显示CORS错误" + }, + "panels/console/ConsoleView.ts | verbose": { + "message": "详细" + }, + "panels/console/ConsoleView.ts | warnings": { + "message": "警告" + }, + "panels/console/ConsoleView.ts | writingFile": { + "message": "正在写入文件…" + }, + "panels/console/ConsoleViewMessage.ts | Mxx": { + "message": " M" + }, + "panels/console/ConsoleViewMessage.ts | assertionFailed": { + "message": "断言失败: " + }, + "panels/console/ConsoleViewMessage.ts | attribute": { + "message": "" + }, + "panels/console/ConsoleViewMessage.ts | clearAllMessagesWithS": { + "message": "使用 {PH1} 清除所有消息" + }, + "panels/console/ConsoleViewMessage.ts | console": { + "message": "控制台" + }, + "panels/console/ConsoleViewMessage.ts | consoleWasCleared": { + "message": "控制台数据已被清除" + }, + "panels/console/ConsoleViewMessage.ts | consoleclearWasPreventedDueTo": { + "message": "由于要“保留日志”,系统已阻止 console.clear() 发挥作用" + }, + "panels/console/ConsoleViewMessage.ts | deprecationS": { + "message": "[Deprecation] {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | error": { + "message": "错误" + }, + "panels/console/ConsoleViewMessage.ts | errorS": { + "message": "{n,plural, =1{错误,已重复 # 次}other{错误,已重复 # 次}}" + }, + "panels/console/ConsoleViewMessage.ts | exception": { + "message": "" + }, + "panels/console/ConsoleViewMessage.ts | functionWasResolvedFromBound": { + "message": "函数已根据绑定的函数进行解析。" + }, + "panels/console/ConsoleViewMessage.ts | index": { + "message": "(索引)" + }, + "panels/console/ConsoleViewMessage.ts | interventionS": { + "message": "[Intervention] {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | repeatS": { + "message": "{n,plural, =1{已重复 # 次}other{已重复 # 次}}" + }, + "panels/console/ConsoleViewMessage.ts | someEvent": { + "message": "<某些> 事件" + }, + "panels/console/ConsoleViewMessage.ts | stackMessageCollapsed": { + "message": "堆栈表格已收起" + }, + "panels/console/ConsoleViewMessage.ts | stackMessageExpanded": { + "message": "堆栈表格已展开" + }, + "panels/console/ConsoleViewMessage.ts | thisValueWasEvaluatedUponFirst": { + "message": "此值是在第一次展开时评估得出的。之后可能已发生更改。" + }, + "panels/console/ConsoleViewMessage.ts | thisValueWillNotBeCollectedUntil": { + "message": "在清除控制台之前,系统不会收集此值。" + }, + "panels/console/ConsoleViewMessage.ts | tookNms": { + "message": "用时 毫秒" + }, + "panels/console/ConsoleViewMessage.ts | url": { + "message": "" + }, + "panels/console/ConsoleViewMessage.ts | value": { + "message": "值" + }, + "panels/console/ConsoleViewMessage.ts | violationS": { + "message": "[Violation] {PH1}" + }, + "panels/console/ConsoleViewMessage.ts | warning": { + "message": "警告" + }, + "panels/console/ConsoleViewMessage.ts | warningS": { + "message": "{n,plural, =1{警告,已重复 # 次}other{警告,已重复 # 次}}" + }, + "panels/console/console-meta.ts | autocompleteFromHistory": { + "message": "根据历史记录自动补全" + }, + "panels/console/console-meta.ts | clearConsole": { + "message": "清除控制台" + }, + "panels/console/console-meta.ts | clearConsoleHistory": { + "message": "清除控制台历史记录" + }, + "panels/console/console-meta.ts | console": { + "message": "控制台" + }, + "panels/console/console-meta.ts | createLiveExpression": { + "message": "创建实时表达式" + }, + "panels/console/console-meta.ts | doNotAutocompleteFromHistory": { + "message": "不根据历史记录自动补全" + }, + "panels/console/console-meta.ts | doNotEagerlyEvaluateConsole": { + "message": "不即时评估控制台提示文字" + }, + "panels/console/console-meta.ts | doNotGroupSimilarMessagesIn": { + "message": "不要对控制台中的类似消息分组" + }, + "panels/console/console-meta.ts | doNotShowCorsErrorsIn": { + "message": "不在控制台中显示CORS错误" + }, + "panels/console/console-meta.ts | doNotTreatEvaluationAsUser": { + "message": "请勿将评估视为用户激活行为" + }, + "panels/console/console-meta.ts | eagerEvaluation": { + "message": "及早评估" + }, + "panels/console/console-meta.ts | eagerlyEvaluateConsolePromptText": { + "message": "即时评估控制台提示文字" + }, + "panels/console/console-meta.ts | evaluateTriggersUserActivation": { + "message": "评估触发了用户激活行为" + }, + "panels/console/console-meta.ts | groupSimilarMessagesInConsole": { + "message": "在控制台中对相似消息进行分组" + }, + "panels/console/console-meta.ts | hideNetworkMessages": { + "message": "隐藏网络消息" + }, + "panels/console/console-meta.ts | hideTimestamps": { + "message": "隐藏时间戳" + }, + "panels/console/console-meta.ts | logXmlhttprequests": { + "message": "记录 XMLHttpRequest" + }, + "panels/console/console-meta.ts | onlyShowMessagesFromTheCurrent": { + "message": "仅显示来自当前上下文(top、iframe、worker、扩展程序)的消息" + }, + "panels/console/console-meta.ts | selectedContextOnly": { + "message": "仅限已选择的上下文" + }, + "panels/console/console-meta.ts | showConsole": { + "message": "显示控制台" + }, + "panels/console/console-meta.ts | showCorsErrorsInConsole": { + "message": "在控制台中显示CORS错误" + }, + "panels/console/console-meta.ts | showMessagesFromAllContexts": { + "message": "显示来自所有上下文的消息" + }, + "panels/console/console-meta.ts | showNetworkMessages": { + "message": "显示网络消息" + }, + "panels/console/console-meta.ts | showTimestamps": { + "message": "显示时间戳" + }, + "panels/console/console-meta.ts | treatEvaluationAsUserActivation": { + "message": "将评估视为用户激活行为" + }, + "panels/console_counters/WarningErrorCounter.ts | openConsoleToViewS": { + "message": "打开控制台即可查看 {PH1}" + }, + "panels/console_counters/WarningErrorCounter.ts | openIssuesToView": { + "message": "{n,plural, =1{打开“问题”即可查看 # 个问题:}other{打开“问题”即可查看 # 个问题:}}" + }, + "panels/console_counters/WarningErrorCounter.ts | sErrors": { + "message": "{n,plural, =1{# 个错误}other{# 个错误}}" + }, + "panels/console_counters/WarningErrorCounter.ts | sWarnings": { + "message": "{n,plural, =1{# 条警告}other{# 条警告}}" + }, + "panels/coverage/CoverageListView.ts | codeCoverage": { + "message": "代码覆盖率" + }, + "panels/coverage/CoverageListView.ts | css": { + "message": "CSS" + }, + "panels/coverage/CoverageListView.ts | jsCoverageWithPerBlock": { + "message": "按块粒度衡量的 JS 覆盖率:JavaScript 代码块执行后,相应块将标记为已覆盖。" + }, + "panels/coverage/CoverageListView.ts | jsCoverageWithPerFunction": { + "message": "按函数粒度得出的 JS 覆盖范围:某个函数一旦执行,整个函数便会被标记为已覆盖。" + }, + "panels/coverage/CoverageListView.ts | jsPerBlock": { + "message": "JS(按块)" + }, + "panels/coverage/CoverageListView.ts | jsPerFunction": { + "message": "JS(按函数)" + }, + "panels/coverage/CoverageListView.ts | sBytes": { + "message": "{n,plural, =1{# 个字节}other{# 个字节}}" + }, + "panels/coverage/CoverageListView.ts | sBytesS": { + "message": "{n,plural, =1{# 个字节,{percentage}}other{# 个字节,{percentage}}}" + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOf": { + "message": "有 {PH1} 个字节 ({PH2}) 位于尚未执行的 JavaScript 块中。" + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToBlocksOfJavascript": { + "message": "有 {PH1} 个字节 ({PH2}) 位于已执行至少 1 次的 JavaScript 代码块中。" + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHave": { + "message": "有 {PH1} 个字节 ({PH2}) 位于尚未执行的函数中。" + }, + "panels/coverage/CoverageListView.ts | sBytesSBelongToFunctionsThatHaveExecuted": { + "message": "有 {PH1} 个字节 ({PH2}) 位于已执行至少 1 次的函数中。" + }, + "panels/coverage/CoverageListView.ts | sOfFileUnusedSOfFileUsed": { + "message": "{PH1}% 的文件未使用,{PH2}% 的文件已使用" + }, + "panels/coverage/CoverageListView.ts | totalBytes": { + "message": "总字节数" + }, + "panels/coverage/CoverageListView.ts | type": { + "message": "类型" + }, + "panels/coverage/CoverageListView.ts | unusedBytes": { + "message": "未使用的字节数" + }, + "panels/coverage/CoverageListView.ts | url": { + "message": "网址" + }, + "panels/coverage/CoverageListView.ts | usageVisualization": { + "message": "使用情况可视化图表" + }, + "panels/coverage/CoverageView.ts | all": { + "message": "全部" + }, + "panels/coverage/CoverageView.ts | chooseCoverageGranularityPer": { + "message": "选择覆盖范围粒度:“按函数”的开销很低,“按块”的开销很高。" + }, + "panels/coverage/CoverageView.ts | clearAll": { + "message": "全部清除" + }, + "panels/coverage/CoverageView.ts | clickTheRecordButtonSToStart": { + "message": "点击“记录”按钮 {PH1} 即可开始记录覆盖范围。" + }, + "panels/coverage/CoverageView.ts | clickTheReloadButtonSToReloadAnd": { + "message": "点击“重新加载”按钮 {PH1} 即可重新加载并开始记录覆盖范围。" + }, + "panels/coverage/CoverageView.ts | contentScripts": { + "message": "内容脚本" + }, + "panels/coverage/CoverageView.ts | css": { + "message": "CSS" + }, + "panels/coverage/CoverageView.ts | export": { + "message": "导出…" + }, + "panels/coverage/CoverageView.ts | filterCoverageByType": { + "message": "按类型过滤覆盖率" + }, + "panels/coverage/CoverageView.ts | filteredSTotalS": { + "message": "过滤后:{PH1};总计:{PH2}" + }, + "panels/coverage/CoverageView.ts | includeExtensionContentScripts": { + "message": "添加扩展程序内容脚本" + }, + "panels/coverage/CoverageView.ts | javascript": { + "message": "JavaScript" + }, + "panels/coverage/CoverageView.ts | perBlock": { + "message": "按块" + }, + "panels/coverage/CoverageView.ts | perFunction": { + "message": "按函数" + }, + "panels/coverage/CoverageView.ts | sOfSSUsedSoFarSUnused": { + "message": "到目前为止,已使用 {PH1} ({PH3}%),共 {PH2},还有 {PH4} 未使用。" + }, + "panels/coverage/CoverageView.ts | urlFilter": { + "message": "网址过滤条件" + }, + "panels/coverage/coverage-meta.ts | coverage": { + "message": "覆盖率" + }, + "panels/coverage/coverage-meta.ts | instrumentCoverage": { + "message": "插桩覆盖范围" + }, + "panels/coverage/coverage-meta.ts | showCoverage": { + "message": "显示覆盖范围" + }, + "panels/coverage/coverage-meta.ts | startInstrumentingCoverageAnd": { + "message": "开始检测覆盖率,并重新加载网页" + }, + "panels/coverage/coverage-meta.ts | stopInstrumentingCoverageAndShow": { + "message": "停止检测覆盖率并显示结果" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | aa": { + "message": "AA" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | aaa": { + "message": "AAA" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | apca": { + "message": "APCA" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | attributeSelectors": { + "message": "属性选择器" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | backgroundColorsS": { + "message": "背景颜色:{PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | borderColorsS": { + "message": "边框颜色:{PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | classSelectors": { + "message": "类选择器" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | colors": { + "message": "颜色" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | contrastIssues": { + "message": "对比度问题" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | contrastIssuesS": { + "message": "对比度问题:{PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | contrastRatio": { + "message": "对比度" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | cssOverviewElements": { + "message": "CSS 概览元素" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | declaration": { + "message": "声明" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | element": { + "message": "元素" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | elements": { + "message": "元素" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | externalStylesheets": { + "message": "外部样式表" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | fillColorsS": { + "message": "填充颜色:{PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | fontInfo": { + "message": "字体信息" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | idSelectors": { + "message": "ID 选择器" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | inlineStyleElements": { + "message": "内嵌样式元素" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | mediaQueries": { + "message": "媒体查询数量" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | nOccurrences": { + "message": "{n,plural, =1{# 次}other{# 次}}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | nonsimpleSelectors": { + "message": "非简单选择器" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | overviewSummary": { + "message": "概览摘要" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | showElement": { + "message": "显示元素" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | source": { + "message": "来源" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | styleRules": { + "message": "样式规则" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | textColorSOverSBackgroundResults": { + "message": "文本颜色 {PH1} 与背景色 {PH2} 搭配将导致 {PH3} 个元素的对比度较低" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | textColorsS": { + "message": "文字颜色:{PH1}" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoFonts": { + "message": "没有使用字体。" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoMediaQueries": { + "message": "没有任何媒体查询。" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | thereAreNoUnusedDeclarations": { + "message": "没有未使用的声明。" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | typeSelectors": { + "message": "类型选择器" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | universalSelectors": { + "message": "通用选择器" + }, + "panels/css_overview/CSSOverviewCompletedView.ts | unusedDeclarations": { + "message": "未使用的声明" + }, + "panels/css_overview/CSSOverviewProcessingView.ts | cancel": { + "message": "取消" + }, + "panels/css_overview/CSSOverviewSidebarPanel.ts | clearOverview": { + "message": "清除概览" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | bottomAppliedToAStatically": { + "message": "Bottom值已应用于静态放置的元素" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | heightAppliedToAnInlineElement": { + "message": "Height值已应用于内嵌元素" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | leftAppliedToAStatically": { + "message": "Left值已应用于静态放置的元素" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | rightAppliedToAStatically": { + "message": "Right值已应用于静态放置的元素" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | topAppliedToAStatically": { + "message": "Top值已应用于静态放置的元素" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | verticalAlignmentAppliedTo": { + "message": "已对既非 inline 也非 table-cell 的元素采用垂直对齐样式" + }, + "panels/css_overview/CSSOverviewUnusedDeclarations.ts | widthAppliedToAnInlineElement": { + "message": "Width值已应用于内嵌元素" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | activelyWorkingAndLookingForS": { + "message": "我们的团队正在努力完善此功能,期待您的{PH1}!" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | captureOverview": { + "message": "捕获概览" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | capturePageCSSOverview": { + "message": "捕获您网页的 CSS 概况" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | feedbackInline": { + "message": "反馈" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | feedbackStandalone": { + "message": "反馈" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovements": { + "message": "发掘潜在的 CSS 改进机会" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | identifyCSSImprovementsWithExampleIssues": { + "message": "发掘潜在的 CSS 改进机会(例如低对比度问题、未使用的声明、颜色或字体不匹配)" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | locateAffectedElements": { + "message": "在“元素”面板中找到受影响的元素" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | previewFeature": { + "message": "试用型功能" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | quickStartWithCSSOverview": { + "message": "快速入门:开始使用新面板“CSS 概览”" + }, + "panels/css_overview/components/CSSOverviewStartView.ts | videoAndDocumentation": { + "message": "视频和文档" + }, + "panels/css_overview/css_overview-meta.ts | cssOverview": { + "message": "CSS 概览" + }, + "panels/css_overview/css_overview-meta.ts | showCssOverview": { + "message": "显示 CSS 概览" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | copyInitiatorUrl": { + "message": "复制启动器网址" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | copyUrl": { + "message": "复制网址" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | developerResources": { + "message": "开发者资源" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | error": { + "message": "错误" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | failure": { + "message": "失败" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | initiator": { + "message": "启动器" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | pending": { + "message": "待处理" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | sBytes": { + "message": "{n,plural, =1{# 个字节}other{# 个字节}}" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | status": { + "message": "状态" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | success": { + "message": "成功" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | totalBytes": { + "message": "总字节数" + }, + "panels/developer_resources/DeveloperResourcesListView.ts | url": { + "message": "网址" + }, + "panels/developer_resources/DeveloperResourcesView.ts | enableLoadingThroughTarget": { + "message": "允许通过目标加载" + }, + "panels/developer_resources/DeveloperResourcesView.ts | enterTextToSearchTheUrlAndError": { + "message": "输入要在“网址”和“错误”列中搜索的文本" + }, + "panels/developer_resources/DeveloperResourcesView.ts | loadHttpsDeveloperResources": { + "message": "通过检查到的目标加载 HTTP(S) 开发者资源" + }, + "panels/developer_resources/DeveloperResourcesView.ts | resources": { + "message": "{n,plural, =1{# 项资源}other{# 项资源}}" + }, + "panels/developer_resources/DeveloperResourcesView.ts | resourcesCurrentlyLoading": { + "message": "共有 {PH1} 项资源,正在加载 {PH2} 项" + }, + "panels/developer_resources/developer_resources-meta.ts | developerResources": { + "message": "开发者资源" + }, + "panels/developer_resources/developer_resources-meta.ts | showDeveloperResources": { + "message": "显示“开发者资源”面板" + }, + "panels/elements/ClassesPaneWidget.ts | addNewClass": { + "message": "添加新类" + }, + "panels/elements/ClassesPaneWidget.ts | classSAdded": { + "message": "已添加 {PH1} 类" + }, + "panels/elements/ClassesPaneWidget.ts | classesSAdded": { + "message": "已添加 {PH1} 类" + }, + "panels/elements/ClassesPaneWidget.ts | elementClasses": { + "message": "元素类" + }, + "panels/elements/ColorSwatchPopoverIcon.ts | openCubicBezierEditor": { + "message": "打开三次贝塞尔曲线编辑器" + }, + "panels/elements/ColorSwatchPopoverIcon.ts | openShadowEditor": { + "message": "打开阴影编辑器" + }, + "panels/elements/ComputedStyleWidget.ts | filter": { + "message": "过滤" + }, + "panels/elements/ComputedStyleWidget.ts | filterComputedStyles": { + "message": "过滤计算样式" + }, + "panels/elements/ComputedStyleWidget.ts | group": { + "message": "组合" + }, + "panels/elements/ComputedStyleWidget.ts | navigateToSelectorSource": { + "message": "转到选择器源代码" + }, + "panels/elements/ComputedStyleWidget.ts | navigateToStyle": { + "message": "转到“样式”" + }, + "panels/elements/ComputedStyleWidget.ts | noMatchingProperty": { + "message": "无匹配资源" + }, + "panels/elements/ComputedStyleWidget.ts | showAll": { + "message": "全部显示" + }, + "panels/elements/DOMLinkifier.ts | node": { + "message": "<节点>" + }, + "panels/elements/ElementStatePaneWidget.ts | forceElementState": { + "message": "强制设置元素状态" + }, + "panels/elements/ElementStatePaneWidget.ts | toggleElementState": { + "message": "启用/停用元素状态" + }, + "panels/elements/ElementsPanel.ts | computed": { + "message": "计算样式" + }, + "panels/elements/ElementsPanel.ts | domTreeExplorer": { + "message": "DOM 树浏览器" + }, + "panels/elements/ElementsPanel.ts | elementStateS": { + "message": "元素状态:{PH1}" + }, + "panels/elements/ElementsPanel.ts | findByStringSelectorOrXpath": { + "message": "按字符串、选择器或 XPath 查找" + }, + "panels/elements/ElementsPanel.ts | frame": { + "message": "帧" + }, + "panels/elements/ElementsPanel.ts | hideComputedStylesSidebar": { + "message": "隐藏“计算样式”边栏" + }, + "panels/elements/ElementsPanel.ts | nodeCannotBeFoundInTheCurrent": { + "message": "无法在当前网页中找到相应节点。" + }, + "panels/elements/ElementsPanel.ts | revealInElementsPanel": { + "message": "在“元素”面板中显示" + }, + "panels/elements/ElementsPanel.ts | showComputedStylesSidebar": { + "message": "显示“计算样式”边栏" + }, + "panels/elements/ElementsPanel.ts | sidePanelContent": { + "message": "侧边栏中的内容" + }, + "panels/elements/ElementsPanel.ts | sidePanelToolbar": { + "message": "侧边栏中的工具栏" + }, + "panels/elements/ElementsPanel.ts | styles": { + "message": "样式" + }, + "panels/elements/ElementsPanel.ts | switchToAccessibilityTreeView": { + "message": "切换到无障碍功能树状视图" + }, + "panels/elements/ElementsPanel.ts | switchToDomTreeView": { + "message": "切换到 DOM 树状视图" + }, + "panels/elements/ElementsPanel.ts | theDeferredDomNodeCouldNotBe": { + "message": "延迟的 DOM 节点无法解析为有效节点。" + }, + "panels/elements/ElementsPanel.ts | theRemoteObjectCouldNotBe": { + "message": "远程对象无法解析为有效节点。" + }, + "panels/elements/ElementsTreeElement.ts | addAttribute": { + "message": "添加属性" + }, + "panels/elements/ElementsTreeElement.ts | captureNodeScreenshot": { + "message": "截取节点屏幕截图" + }, + "panels/elements/ElementsTreeElement.ts | children": { + "message": "子元素:" + }, + "panels/elements/ElementsTreeElement.ts | collapseChildren": { + "message": "收起子级" + }, + "panels/elements/ElementsTreeElement.ts | copy": { + "message": "复制" + }, + "panels/elements/ElementsTreeElement.ts | copyElement": { + "message": "复制元素" + }, + "panels/elements/ElementsTreeElement.ts | copyFullXpath": { + "message": "复制完整 XPath" + }, + "panels/elements/ElementsTreeElement.ts | copyJsPath": { + "message": "复制 JS 路径" + }, + "panels/elements/ElementsTreeElement.ts | copyOuterhtml": { + "message": "复制 outerHTML" + }, + "panels/elements/ElementsTreeElement.ts | copySelector": { + "message": "复制selector" + }, + "panels/elements/ElementsTreeElement.ts | copyStyles": { + "message": "复制样式" + }, + "panels/elements/ElementsTreeElement.ts | copyXpath": { + "message": "复制 XPath" + }, + "panels/elements/ElementsTreeElement.ts | cut": { + "message": "剪切" + }, + "panels/elements/ElementsTreeElement.ts | deleteElement": { + "message": "删除元素" + }, + "panels/elements/ElementsTreeElement.ts | disableFlexMode": { + "message": "停用灵活模式" + }, + "panels/elements/ElementsTreeElement.ts | disableGridMode": { + "message": "停用网格模式" + }, + "panels/elements/ElementsTreeElement.ts | disableScrollSnap": { + "message": "停用滚动贴靠叠加层" + }, + "panels/elements/ElementsTreeElement.ts | duplicateElement": { + "message": "复制粘贴元素" + }, + "panels/elements/ElementsTreeElement.ts | editAsHtml": { + "message": "以 HTML 格式修改" + }, + "panels/elements/ElementsTreeElement.ts | editAttribute": { + "message": "修改属性" + }, + "panels/elements/ElementsTreeElement.ts | editText": { + "message": "修改文本" + }, + "panels/elements/ElementsTreeElement.ts | enableFlexMode": { + "message": "启用灵活模式" + }, + "panels/elements/ElementsTreeElement.ts | enableGridMode": { + "message": "启用网格模式" + }, + "panels/elements/ElementsTreeElement.ts | enableScrollSnap": { + "message": "启用滚动贴靠叠加层" + }, + "panels/elements/ElementsTreeElement.ts | enterIsolationMode": { + "message": "进入隔离模式" + }, + "panels/elements/ElementsTreeElement.ts | exitIsolationMode": { + "message": "退出隔离模式" + }, + "panels/elements/ElementsTreeElement.ts | expandRecursively": { + "message": "以递归方式展开" + }, + "panels/elements/ElementsTreeElement.ts | focus": { + "message": "聚焦" + }, + "panels/elements/ElementsTreeElement.ts | forceState": { + "message": "强制执行状态" + }, + "panels/elements/ElementsTreeElement.ts | hideElement": { + "message": "隐藏元素" + }, + "panels/elements/ElementsTreeElement.ts | paste": { + "message": "粘贴" + }, + "panels/elements/ElementsTreeElement.ts | scrollIntoView": { + "message": "滚动到视野范围内" + }, + "panels/elements/ElementsTreeElement.ts | showFrameDetails": { + "message": "显示 iframe 详细信息" + }, + "panels/elements/ElementsTreeElement.ts | thisFrameWasIdentifiedAsAnAd": { + "message": "此框架被确定为广告框架" + }, + "panels/elements/ElementsTreeElement.ts | useSInTheConsoleToReferToThis": { + "message": "在控制台中使用 {PH1} 表示此元素。" + }, + "panels/elements/ElementsTreeElement.ts | valueIsTooLargeToEdit": { + "message": "<值过大,无法修改>" + }, + "panels/elements/ElementsTreeOutline.ts | adornerSettings": { + "message": "标志设置…" + }, + "panels/elements/ElementsTreeOutline.ts | pageDom": { + "message": "网页 DOM" + }, + "panels/elements/ElementsTreeOutline.ts | reveal": { + "message": "显示" + }, + "panels/elements/ElementsTreeOutline.ts | showAllNodesDMore": { + "message": "显示所有节点(另外 {PH1} 个)" + }, + "panels/elements/ElementsTreeOutline.ts | storeAsGlobalVariable": { + "message": "存储为全局变量" + }, + "panels/elements/EventListenersWidget.ts | all": { + "message": "全部" + }, + "panels/elements/EventListenersWidget.ts | ancestors": { + "message": "祖先" + }, + "panels/elements/EventListenersWidget.ts | blocking": { + "message": "屏蔽" + }, + "panels/elements/EventListenersWidget.ts | eventListenersCategory": { + "message": "事件监听器类别" + }, + "panels/elements/EventListenersWidget.ts | frameworkListeners": { + "message": "Framework监听器" + }, + "panels/elements/EventListenersWidget.ts | passive": { + "message": "被动式" + }, + "panels/elements/EventListenersWidget.ts | refresh": { + "message": "刷新" + }, + "panels/elements/EventListenersWidget.ts | resolveEventListenersBoundWith": { + "message": "解析与框架绑定的事件监听器" + }, + "panels/elements/EventListenersWidget.ts | showListenersOnTheAncestors": { + "message": "显示祖先中的监听器" + }, + "panels/elements/MarkerDecorator.ts | domBreakpoint": { + "message": "DOM 断点" + }, + "panels/elements/MarkerDecorator.ts | elementIsHidden": { + "message": "元素处于隐藏状态" + }, + "panels/elements/NodeStackTraceWidget.ts | noStackTraceAvailable": { + "message": "无可用堆栈轨迹" + }, + "panels/elements/PlatformFontsWidget.ts | dGlyphs": { + "message": "{n,plural, =1{(# 个字形)}other{(# 个字形)}}" + }, + "panels/elements/PlatformFontsWidget.ts | localFile": { + "message": "本地文件" + }, + "panels/elements/PlatformFontsWidget.ts | networkResource": { + "message": "网络资源" + }, + "panels/elements/PlatformFontsWidget.ts | renderedFonts": { + "message": "渲染的字体" + }, + "panels/elements/StylePropertyTreeElement.ts | copyAllCssDeclarationsAsJs": { + "message": "以 JS 格式复制所有声明" + }, + "panels/elements/StylePropertyTreeElement.ts | copyAllDeclarations": { + "message": "复制所有声明" + }, + "panels/elements/StylePropertyTreeElement.ts | copyCssDeclarationAsJs": { + "message": "以 JS 格式复制声明" + }, + "panels/elements/StylePropertyTreeElement.ts | copyDeclaration": { + "message": "复制声明" + }, + "panels/elements/StylePropertyTreeElement.ts | copyProperty": { + "message": "复制属性" + }, + "panels/elements/StylePropertyTreeElement.ts | copyRule": { + "message": "复制规则" + }, + "panels/elements/StylePropertyTreeElement.ts | copyValue": { + "message": "复制值" + }, + "panels/elements/StylePropertyTreeElement.ts | flexboxEditorButton": { + "message": "打开 flexbox 编辑器" + }, + "panels/elements/StylePropertyTreeElement.ts | gridEditorButton": { + "message": "打开grid编辑器" + }, + "panels/elements/StylePropertyTreeElement.ts | openColorPickerS": { + "message": "打开颜色选择器。{PH1}" + }, + "panels/elements/StylePropertyTreeElement.ts | revealInSourcesPanel": { + "message": "在“来源”面板中显示" + }, + "panels/elements/StylePropertyTreeElement.ts | shiftClickToChangeColorFormat": { + "message": "按住 Shift 键并点击即可更改颜色格式。" + }, + "panels/elements/StylePropertyTreeElement.ts | togglePropertyAndContinueEditing": { + "message": "切换属性并继续编辑" + }, + "panels/elements/StylePropertyTreeElement.ts | valueForSettingSSIsOutsideThe": { + "message": "“{PH1}”设置的值 {PH2} 超出了字体系列“{PH5}”的支持范围 [{PH3},{PH4}]。" + }, + "panels/elements/StylePropertyTreeElement.ts | viewComputedValue": { + "message": "查看计算得出的值" + }, + "panels/elements/StylesSidebarPane.ts | constructedStylesheet": { + "message": "构造的样式表" + }, + "panels/elements/StylesSidebarPane.ts | copyAllDeclarations": { + "message": "复制所有声明" + }, + "panels/elements/StylesSidebarPane.ts | copyRule": { + "message": "复制规则" + }, + "panels/elements/StylesSidebarPane.ts | copySelector": { + "message": "复制selector" + }, + "panels/elements/StylesSidebarPane.ts | cssPropertyName": { + "message": "CSS 属性名称" + }, + "panels/elements/StylesSidebarPane.ts | cssPropertyValue": { + "message": "CSS 属性值" + }, + "panels/elements/StylesSidebarPane.ts | cssSelector": { + "message": "CSS 选择器" + }, + "panels/elements/StylesSidebarPane.ts | filter": { + "message": "过滤" + }, + "panels/elements/StylesSidebarPane.ts | filterStyles": { + "message": "过滤样式" + }, + "panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelHundred": { + "message": "使用鼠标滚轮或向上/向下键调大/调小。{PH1}:±100、Shift:±10、Alt:±0.1" + }, + "panels/elements/StylesSidebarPane.ts | incrementdecrementWithMousewheelOne": { + "message": "使用鼠标滚轮或向上/向下键调大/调小。{PH1}:R ±1、Shift:G ±1、Alt:B ±1" + }, + "panels/elements/StylesSidebarPane.ts | inheritedFroms": { + "message": "继承自 " + }, + "panels/elements/StylesSidebarPane.ts | injectedStylesheet": { + "message": "注入的样式表" + }, + "panels/elements/StylesSidebarPane.ts | insertStyleRuleBelow": { + "message": "在下方插入样式规则" + }, + "panels/elements/StylesSidebarPane.ts | invalidPropertyValue": { + "message": "属性值无效" + }, + "panels/elements/StylesSidebarPane.ts | invalidString": { + "message": "{PH1},属性名称:{PH2},属性值:{PH3}" + }, + "panels/elements/StylesSidebarPane.ts | newStyleRule": { + "message": "新建样式规则" + }, + "panels/elements/StylesSidebarPane.ts | noMatchingSelectorOrStyle": { + "message": "找不到匹配的选择器或样式" + }, + "panels/elements/StylesSidebarPane.ts | pseudoSElement": { + "message": "伪 ::{PH1} 元素" + }, + "panels/elements/StylesSidebarPane.ts | sattributesStyle": { + "message": "{PH1}[属性样式]" + }, + "panels/elements/StylesSidebarPane.ts | showAllPropertiesSMore": { + "message": "显示所有属性(另外 {PH1} 个)" + }, + "panels/elements/StylesSidebarPane.ts | styleAttribute": { + "message": "style属性" + }, + "panels/elements/StylesSidebarPane.ts | unknownPropertyName": { + "message": "属性名称未知" + }, + "panels/elements/StylesSidebarPane.ts | userAgentStylesheet": { + "message": "用户代理样式表" + }, + "panels/elements/StylesSidebarPane.ts | viaInspector": { + "message": "通过检查器" + }, + "panels/elements/components/AccessibilityTreeNode.ts | ignored": { + "message": "已忽略" + }, + "panels/elements/components/AdornerSettingsPane.ts | closeButton": { + "message": "关闭" + }, + "panels/elements/components/AdornerSettingsPane.ts | settingsTitle": { + "message": "显示标志" + }, + "panels/elements/components/ElementsBreadcrumbs.ts | breadcrumbs": { + "message": "DOM 树面包屑导航" + }, + "panels/elements/components/ElementsBreadcrumbsUtils.ts | text": { + "message": "(文本)" + }, + "panels/elements/components/LayoutPane.ts | chooseElementOverlayColor": { + "message": "为此元素选择叠加层颜色" + }, + "panels/elements/components/LayoutPane.ts | colorPickerOpened": { + "message": "颜色选择器已打开。" + }, + "panels/elements/components/LayoutPane.ts | flexbox": { + "message": "Flexbox" + }, + "panels/elements/components/LayoutPane.ts | flexboxOverlays": { + "message": "Flexbox 叠加层" + }, + "panels/elements/components/LayoutPane.ts | grid": { + "message": "网格" + }, + "panels/elements/components/LayoutPane.ts | gridOverlays": { + "message": "网格叠加层" + }, + "panels/elements/components/LayoutPane.ts | noFlexboxLayoutsFoundOnThisPage": { + "message": "在此网页上找不到 Flexbox 布局" + }, + "panels/elements/components/LayoutPane.ts | noGridLayoutsFoundOnThisPage": { + "message": "在此网页上找不到网格布局" + }, + "panels/elements/components/LayoutPane.ts | overlayDisplaySettings": { + "message": "叠加层显示设置" + }, + "panels/elements/components/LayoutPane.ts | showElementInTheElementsPanel": { + "message": "在“元素”面板中显示元素" + }, + "panels/elements/components/StylePropertyEditor.ts | deselectButton": { + "message": "移除 {propertyName}:{propertyValue}" + }, + "panels/elements/components/StylePropertyEditor.ts | selectButton": { + "message": "添加 {propertyName}:{propertyValue}" + }, + "panels/elements/elements-meta.ts | captureAreaScreenshot": { + "message": "截取区域屏幕截图" + }, + "panels/elements/elements-meta.ts | copyStyles": { + "message": "复制样式" + }, + "panels/elements/elements-meta.ts | disableDomWordWrap": { + "message": "停用 DOM 自动换行" + }, + "panels/elements/elements-meta.ts | duplicateElement": { + "message": "复制粘贴元素" + }, + "panels/elements/elements-meta.ts | editAsHtml": { + "message": "以 HTML 格式修改" + }, + "panels/elements/elements-meta.ts | elements": { + "message": "元素" + }, + "panels/elements/elements-meta.ts | enableDomWordWrap": { + "message": "启用 DOM 自动换行" + }, + "panels/elements/elements-meta.ts | eventListeners": { + "message": "事件监听器" + }, + "panels/elements/elements-meta.ts | hideElement": { + "message": "隐藏元素" + }, + "panels/elements/elements-meta.ts | hideHtmlComments": { + "message": "隐藏 HTML 注释" + }, + "panels/elements/elements-meta.ts | layout": { + "message": "布局" + }, + "panels/elements/elements-meta.ts | properties": { + "message": "属性" + }, + "panels/elements/elements-meta.ts | redo": { + "message": "重做" + }, + "panels/elements/elements-meta.ts | revealDomNodeOnHover": { + "message": "在鼠标悬停时显示 DOM 节点" + }, + "panels/elements/elements-meta.ts | selectAnElementInThePageTo": { + "message": "选择网页中的相应元素即可进行检查" + }, + "panels/elements/elements-meta.ts | showDetailedInspectTooltip": { + "message": "显示详细检查提示" + }, + "panels/elements/elements-meta.ts | showElements": { + "message": "显示“元素”面板" + }, + "panels/elements/elements-meta.ts | showEventListeners": { + "message": "显示事件监听器" + }, + "panels/elements/elements-meta.ts | showHtmlComments": { + "message": "显示 HTML 注释" + }, + "panels/elements/elements-meta.ts | showLayout": { + "message": "显示“布局”工具" + }, + "panels/elements/elements-meta.ts | showProperties": { + "message": "显示“属性”工具" + }, + "panels/elements/elements-meta.ts | showStackTrace": { + "message": "显示“堆栈轨迹”工具" + }, + "panels/elements/elements-meta.ts | showUserAgentShadowDOM": { + "message": "显示用户代理 Shadow DOM" + }, + "panels/elements/elements-meta.ts | stackTrace": { + "message": "堆栈轨迹" + }, + "panels/elements/elements-meta.ts | undo": { + "message": "撤消" + }, + "panels/elements/elements-meta.ts | wordWrap": { + "message": "自动换行" + }, + "panels/emulation/DeviceModeToolbar.ts | addDevicePixelRatio": { + "message": "添加设备像素比" + }, + "panels/emulation/DeviceModeToolbar.ts | addDeviceType": { + "message": "添加设备类型" + }, + "panels/emulation/DeviceModeToolbar.ts | autoadjustZoom": { + "message": "自动调整缩放级别" + }, + "panels/emulation/DeviceModeToolbar.ts | closeDevtools": { + "message": "关闭 DevTools" + }, + "panels/emulation/DeviceModeToolbar.ts | defaultF": { + "message": "默认值:{PH1}" + }, + "panels/emulation/DeviceModeToolbar.ts | devicePixelRatio": { + "message": "设备像素比" + }, + "panels/emulation/DeviceModeToolbar.ts | deviceType": { + "message": "设备类型" + }, + "panels/emulation/DeviceModeToolbar.ts | dimensions": { + "message": "尺寸" + }, + "panels/emulation/DeviceModeToolbar.ts | edit": { + "message": "修改…" + }, + "panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeature": { + "message": "“Experimental Web Platform Feature”flag 已启用。点击即可将其停用。" + }, + "panels/emulation/DeviceModeToolbar.ts | experimentalWebPlatformFeatureFlag": { + "message": "“Experimental Web Platform Feature”flag 已停用。点击即可将其启用。" + }, + "panels/emulation/DeviceModeToolbar.ts | fitToWindowF": { + "message": "适合窗口大小 ({PH1}%)" + }, + "panels/emulation/DeviceModeToolbar.ts | heightLeaveEmptyForFull": { + "message": "高度(留空即表示全高显示网页)" + }, + "panels/emulation/DeviceModeToolbar.ts | hideDeviceFrame": { + "message": "隐藏设备边框" + }, + "panels/emulation/DeviceModeToolbar.ts | hideMediaQueries": { + "message": "隐藏媒体查询" + }, + "panels/emulation/DeviceModeToolbar.ts | hideRulers": { + "message": "隐藏标尺" + }, + "panels/emulation/DeviceModeToolbar.ts | landscape": { + "message": "横向" + }, + "panels/emulation/DeviceModeToolbar.ts | moreOptions": { + "message": "更多选项" + }, + "panels/emulation/DeviceModeToolbar.ts | none": { + "message": "无" + }, + "panels/emulation/DeviceModeToolbar.ts | portrait": { + "message": "纵向" + }, + "panels/emulation/DeviceModeToolbar.ts | removeDevicePixelRatio": { + "message": "移除设备像素比" + }, + "panels/emulation/DeviceModeToolbar.ts | removeDeviceType": { + "message": "移除设备类型" + }, + "panels/emulation/DeviceModeToolbar.ts | resetToDefaults": { + "message": "重置为默认值" + }, + "panels/emulation/DeviceModeToolbar.ts | responsive": { + "message": "自适应" + }, + "panels/emulation/DeviceModeToolbar.ts | rotate": { + "message": "旋转" + }, + "panels/emulation/DeviceModeToolbar.ts | screenOrientationOptions": { + "message": "屏幕方向选项" + }, + "panels/emulation/DeviceModeToolbar.ts | showDeviceFrame": { + "message": "显示设备边框" + }, + "panels/emulation/DeviceModeToolbar.ts | showMediaQueries": { + "message": "显示媒体查询" + }, + "panels/emulation/DeviceModeToolbar.ts | showRulers": { + "message": "显示标尺" + }, + "panels/emulation/DeviceModeToolbar.ts | toggleDualscreenMode": { + "message": "开启/关闭双屏模式" + }, + "panels/emulation/DeviceModeToolbar.ts | width": { + "message": "宽度" + }, + "panels/emulation/DeviceModeToolbar.ts | zoom": { + "message": "缩放" + }, + "panels/emulation/DeviceModeView.ts | doubleclickForFullHeight": { + "message": "双击即可全高显示" + }, + "panels/emulation/DeviceModeView.ts | laptop": { + "message": "笔记本电脑" + }, + "panels/emulation/DeviceModeView.ts | laptopL": { + "message": "大型笔记本电脑" + }, + "panels/emulation/DeviceModeView.ts | mobileL": { + "message": "大型移动设备" + }, + "panels/emulation/DeviceModeView.ts | mobileM": { + "message": "中型移动设备" + }, + "panels/emulation/DeviceModeView.ts | mobileS": { + "message": "小型移动设备" + }, + "panels/emulation/DeviceModeView.ts | tablet": { + "message": "平板电脑" + }, + "panels/emulation/MediaQueryInspector.ts | revealInSourceCode": { + "message": "在源代码中显示" + }, + "panels/emulation/emulation-meta.ts | captureFullSizeScreenshot": { + "message": "截取完整尺寸的屏幕截图" + }, + "panels/emulation/emulation-meta.ts | captureNodeScreenshot": { + "message": "当前节点屏幕截图" + }, + "panels/emulation/emulation-meta.ts | captureScreenshot": { + "message": "截取屏幕截图" + }, + "panels/emulation/emulation-meta.ts | device": { + "message": "设备" + }, + "panels/emulation/emulation-meta.ts | hideDeviceFrame": { + "message": "隐藏设备边框" + }, + "panels/emulation/emulation-meta.ts | hideMediaQueries": { + "message": "隐藏媒体查询" + }, + "panels/emulation/emulation-meta.ts | hideRulers": { + "message": "隐藏标尺" + }, + "panels/emulation/emulation-meta.ts | showDeviceFrame": { + "message": "显示设备边框" + }, + "panels/emulation/emulation-meta.ts | showMediaQueries": { + "message": "显示媒体查询" + }, + "panels/emulation/emulation-meta.ts | showRulers": { + "message": "显示标尺" + }, + "panels/emulation/emulation-meta.ts | toggleDeviceToolbar": { + "message": "显示/隐藏设备工具栏" + }, + "panels/event_listeners/EventListenersView.ts | deleteEventListener": { + "message": "删除事件监听器" + }, + "panels/event_listeners/EventListenersView.ts | noEventListeners": { + "message": "无事件监听器" + }, + "panels/event_listeners/EventListenersView.ts | passive": { + "message": "被动式" + }, + "panels/event_listeners/EventListenersView.ts | remove": { + "message": "移除" + }, + "panels/event_listeners/EventListenersView.ts | revealInElementsPanel": { + "message": "在“元素”面板中显示" + }, + "panels/event_listeners/EventListenersView.ts | togglePassive": { + "message": "开启/关闭被动式监听器" + }, + "panels/event_listeners/EventListenersView.ts | toggleWhetherEventListenerIs": { + "message": "将事件监听器状态切换为被动或屏蔽" + }, + "panels/help/ReleaseNoteView.ts | close": { + "message": "关闭" + }, + "panels/help/ReleaseNoteView.ts | learnMore": { + "message": "了解详情" + }, + "panels/help/help-meta.ts | bug": { + "message": "错误" + }, + "panels/help/help-meta.ts | doNotShowWhatsNewAfterEachUpdate": { + "message": "每次更新后不显示“新功能”" + }, + "panels/help/help-meta.ts | releaseNotes": { + "message": "版本说明" + }, + "panels/help/help-meta.ts | reportADevtoolsIssue": { + "message": "报告 DevTools 问题" + }, + "panels/help/help-meta.ts | reportTranslationIssue": { + "message": "举报翻译问题" + }, + "panels/help/help-meta.ts | showWhatsNew": { + "message": "显示“新功能”" + }, + "panels/help/help-meta.ts | showWhatsNewAfterEachUpdate": { + "message": "每次更新后显示“新功能”" + }, + "panels/help/help-meta.ts | whatsNew": { + "message": "新功能" + }, + "panels/input/InputTimeline.ts | clearAll": { + "message": "全部清除" + }, + "panels/input/InputTimeline.ts | loadProfile": { + "message": "加载性能分析报告…" + }, + "panels/input/InputTimeline.ts | saveProfile": { + "message": "保存性能分析报告…" + }, + "panels/input/input-meta.ts | inputs": { + "message": "输入" + }, + "panels/input/input-meta.ts | pause": { + "message": "暂停" + }, + "panels/input/input-meta.ts | resume": { + "message": "继续" + }, + "panels/input/input-meta.ts | showInputs": { + "message": "显示“输入”工具" + }, + "panels/input/input-meta.ts | startRecording": { + "message": "开始录制" + }, + "panels/input/input-meta.ts | startReplaying": { + "message": "开始重放" + }, + "panels/input/input-meta.ts | stopRecording": { + "message": "停止录制" + }, + "panels/issues/AffectedBlockedByResponseView.ts | blockedResource": { + "message": "已拦截的资源" + }, + "panels/issues/AffectedBlockedByResponseView.ts | nRequests": { + "message": "{n,plural, =1{# 项请求}other{# 项请求}}" + }, + "panels/issues/AffectedBlockedByResponseView.ts | parentFrame": { + "message": "父框架" + }, + "panels/issues/AffectedBlockedByResponseView.ts | requestC": { + "message": "请求" + }, + "panels/issues/AffectedCookiesView.ts | domain": { + "message": "网域" + }, + "panels/issues/AffectedCookiesView.ts | filterSetCookieTitle": { + "message": "在“网络”面板中显示包含此 Set-Cookie 标头的网络请求" + }, + "panels/issues/AffectedCookiesView.ts | nCookies": { + "message": "{n,plural, =1{# 个 Cookie}other{# 个 Cookie}}" + }, + "panels/issues/AffectedCookiesView.ts | nRawCookieLines": { + "message": "{n,plural, =1{1 个原始 Set-Cookie 标头}other{# 个原始 Set-Cookie 标头}}" + }, + "panels/issues/AffectedCookiesView.ts | name": { + "message": "名称" + }, + "panels/issues/AffectedCookiesView.ts | path": { + "message": "路径" + }, + "panels/issues/AffectedDirectivesView.ts | blocked": { + "message": "已屏蔽" + }, + "panels/issues/AffectedDirectivesView.ts | clickToRevealTheViolatingDomNode": { + "message": "点击即可在“元素”面板显示违规 DOM 节点" + }, + "panels/issues/AffectedDirectivesView.ts | directiveC": { + "message": "指令" + }, + "panels/issues/AffectedDirectivesView.ts | element": { + "message": "元素" + }, + "panels/issues/AffectedDirectivesView.ts | nDirectives": { + "message": "{n,plural, =1{# 条指令}other{# 条指令}}" + }, + "panels/issues/AffectedDirectivesView.ts | reportonly": { + "message": "仅报告" + }, + "panels/issues/AffectedDirectivesView.ts | resourceC": { + "message": "资源" + }, + "panels/issues/AffectedDirectivesView.ts | sourceLocation": { + "message": "源位置" + }, + "panels/issues/AffectedDirectivesView.ts | status": { + "message": "状态" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | documentInTheDOMTree": { + "message": "DOM 树中的文档" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | mode": { + "message": "模式" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | nDocuments": { + "message": "{n,plural, =1{ 个文档}other{ 个文档}}" + }, + "panels/issues/AffectedDocumentsInQuirksModeView.ts | url": { + "message": "网址" + }, + "panels/issues/AffectedElementsView.ts | nElements": { + "message": "{n,plural, =1{# 个元素}other{# 个元素}}" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | contrastRatio": { + "message": "对比度" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | element": { + "message": "元素" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | minimumAA": { + "message": "最低 AA 对比度" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | minimumAAA": { + "message": "最低 AAA 对比度" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | textSize": { + "message": "文字大小" + }, + "panels/issues/AffectedElementsWithLowContrastView.ts | textWeight": { + "message": "文本字重" + }, + "panels/issues/AffectedHeavyAdView.ts | cpuPeakLimit": { + "message": "CPU 峰值上限" + }, + "panels/issues/AffectedHeavyAdView.ts | cpuTotalLimit": { + "message": "CPU 总限制" + }, + "panels/issues/AffectedHeavyAdView.ts | frameUrl": { + "message": "框架网址" + }, + "panels/issues/AffectedHeavyAdView.ts | limitExceeded": { + "message": "超出限额" + }, + "panels/issues/AffectedHeavyAdView.ts | nResources": { + "message": "{n,plural, =1{# 项资源}other{# 项资源}}" + }, + "panels/issues/AffectedHeavyAdView.ts | networkLimit": { + "message": "网络限制" + }, + "panels/issues/AffectedHeavyAdView.ts | removed": { + "message": "已移除" + }, + "panels/issues/AffectedHeavyAdView.ts | resolutionStatus": { + "message": "解决状态" + }, + "panels/issues/AffectedHeavyAdView.ts | warned": { + "message": "已警告" + }, + "panels/issues/AffectedResourcesView.ts | clickToRevealTheFramesDomNodeIn": { + "message": "点击即可在“元素”面板中显示相应框架的 DOM 节点" + }, + "panels/issues/AffectedResourcesView.ts | unavailable": { + "message": "无法使用了" + }, + "panels/issues/AffectedResourcesView.ts | unknown": { + "message": "未知" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | aSharedarraybufferWas": { + "message": "SharedArrayBuffer 已在非跨域隔离的上下文中实例化" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | blocked": { + "message": "已屏蔽" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | instantiation": { + "message": "实例化" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | nViolations": { + "message": "{n,plural, =1{# 项违规行为}other{# 项违规行为}}" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sharedarraybufferWasTransferedTo": { + "message": "SharedArrayBuffer 已转移到非跨域隔离的上下文" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sourceLocation": { + "message": "源位置" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | status": { + "message": "状态" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | transfer": { + "message": "传输" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | trigger": { + "message": "触发因素" + }, + "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | warning": { + "message": "警告" + }, + "panels/issues/AffectedSourcesView.ts | nSources": { + "message": "{n,plural, =1{# 个来源}other{# 个来源}}" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | nResources": { + "message": "{n,plural, =1{# 项资源}other{# 项资源}}" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | packageName": { + "message": "软件包名称" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | packageSignature": { + "message": "软件包签名" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | statusCode": { + "message": "状态代码" + }, + "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | url": { + "message": "网址" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | element": { + "message": "元素" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | frame": { + "message": "框架" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | invalidEventSourceTriggerData": { + "message": "“event-source-trigger-data”无效" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | invalidSourceEventId": { + "message": "“attributionsourceeventid”无效" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | invalidTriggerData": { + "message": "“trigger-data”无效" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | nViolations": { + "message": "{n,plural, =1{# 项违规行为}other{# 项违规行为}}" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | request": { + "message": "请求" + }, + "panels/issues/AttributionReportingIssueDetailsView.ts | untrustworthyOrigin": { + "message": "不可信的源" + }, + "panels/issues/CSPViolationsView.ts | filter": { + "message": "过滤" + }, + "panels/issues/CorsIssueDetailsView.ts | allowCredentialsValueFromHeader": { + "message": "Access-Control-Allow-Credentials 标头值" + }, + "panels/issues/CorsIssueDetailsView.ts | allowedOrigin": { + "message": "允许的来源(根据标头)" + }, + "panels/issues/CorsIssueDetailsView.ts | blocked": { + "message": "已屏蔽" + }, + "panels/issues/CorsIssueDetailsView.ts | disallowedRequestHeader": { + "message": "禁止的请求标头" + }, + "panels/issues/CorsIssueDetailsView.ts | disallowedRequestMethod": { + "message": "禁止的请求方法" + }, + "panels/issues/CorsIssueDetailsView.ts | header": { + "message": "标头" + }, + "panels/issues/CorsIssueDetailsView.ts | initiatorAddressSpace": { + "message": "启动器地址" + }, + "panels/issues/CorsIssueDetailsView.ts | initiatorContext": { + "message": "启动器上下文" + }, + "panels/issues/CorsIssueDetailsView.ts | insecure": { + "message": "不安全" + }, + "panels/issues/CorsIssueDetailsView.ts | invalidValue": { + "message": "无效值(若有)" + }, + "panels/issues/CorsIssueDetailsView.ts | nRequests": { + "message": "{n,plural, =1{# 项请求}other{# 项请求}}" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightDisallowedRedirect": { + "message": "对预检的响应是重定向" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightInvalidStatus": { + "message": "预检请求的 HTTP 状态表明未成功" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightRequest": { + "message": "预检请求" + }, + "panels/issues/CorsIssueDetailsView.ts | preflightRequestIfProblematic": { + "message": "预检请求(如果出现问题)" + }, + "panels/issues/CorsIssueDetailsView.ts | problem": { + "message": "问题" + }, + "panels/issues/CorsIssueDetailsView.ts | problemInvalidValue": { + "message": "无效值" + }, + "panels/issues/CorsIssueDetailsView.ts | problemMissingHeader": { + "message": "缺少标头" + }, + "panels/issues/CorsIssueDetailsView.ts | problemMultipleValues": { + "message": "多个值" + }, + "panels/issues/CorsIssueDetailsView.ts | request": { + "message": "请求" + }, + "panels/issues/CorsIssueDetailsView.ts | resourceAddressSpace": { + "message": "资源地址" + }, + "panels/issues/CorsIssueDetailsView.ts | secure": { + "message": "安全" + }, + "panels/issues/CorsIssueDetailsView.ts | sourceLocation": { + "message": "源位置" + }, + "panels/issues/CorsIssueDetailsView.ts | status": { + "message": "状态" + }, + "panels/issues/CorsIssueDetailsView.ts | unsupportedScheme": { + "message": "架构不受支持" + }, + "panels/issues/CorsIssueDetailsView.ts | warning": { + "message": "警告" + }, + "panels/issues/GenericIssueDetailsView.ts | frameId": { + "message": "框架" + }, + "panels/issues/GenericIssueDetailsView.ts | nResources": { + "message": "{n,plural, =1{# 项资源}other{# 项资源}}" + }, + "panels/issues/HiddenIssuesRow.ts | hiddenIssues": { + "message": "已隐藏的问题" + }, + "panels/issues/HiddenIssuesRow.ts | unhideAll": { + "message": "取消隐藏全部" + }, + "panels/issues/IssueKindView.ts | hideAllCurrent": { + "message": "隐藏当前的所有{PH1}" + }, + "panels/issues/IssueView.ts | affectedResources": { + "message": "受影响的资源" + }, + "panels/issues/IssueView.ts | automaticallyUpgraded": { + "message": "已自动升级" + }, + "panels/issues/IssueView.ts | blocked": { + "message": "已屏蔽" + }, + "panels/issues/IssueView.ts | hideIssuesLikeThis": { + "message": "隐藏与此类似的问题" + }, + "panels/issues/IssueView.ts | learnMoreS": { + "message": "了解详情:{PH1}" + }, + "panels/issues/IssueView.ts | nRequests": { + "message": "{n,plural, =1{# 项请求}other{# 项请求}}" + }, + "panels/issues/IssueView.ts | nResources": { + "message": "{n,plural, =1{# 项资源}other{# 项资源}}" + }, + "panels/issues/IssueView.ts | name": { + "message": "名称" + }, + "panels/issues/IssueView.ts | restrictionStatus": { + "message": "限制状态" + }, + "panels/issues/IssueView.ts | unhideIssuesLikeThis": { + "message": "取消隐藏与此类似的问题" + }, + "panels/issues/IssueView.ts | warned": { + "message": "已警告" + }, + "panels/issues/IssuesPane.ts | attributionReporting": { + "message": "Attribution Reporting API" + }, + "panels/issues/IssuesPane.ts | contentSecurityPolicy": { + "message": "内容安全政策" + }, + "panels/issues/IssuesPane.ts | cors": { + "message": "跨域资源共享" + }, + "panels/issues/IssuesPane.ts | crossOriginEmbedderPolicy": { + "message": "跨域嵌入器政策" + }, + "panels/issues/IssuesPane.ts | generic": { + "message": "一般" + }, + "panels/issues/IssuesPane.ts | groupByCategory": { + "message": "按类别分组" + }, + "panels/issues/IssuesPane.ts | groupByKind": { + "message": "按种类分组" + }, + "panels/issues/IssuesPane.ts | groupDisplayedIssuesUnder": { + "message": "将显示的问题归入关联的类别下" + }, + "panels/issues/IssuesPane.ts | groupDisplayedIssuesUnderKind": { + "message": "将所显示的问题分组为“网页错误”、“重大变更”和“改进”" + }, + "panels/issues/IssuesPane.ts | heavyAds": { + "message": "过度消耗资源的广告" + }, + "panels/issues/IssuesPane.ts | includeCookieIssuesCausedBy": { + "message": "包含由第三方网站导致的 Cookie 问题" + }, + "panels/issues/IssuesPane.ts | includeThirdpartyCookieIssues": { + "message": "包含第三方 Cookie 问题" + }, + "panels/issues/IssuesPane.ts | lowTextContrast": { + "message": "低文字对比度" + }, + "panels/issues/IssuesPane.ts | mixedContent": { + "message": "混合内容" + }, + "panels/issues/IssuesPane.ts | noIssuesDetectedSoFar": { + "message": "截至目前未检测到任何问题" + }, + "panels/issues/IssuesPane.ts | onlyThirdpartyCookieIssues": { + "message": "目前仅检测到第三方 Cookie 问题" + }, + "panels/issues/IssuesPane.ts | other": { + "message": "其他" + }, + "panels/issues/IssuesPane.ts | quirksMode": { + "message": "怪异模式" + }, + "panels/issues/IssuesPane.ts | samesiteCookie": { + "message": "SameSite Cookie" + }, + "panels/issues/IssuesPane.ts | trustedWebActivity": { + "message": "可信网络活动" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | blocked": { + "message": "已被拦截" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | nModuleTransfers": { + "message": "{n,plural, =1{# 个模块}other{# 个模块}}" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | sourceOrigin": { + "message": "来源" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | status": { + "message": "状态" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | targetOrigin": { + "message": "目标源" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | warned": { + "message": "警告" + }, + "panels/issues/WasmCrossOriginModuleSharingAffectedResourcesView.ts | wasmModuleUrl": { + "message": "Wasm 模块网址" + }, + "panels/issues/components/HideIssuesMenu.ts | tooltipTitle": { + "message": "隐藏问题" + }, + "panels/issues/issues-meta.ts | cspViolations": { + "message": "CSP 违规行为" + }, + "panels/issues/issues-meta.ts | issues": { + "message": "问题" + }, + "panels/issues/issues-meta.ts | showCspViolations": { + "message": "显示“CSP 违规行为”" + }, + "panels/issues/issues-meta.ts | showIssues": { + "message": "显示“问题”工具" + }, + "panels/js_profiler/js_profiler-meta.ts | profiler": { + "message": "分析器" + }, + "panels/js_profiler/js_profiler-meta.ts | showProfiler": { + "message": "显示“分析器”工具" + }, + "panels/js_profiler/js_profiler-meta.ts | startStopRecording": { + "message": "开始/停止录制" + }, + "panels/layer_viewer/LayerDetailsView.ts | compositingReasons": { + "message": "合成原因" + }, + "panels/layer_viewer/LayerDetailsView.ts | containingBlocRectangleDimensions": { + "message": "包含块 {PH1} × {PH2}(位于 {PH3}, {PH4})" + }, + "panels/layer_viewer/LayerDetailsView.ts | mainThreadScrollingReason": { + "message": "主线程滚动原因" + }, + "panels/layer_viewer/LayerDetailsView.ts | memoryEstimate": { + "message": "内存估计值" + }, + "panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingContaining": { + "message": "最近的图层移动包含块" + }, + "panels/layer_viewer/LayerDetailsView.ts | nearestLayerShiftingStickyBox": { + "message": "最近的图层移位粘滞框" + }, + "panels/layer_viewer/LayerDetailsView.ts | nonFastScrollable": { + "message": "不可快速滚动" + }, + "panels/layer_viewer/LayerDetailsView.ts | paintCount": { + "message": "绘制次数" + }, + "panels/layer_viewer/LayerDetailsView.ts | paintProfiler": { + "message": "绘制性能剖析器" + }, + "panels/layer_viewer/LayerDetailsView.ts | repaintsOnScroll": { + "message": "滚动时重新渲染" + }, + "panels/layer_viewer/LayerDetailsView.ts | scrollRectangleDimensions": { + "message": "{PH1} {PH2} × {PH3}(位于 {PH4},{PH5})" + }, + "panels/layer_viewer/LayerDetailsView.ts | selectALayerToSeeItsDetails": { + "message": "选择某个层以查看其详情" + }, + "panels/layer_viewer/LayerDetailsView.ts | size": { + "message": "大小" + }, + "panels/layer_viewer/LayerDetailsView.ts | slowScrollRegions": { + "message": "缓慢滚动区域" + }, + "panels/layer_viewer/LayerDetailsView.ts | stickyAncenstorLayersS": { + "message": "{PH1}:{PH2} ({PH3})" + }, + "panels/layer_viewer/LayerDetailsView.ts | stickyBoxRectangleDimensions": { + "message": "粘滞框 {PH1} × {PH2}(位于:{PH3}, {PH4})" + }, + "panels/layer_viewer/LayerDetailsView.ts | stickyPositionConstraint": { + "message": "粘性位置限制" + }, + "panels/layer_viewer/LayerDetailsView.ts | touchEventHandler": { + "message": "触摸事件处理脚本" + }, + "panels/layer_viewer/LayerDetailsView.ts | unnamed": { + "message": "<未命名>" + }, + "panels/layer_viewer/LayerDetailsView.ts | updateRectangleDimensions": { + "message": "{PH1} × {PH2}(位于 {PH3}, {PH4})" + }, + "panels/layer_viewer/LayerDetailsView.ts | wheelEventHandler": { + "message": "滚轮事件处理脚本" + }, + "panels/layer_viewer/LayerTreeOutline.ts | layersTreePane": { + "message": "图层树窗格" + }, + "panels/layer_viewer/LayerTreeOutline.ts | showPaintProfiler": { + "message": "显示“绘制性能剖析器”" + }, + "panels/layer_viewer/LayerTreeOutline.ts | updateChildDimension": { + "message": " ({PH1} × {PH2})" + }, + "panels/layer_viewer/LayerViewHost.ts | showInternalLayers": { + "message": "显示内部层" + }, + "panels/layer_viewer/Layers3DView.ts | cantDisplayLayers": { + "message": "无法显示图层," + }, + "panels/layer_viewer/Layers3DView.ts | checkSForPossibleReasons": { + "message": "请检查 {PH1} 以了解可能的原因。" + }, + "panels/layer_viewer/Layers3DView.ts | dLayersView": { + "message": "3D 图层视图" + }, + "panels/layer_viewer/Layers3DView.ts | layerInformationIsNotYet": { + "message": "尚无层信息。" + }, + "panels/layer_viewer/Layers3DView.ts | paints": { + "message": "渲染" + }, + "panels/layer_viewer/Layers3DView.ts | resetView": { + "message": "重置视图" + }, + "panels/layer_viewer/Layers3DView.ts | showPaintProfiler": { + "message": "显示“绘制性能剖析器”" + }, + "panels/layer_viewer/Layers3DView.ts | slowScrollRects": { + "message": "慢速滚动方框" + }, + "panels/layer_viewer/Layers3DView.ts | webglSupportIsDisabledInYour": { + "message": "您的浏览器已停用 WebGL 支持。" + }, + "panels/layer_viewer/PaintProfilerView.ts | bitmap": { + "message": "位图" + }, + "panels/layer_viewer/PaintProfilerView.ts | commandLog": { + "message": "命令日志" + }, + "panels/layer_viewer/PaintProfilerView.ts | misc": { + "message": "其他" + }, + "panels/layer_viewer/PaintProfilerView.ts | profiling": { + "message": "正在进行性能分析…" + }, + "panels/layer_viewer/PaintProfilerView.ts | profilingResults": { + "message": "性能分析结果" + }, + "panels/layer_viewer/PaintProfilerView.ts | shapes": { + "message": "图形" + }, + "panels/layer_viewer/PaintProfilerView.ts | text": { + "message": "文本" + }, + "panels/layer_viewer/TransformController.ts | panModeX": { + "message": "平移模式 (X)" + }, + "panels/layer_viewer/TransformController.ts | resetTransform": { + "message": "重置转换 (0)" + }, + "panels/layer_viewer/TransformController.ts | rotateModeV": { + "message": "旋转模式 (V)" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateDown": { + "message": "向下平移或旋转" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateLeft": { + "message": "向左平移或旋转" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateRight": { + "message": "向右平移或旋转" + }, + "panels/layer_viewer/layer_viewer-meta.ts | panOrRotateUp": { + "message": "向上平移或旋转" + }, + "panels/layer_viewer/layer_viewer-meta.ts | resetView": { + "message": "重置视图" + }, + "panels/layer_viewer/layer_viewer-meta.ts | switchToPanMode": { + "message": "切换到平移模式" + }, + "panels/layer_viewer/layer_viewer-meta.ts | switchToRotateMode": { + "message": "切换到旋转模式" + }, + "panels/layer_viewer/layer_viewer-meta.ts | zoomIn": { + "message": "放大" + }, + "panels/layer_viewer/layer_viewer-meta.ts | zoomOut": { + "message": "缩小" + }, + "panels/layers/LayersPanel.ts | details": { + "message": "详细信息" + }, + "panels/layers/LayersPanel.ts | profiler": { + "message": "分析器" + }, + "panels/layers/layers-meta.ts | layers": { + "message": "图层" + }, + "panels/layers/layers-meta.ts | showLayers": { + "message": "显示“图层”工具" + }, + "panels/lighthouse/LighthouseController.ts | accessibility": { + "message": "无障碍功能" + }, + "panels/lighthouse/LighthouseController.ts | applyMobileEmulation": { + "message": "应用移动设备模拟" + }, + "panels/lighthouse/LighthouseController.ts | applyMobileEmulationDuring": { + "message": "在审核期间应用移动设备模拟" + }, + "panels/lighthouse/LighthouseController.ts | atLeastOneCategoryMustBeSelected": { + "message": "必须选择至少 1 个类别。" + }, + "panels/lighthouse/LighthouseController.ts | bestPractices": { + "message": "最佳做法" + }, + "panels/lighthouse/LighthouseController.ts | canOnlyAuditHttphttpsPagesAnd": { + "message": "只能审核 HTTP/HTTPS 网页和 Chrome 扩展程序。转到其他网页以开始审核。" + }, + "panels/lighthouse/LighthouseController.ts | clearStorage": { + "message": "清除存储数据" + }, + "panels/lighthouse/LighthouseController.ts | desktop": { + "message": "桌面设备" + }, + "panels/lighthouse/LighthouseController.ts | doesThisPageFollowBestPractices": { + "message": "此网页是否遵循现代 Web 开发的最佳做法" + }, + "panels/lighthouse/LighthouseController.ts | doesThisPageMeetTheStandardOfA": { + "message": "此网页是否符合渐进式 Web 应用的标准" + }, + "panels/lighthouse/LighthouseController.ts | howLongDoesThisAppTakeToShow": { + "message": "此应用需要多长时间才会显示内容并变为可以使用" + }, + "panels/lighthouse/LighthouseController.ts | indexeddb": { + "message": "IndexedDB" + }, + "panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForAdSpeedAnd": { + "message": "此网页是否针对广告速度和质量进行了优化" + }, + "panels/lighthouse/LighthouseController.ts | isThisPageOptimizedForSearch": { + "message": "该网页是否已经过优化,以提升其在搜索引擎结果中的排名" + }, + "panels/lighthouse/LighthouseController.ts | isThisPageUsableByPeopleWith": { + "message": "此网页是否可供残障人士使用" + }, + "panels/lighthouse/LighthouseController.ts | localStorage": { + "message": "本地存储空间" + }, + "panels/lighthouse/LighthouseController.ts | mobile": { + "message": "移动设备" + }, + "panels/lighthouse/LighthouseController.ts | multipleTabsAreBeingControlledBy": { + "message": "多个标签页正受到同一个 service worker 的控制。请关闭同一来源的其他标签页以审核此网页。" + }, + "panels/lighthouse/LighthouseController.ts | performance": { + "message": "性能" + }, + "panels/lighthouse/LighthouseController.ts | progressiveWebApp": { + "message": "渐进式 Web 应用" + }, + "panels/lighthouse/LighthouseController.ts | publisherAds": { + "message": "发布商广告" + }, + "panels/lighthouse/LighthouseController.ts | resetStorageLocalstorage": { + "message": "在审核前重置存储空间(cache 和 service workers 等)。(适用于性能和 PWA 测试)" + }, + "panels/lighthouse/LighthouseController.ts | seo": { + "message": "SEO" + }, + "panels/lighthouse/LighthouseController.ts | simulateASlowerPageLoadBasedOn": { + "message": "根据初始未节流加载的数据,模拟较慢的网页加载速度。若停用此设置,网页实际上将因为节流而降低速度。" + }, + "panels/lighthouse/LighthouseController.ts | simulatedThrottling": { + "message": "模拟节流" + }, + "panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingLoadingPlural": { + "message": "下列位置可能存储了会影响加载性能的数据:{PH1}。请在无痕式窗口中审核此页面,以防止这些资源影响您的得分。" + }, + "panels/lighthouse/LighthouseController.ts | thereMayBeStoredDataAffectingSingular": { + "message": "下列位置可能存储了会影响加载性能的数据:{PH1}。请在无痕式窗口中审核此网页,以防止这些资源影响您的得分。" + }, + "panels/lighthouse/LighthouseController.ts | webSql": { + "message": "Web SQL" + }, + "panels/lighthouse/LighthousePanel.ts | cancelling": { + "message": "正在取消" + }, + "panels/lighthouse/LighthousePanel.ts | clearAll": { + "message": "全部清除" + }, + "panels/lighthouse/LighthousePanel.ts | dropLighthouseJsonHere": { + "message": "将 Lighthouse JSON 拖到此处" + }, + "panels/lighthouse/LighthousePanel.ts | lighthouseSettings": { + "message": "Lighthouse 设置" + }, + "panels/lighthouse/LighthousePanel.ts | performAnAudit": { + "message": "执行审核…" + }, + "panels/lighthouse/LighthousePanel.ts | printing": { + "message": "正在打印" + }, + "panels/lighthouse/LighthousePanel.ts | thePrintPopupWindowIsOpenPlease": { + "message": "弹出式窗口“打印”已打开。请关闭它以继续操作。" + }, + "panels/lighthouse/LighthouseReportRenderer.ts | thePerformanceMetricsAboveAre": { + "message": "上述性能指标为模拟数据,因此不会与此跟踪记录中的时间相匹配。如需使时间相匹配,请停用“Lighthouse 设置”中的模拟节流功能。" + }, + "panels/lighthouse/LighthouseReportRenderer.ts | viewOriginalTrace": { + "message": "查看原始跟踪记录" + }, + "panels/lighthouse/LighthouseReportRenderer.ts | viewTrace": { + "message": "查看跟踪记录" + }, + "panels/lighthouse/LighthouseReportSelector.ts | newReport": { + "message": "(新报告)" + }, + "panels/lighthouse/LighthouseReportSelector.ts | reports": { + "message": "报告" + }, + "panels/lighthouse/LighthouseStartView.ts | categories": { + "message": "类别" + }, + "panels/lighthouse/LighthouseStartView.ts | communityPluginsBeta": { + "message": "社区插件(Beta 版)" + }, + "panels/lighthouse/LighthouseStartView.ts | device": { + "message": "设备" + }, + "panels/lighthouse/LighthouseStartView.ts | generateReport": { + "message": "生成报告" + }, + "panels/lighthouse/LighthouseStartView.ts | identifyAndFixCommonProblemsThat": { + "message": "识别并修正影响网站性能、无障碍功能和用户体验的常见问题。" + }, + "panels/lighthouse/LighthouseStartView.ts | learnMore": { + "message": "了解详情" + }, + "panels/lighthouse/LighthouseStatusView.ts | OfGlobalMobileUsersInWereOnGOrG": { + "message": "2016 年,全球有 75% 的手机用户使用的是 2G 或 3G 网络 [来源:GSMA Mobile]" + }, + "panels/lighthouse/LighthouseStatusView.ts | OfMobilePagesTakeNearlySeconds": { + "message": "70% 的移动版页面需要将近 7 秒的时间才能在屏幕上显示首屏视觉内容。[来源:Think with Google]" + }, + "panels/lighthouse/LighthouseStatusView.ts | SecondsIsTheAverageTimeAMobile": { + "message": "移动网页使用 3G 网络连接完成加载所需的平均时间为 19 秒。[来源:Google DoubleClick blog]" + }, + "panels/lighthouse/LighthouseStatusView.ts | ahSorryWeRanIntoAnError": { + "message": "抱歉!出错了。" + }, + "panels/lighthouse/LighthouseStatusView.ts | almostThereLighthouseIsNow": { + "message": "即将完成!Lighthouse 正在为您生成报告。" + }, + "panels/lighthouse/LighthouseStatusView.ts | asPageLoadTimeIncreasesFromOne": { + "message": "当网页加载用时从 1 秒增加到 7 秒时,移动网站访问者的跳出概率会增大 113%。[来源:Think with Google]" + }, + "panels/lighthouse/LighthouseStatusView.ts | asTheNumberOfElementsOnAPage": { + "message": "随着网页上元素的数量从 400 增加到 6000,转化率下降了 95%。[来源:Think with Google]" + }, + "panels/lighthouse/LighthouseStatusView.ts | auditingS": { + "message": "正在审核 {PH1}" + }, + "panels/lighthouse/LighthouseStatusView.ts | auditingYourWebPage": { + "message": "正在评估您的网页" + }, + "panels/lighthouse/LighthouseStatusView.ts | byReducingTheResponseSizeOfJson": { + "message": "通过降低显示评论所需的 JSON 的响应大小,Instagram 的展示次数得到了提升 [来源:WPO Stats]" + }, + "panels/lighthouse/LighthouseStatusView.ts | cancel": { + "message": "取消" + }, + "panels/lighthouse/LighthouseStatusView.ts | cancelling": { + "message": "正在取消…" + }, + "panels/lighthouse/LighthouseStatusView.ts | fastFactMessageWithPlaceholder": { + "message": "💡 {PH1}" + }, + "panels/lighthouse/LighthouseStatusView.ts | ifASiteTakesSecondToBecome": { + "message": "如果某个网站需要花费 >1 秒的时间才能进入可互动的状态,用户就会对该网站失去兴趣,并且会不愿完成网页任务 [来源:Google Developers Blog]" + }, + "panels/lighthouse/LighthouseStatusView.ts | ifThisIssueIsReproduciblePlease": { + "message": "如果此问题可重现,请在 Lighthouse GitHub 代码库中报告此问题。" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsGatheringInformation": { + "message": "Lighthouse 正在收集该网页的相关信息以计算您的得分。" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingThePage": { + "message": "Lighthouse 正在加载网页。" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPage": { + "message": "Lighthouse 正在加载您的网页" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWith": { + "message": "Lighthouse 正在使用节流功能加载您的网页,以便衡量 3G 网络下移动设备的性能。" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithMobile": { + "message": "Lighthouse 正在通过移动设备模拟加载您的网页。" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsLoadingYourPageWithThrottling": { + "message": "Lighthouse 正在使用节流功能加载您的网页,以便衡量 3G 网络下慢速桌面设备的性能。" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseIsWarmingUp": { + "message": "Lighthouse 正在预热…" + }, + "panels/lighthouse/LighthouseStatusView.ts | lighthouseOnlySimulatesMobile": { + "message": "Lighthouse 仅模拟移动端性能;若要衡量在实际设备上的性能,请访问 WebPageTest.org [来源:Lighthouse 团队]" + }, + "panels/lighthouse/LighthouseStatusView.ts | loading": { + "message": "正在加载…" + }, + "panels/lighthouse/LighthouseStatusView.ts | mbTakesAMinimumOfSecondsTo": { + "message": "通过一般的 3G 网络连接下载 1MB 内容至少需要 5 秒 [来源:WebPageTest 和 DevTools 3G 定义]。" + }, + "panels/lighthouse/LighthouseStatusView.ts | rebuildingPinterestPagesFor": { + "message": "Pinterest 以优化性能为目的重新构建网页后,转化率提升了 15% [来源:WPO Stats]" + }, + "panels/lighthouse/LighthouseStatusView.ts | theAverageUserDeviceCostsLess": { + "message": "用户设备平均成本低于 200 美元。[来源:International Data Corporation]" + }, + "panels/lighthouse/LighthouseStatusView.ts | tryToNavigateToTheUrlInAFresh": { + "message": "尝试在新的 Chrome 个人资料名下转到相应网址,并且不打开任何其他标签页或扩展程序,然后重试。" + }, + "panels/lighthouse/LighthouseStatusView.ts | walmartSawAIncreaseInRevenueFor": { + "message": "Walmart 发现,网页加载用时每减少 100 毫秒,收入就会增加 1% [来源:WPO Stats]" + }, + "panels/lighthouse/lighthouse-meta.ts | showLighthouse": { + "message": "显示 Lighthouse" + }, + "panels/media/EventDisplayTable.ts | eventDisplay": { + "message": "事件显示" + }, + "panels/media/EventDisplayTable.ts | eventName": { + "message": "事件名称" + }, + "panels/media/EventDisplayTable.ts | timestamp": { + "message": "时间戳" + }, + "panels/media/EventDisplayTable.ts | value": { + "message": "值" + }, + "panels/media/EventTimelineView.ts | bufferingStatus": { + "message": "缓冲状态" + }, + "panels/media/EventTimelineView.ts | playbackStatus": { + "message": "播放状态" + }, + "panels/media/PlayerDetailView.ts | events": { + "message": "事件" + }, + "panels/media/PlayerDetailView.ts | messages": { + "message": "消息" + }, + "panels/media/PlayerDetailView.ts | playerEvents": { + "message": "播放器事件" + }, + "panels/media/PlayerDetailView.ts | playerMessages": { + "message": "播放器消息" + }, + "panels/media/PlayerDetailView.ts | playerProperties": { + "message": "播放器属性" + }, + "panels/media/PlayerDetailView.ts | playerTimeline": { + "message": "播放器时间轴" + }, + "panels/media/PlayerDetailView.ts | properties": { + "message": "属性" + }, + "panels/media/PlayerDetailView.ts | timeline": { + "message": "时间轴" + }, + "panels/media/PlayerListView.ts | hideAllOthers": { + "message": "隐藏其他所有条目" + }, + "panels/media/PlayerListView.ts | hidePlayer": { + "message": "隐藏播放器" + }, + "panels/media/PlayerListView.ts | players": { + "message": "播放器" + }, + "panels/media/PlayerListView.ts | savePlayerInfo": { + "message": "保存播放器信息" + }, + "panels/media/PlayerMessagesView.ts | all": { + "message": "全部" + }, + "panels/media/PlayerMessagesView.ts | custom": { + "message": "自定义" + }, + "panels/media/PlayerMessagesView.ts | debug": { + "message": "调试" + }, + "panels/media/PlayerMessagesView.ts | default": { + "message": "默认" + }, + "panels/media/PlayerMessagesView.ts | error": { + "message": "错误" + }, + "panels/media/PlayerMessagesView.ts | filterLogMessages": { + "message": "过滤日志消息" + }, + "panels/media/PlayerMessagesView.ts | info": { + "message": "信息" + }, + "panels/media/PlayerMessagesView.ts | logLevel": { + "message": "日志级别:" + }, + "panels/media/PlayerMessagesView.ts | warning": { + "message": "警告" + }, + "panels/media/PlayerPropertiesView.ts | audio": { + "message": "音频" + }, + "panels/media/PlayerPropertiesView.ts | bitrate": { + "message": "比特率" + }, + "panels/media/PlayerPropertiesView.ts | decoder": { + "message": "解码器" + }, + "panels/media/PlayerPropertiesView.ts | decoderName": { + "message": "解码器名称" + }, + "panels/media/PlayerPropertiesView.ts | decryptingDemuxer": { + "message": "正在为 demuxer 解密" + }, + "panels/media/PlayerPropertiesView.ts | duration": { + "message": "时长" + }, + "panels/media/PlayerPropertiesView.ts | encoderName": { + "message": "编码器名称" + }, + "panels/media/PlayerPropertiesView.ts | fileSize": { + "message": "文件大小" + }, + "panels/media/PlayerPropertiesView.ts | frameRate": { + "message": "帧速率" + }, + "panels/media/PlayerPropertiesView.ts | hardwareDecoder": { + "message": "硬件解码器" + }, + "panels/media/PlayerPropertiesView.ts | hardwareEncoder": { + "message": "硬件编码器" + }, + "panels/media/PlayerPropertiesView.ts | noDecoder": { + "message": "无解码器" + }, + "panels/media/PlayerPropertiesView.ts | noEncoder": { + "message": "无解码器" + }, + "panels/media/PlayerPropertiesView.ts | noTextTracks": { + "message": "无文本轨道" + }, + "panels/media/PlayerPropertiesView.ts | playbackFrameTitle": { + "message": "播放框架标题" + }, + "panels/media/PlayerPropertiesView.ts | playbackFrameUrl": { + "message": "播放框架网址" + }, + "panels/media/PlayerPropertiesView.ts | properties": { + "message": "属性" + }, + "panels/media/PlayerPropertiesView.ts | rangeHeaderSupport": { + "message": "支持 Range 标头" + }, + "panels/media/PlayerPropertiesView.ts | rendererName": { + "message": "渲染程序名称" + }, + "panels/media/PlayerPropertiesView.ts | resolution": { + "message": "分辨率" + }, + "panels/media/PlayerPropertiesView.ts | singleoriginPlayback": { + "message": "单源播放" + }, + "panels/media/PlayerPropertiesView.ts | startTime": { + "message": "开始时间" + }, + "panels/media/PlayerPropertiesView.ts | streaming": { + "message": "在线播放" + }, + "panels/media/PlayerPropertiesView.ts | textTrack": { + "message": "文本轨道" + }, + "panels/media/PlayerPropertiesView.ts | track": { + "message": "曲目" + }, + "panels/media/PlayerPropertiesView.ts | video": { + "message": "视频" + }, + "panels/media/PlayerPropertiesView.ts | videoFreezingScore": { + "message": "视频冻结得分" + }, + "panels/media/PlayerPropertiesView.ts | videoPlaybackRoughness": { + "message": "视频播放质量差距" + }, + "panels/media/media-meta.ts | media": { + "message": "媒体" + }, + "panels/media/media-meta.ts | showMedia": { + "message": "显示“媒体”" + }, + "panels/media/media-meta.ts | video": { + "message": "视频" + }, + "panels/mobile_throttling/MobileThrottlingSelector.ts | advanced": { + "message": "高级" + }, + "panels/mobile_throttling/MobileThrottlingSelector.ts | disabled": { + "message": "已停用" + }, + "panels/mobile_throttling/MobileThrottlingSelector.ts | presets": { + "message": "预设" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | acceptedEncodingOverrideSet": { + "message": "接受的 Content-Encoding 标头集合已被 DevTools 修改。请查看“网络状况”面板。" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | networkThrottlingIsEnabled": { + "message": "已启用网络节流" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeBlocked": { + "message": "请求可能会被屏蔽" + }, + "panels/mobile_throttling/NetworkPanelIndicator.ts | requestsMayBeRewrittenByLocal": { + "message": "请求可能会被本地替换重写" + }, + "panels/mobile_throttling/NetworkThrottlingSelector.ts | custom": { + "message": "自定义" + }, + "panels/mobile_throttling/NetworkThrottlingSelector.ts | disabled": { + "message": "已停用" + }, + "panels/mobile_throttling/NetworkThrottlingSelector.ts | presets": { + "message": "预设" + }, + "panels/mobile_throttling/ThrottlingManager.ts | add": { + "message": "添加…" + }, + "panels/mobile_throttling/ThrottlingManager.ts | addS": { + "message": "添加{PH1}" + }, + "panels/mobile_throttling/ThrottlingManager.ts | cpuThrottling": { + "message": "CPU 节流" + }, + "panels/mobile_throttling/ThrottlingManager.ts | cpuThrottlingIsEnabled": { + "message": "CPU 节流已启用" + }, + "panels/mobile_throttling/ThrottlingManager.ts | dSlowdown": { + "message": "{PH1} 倍降速" + }, + "panels/mobile_throttling/ThrottlingManager.ts | forceDisconnectedFromNetwork": { + "message": "强制断开网络连接" + }, + "panels/mobile_throttling/ThrottlingManager.ts | noThrottling": { + "message": "已停用节流模式" + }, + "panels/mobile_throttling/ThrottlingManager.ts | offline": { + "message": "离线" + }, + "panels/mobile_throttling/ThrottlingManager.ts | sS": { + "message": "{PH1}:{PH2}" + }, + "panels/mobile_throttling/ThrottlingManager.ts | throttling": { + "message": "节流" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | checkNetworkAndPerformancePanels": { + "message": "检查“网络”和“性能”面板" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | custom": { + "message": "自定义" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | fastGXCpuSlowdown": { + "message": "快速 3G 和 4 倍 CPU 降速" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | lowendMobile": { + "message": "低端手机" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | midtierMobile": { + "message": "中端移动设备" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | noInternetConnectivity": { + "message": "未连接到互联网" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | noThrottling": { + "message": "已停用节流模式" + }, + "panels/mobile_throttling/ThrottlingPresets.ts | slowGXCpuSlowdown": { + "message": "慢速 3G 和 6 倍 CPU 降速" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | addCustomProfile": { + "message": "添加自定义配置文件…" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | dms": { + "message": "{PH1} ms" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | download": { + "message": "下载" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | dskbits": { + "message": "{PH1} kbit/s" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | fsmbits": { + "message": "{PH1} Mbit/s" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | latency": { + "message": "延迟时间" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | latencyMustBeAnIntegerBetweenSms": { + "message": "延迟时间必须是介于 {PH1} ms到 {PH2} ms(含端点值)之间的整数" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | networkThrottlingProfiles": { + "message": "网络节流性能分析报告" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | optional": { + "message": "可选" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | profileName": { + "message": "性能分析报告名称" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | profileNameCharactersLengthMust": { + "message": "配置文件名称的长度必须介于 1 到 {PH1} 个字符之间(包括端点值)" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | sMustBeANumberBetweenSkbsToSkbs": { + "message": "{PH1}必须是介于 {PH2} kbit/s到 {PH3} kbit/s(含端点值)之间的数字" + }, + "panels/mobile_throttling/ThrottlingSettingsTab.ts | upload": { + "message": "上传" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | device": { + "message": "设备" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | enableFastGThrottling": { + "message": "启用快速 3G 节流" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | enableSlowGThrottling": { + "message": "启用低速 3G 节流" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | goOffline": { + "message": "转为离线模式" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | goOnline": { + "message": "恢复在线状态" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | showThrottling": { + "message": "显示“节流”" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | throttling": { + "message": "节流" + }, + "panels/mobile_throttling/mobile_throttling-meta.ts | throttlingTag": { + "message": "节流" + }, + "panels/network/BinaryResourceView.ts | binaryViewType": { + "message": "二进制视图类型" + }, + "panels/network/BinaryResourceView.ts | copiedAsBase": { + "message": "已经以 Base64 格式复制" + }, + "panels/network/BinaryResourceView.ts | copiedAsHex": { + "message": "已经以 Hex 格式复制" + }, + "panels/network/BinaryResourceView.ts | copiedAsUtf": { + "message": "已经以 UTF-8 格式复制" + }, + "panels/network/BinaryResourceView.ts | copyAsBase": { + "message": "以 Base64 格式复制" + }, + "panels/network/BinaryResourceView.ts | copyAsHex": { + "message": "以 Hex 格式复制" + }, + "panels/network/BinaryResourceView.ts | copyAsUtf": { + "message": "以 UTF-8 格式复制" + }, + "panels/network/BinaryResourceView.ts | copyToClipboard": { + "message": "复制到剪贴板" + }, + "panels/network/BinaryResourceView.ts | hexViewer": { + "message": "Hex查看器" + }, + "panels/network/BlockedURLsPane.ts | addNetworkRequestBlockingPattern": { + "message": "添加网络请求屏蔽模式" + }, + "panels/network/BlockedURLsPane.ts | addPattern": { + "message": "添加模式" + }, + "panels/network/BlockedURLsPane.ts | dBlocked": { + "message": "已屏蔽 {PH1} 个" + }, + "panels/network/BlockedURLsPane.ts | enableNetworkRequestBlocking": { + "message": "启用网络请求屏蔽功能" + }, + "panels/network/BlockedURLsPane.ts | itemDeleted": { + "message": "已成功删除此列表项" + }, + "panels/network/BlockedURLsPane.ts | networkRequestsAreNotBlockedS": { + "message": "未屏蔽网络请求。{PH1}" + }, + "panels/network/BlockedURLsPane.ts | patternAlreadyExists": { + "message": "模式已经存在。" + }, + "panels/network/BlockedURLsPane.ts | patternInputCannotBeEmpty": { + "message": "模式输入不能为空。" + }, + "panels/network/BlockedURLsPane.ts | removeAllPatterns": { + "message": "移除所有模式" + }, + "panels/network/BlockedURLsPane.ts | textPatternToBlockMatching": { + "message": "用于屏蔽匹配请求的文本模式;请使用 * 作为通配符" + }, + "panels/network/EventSourceMessagesView.ts | copyMessage": { + "message": "复制消息" + }, + "panels/network/EventSourceMessagesView.ts | data": { + "message": "数据" + }, + "panels/network/EventSourceMessagesView.ts | eventSource": { + "message": "事件来源" + }, + "panels/network/EventSourceMessagesView.ts | id": { + "message": "ID" + }, + "panels/network/EventSourceMessagesView.ts | time": { + "message": "时间" + }, + "panels/network/EventSourceMessagesView.ts | type": { + "message": "类型" + }, + "panels/network/NetworkConfigView.ts | acceptedEncoding": { + "message": "接受的 Content-Encoding" + }, + "panels/network/NetworkConfigView.ts | caching": { + "message": "缓存" + }, + "panels/network/NetworkConfigView.ts | custom": { + "message": "自定义…" + }, + "panels/network/NetworkConfigView.ts | customUserAgentFieldIsRequired": { + "message": "“自定义用户代理”字段是必填项" + }, + "panels/network/NetworkConfigView.ts | disableCache": { + "message": "停用缓存" + }, + "panels/network/NetworkConfigView.ts | enterACustomUserAgent": { + "message": "输入自定义用户代理" + }, + "panels/network/NetworkConfigView.ts | networkThrottling": { + "message": "网络节流" + }, + "panels/network/NetworkConfigView.ts | selectAutomatically": { + "message": "使用浏览器默认设置" + }, + "panels/network/NetworkConfigView.ts | userAgent": { + "message": "用户代理" + }, + "panels/network/NetworkDataGridNode.ts | blockedTooltip": { + "message": "此请求因配置有误的响应标头而被屏蔽,点击即可查看这些标头" + }, + "panels/network/NetworkDataGridNode.ts | blockeds": { + "message": "(已屏蔽:{PH1})" + }, + "panels/network/NetworkDataGridNode.ts | canceled": { + "message": "(已取消)" + }, + "panels/network/NetworkDataGridNode.ts | corsError": { + "message": "CORS 错误" + }, + "panels/network/NetworkDataGridNode.ts | crossoriginResourceSharingErrorS": { + "message": "跨域资源共享错误:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | csp": { + "message": "csp" + }, + "panels/network/NetworkDataGridNode.ts | data": { + "message": "(数据)" + }, + "panels/network/NetworkDataGridNode.ts | devtools": { + "message": "DevTools" + }, + "panels/network/NetworkDataGridNode.ts | diskCache": { + "message": "(disk cache)" + }, + "panels/network/NetworkDataGridNode.ts | failed": { + "message": "(失败)" + }, + "panels/network/NetworkDataGridNode.ts | finished": { + "message": "已完成" + }, + "panels/network/NetworkDataGridNode.ts | level": { + "message": "级别 1" + }, + "panels/network/NetworkDataGridNode.ts | memoryCache": { + "message": "(内存缓存)" + }, + "panels/network/NetworkDataGridNode.ts | origin": { + "message": "来源" + }, + "panels/network/NetworkDataGridNode.ts | other": { + "message": "其他" + }, + "panels/network/NetworkDataGridNode.ts | otherC": { + "message": "其他" + }, + "panels/network/NetworkDataGridNode.ts | parser": { + "message": "解析器" + }, + "panels/network/NetworkDataGridNode.ts | pending": { + "message": "待处理" + }, + "panels/network/NetworkDataGridNode.ts | pendingq": { + "message": "(待处理)" + }, + "panels/network/NetworkDataGridNode.ts | prefetchCache": { + "message": "(预提取缓存)" + }, + "panels/network/NetworkDataGridNode.ts | preflight": { + "message": "预检" + }, + "panels/network/NetworkDataGridNode.ts | preload": { + "message": "预加载" + }, + "panels/network/NetworkDataGridNode.ts | push": { + "message": "推送 / " + }, + "panels/network/NetworkDataGridNode.ts | redirect": { + "message": "重定向" + }, + "panels/network/NetworkDataGridNode.ts | sPreflight": { + "message": "{PH1} + 预检" + }, + "panels/network/NetworkDataGridNode.ts | script": { + "message": "脚本" + }, + "panels/network/NetworkDataGridNode.ts | selectPreflightRequest": { + "message": "选择预定流程请求" + }, + "panels/network/NetworkDataGridNode.ts | selectTheRequestThatTriggered": { + "message": "选择触发了此预定流程的请求" + }, + "panels/network/NetworkDataGridNode.ts | servedFromDiskCacheResourceSizeS": { + "message": "通过磁盘缓存提供,资源大小:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromMemoryCacheResource": { + "message": "由内存缓存提供,资源大小:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromPrefetchCacheResource": { + "message": "由预提取缓存提供,资源大小:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromServiceworkerResource": { + "message": "由 ServiceWorker 提供,资源大小:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromSignedHttpExchange": { + "message": "通过 Signed HTTP Exchange 提供,资源大小:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | servedFromWebBundle": { + "message": "由 Web Bundle 提供,资源大小:{PH1}" + }, + "panels/network/NetworkDataGridNode.ts | serviceworker": { + "message": "(ServiceWorker)" + }, + "panels/network/NetworkDataGridNode.ts | signedexchange": { + "message": "signed-exchange" + }, + "panels/network/NetworkDataGridNode.ts | timeSubtitleTooltipText": { + "message": "延迟时间(收到响应的时间 - 发起请求的时间)" + }, + "panels/network/NetworkDataGridNode.ts | unknown": { + "message": "(未知)" + }, + "panels/network/NetworkDataGridNode.ts | unknownExplanation": { + "message": "无法在此处显示该请求的状态,因为发出该请求的网页在传输该请求的过程中被卸载了。您可以使用 chrome://net-export 来捕获网络日志并查看所有请求详情。" + }, + "panels/network/NetworkDataGridNode.ts | webBundle": { + "message": "(Web Bundle)" + }, + "panels/network/NetworkDataGridNode.ts | webBundleError": { + "message": "Web Bundle 错误" + }, + "panels/network/NetworkDataGridNode.ts | webBundleInnerRequest": { + "message": "由 Web Bundle 传回" + }, + "panels/network/NetworkItemView.ts | cookies": { + "message": "Cookie" + }, + "panels/network/NetworkItemView.ts | eventstream": { + "message": "EventStream" + }, + "panels/network/NetworkItemView.ts | headers": { + "message": "标头" + }, + "panels/network/NetworkItemView.ts | initiator": { + "message": "启动器" + }, + "panels/network/NetworkItemView.ts | messages": { + "message": "消息" + }, + "panels/network/NetworkItemView.ts | payload": { + "message": "载荷" + }, + "panels/network/NetworkItemView.ts | preview": { + "message": "预览" + }, + "panels/network/NetworkItemView.ts | rawResponseData": { + "message": "原始响应数据" + }, + "panels/network/NetworkItemView.ts | requestAndResponseCookies": { + "message": "请求和响应 Cookie" + }, + "panels/network/NetworkItemView.ts | requestAndResponseTimeline": { + "message": "请求和响应时间轴" + }, + "panels/network/NetworkItemView.ts | requestInitiatorCallStack": { + "message": "请求启动器调用堆栈" + }, + "panels/network/NetworkItemView.ts | response": { + "message": "响应" + }, + "panels/network/NetworkItemView.ts | responsePreview": { + "message": "响应预览" + }, + "panels/network/NetworkItemView.ts | signedexchangeError": { + "message": "SignedExchange 错误" + }, + "panels/network/NetworkItemView.ts | timing": { + "message": "时间" + }, + "panels/network/NetworkItemView.ts | trustTokenOperationDetails": { + "message": "信任令牌操作详情" + }, + "panels/network/NetworkItemView.ts | trustTokens": { + "message": "信任令牌" + }, + "panels/network/NetworkItemView.ts | websocketMessages": { + "message": "WebSocket 消息" + }, + "panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowser": { + "message": "确定要清除浏览器缓存吗?" + }, + "panels/network/NetworkLogView.ts | areYouSureYouWantToClearBrowserCookies": { + "message": "确定要清除浏览器 Cookie 吗?" + }, + "panels/network/NetworkLogView.ts | blockRequestDomain": { + "message": "屏蔽请求网域" + }, + "panels/network/NetworkLogView.ts | blockRequestUrl": { + "message": "屏蔽请求网址" + }, + "panels/network/NetworkLogView.ts | blockedRequests": { + "message": "被屏蔽的请求" + }, + "panels/network/NetworkLogView.ts | clearBrowserCache": { + "message": "清除浏览器缓存" + }, + "panels/network/NetworkLogView.ts | clearBrowserCookies": { + "message": "清除浏览器 Cookie" + }, + "panels/network/NetworkLogView.ts | copy": { + "message": "复制" + }, + "panels/network/NetworkLogView.ts | copyAllAsCurl": { + "message": "以 cURL 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAllAsCurlBash": { + "message": "以 cURL (bash) 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAllAsCurlCmd": { + "message": "以 cURL (cmd) 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAllAsFetch": { + "message": "以 fetch 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAllAsHar": { + "message": "以 HAR 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAllAsNodejsFetch": { + "message": "以 Node.js fetch 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAllAsPowershell": { + "message": "以 PowerShell 格式复制所有内容" + }, + "panels/network/NetworkLogView.ts | copyAsCurl": { + "message": "以 cURL 格式复制" + }, + "panels/network/NetworkLogView.ts | copyAsCurlBash": { + "message": "以 cURL (bash) 格式复制" + }, + "panels/network/NetworkLogView.ts | copyAsCurlCmd": { + "message": "以 cURL (cmd) 格式复制" + }, + "panels/network/NetworkLogView.ts | copyAsFetch": { + "message": "以 fetch 格式复制" + }, + "panels/network/NetworkLogView.ts | copyAsNodejsFetch": { + "message": "以 Node.jsfetch 格式复制" + }, + "panels/network/NetworkLogView.ts | copyAsPowershell": { + "message": "以 PowerShell 格式复制" + }, + "panels/network/NetworkLogView.ts | copyRequestHeaders": { + "message": "复制请求标头" + }, + "panels/network/NetworkLogView.ts | copyResponse": { + "message": "复制响应" + }, + "panels/network/NetworkLogView.ts | copyResponseHeaders": { + "message": "复制响应标头" + }, + "panels/network/NetworkLogView.ts | copyStacktrace": { + "message": "复制堆栈轨迹" + }, + "panels/network/NetworkLogView.ts | domcontentloadedS": { + "message": "DOMContentLoaded:{PH1}" + }, + "panels/network/NetworkLogView.ts | dropHarFilesHere": { + "message": "将 HAR 文件拖放到此处" + }, + "panels/network/NetworkLogView.ts | finishS": { + "message": "完成用时:{PH1}" + }, + "panels/network/NetworkLogView.ts | hasBlockedCookies": { + "message": "有已拦截的 Cookie" + }, + "panels/network/NetworkLogView.ts | hideDataUrls": { + "message": "隐藏数据网址" + }, + "panels/network/NetworkLogView.ts | hidesDataAndBlobUrls": { + "message": "隐藏 data: 和 blob: 网址" + }, + "panels/network/NetworkLogView.ts | invertFilter": { + "message": "反转" + }, + "panels/network/NetworkLogView.ts | invertsFilter": { + "message": "反转搜索过滤器" + }, + "panels/network/NetworkLogView.ts | learnMore": { + "message": "了解详情" + }, + "panels/network/NetworkLogView.ts | loadS": { + "message": "加载时间:{PH1}" + }, + "panels/network/NetworkLogView.ts | networkDataAvailable": { + "message": "网络数据可用" + }, + "panels/network/NetworkLogView.ts | onlyShowBlockedRequests": { + "message": "仅显示被屏蔽的请求" + }, + "panels/network/NetworkLogView.ts | onlyShowRequestsWithBlocked": { + "message": "仅显示带有被屏蔽的响应 Cookie 的请求" + }, + "panels/network/NetworkLogView.ts | onlyShowThirdPartyRequests": { + "message": "仅显示不是由网页源发出的请求" + }, + "panels/network/NetworkLogView.ts | performARequestOrHitSToRecordThe": { + "message": "执行某项请求或按 {PH1} 即可记录重新加载。" + }, + "panels/network/NetworkLogView.ts | recordToDisplayNetworkActivity": { + "message": "如果想让当前界面显示网络活动,请开始记录网络日志 ({PH1})。" + }, + "panels/network/NetworkLogView.ts | recordingNetworkActivity": { + "message": "正在录制网络活动…" + }, + "panels/network/NetworkLogView.ts | replayXhr": { + "message": "重放 XHR" + }, + "panels/network/NetworkLogView.ts | resourceTypesToInclude": { + "message": "要包含的资源类型" + }, + "panels/network/NetworkLogView.ts | sBResourcesLoadedByThePage": { + "message": "网页加载了 {PH1} B 的资源" + }, + "panels/network/NetworkLogView.ts | sBSBResourcesLoadedByThePage": { + "message": "网页加载的资源大小为 {PH1} B,资源总大小为 {PH2} B" + }, + "panels/network/NetworkLogView.ts | sBSBTransferredOverNetwork": { + "message": "已通过网络传输 {PH1} B(共 {PH2} B)" + }, + "panels/network/NetworkLogView.ts | sBTransferredOverNetwork": { + "message": "已通过网络传输 {PH1} B" + }, + "panels/network/NetworkLogView.ts | sRequests": { + "message": "{PH1} 个请求" + }, + "panels/network/NetworkLogView.ts | sResources": { + "message": "{PH1} 项资源" + }, + "panels/network/NetworkLogView.ts | sSRequests": { + "message": "第 {PH1} 项请求,共 {PH2} 项" + }, + "panels/network/NetworkLogView.ts | sSResources": { + "message": "所选资源大小为 {PH1},共 {PH2}" + }, + "panels/network/NetworkLogView.ts | sSTransferred": { + "message": "已传输 {PH1},共 {PH2}" + }, + "panels/network/NetworkLogView.ts | sTransferred": { + "message": "已传输 {PH1}" + }, + "panels/network/NetworkLogView.ts | saveAllAsHarWithContent": { + "message": "以 HAR 格式保存所有内容" + }, + "panels/network/NetworkLogView.ts | thirdParty": { + "message": "第三方请求" + }, + "panels/network/NetworkLogView.ts | unblockS": { + "message": "取消屏蔽 {PH1}" + }, + "panels/network/NetworkLogViewColumns.ts | connectionId": { + "message": "连接 ID" + }, + "panels/network/NetworkLogViewColumns.ts | content": { + "message": "内容" + }, + "panels/network/NetworkLogViewColumns.ts | cookies": { + "message": "Cookie" + }, + "panels/network/NetworkLogViewColumns.ts | domain": { + "message": "网域" + }, + "panels/network/NetworkLogViewColumns.ts | endTime": { + "message": "结束时间" + }, + "panels/network/NetworkLogViewColumns.ts | initiator": { + "message": "启动器" + }, + "panels/network/NetworkLogViewColumns.ts | initiatorAddressSpace": { + "message": "启动器地址空间" + }, + "panels/network/NetworkLogViewColumns.ts | latency": { + "message": "延迟时间" + }, + "panels/network/NetworkLogViewColumns.ts | manageHeaderColumns": { + "message": "管理标头列…" + }, + "panels/network/NetworkLogViewColumns.ts | method": { + "message": "方法" + }, + "panels/network/NetworkLogViewColumns.ts | name": { + "message": "名称" + }, + "panels/network/NetworkLogViewColumns.ts | networkLog": { + "message": "网络日志" + }, + "panels/network/NetworkLogViewColumns.ts | path": { + "message": "路径" + }, + "panels/network/NetworkLogViewColumns.ts | priority": { + "message": "优先级" + }, + "panels/network/NetworkLogViewColumns.ts | protocol": { + "message": "协议" + }, + "panels/network/NetworkLogViewColumns.ts | remoteAddress": { + "message": "远程地址" + }, + "panels/network/NetworkLogViewColumns.ts | remoteAddressSpace": { + "message": "远程地址空间" + }, + "panels/network/NetworkLogViewColumns.ts | responseHeaders": { + "message": "响应标头" + }, + "panels/network/NetworkLogViewColumns.ts | responseTime": { + "message": "响应时间" + }, + "panels/network/NetworkLogViewColumns.ts | scheme": { + "message": "架构" + }, + "panels/network/NetworkLogViewColumns.ts | setCookies": { + "message": "设置 Cookie" + }, + "panels/network/NetworkLogViewColumns.ts | size": { + "message": "大小" + }, + "panels/network/NetworkLogViewColumns.ts | startTime": { + "message": "开始时间" + }, + "panels/network/NetworkLogViewColumns.ts | status": { + "message": "状态" + }, + "panels/network/NetworkLogViewColumns.ts | text": { + "message": "文本" + }, + "panels/network/NetworkLogViewColumns.ts | time": { + "message": "时间" + }, + "panels/network/NetworkLogViewColumns.ts | totalDuration": { + "message": "总时长" + }, + "panels/network/NetworkLogViewColumns.ts | type": { + "message": "类型" + }, + "panels/network/NetworkLogViewColumns.ts | url": { + "message": "网址" + }, + "panels/network/NetworkLogViewColumns.ts | waterfall": { + "message": "瀑布" + }, + "panels/network/NetworkManageCustomHeadersView.ts | addCustomHeader": { + "message": "添加自定义标头…" + }, + "panels/network/NetworkManageCustomHeadersView.ts | headerName": { + "message": "标头名称" + }, + "panels/network/NetworkManageCustomHeadersView.ts | manageHeaderColumns": { + "message": "管理标头列" + }, + "panels/network/NetworkManageCustomHeadersView.ts | noCustomHeaders": { + "message": "无自定义标头" + }, + "panels/network/NetworkPanel.ts | captureScreenshots": { + "message": "截取屏幕截图" + }, + "panels/network/NetworkPanel.ts | captureScreenshotsWhenLoadingA": { + "message": "加载网页时截取屏幕截图" + }, + "panels/network/NetworkPanel.ts | clear": { + "message": "清除" + }, + "panels/network/NetworkPanel.ts | close": { + "message": "关闭" + }, + "panels/network/NetworkPanel.ts | disableCache": { + "message": "停用缓存" + }, + "panels/network/NetworkPanel.ts | disableCacheWhileDevtoolsIsOpen": { + "message": "停用缓存(在开发者工具已打开时)" + }, + "panels/network/NetworkPanel.ts | doNotClearLogOnPageReload": { + "message": "网页重新加载/导航时不清除日志" + }, + "panels/network/NetworkPanel.ts | exportHar": { + "message": "导出 HAR 文件…" + }, + "panels/network/NetworkPanel.ts | fetchingFrames": { + "message": "正在提取框架…" + }, + "panels/network/NetworkPanel.ts | groupByFrame": { + "message": "按框架分组" + }, + "panels/network/NetworkPanel.ts | groupRequestsByTopLevelRequest": { + "message": "按顶级请求框架对请求分组" + }, + "panels/network/NetworkPanel.ts | hitSToReloadAndCaptureFilmstrip": { + "message": "按 {PH1} 即可重新加载和截取幻灯影片。" + }, + "panels/network/NetworkPanel.ts | importHarFile": { + "message": "导入 HAR 文件…" + }, + "panels/network/NetworkPanel.ts | moreNetworkConditions": { + "message": "更多网络状况…" + }, + "panels/network/NetworkPanel.ts | networkSettings": { + "message": "网络设置" + }, + "panels/network/NetworkPanel.ts | preserveLog": { + "message": "保留日志" + }, + "panels/network/NetworkPanel.ts | recordingFrames": { + "message": "正在录制框架…" + }, + "panels/network/NetworkPanel.ts | revealInNetworkPanel": { + "message": "在“网络”面板中显示" + }, + "panels/network/NetworkPanel.ts | search": { + "message": "搜索" + }, + "panels/network/NetworkPanel.ts | showMoreInformationInRequestRows": { + "message": "在请求行中显示更多信息" + }, + "panels/network/NetworkPanel.ts | showOverview": { + "message": "显示概览" + }, + "panels/network/NetworkPanel.ts | showOverviewOfNetworkRequests": { + "message": "显示网络请求概览" + }, + "panels/network/NetworkPanel.ts | throttling": { + "message": "节流" + }, + "panels/network/NetworkPanel.ts | useLargeRequestRows": { + "message": "使用大量请求行" + }, + "panels/network/NetworkSearchScope.ts | url": { + "message": "网址" + }, + "panels/network/NetworkTimeCalculator.ts | sDownload": { + "message": "下载速度为 {PH1}" + }, + "panels/network/NetworkTimeCalculator.ts | sFromCache": { + "message": "{PH1}(来自缓存)" + }, + "panels/network/NetworkTimeCalculator.ts | sFromServiceworker": { + "message": "{PH1}(来自 ServiceWorker)" + }, + "panels/network/NetworkTimeCalculator.ts | sLatency": { + "message": "延迟时间:{PH1}" + }, + "panels/network/NetworkTimeCalculator.ts | sLatencySDownloadSTotal": { + "message": "{PH1} 延迟时间,{PH2} 下载时间(总计 {PH3})" + }, + "panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromThe": { + "message": "通过响应的“set-cookie”标头从服务器接收的 Cookie" + }, + "panels/network/RequestCookiesView.ts | cookiesThatWereReceivedFromTheServer": { + "message": "在响应的“set-cookie”标头中从服务器接收的格式不正确的 Cookie" + }, + "panels/network/RequestCookiesView.ts | cookiesThatWereSentToTheServerIn": { + "message": "请求的“cookie”标头中已发送到服务器的 Cookie" + }, + "panels/network/RequestCookiesView.ts | malformedResponseCookies": { + "message": "格式不正确的响应 Cookie" + }, + "panels/network/RequestCookiesView.ts | noRequestCookiesWereSent": { + "message": "未发送任何请求 Cookie。" + }, + "panels/network/RequestCookiesView.ts | requestCookies": { + "message": "请求 Cookie" + }, + "panels/network/RequestCookiesView.ts | responseCookies": { + "message": "响应 Cookie" + }, + "panels/network/RequestCookiesView.ts | showFilteredOutRequestCookies": { + "message": "显示滤除的请求 Cookie" + }, + "panels/network/RequestCookiesView.ts | thisRequestHasNoCookies": { + "message": "此请求不含任何 Cookie。" + }, + "panels/network/RequestHeadersView.ts | activeClientExperimentVariation": { + "message": "活跃的client experiment variation IDs。" + }, + "panels/network/RequestHeadersView.ts | activeClientExperimentVariationIds": { + "message": "触发服务器端行为的有效client experiment variation IDs。" + }, + "panels/network/RequestHeadersView.ts | chooseThisOptionIfTheResourceAnd": { + "message": "如果资源和文档由同一网站提供,请选择此选项。" + }, + "panels/network/RequestHeadersView.ts | copyValue": { + "message": "复制值" + }, + "panels/network/RequestHeadersView.ts | decoded": { + "message": "已解码:" + }, + "panels/network/RequestHeadersView.ts | fromDiskCache": { + "message": "(来自磁盘缓存)" + }, + "panels/network/RequestHeadersView.ts | fromMemoryCache": { + "message": "(来自内存缓存)" + }, + "panels/network/RequestHeadersView.ts | fromPrefetchCache": { + "message": "(来自预提取缓存)" + }, + "panels/network/RequestHeadersView.ts | fromServiceWorker": { + "message": "(来自 service worker)" + }, + "panels/network/RequestHeadersView.ts | fromSignedexchange": { + "message": "(来自 signed-exchange)" + }, + "panels/network/RequestHeadersView.ts | fromWebBundle": { + "message": "(来自 Web Bundle)" + }, + "panels/network/RequestHeadersView.ts | general": { + "message": "常规" + }, + "panels/network/RequestHeadersView.ts | learnMore": { + "message": "了解详情" + }, + "panels/network/RequestHeadersView.ts | learnMoreInTheIssuesTab": { + "message": "前往“问题”标签页了解详情" + }, + "panels/network/RequestHeadersView.ts | onlyChooseThisOptionIfAn": { + "message": "仅当包括此资源在内的任意网站不会带来安全风险时,才可选择此选项。" + }, + "panels/network/RequestHeadersView.ts | onlyProvisionalHeadersAre": { + "message": "仅预配标头可用,因为此请求并非通过网络发送,而是从本地缓存提供,其中不会存储原始请求标头。停用缓存即可查看完整请求标头。" + }, + "panels/network/RequestHeadersView.ts | provisionalHeadersAreShown": { + "message": "显示的是预配标头" + }, + "panels/network/RequestHeadersView.ts | provisionalHeadersAreShownS": { + "message": "显示的是预配标头。停用缓存即可查看完整标头。" + }, + "panels/network/RequestHeadersView.ts | recordedAttribution": { + "message": "trigger-data 为 {PH1} 的已记录归因事件" + }, + "panels/network/RequestHeadersView.ts | referrerPolicy": { + "message": "引荐来源网址政策" + }, + "panels/network/RequestHeadersView.ts | remoteAddress": { + "message": "远程地址" + }, + "panels/network/RequestHeadersView.ts | requestHeaders": { + "message": "请求标头" + }, + "panels/network/RequestHeadersView.ts | requestMethod": { + "message": "请求方法" + }, + "panels/network/RequestHeadersView.ts | requestUrl": { + "message": "请求网址" + }, + "panels/network/RequestHeadersView.ts | responseHeaders": { + "message": "响应标头" + }, + "panels/network/RequestHeadersView.ts | showMore": { + "message": "展开" + }, + "panels/network/RequestHeadersView.ts | statusCode": { + "message": "状态代码" + }, + "panels/network/RequestHeadersView.ts | thisDocumentWasBlockedFrom": { + "message": "此文档指定了跨源 opener 政策,因此被禁止在具有 sandbox 属性的 iframe 中加载。" + }, + "panels/network/RequestHeadersView.ts | toEmbedThisFrameInYourDocument": { + "message": "如需在您的文档中嵌入此框架,则需要在响应中指定以下响应标头,以启用跨源嵌入器政策:" + }, + "panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferent": { + "message": "为了从另一个来源使用此资源,服务器需要在响应标头中指定跨域资源政策:" + }, + "panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentOrigin": { + "message": "为了从另一个来源使用该资源,服务器可能会放宽跨域资源政策响应标头:" + }, + "panels/network/RequestHeadersView.ts | toUseThisResourceFromADifferentSite": { + "message": "为了从其他网站使用此资源,服务器可能会放宽跨域资源政策响应标头:" + }, + "panels/network/RequestHeadersView.ts | viewParsed": { + "message": "查看解析结果" + }, + "panels/network/RequestHeadersView.ts | viewSource": { + "message": "查看源代码" + }, + "panels/network/RequestInitiatorView.ts | requestCallStack": { + "message": "请求调用堆栈" + }, + "panels/network/RequestInitiatorView.ts | requestInitiatorChain": { + "message": "请求启动器链" + }, + "panels/network/RequestInitiatorView.ts | thisRequestHasNoInitiatorData": { + "message": "此请求没有任何启动器数据。" + }, + "panels/network/RequestPayloadView.ts | copyValue": { + "message": "复制值" + }, + "panels/network/RequestPayloadView.ts | empty": { + "message": "(空)" + }, + "panels/network/RequestPayloadView.ts | formData": { + "message": "表单数据" + }, + "panels/network/RequestPayloadView.ts | queryStringParameters": { + "message": "查询字符串参数" + }, + "panels/network/RequestPayloadView.ts | requestPayload": { + "message": "请求载荷" + }, + "panels/network/RequestPayloadView.ts | showMore": { + "message": "展开" + }, + "panels/network/RequestPayloadView.ts | unableToDecodeValue": { + "message": "(无法解码值)" + }, + "panels/network/RequestPayloadView.ts | viewDecoded": { + "message": "视图已解码" + }, + "panels/network/RequestPayloadView.ts | viewDecodedL": { + "message": "视图已解码" + }, + "panels/network/RequestPayloadView.ts | viewParsed": { + "message": "查看解析结果" + }, + "panels/network/RequestPayloadView.ts | viewParsedL": { + "message": "查看已解析的结果" + }, + "panels/network/RequestPayloadView.ts | viewSource": { + "message": "查看源代码" + }, + "panels/network/RequestPayloadView.ts | viewSourceL": { + "message": "查看源代码" + }, + "panels/network/RequestPayloadView.ts | viewUrlEncoded": { + "message": "查看网址编码格式的数据" + }, + "panels/network/RequestPayloadView.ts | viewUrlEncodedL": { + "message": "查看网址编码格式的数据" + }, + "panels/network/RequestPreviewView.ts | failedToLoadResponseData": { + "message": "无法加载响应数据" + }, + "panels/network/RequestPreviewView.ts | previewNotAvailable": { + "message": "无法预览" + }, + "panels/network/RequestResponseView.ts | failedToLoadResponseData": { + "message": "无法加载响应数据" + }, + "panels/network/RequestResponseView.ts | thisRequestHasNoResponseData": { + "message": "此请求没有可用的响应数据。" + }, + "panels/network/RequestTimingView.ts | cacheStorageCacheNameS": { + "message": "缓存空间缓存名称:{PH1}" + }, + "panels/network/RequestTimingView.ts | cacheStorageCacheNameUnknown": { + "message": "缓存空间缓存名称:不明" + }, + "panels/network/RequestTimingView.ts | cautionRequestIsNotFinishedYet": { + "message": "注意:尚未完成请求!" + }, + "panels/network/RequestTimingView.ts | connectionStart": { + "message": "开始连接" + }, + "panels/network/RequestTimingView.ts | contentDownload": { + "message": "下载内容" + }, + "panels/network/RequestTimingView.ts | dnsLookup": { + "message": "DNS 查找" + }, + "panels/network/RequestTimingView.ts | duration": { + "message": "时长" + }, + "panels/network/RequestTimingView.ts | durationC": { + "message": "时长" + }, + "panels/network/RequestTimingView.ts | duringDevelopmentYouCanUseSToAdd": { + "message": "在开发过程中,您可以使用 {PH1} 向此请求的服务器端时间信息添加数据洞见。" + }, + "panels/network/RequestTimingView.ts | explanation": { + "message": "说明" + }, + "panels/network/RequestTimingView.ts | fallbackCode": { + "message": "后备代码" + }, + "panels/network/RequestTimingView.ts | fromHttpCache": { + "message": "来自 HTTP 缓存" + }, + "panels/network/RequestTimingView.ts | initialConnection": { + "message": "初始连接" + }, + "panels/network/RequestTimingView.ts | label": { + "message": "标签" + }, + "panels/network/RequestTimingView.ts | networkFetch": { + "message": "网络提取" + }, + "panels/network/RequestTimingView.ts | originalRequest": { + "message": "原始请求" + }, + "panels/network/RequestTimingView.ts | proxyNegotiation": { + "message": "代理协商" + }, + "panels/network/RequestTimingView.ts | queuedAtS": { + "message": "进入队列时间:{PH1}" + }, + "panels/network/RequestTimingView.ts | queueing": { + "message": "正在排队" + }, + "panels/network/RequestTimingView.ts | readingPush": { + "message": "读取 Push 消息" + }, + "panels/network/RequestTimingView.ts | receivingPush": { + "message": "接收 Push 消息" + }, + "panels/network/RequestTimingView.ts | requestSent": { + "message": "已发送请求" + }, + "panels/network/RequestTimingView.ts | requestToServiceworker": { + "message": "向 ServiceWorker 发送的请求" + }, + "panels/network/RequestTimingView.ts | requestresponse": { + "message": "请求/响应" + }, + "panels/network/RequestTimingView.ts | resourceScheduling": { + "message": "资源调度" + }, + "panels/network/RequestTimingView.ts | respondwith": { + "message": "respondWith" + }, + "panels/network/RequestTimingView.ts | responseReceived": { + "message": "已收到响应" + }, + "panels/network/RequestTimingView.ts | retrievalTimeS": { + "message": "检索时间:{PH1}" + }, + "panels/network/RequestTimingView.ts | serverPush": { + "message": "服务器推送" + }, + "panels/network/RequestTimingView.ts | serverTiming": { + "message": "服务器计时" + }, + "panels/network/RequestTimingView.ts | serviceworkerCacheStorage": { + "message": "ServiceWorker 缓存存储空间" + }, + "panels/network/RequestTimingView.ts | sourceOfResponseS": { + "message": "响应来源:{PH1}" + }, + "panels/network/RequestTimingView.ts | ssl": { + "message": "SSL" + }, + "panels/network/RequestTimingView.ts | stalled": { + "message": "已停止" + }, + "panels/network/RequestTimingView.ts | startedAtS": { + "message": "开始时间:{PH1}" + }, + "panels/network/RequestTimingView.ts | startup": { + "message": "启动" + }, + "panels/network/RequestTimingView.ts | theServerTimingApi": { + "message": "Server Timing API" + }, + "panels/network/RequestTimingView.ts | time": { + "message": "时间" + }, + "panels/network/RequestTimingView.ts | total": { + "message": "总计" + }, + "panels/network/RequestTimingView.ts | unknown": { + "message": "未知" + }, + "panels/network/RequestTimingView.ts | waitingTtfb": { + "message": "等待中 (TTFB)" + }, + "panels/network/RequestTimingView.ts | waterfall": { + "message": "瀑布" + }, + "panels/network/ResourceWebSocketFrameView.ts | all": { + "message": "全部" + }, + "panels/network/ResourceWebSocketFrameView.ts | binaryMessage": { + "message": "二进制消息" + }, + "panels/network/ResourceWebSocketFrameView.ts | clearAll": { + "message": "全部清除" + }, + "panels/network/ResourceWebSocketFrameView.ts | clearAllL": { + "message": "全部清除" + }, + "panels/network/ResourceWebSocketFrameView.ts | connectionCloseMessage": { + "message": "连接关闭消息" + }, + "panels/network/ResourceWebSocketFrameView.ts | continuationFrame": { + "message": "延续框架" + }, + "panels/network/ResourceWebSocketFrameView.ts | copyMessage": { + "message": "复制消息" + }, + "panels/network/ResourceWebSocketFrameView.ts | copyMessageD": { + "message": "复制消息…" + }, + "panels/network/ResourceWebSocketFrameView.ts | data": { + "message": "数据" + }, + "panels/network/ResourceWebSocketFrameView.ts | enterRegex": { + "message": "输入正则表达式,例如:(web)?socket" + }, + "panels/network/ResourceWebSocketFrameView.ts | filter": { + "message": "过滤" + }, + "panels/network/ResourceWebSocketFrameView.ts | length": { + "message": "长度" + }, + "panels/network/ResourceWebSocketFrameView.ts | na": { + "message": "不适用" + }, + "panels/network/ResourceWebSocketFrameView.ts | pingMessage": { + "message": "Ping 消息" + }, + "panels/network/ResourceWebSocketFrameView.ts | pongMessage": { + "message": "Pong 消息" + }, + "panels/network/ResourceWebSocketFrameView.ts | receive": { + "message": "接收" + }, + "panels/network/ResourceWebSocketFrameView.ts | sOpcodeS": { + "message": "{PH1}(操作码 {PH2})" + }, + "panels/network/ResourceWebSocketFrameView.ts | sOpcodeSMask": { + "message": "{PH1}(操作码 {PH2}、掩码)" + }, + "panels/network/ResourceWebSocketFrameView.ts | selectMessageToBrowseItsContent": { + "message": "选择消息以浏览其内容。" + }, + "panels/network/ResourceWebSocketFrameView.ts | send": { + "message": "发送" + }, + "panels/network/ResourceWebSocketFrameView.ts | textMessage": { + "message": "文本消息" + }, + "panels/network/ResourceWebSocketFrameView.ts | time": { + "message": "时间" + }, + "panels/network/ResourceWebSocketFrameView.ts | webSocketFrame": { + "message": "WebSocket 框架" + }, + "panels/network/SignedExchangeInfoView.ts | certificate": { + "message": "证书" + }, + "panels/network/SignedExchangeInfoView.ts | certificateSha": { + "message": "证书 SHA256" + }, + "panels/network/SignedExchangeInfoView.ts | certificateUrl": { + "message": "证书网址" + }, + "panels/network/SignedExchangeInfoView.ts | date": { + "message": "日期" + }, + "panels/network/SignedExchangeInfoView.ts | errors": { + "message": "错误" + }, + "panels/network/SignedExchangeInfoView.ts | expires": { + "message": "到期" + }, + "panels/network/SignedExchangeInfoView.ts | headerIntegrityHash": { + "message": "标头完整性哈希" + }, + "panels/network/SignedExchangeInfoView.ts | integrity": { + "message": "完整性" + }, + "panels/network/SignedExchangeInfoView.ts | issuer": { + "message": "颁发者" + }, + "panels/network/SignedExchangeInfoView.ts | label": { + "message": "标签" + }, + "panels/network/SignedExchangeInfoView.ts | learnmore": { + "message": "了解详情" + }, + "panels/network/SignedExchangeInfoView.ts | requestUrl": { + "message": "请求网址" + }, + "panels/network/SignedExchangeInfoView.ts | responseCode": { + "message": "响应代码" + }, + "panels/network/SignedExchangeInfoView.ts | responseHeaders": { + "message": "响应标头" + }, + "panels/network/SignedExchangeInfoView.ts | signature": { + "message": "签名" + }, + "panels/network/SignedExchangeInfoView.ts | signedHttpExchange": { + "message": "Signed HTTP Exchange" + }, + "panels/network/SignedExchangeInfoView.ts | subject": { + "message": "主题" + }, + "panels/network/SignedExchangeInfoView.ts | validFrom": { + "message": "生效时间:" + }, + "panels/network/SignedExchangeInfoView.ts | validUntil": { + "message": "截止日期:" + }, + "panels/network/SignedExchangeInfoView.ts | validityUrl": { + "message": "有效性网址" + }, + "panels/network/SignedExchangeInfoView.ts | viewCertificate": { + "message": "查看证书" + }, + "panels/network/components/RequestTrustTokensView.ts | aClientprovidedArgumentWas": { + "message": "客户端提供的参数格式不正确或无效。" + }, + "panels/network/components/RequestTrustTokensView.ts | eitherNoInputsForThisOperation": { + "message": "此操作没有任何可用输入,或者输出超过操作配额。" + }, + "panels/network/components/RequestTrustTokensView.ts | failure": { + "message": "失败" + }, + "panels/network/components/RequestTrustTokensView.ts | issuer": { + "message": "颁发者" + }, + "panels/network/components/RequestTrustTokensView.ts | issuers": { + "message": "颁发者" + }, + "panels/network/components/RequestTrustTokensView.ts | numberOfIssuedTokens": { + "message": "已颁发的令牌数量" + }, + "panels/network/components/RequestTrustTokensView.ts | parameters": { + "message": "参数" + }, + "panels/network/components/RequestTrustTokensView.ts | refreshPolicy": { + "message": "刷新政策" + }, + "panels/network/components/RequestTrustTokensView.ts | result": { + "message": "结果" + }, + "panels/network/components/RequestTrustTokensView.ts | status": { + "message": "状态" + }, + "panels/network/components/RequestTrustTokensView.ts | success": { + "message": "成功" + }, + "panels/network/components/RequestTrustTokensView.ts | theOperationFailedForAnUnknown": { + "message": "由于未知原因,此操作失败。" + }, + "panels/network/components/RequestTrustTokensView.ts | theOperationWasFulfilledLocally": { + "message": "操作在本地执行,未发送任何请求。" + }, + "panels/network/components/RequestTrustTokensView.ts | theOperationsResultWasServedFrom": { + "message": "操作结果由缓存提供。" + }, + "panels/network/components/RequestTrustTokensView.ts | theServersResponseWasMalformedOr": { + "message": "服务器响应格式不正确或无效。" + }, + "panels/network/components/RequestTrustTokensView.ts | topLevelOrigin": { + "message": "顶级来源" + }, + "panels/network/components/RequestTrustTokensView.ts | type": { + "message": "类型" + }, + "panels/network/components/WebBundleInfoView.ts | bundledResource": { + "message": "捆绑的资源" + }, + "panels/network/network-meta.ts | colorCode": { + "message": "颜色代码" + }, + "panels/network/network-meta.ts | colorCodeByResourceType": { + "message": "按资源类型划分的颜色代码" + }, + "panels/network/network-meta.ts | colorcodeResourceTypes": { + "message": "颜色代码资源类型" + }, + "panels/network/network-meta.ts | diskCache": { + "message": "磁盘缓存" + }, + "panels/network/network-meta.ts | dontGroupNetworkLogItemsByFrame": { + "message": "请勿按框架对网络日志内容分组" + }, + "panels/network/network-meta.ts | frame": { + "message": "框架" + }, + "panels/network/network-meta.ts | group": { + "message": "群组" + }, + "panels/network/network-meta.ts | groupNetworkLogByFrame": { + "message": "按框架对网络日志分组" + }, + "panels/network/network-meta.ts | groupNetworkLogItemsByFrame": { + "message": "按框架对网络日志内容进行分组" + }, + "panels/network/network-meta.ts | hideRequestDetails": { + "message": "隐藏请求详情" + }, + "panels/network/network-meta.ts | netWork": { + "message": "网络" + }, + "panels/network/network-meta.ts | network": { + "message": "网络" + }, + "panels/network/network-meta.ts | networkConditions": { + "message": "网络状况" + }, + "panels/network/network-meta.ts | networkRequestBlocking": { + "message": "网络请求屏蔽" + }, + "panels/network/network-meta.ts | networkThrottling": { + "message": "网络节流" + }, + "panels/network/network-meta.ts | recordNetworkLog": { + "message": "录制网络日志" + }, + "panels/network/network-meta.ts | resourceType": { + "message": "资源类型" + }, + "panels/network/network-meta.ts | search": { + "message": "搜索" + }, + "panels/network/network-meta.ts | showNetwork": { + "message": "显示“网络”工具" + }, + "panels/network/network-meta.ts | showNetworkConditions": { + "message": "显示“网络状况”" + }, + "panels/network/network-meta.ts | showNetworkRequestBlocking": { + "message": "显示“网络请求屏蔽”" + }, + "panels/network/network-meta.ts | showSearch": { + "message": "显示“搜索”工具" + }, + "panels/network/network-meta.ts | stopRecordingNetworkLog": { + "message": "停止录制网络日志" + }, + "panels/network/network-meta.ts | useDefaultColors": { + "message": "使用默认颜色" + }, + "panels/performance_monitor/PerformanceMonitor.ts | cpuUsage": { + "message": "CPU 使用情况" + }, + "panels/performance_monitor/PerformanceMonitor.ts | documentFrames": { + "message": "文档框架" + }, + "panels/performance_monitor/PerformanceMonitor.ts | documents": { + "message": "文档" + }, + "panels/performance_monitor/PerformanceMonitor.ts | domNodes": { + "message": "DOM 节点" + }, + "panels/performance_monitor/PerformanceMonitor.ts | graphsDisplayingARealtimeViewOf": { + "message": "显示实时性能指标视图的图表" + }, + "panels/performance_monitor/PerformanceMonitor.ts | jsEventListeners": { + "message": "JS 事件监听器" + }, + "panels/performance_monitor/PerformanceMonitor.ts | jsHeapSize": { + "message": "JS 堆大小" + }, + "panels/performance_monitor/PerformanceMonitor.ts | layoutsSec": { + "message": "布局个数/秒" + }, + "panels/performance_monitor/PerformanceMonitor.ts | paused": { + "message": "已暂停" + }, + "panels/performance_monitor/PerformanceMonitor.ts | styleRecalcsSec": { + "message": "样式重新计算次数/秒" + }, + "panels/performance_monitor/performance_monitor-meta.ts | activity": { + "message": "活动" + }, + "panels/performance_monitor/performance_monitor-meta.ts | metrics": { + "message": "指标" + }, + "panels/performance_monitor/performance_monitor-meta.ts | monitor": { + "message": "监视器" + }, + "panels/performance_monitor/performance_monitor-meta.ts | performance": { + "message": "性能" + }, + "panels/performance_monitor/performance_monitor-meta.ts | performanceMonitor": { + "message": "性能监视器" + }, + "panels/performance_monitor/performance_monitor-meta.ts | showPerformanceMonitor": { + "message": "显示“性能监视器”" + }, + "panels/performance_monitor/performance_monitor-meta.ts | systemMonitor": { + "message": "系统监视器" + }, + "panels/profiler/CPUProfileView.ts | aggregatedSelfTime": { + "message": "汇总的自身时间" + }, + "panels/profiler/CPUProfileView.ts | aggregatedTotalTime": { + "message": "累计总时间" + }, + "panels/profiler/CPUProfileView.ts | cpuProfiles": { + "message": "CPU 性能分析报告" + }, + "panels/profiler/CPUProfileView.ts | cpuProfilesShow": { + "message": "CPU 性能分析报告会显示网页的各项 JavaScript 函数所花费的执行时间。" + }, + "panels/profiler/CPUProfileView.ts | fms": { + "message": "{PH1} 毫秒" + }, + "panels/profiler/CPUProfileView.ts | formatPercent": { + "message": "{PH1}%" + }, + "panels/profiler/CPUProfileView.ts | name": { + "message": "名称" + }, + "panels/profiler/CPUProfileView.ts | notOptimized": { + "message": "未优化" + }, + "panels/profiler/CPUProfileView.ts | recordJavascriptCpuProfile": { + "message": "录制 JavaScript CPU 性能分析报告" + }, + "panels/profiler/CPUProfileView.ts | recording": { + "message": "正在录制…" + }, + "panels/profiler/CPUProfileView.ts | selfTime": { + "message": "自身耗时" + }, + "panels/profiler/CPUProfileView.ts | startCpuProfiling": { + "message": "开始 CPU 分析" + }, + "panels/profiler/CPUProfileView.ts | stopCpuProfiling": { + "message": "停止分析 CPU 性能" + }, + "panels/profiler/CPUProfileView.ts | totalTime": { + "message": "总时间" + }, + "panels/profiler/CPUProfileView.ts | url": { + "message": "网址" + }, + "panels/profiler/HeapProfileView.ts | allocationSampling": { + "message": "分配采样" + }, + "panels/profiler/HeapProfileView.ts | formatPercent": { + "message": "{PH1}%" + }, + "panels/profiler/HeapProfileView.ts | heapProfilerIsRecording": { + "message": "堆分析器正在记录" + }, + "panels/profiler/HeapProfileView.ts | itProvidesGoodApproximation": { + "message": "此工具能非常可靠地估计分配情况,并按 JavaScript 执行堆栈细分结果。" + }, + "panels/profiler/HeapProfileView.ts | name": { + "message": "名称" + }, + "panels/profiler/HeapProfileView.ts | profileD": { + "message": "性能分析报告 {PH1}" + }, + "panels/profiler/HeapProfileView.ts | recordMemoryAllocations": { + "message": "使用采样方法录制内存分配情况。" + }, + "panels/profiler/HeapProfileView.ts | recording": { + "message": "正在录制…" + }, + "panels/profiler/HeapProfileView.ts | sBytes": { + "message": "{PH1} 个字节" + }, + "panels/profiler/HeapProfileView.ts | samplingProfiles": { + "message": "抽样分析" + }, + "panels/profiler/HeapProfileView.ts | selectedSizeS": { + "message": "所选大小:{PH1}" + }, + "panels/profiler/HeapProfileView.ts | selfSize": { + "message": "自身大小" + }, + "panels/profiler/HeapProfileView.ts | selfSizeBytes": { + "message": "自身大小(以字节为单位)" + }, + "panels/profiler/HeapProfileView.ts | skb": { + "message": "{PH1} kB" + }, + "panels/profiler/HeapProfileView.ts | startHeapProfiling": { + "message": "开始堆分析" + }, + "panels/profiler/HeapProfileView.ts | stopHeapProfiling": { + "message": "停止堆性能分析" + }, + "panels/profiler/HeapProfileView.ts | stopping": { + "message": "正在停止…" + }, + "panels/profiler/HeapProfileView.ts | thisProfileTypeHasMinimal": { + "message": "此性能分析类型的性能开销最低,可用于长时间运行的操作。" + }, + "panels/profiler/HeapProfileView.ts | totalSize": { + "message": "总大小" + }, + "panels/profiler/HeapProfileView.ts | totalSizeBytes": { + "message": "总大小(字节)" + }, + "panels/profiler/HeapProfileView.ts | url": { + "message": "网址" + }, + "panels/profiler/HeapProfilerPanel.ts | revealInSummaryView": { + "message": "在“摘要”视图中显示" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | Deleted": { + "message": "已删除 # 项" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | Delta": { + "message": "# 增量" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | New": { + "message": "新对象数" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | allocSize": { + "message": "分配大小" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | allocation": { + "message": "分配" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | constructorString": { + "message": "构造函数" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | count": { + "message": "计数" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | distance": { + "message": "距离" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | distanceFromWindowObject": { + "message": "与窗口对象的距离" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | freedSize": { + "message": "已释放的大小" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | function": { + "message": "函数" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotConstructors": { + "message": "堆快照构造函数" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotDiff": { + "message": "堆快照差异" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | heapSnapshotRetainment": { + "message": "堆快照保留" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | liveCount": { + "message": "实时计数" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | liveSize": { + "message": "实时大小" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | object": { + "message": "对象" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | retainedSize": { + "message": "保留的大小" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | shallowSize": { + "message": "浅层大小" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | size": { + "message": "大小" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | sizeDelta": { + "message": "大小增量" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectItselfInBytes": { + "message": "对象本身的大小(以字节为单位)" + }, + "panels/profiler/HeapSnapshotDataGrids.ts | sizeOfTheObjectPlusTheGraphIt": { + "message": "对象加上其保留的图表的大小(以字节为单位)" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | detachedFromDomTree": { + "message": "已从 DOM 树分离" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | genericStringsTwoPlaceholders": { + "message": "{PH1}、{PH2}" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | inElement": { + "message": "位于:" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | internalArray": { + "message": "(内部数组)[]" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | previewIsNotAvailable": { + "message": "无法预览" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | revealInSummaryView": { + "message": "在“摘要”视图中显示" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | revealObjectSWithIdSInSummary": { + "message": "在“摘要”视图中显示 ID 为 @{PH2} 的对象“{PH1}”" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | storeAsGlobalVariable": { + "message": "存储为全局变量" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | summary": { + "message": "摘要" + }, + "panels/profiler/HeapSnapshotGridNodes.ts | userObjectReachableFromWindow": { + "message": "可通过窗口访问的用户对象" + }, + "panels/profiler/HeapSnapshotProxy.ts | anErrorOccurredWhenACallToMethod": { + "message": "请求调用“{PH1}”方法时出错" + }, + "panels/profiler/HeapSnapshotView.ts | AllocationTimelinesShowInstrumented": { + "message": "分配时间轴显示了插桩的 JavaScript 内存分配随时间变化的情况。记录分析后,您可选择一个时间间隔,以查看已在其中分配且到录制结束时仍保持活跃状态的对象。使用此分析类型隔离内存泄漏。" + }, + "panels/profiler/HeapSnapshotView.ts | allObjects": { + "message": "所有对象" + }, + "panels/profiler/HeapSnapshotView.ts | allocation": { + "message": "分配" + }, + "panels/profiler/HeapSnapshotView.ts | allocationInstrumentationOn": { + "message": "时间轴上的分配插桩" + }, + "panels/profiler/HeapSnapshotView.ts | allocationStack": { + "message": "分配堆栈" + }, + "panels/profiler/HeapSnapshotView.ts | allocationTimelines": { + "message": "分配时间轴" + }, + "panels/profiler/HeapSnapshotView.ts | baseSnapshot": { + "message": "基础快照" + }, + "panels/profiler/HeapSnapshotView.ts | captureNumericValue": { + "message": "在快照中添加数字值" + }, + "panels/profiler/HeapSnapshotView.ts | classFilter": { + "message": "类过滤器" + }, + "panels/profiler/HeapSnapshotView.ts | code": { + "message": "代码" + }, + "panels/profiler/HeapSnapshotView.ts | comparison": { + "message": "比较" + }, + "panels/profiler/HeapSnapshotView.ts | containment": { + "message": "控制" + }, + "panels/profiler/HeapSnapshotView.ts | filter": { + "message": "过滤" + }, + "panels/profiler/HeapSnapshotView.ts | find": { + "message": "查找" + }, + "panels/profiler/HeapSnapshotView.ts | heapMemoryUsage": { + "message": "堆内存用量" + }, + "panels/profiler/HeapSnapshotView.ts | heapSnapshot": { + "message": "堆快照" + }, + "panels/profiler/HeapSnapshotView.ts | heapSnapshotProfilesShowMemory": { + "message": "堆快照性能分析会显示您网页的 JavaScript 对象和相关 DOM 节点中的内存分配情况。" + }, + "panels/profiler/HeapSnapshotView.ts | heapSnapshots": { + "message": "堆快照" + }, + "panels/profiler/HeapSnapshotView.ts | jsArrays": { + "message": "JS 数组" + }, + "panels/profiler/HeapSnapshotView.ts | liveObjects": { + "message": "实时对象" + }, + "panels/profiler/HeapSnapshotView.ts | loading": { + "message": "正在加载…" + }, + "panels/profiler/HeapSnapshotView.ts | objectsAllocatedBeforeS": { + "message": "在{PH1} 之前分配的对象" + }, + "panels/profiler/HeapSnapshotView.ts | objectsAllocatedBetweenSAndS": { + "message": "在{PH1} 和{PH2} 之间分配的对象" + }, + "panels/profiler/HeapSnapshotView.ts | percentagePlaceholder": { + "message": "{PH1}%" + }, + "panels/profiler/HeapSnapshotView.ts | perspective": { + "message": "视角" + }, + "panels/profiler/HeapSnapshotView.ts | recordAllocationStacksExtra": { + "message": "录制各项分配的堆栈轨迹(会产生额外的性能开销)" + }, + "panels/profiler/HeapSnapshotView.ts | recording": { + "message": "正在录制…" + }, + "panels/profiler/HeapSnapshotView.ts | retainers": { + "message": "保留器" + }, + "panels/profiler/HeapSnapshotView.ts | sKb": { + "message": "{PH1} KB" + }, + "panels/profiler/HeapSnapshotView.ts | savingD": { + "message": "正在保存… {PH1}%" + }, + "panels/profiler/HeapSnapshotView.ts | selectedSizeS": { + "message": "所选大小:{PH1}" + }, + "panels/profiler/HeapSnapshotView.ts | snapshotD": { + "message": "快照 {PH1}" + }, + "panels/profiler/HeapSnapshotView.ts | snapshotting": { + "message": "正在拍摄快照…" + }, + "panels/profiler/HeapSnapshotView.ts | stackWasNotRecordedForThisObject": { + "message": "由于在开始录制这项性能分析之前已经分配了此对象,因此没有为此对象录制堆栈。" + }, + "panels/profiler/HeapSnapshotView.ts | startRecordingHeapProfile": { + "message": "开始录制堆分析情况" + }, + "panels/profiler/HeapSnapshotView.ts | statistics": { + "message": "统计信息" + }, + "panels/profiler/HeapSnapshotView.ts | stopRecordingHeapProfile": { + "message": "停止录制堆性能分析报告" + }, + "panels/profiler/HeapSnapshotView.ts | strings": { + "message": "字符串" + }, + "panels/profiler/HeapSnapshotView.ts | summary": { + "message": "摘要" + }, + "panels/profiler/HeapSnapshotView.ts | systemObjects": { + "message": "系统对象" + }, + "panels/profiler/HeapSnapshotView.ts | takeHeapSnapshot": { + "message": "拍摄堆快照" + }, + "panels/profiler/HeapSnapshotView.ts | treatGlobalObjectsAsRoots": { + "message": "将全局对象视为根(推荐,取消选中此项会公开内部节点并引入过多细节,但可能有助于调试保留路径的周期)" + }, + "panels/profiler/HeapSnapshotView.ts | typedArrays": { + "message": "类型化数组" + }, + "panels/profiler/IsolateSelector.ts | changeRate": { + "message": "{PH1}/s" + }, + "panels/profiler/IsolateSelector.ts | decreasingBySPerSecond": { + "message": "每秒降低 {PH1}" + }, + "panels/profiler/IsolateSelector.ts | empty": { + "message": "(空)" + }, + "panels/profiler/IsolateSelector.ts | heapSizeChangeTrendOverTheLastS": { + "message": "过去 {PH1} 分钟堆大小的变化趋势。" + }, + "panels/profiler/IsolateSelector.ts | heapSizeInUseByLiveJsObjects": { + "message": "已发布的 JS 对象所使用的堆大小。" + }, + "panels/profiler/IsolateSelector.ts | increasingBySPerSecond": { + "message": "正在按每秒 {PH1} 递增" + }, + "panels/profiler/IsolateSelector.ts | javascriptVmInstances": { + "message": "JavaScript 虚拟机实例" + }, + "panels/profiler/IsolateSelector.ts | totalJsHeapSize": { + "message": "JS 堆总大小" + }, + "panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeAcrossAllVm": { + "message": "所有虚拟机实例的网页 JS 堆总大小。" + }, + "panels/profiler/IsolateSelector.ts | totalPageJsHeapSizeChangeTrend": { + "message": "过去 {PH1} 分钟总页面 JS 堆大小的变化趋势。" + }, + "panels/profiler/LiveHeapProfileView.ts | allocatedJsHeapSizeCurrentlyIn": { + "message": "当前正在使用的已分配 JS 堆的大小" + }, + "panels/profiler/LiveHeapProfileView.ts | anonymousScriptS": { + "message": "(匿名脚本 {PH1})" + }, + "panels/profiler/LiveHeapProfileView.ts | heapProfile": { + "message": "堆性能分析报告" + }, + "panels/profiler/LiveHeapProfileView.ts | jsHeap": { + "message": "JS 堆" + }, + "panels/profiler/LiveHeapProfileView.ts | kb": { + "message": "kB" + }, + "panels/profiler/LiveHeapProfileView.ts | numberOfVmsSharingTheSameScript": { + "message": "共用同一脚本来源的虚拟机数量" + }, + "panels/profiler/LiveHeapProfileView.ts | scriptUrl": { + "message": "脚本网址" + }, + "panels/profiler/LiveHeapProfileView.ts | urlOfTheScriptSource": { + "message": "脚本来源的网址" + }, + "panels/profiler/LiveHeapProfileView.ts | vms": { + "message": "虚拟机" + }, + "panels/profiler/ModuleUIStrings.ts | buildingAllocationStatistics": { + "message": "正在建立分配统计信息…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingDominatedNodes": { + "message": "正在构建支配节点…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingDominatorTree": { + "message": "正在生成支配项树…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingEdgeIndexes": { + "message": "正在建立边缘索引…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingLocations": { + "message": "正在建立位置…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingPostorderIndex": { + "message": "正在构建后序索引…" + }, + "panels/profiler/ModuleUIStrings.ts | buildingRetainers": { + "message": "正在构建保留器…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingDistances": { + "message": "正在计算距离…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingNodeFlags": { + "message": "正在计算节点标记…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingRetainedSizes": { + "message": "正在计算保留的大小…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingSamples": { + "message": "正在计算样本…" + }, + "panels/profiler/ModuleUIStrings.ts | calculatingStatistics": { + "message": "正在计算统计值…" + }, + "panels/profiler/ModuleUIStrings.ts | done": { + "message": "完成" + }, + "panels/profiler/ModuleUIStrings.ts | finishedProcessing": { + "message": "处理已完成。" + }, + "panels/profiler/ModuleUIStrings.ts | loadingAllocationTracesD": { + "message": "正在加载分配跟踪记录…{PH1}%" + }, + "panels/profiler/ModuleUIStrings.ts | loadingEdgesD": { + "message": "正在加载边缘… {PH1}%" + }, + "panels/profiler/ModuleUIStrings.ts | loadingLocations": { + "message": "正在加载位置…" + }, + "panels/profiler/ModuleUIStrings.ts | loadingNodesD": { + "message": "正在加载节点… {PH1}%" + }, + "panels/profiler/ModuleUIStrings.ts | loadingSamples": { + "message": "正在加载示例…" + }, + "panels/profiler/ModuleUIStrings.ts | loadingSnapshotInfo": { + "message": "正在加载快照信息…" + }, + "panels/profiler/ModuleUIStrings.ts | loadingStrings": { + "message": "正在加载字符串…" + }, + "panels/profiler/ModuleUIStrings.ts | parsingStrings": { + "message": "正在解析字符串…" + }, + "panels/profiler/ModuleUIStrings.ts | processingSnapshot": { + "message": "正在处理快照…" + }, + "panels/profiler/ModuleUIStrings.ts | propagatingDomState": { + "message": "正在传播 DOM 状态…" + }, + "panels/profiler/ProfileDataGrid.ts | genericTextTwoPlaceholders": { + "message": "{PH1}、{PH2}" + }, + "panels/profiler/ProfileDataGrid.ts | notOptimizedS": { + "message": "未优化:{PH1}" + }, + "panels/profiler/ProfileLauncherView.ts | load": { + "message": "加载" + }, + "panels/profiler/ProfileLauncherView.ts | selectJavascriptVmInstance": { + "message": "选择 JavaScript 虚拟机实例" + }, + "panels/profiler/ProfileLauncherView.ts | selectProfilingType": { + "message": "选择性能分析类型" + }, + "panels/profiler/ProfileLauncherView.ts | start": { + "message": "开始" + }, + "panels/profiler/ProfileLauncherView.ts | stop": { + "message": "停止" + }, + "panels/profiler/ProfileLauncherView.ts | takeSnapshot": { + "message": "拍摄快照" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | delete": { + "message": "删除" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | load": { + "message": "加载…" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | save": { + "message": "保存" + }, + "panels/profiler/ProfileSidebarTreeElement.ts | saveWithEllipsis": { + "message": "保存…" + }, + "panels/profiler/ProfileView.ts | chart": { + "message": "图表" + }, + "panels/profiler/ProfileView.ts | excludeSelectedFunction": { + "message": "排除所选函数" + }, + "panels/profiler/ProfileView.ts | failedToReadFile": { + "message": "无法读取文件" + }, + "panels/profiler/ProfileView.ts | fileSReadErrorS": { + "message": "文件“{PH1}”读取错误:{PH2}" + }, + "panels/profiler/ProfileView.ts | findByCostMsNameOrFile": { + "message": "按所用时间(大于 50 毫秒)、名称或文件查找" + }, + "panels/profiler/ProfileView.ts | focusSelectedFunction": { + "message": "聚焦所选函数" + }, + "panels/profiler/ProfileView.ts | function": { + "message": "函数" + }, + "panels/profiler/ProfileView.ts | heavyBottomUp": { + "message": "大量(自下而上)" + }, + "panels/profiler/ProfileView.ts | loaded": { + "message": "已加载" + }, + "panels/profiler/ProfileView.ts | loading": { + "message": "正在加载…" + }, + "panels/profiler/ProfileView.ts | loadingD": { + "message": "正在加载…{PH1}%" + }, + "panels/profiler/ProfileView.ts | parsing": { + "message": "正在解析…" + }, + "panels/profiler/ProfileView.ts | profile": { + "message": "性能分析" + }, + "panels/profiler/ProfileView.ts | profileD": { + "message": "性能分析报告 {PH1}" + }, + "panels/profiler/ProfileView.ts | profileViewMode": { + "message": "性能分析报告视图模式" + }, + "panels/profiler/ProfileView.ts | profiler": { + "message": "分析器" + }, + "panels/profiler/ProfileView.ts | restoreAllFunctions": { + "message": "恢复所有函数" + }, + "panels/profiler/ProfileView.ts | treeTopDown": { + "message": "树(自顶向下)" + }, + "panels/profiler/ProfilesPanel.ts | cantLoadFileSupportedFile": { + "message": "无法加载文件。支持的文件扩展名:{PH1}。" + }, + "panels/profiler/ProfilesPanel.ts | cantLoadProfileWhileAnother": { + "message": "无法加载这项分析,因为系统正在记录另一项分析" + }, + "panels/profiler/ProfilesPanel.ts | clearAllProfiles": { + "message": "清除所有性能分析数据" + }, + "panels/profiler/ProfilesPanel.ts | load": { + "message": "加载…" + }, + "panels/profiler/ProfilesPanel.ts | profileLoadingFailedS": { + "message": "性能分析报告加载失败:{PH1}。" + }, + "panels/profiler/ProfilesPanel.ts | profiles": { + "message": "性能分析" + }, + "panels/profiler/ProfilesPanel.ts | runD": { + "message": "运行 {PH1}" + }, + "panels/profiler/profiler-meta.ts | liveHeapProfile": { + "message": "实时堆性能分析报告" + }, + "panels/profiler/profiler-meta.ts | memory": { + "message": "内存" + }, + "panels/profiler/profiler-meta.ts | showLiveHeapProfile": { + "message": "显示实时堆分析" + }, + "panels/profiler/profiler-meta.ts | showMemory": { + "message": "显示内存" + }, + "panels/profiler/profiler-meta.ts | showNativeFunctions": { + "message": "在 JS 性能分析报告中显示原生函数" + }, + "panels/profiler/profiler-meta.ts | startRecordingHeapAllocations": { + "message": "开始录制堆分配量" + }, + "panels/profiler/profiler-meta.ts | startRecordingHeapAllocationsAndReload": { + "message": "开始录制堆分配量,并重新加载网页" + }, + "panels/profiler/profiler-meta.ts | startStopRecording": { + "message": "开始/停止录制" + }, + "panels/profiler/profiler-meta.ts | stopRecordingHeapAllocations": { + "message": "停止记录堆分配" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | clearAll": { + "message": "全部清除" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | documentation": { + "message": "文档" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | filter": { + "message": "过滤" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | method": { + "message": "方法" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | noMessageSelected": { + "message": "未选择任何消息" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | record": { + "message": "录制" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | request": { + "message": "请求" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | response": { + "message": "响应" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | sMs": { + "message": "{PH1} 毫秒" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | save": { + "message": "保存" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommand": { + "message": "发送原始 CDP 命令" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | session": { + "message": "会话" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | target": { + "message": "目标" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | timestamp": { + "message": "时间戳" + }, + "panels/protocol_monitor/ProtocolMonitor.ts | type": { + "message": "类型" + }, + "panels/protocol_monitor/protocol_monitor-meta.ts | protocolMonitor": { + "message": "协议监视器" + }, + "panels/protocol_monitor/protocol_monitor-meta.ts | showProtocolMonitor": { + "message": "显示协议监视器" + }, + "panels/screencast/ScreencastApp.ts | toggleScreencast": { + "message": "开启/关闭抓屏功能" + }, + "panels/screencast/ScreencastView.ts | addressBar": { + "message": "地址栏" + }, + "panels/screencast/ScreencastView.ts | back": { + "message": "返回" + }, + "panels/screencast/ScreencastView.ts | forward": { + "message": "前进" + }, + "panels/screencast/ScreencastView.ts | profilingInProgress": { + "message": "正在进行性能分析" + }, + "panels/screencast/ScreencastView.ts | reload": { + "message": "重新加载" + }, + "panels/screencast/ScreencastView.ts | screencastViewOfDebugTarget": { + "message": "调试目标的抓屏视图" + }, + "panels/screencast/ScreencastView.ts | theTabIsInactive": { + "message": "此标签页不活跃" + }, + "panels/search/SearchResultsPane.ts | lineS": { + "message": "第 {PH1} 行" + }, + "panels/search/SearchResultsPane.ts | matchesCountS": { + "message": "匹配项计数 {PH1}" + }, + "panels/search/SearchResultsPane.ts | showDMore": { + "message": "再显示 {PH1} 项" + }, + "panels/search/SearchView.ts | clear": { + "message": "清除" + }, + "panels/search/SearchView.ts | foundDMatchingLinesInDFiles": { + "message": "在 {PH2} 个文件中找到 {PH1} 个匹配行。" + }, + "panels/search/SearchView.ts | foundDMatchingLinesInFile": { + "message": "在 1 个文件中找到了 {PH1} 个匹配行。" + }, + "panels/search/SearchView.ts | foundMatchingLineInFile": { + "message": "在 1 个文件中找到了 1 个匹配行。" + }, + "panels/search/SearchView.ts | indexing": { + "message": "正在编入索引…" + }, + "panels/search/SearchView.ts | indexingInterrupted": { + "message": "索引编制已中断。" + }, + "panels/search/SearchView.ts | matchCase": { + "message": "匹配大小写" + }, + "panels/search/SearchView.ts | noMatchesFound": { + "message": "未找到匹配项。" + }, + "panels/search/SearchView.ts | refresh": { + "message": "刷新" + }, + "panels/search/SearchView.ts | search": { + "message": "搜索" + }, + "panels/search/SearchView.ts | searchFinished": { + "message": "搜索已完成。" + }, + "panels/search/SearchView.ts | searchInterrupted": { + "message": "搜索已中断。" + }, + "panels/search/SearchView.ts | searchQuery": { + "message": "搜索查询" + }, + "panels/search/SearchView.ts | searching": { + "message": "正在搜索…" + }, + "panels/search/SearchView.ts | useRegularExpression": { + "message": "使用正则表达式" + }, + "panels/security/SecurityModel.ts | cipherWithMAC": { + "message": "包含 {PH2} 的 {PH1}" + }, + "panels/security/SecurityModel.ts | keyExchangeWithGroup": { + "message": "密钥交换分组模式为 {PH2} 的 {PH1}" + }, + "panels/security/SecurityModel.ts | theSecurityOfThisPageIsUnknown": { + "message": "此网页的安全性不明。" + }, + "panels/security/SecurityModel.ts | thisPageIsNotSecure": { + "message": "这是一个不安全的网页。" + }, + "panels/security/SecurityModel.ts | thisPageIsNotSecureBrokenHttps": { + "message": "这是一个不安全的网页(HTTPS 已遭破坏)。" + }, + "panels/security/SecurityModel.ts | thisPageIsSecureValidHttps": { + "message": "这是一个安全的网页(HTTPS 有效)。" + }, + "panels/security/SecurityPanel.ts | activeContentWithCertificate": { + "message": "包含证书错误的有效内容" + }, + "panels/security/SecurityPanel.ts | activeMixedContent": { + "message": "主动型混合内容" + }, + "panels/security/SecurityPanel.ts | allResourcesOnThisPageAreServed": { + "message": "此网页上的所有资源均以安全方式提供。" + }, + "panels/security/SecurityPanel.ts | allServedSecurely": { + "message": "所有资源均以安全方式提供" + }, + "panels/security/SecurityPanel.ts | blockedMixedContent": { + "message": "被屏蔽的混合内容" + }, + "panels/security/SecurityPanel.ts | certificate": { + "message": "证书" + }, + "panels/security/SecurityPanel.ts | certificateExpiresSoon": { + "message": "证书即将过期" + }, + "panels/security/SecurityPanel.ts | certificateTransparency": { + "message": "证书透明度" + }, + "panels/security/SecurityPanel.ts | chromeHasDeterminedThatThisSiteS": { + "message": "Chrome 已确定此网站可能是虚假网站或欺诈性网站。" + }, + "panels/security/SecurityPanel.ts | cipher": { + "message": "加密算法" + }, + "panels/security/SecurityPanel.ts | connection": { + "message": "网络连接" + }, + "panels/security/SecurityPanel.ts | contentWithCertificateErrors": { + "message": "具有证书错误的内容" + }, + "panels/security/SecurityPanel.ts | flaggedByGoogleSafeBrowsing": { + "message": "已被 Google 安全浏览标记" + }, + "panels/security/SecurityPanel.ts | hashAlgorithm": { + "message": "哈希算法" + }, + "panels/security/SecurityPanel.ts | hideFullDetails": { + "message": "隐藏完整的详细信息" + }, + "panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownIn": { + "message": "如果您认为系统不该向您显示这条提示,请访问 https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals。" + }, + "panels/security/SecurityPanel.ts | ifYouBelieveThisIsShownInErrorSafety": { + "message": "如果您认为系统不该向您显示这条提示,请访问 https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals。" + }, + "panels/security/SecurityPanel.ts | info": { + "message": "信息" + }, + "panels/security/SecurityPanel.ts | insecureSha": { + "message": "不安全 (SHA-1)" + }, + "panels/security/SecurityPanel.ts | issuedAt": { + "message": "颁发时间" + }, + "panels/security/SecurityPanel.ts | issuer": { + "message": "颁发者" + }, + "panels/security/SecurityPanel.ts | keyExchange": { + "message": "密钥交换" + }, + "panels/security/SecurityPanel.ts | keyExchangeGroup": { + "message": "密钥交换群组" + }, + "panels/security/SecurityPanel.ts | logId": { + "message": "日志 ID" + }, + "panels/security/SecurityPanel.ts | logName": { + "message": "日志名称" + }, + "panels/security/SecurityPanel.ts | mainOrigin": { + "message": "主要来源" + }, + "panels/security/SecurityPanel.ts | mainOriginNonsecure": { + "message": "主要来源(非安全来源)" + }, + "panels/security/SecurityPanel.ts | mainOriginSecure": { + "message": "主要来源(安全)" + }, + "panels/security/SecurityPanel.ts | missing": { + "message": "缺失" + }, + "panels/security/SecurityPanel.ts | mixedContent": { + "message": "混合内容" + }, + "panels/security/SecurityPanel.ts | na": { + "message": "(不适用)" + }, + "panels/security/SecurityPanel.ts | noSecurityDetailsAreAvailableFor": { + "message": "没有此来源的任何安全详情。" + }, + "panels/security/SecurityPanel.ts | noSecurityInformation": { + "message": "无安全信息" + }, + "panels/security/SecurityPanel.ts | nonsecureForm": { + "message": "不安全的表单" + }, + "panels/security/SecurityPanel.ts | nonsecureOrigins": { + "message": "不安全的来源" + }, + "panels/security/SecurityPanel.ts | notSecure": { + "message": "不安全" + }, + "panels/security/SecurityPanel.ts | notSecureBroken": { + "message": "不安全(已损坏)" + }, + "panels/security/SecurityPanel.ts | obsoleteConnectionSettings": { + "message": "过时的连接设置" + }, + "panels/security/SecurityPanel.ts | openFullCertificateDetails": { + "message": "打开完整的证书详情" + }, + "panels/security/SecurityPanel.ts | origin": { + "message": "来源" + }, + "panels/security/SecurityPanel.ts | overview": { + "message": "概览" + }, + "panels/security/SecurityPanel.ts | possibleSpoofingUrl": { + "message": "可能是仿冒网址" + }, + "panels/security/SecurityPanel.ts | protocol": { + "message": "协议" + }, + "panels/security/SecurityPanel.ts | publickeypinningBypassed": { + "message": "已绕过 Public-Key-Pinning" + }, + "panels/security/SecurityPanel.ts | publickeypinningWasBypassedByA": { + "message": "本地根证书绕过了 Public-Key-Pinning。" + }, + "panels/security/SecurityPanel.ts | reloadThePageToRecordRequestsFor": { + "message": "重新加载网页,以录制针对 HTTP 资源的请求。" + }, + "panels/security/SecurityPanel.ts | reloadToViewDetails": { + "message": "重新加载即可查看详情" + }, + "panels/security/SecurityPanel.ts | resources": { + "message": "资源" + }, + "panels/security/SecurityPanel.ts | rsaKeyExchangeIsObsoleteEnableAn": { + "message": "RSA 密钥交换已过时。请启用基于 ECDHE 的加密套件。" + }, + "panels/security/SecurityPanel.ts | sIsObsoleteEnableAnAesgcmbased": { + "message": "{PH1} 已过时。请启用基于 AES-GCM 的加密套件。" + }, + "panels/security/SecurityPanel.ts | sIsObsoleteEnableTlsOrLater": { + "message": "{PH1} 已过时。请启用 TLS 1.2 或更高版本。" + }, + "panels/security/SecurityPanel.ts | sct": { + "message": "SCT" + }, + "panels/security/SecurityPanel.ts | secure": { + "message": "安全" + }, + "panels/security/SecurityPanel.ts | secureConnectionSettings": { + "message": "安全连接设置" + }, + "panels/security/SecurityPanel.ts | secureOrigins": { + "message": "安全的来源" + }, + "panels/security/SecurityPanel.ts | securityOverview": { + "message": "安全性概览" + }, + "panels/security/SecurityPanel.ts | showFullDetails": { + "message": "显示完整详情" + }, + "panels/security/SecurityPanel.ts | showLess": { + "message": "收起" + }, + "panels/security/SecurityPanel.ts | showMoreSTotal": { + "message": "展开(共 {PH1} 个)" + }, + "panels/security/SecurityPanel.ts | signatureAlgorithm": { + "message": "签名算法" + }, + "panels/security/SecurityPanel.ts | signatureData": { + "message": "签名数据" + }, + "panels/security/SecurityPanel.ts | source": { + "message": "来源" + }, + "panels/security/SecurityPanel.ts | subject": { + "message": "主题" + }, + "panels/security/SecurityPanel.ts | subjectAlternativeNameMissing": { + "message": "缺少 Subject Alternative Name" + }, + "panels/security/SecurityPanel.ts | theCertificateChainForThisSite": { + "message": "此网站的证书链包含使用 SHA-1 签署的证书。" + }, + "panels/security/SecurityPanel.ts | theCertificateForThisSiteDoesNot": { + "message": "此网站的证书不包含任何内含域名或 IP 地址的 Subject Alternative Name 扩展项。" + }, + "panels/security/SecurityPanel.ts | theCertificateForThisSiteExpires": { + "message": "此网站的证书将在 48 小时内过期,因此需要更新。" + }, + "panels/security/SecurityPanel.ts | theConnectionToThisSiteIs": { + "message": "与此网站的连接已使用 {PH1}、{PH2} 和 {PH3} 进行加密和身份验证。" + }, + "panels/security/SecurityPanel.ts | theConnectionToThisSiteIsUsingA": { + "message": "与此网站的连接使用的是 {PH1} 颁发的可信且有效的服务器证书。" + }, + "panels/security/SecurityPanel.ts | theSecurityDetailsAboveAreFrom": { + "message": "上方的安全详情来自首个已检查的响应。" + }, + "panels/security/SecurityPanel.ts | theServerSignatureUsesShaWhichIs": { + "message": "服务器签名使用的是过时的 SHA-1。请启用 SHA-2 签名算法。(请注意,这不同于证书中的签名。)" + }, + "panels/security/SecurityPanel.ts | thisIsAnErrorPage": { + "message": "这是一个错误网页。" + }, + "panels/security/SecurityPanel.ts | thisOriginIsANonhttpsSecure": { + "message": "此来源是非 HTTPS 安全来源。" + }, + "panels/security/SecurityPanel.ts | thisPageHasANonhttpsSecureOrigin": { + "message": "此网页拥有非 HTTPS 来源。" + }, + "panels/security/SecurityPanel.ts | thisPageIncludesAFormWithA": { + "message": "该网页中有一个包含不安全的“action”属性的表单。" + }, + "panels/security/SecurityPanel.ts | thisPageIncludesHttpResources": { + "message": "此网页包含 HTTP 资源。" + }, + "panels/security/SecurityPanel.ts | thisPageIncludesResourcesThat": { + "message": "此网页包含加载后出现证书错误的资源。" + }, + "panels/security/SecurityPanel.ts | thisPageIsDangerousFlaggedBy": { + "message": "这是一个危险网页(已被 Google 安全浏览功能做了标记)。" + }, + "panels/security/SecurityPanel.ts | thisPageIsInsecureUnencrypted": { + "message": "这是一个不安全的网页(未加密的 HTTP)。" + }, + "panels/security/SecurityPanel.ts | thisPageIsSuspicious": { + "message": "此网页可疑" + }, + "panels/security/SecurityPanel.ts | thisPageIsSuspiciousFlaggedBy": { + "message": "此网页可疑(已被 Chrome 标记)。" + }, + "panels/security/SecurityPanel.ts | thisRequestCompliesWithChromes": { + "message": "此请求符合 Chrome 的证书透明度政策。" + }, + "panels/security/SecurityPanel.ts | thisRequestDoesNotComplyWith": { + "message": "此请求不符合 Chrome 的证书透明度政策。" + }, + "panels/security/SecurityPanel.ts | thisResponseWasLoadedFromCache": { + "message": "此响应是从缓存加载的。可能缺少一些安全性详细信息。" + }, + "panels/security/SecurityPanel.ts | thisSiteIsMissingAValidTrusted": { + "message": "此网站缺少可信且有效的证书 ({PH1})。" + }, + "panels/security/SecurityPanel.ts | thisSitesHostnameLooksSimilarToP": { + "message": "此网站的主机名看起来和 {PH1} 很相似。攻击者有时会通过对域名进行一些细微变更来仿冒网站,这样的变更通常很难被发现。" + }, + "panels/security/SecurityPanel.ts | toCheckThisPagesStatusVisit": { + "message": "如需查看此网页的状态,请访问 g.co/safebrowsingstatus。" + }, + "panels/security/SecurityPanel.ts | unknownCanceled": { + "message": "未知/已取消" + }, + "panels/security/SecurityPanel.ts | validAndTrusted": { + "message": "有效且可信" + }, + "panels/security/SecurityPanel.ts | validFrom": { + "message": "生效时间:" + }, + "panels/security/SecurityPanel.ts | validUntil": { + "message": "截止日期:" + }, + "panels/security/SecurityPanel.ts | validationStatus": { + "message": "验证状态" + }, + "panels/security/SecurityPanel.ts | viewCertificate": { + "message": "查看证书" + }, + "panels/security/SecurityPanel.ts | viewDRequestsInNetworkPanel": { + "message": "{n,plural, =1{查看“网络”面板中的 # 个请求}other{查看“网络”面板中的 # 个请求}}" + }, + "panels/security/SecurityPanel.ts | viewRequestsInNetworkPanel": { + "message": "在“网络”面板中查看请求" + }, + "panels/security/SecurityPanel.ts | youHaveRecentlyAllowedContent": { + "message": "您最近已允许在此网站上运行已加载但有证书错误的内容(如脚本或 iframe)。" + }, + "panels/security/SecurityPanel.ts | youHaveRecentlyAllowedNonsecure": { + "message": "您最近曾允许在此网站上运行非安全内容(如脚本或 iframe)。" + }, + "panels/security/SecurityPanel.ts | yourConnectionToThisOriginIsNot": { + "message": "您与此来源之间的连接不安全。" + }, + "panels/security/SecurityPanel.ts | yourPageRequestedNonsecure": { + "message": "您的网页请求了被屏蔽的非安全资源。" + }, + "panels/security/security-meta.ts | security": { + "message": "安全" + }, + "panels/security/security-meta.ts | showSecurity": { + "message": "显示“安全”面板" + }, + "panels/sensors/LocationsSettingsTab.ts | addLocation": { + "message": "添加位置…" + }, + "panels/sensors/LocationsSettingsTab.ts | customLocations": { + "message": "自定义位置" + }, + "panels/sensors/LocationsSettingsTab.ts | lat": { + "message": "纬度" + }, + "panels/sensors/LocationsSettingsTab.ts | latitude": { + "message": "纬度" + }, + "panels/sensors/LocationsSettingsTab.ts | latitudeMustBeANumber": { + "message": "纬度必须是数字" + }, + "panels/sensors/LocationsSettingsTab.ts | latitudeMustBeGreaterThanOrEqual": { + "message": "纬度必须大于或等于 {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | latitudeMustBeLessThanOrEqualToS": { + "message": "纬度必须小于或等于 {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | locale": { + "message": "语言区域" + }, + "panels/sensors/LocationsSettingsTab.ts | localeMustContainAlphabetic": { + "message": "语言区域必须包含字母字符" + }, + "panels/sensors/LocationsSettingsTab.ts | locationName": { + "message": "位置名称" + }, + "panels/sensors/LocationsSettingsTab.ts | locationNameCannotBeEmpty": { + "message": "位置名称不得为空" + }, + "panels/sensors/LocationsSettingsTab.ts | locationNameMustBeLessThanS": { + "message": "位置名称必须少于 {PH1} 个字符" + }, + "panels/sensors/LocationsSettingsTab.ts | long": { + "message": "经度" + }, + "panels/sensors/LocationsSettingsTab.ts | longitude": { + "message": "经度" + }, + "panels/sensors/LocationsSettingsTab.ts | longitudeMustBeANumber": { + "message": "经度必须是数字" + }, + "panels/sensors/LocationsSettingsTab.ts | longitudeMustBeGreaterThanOr": { + "message": "经度必须大于或等于 {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | longitudeMustBeLessThanOrEqualTo": { + "message": "经度必须小于或等于 {PH1}" + }, + "panels/sensors/LocationsSettingsTab.ts | timezoneId": { + "message": "时区 ID" + }, + "panels/sensors/LocationsSettingsTab.ts | timezoneIdMustContainAlphabetic": { + "message": "时区 ID 必须包含字母字符" + }, + "panels/sensors/SensorsView.ts | adjustWithMousewheelOrUpdownKeys": { + "message": "使用鼠标滚轮或向上/向下键进行调整。{PH1}:±10、Shift:±1、Alt:±0.01" + }, + "panels/sensors/SensorsView.ts | alpha": { + "message": "α (Alpha)" + }, + "panels/sensors/SensorsView.ts | beta": { + "message": "β (Beta)" + }, + "panels/sensors/SensorsView.ts | customOrientation": { + "message": "自定义屏幕方向" + }, + "panels/sensors/SensorsView.ts | deviceOrientationSetToAlphaSBeta": { + "message": "设备屏幕方向已设为 Alpha:{PH1},Beta:{PH2},Gamma:{PH3}" + }, + "panels/sensors/SensorsView.ts | displayDown": { + "message": "屏幕向下" + }, + "panels/sensors/SensorsView.ts | displayUp": { + "message": "屏幕向上" + }, + "panels/sensors/SensorsView.ts | enableOrientationToRotate": { + "message": "允许旋转屏幕方向" + }, + "panels/sensors/SensorsView.ts | error": { + "message": "错误" + }, + "panels/sensors/SensorsView.ts | forcesSelectedIdleStateEmulation": { + "message": "强制模拟所选空闲状态" + }, + "panels/sensors/SensorsView.ts | forcesTouchInsteadOfClick": { + "message": "只能轻触,不能点击" + }, + "panels/sensors/SensorsView.ts | gamma": { + "message": "γ (Gamma)" + }, + "panels/sensors/SensorsView.ts | landscapeLeft": { + "message": "横向(向左)" + }, + "panels/sensors/SensorsView.ts | landscapeRight": { + "message": "横向(向右)" + }, + "panels/sensors/SensorsView.ts | latitude": { + "message": "纬度" + }, + "panels/sensors/SensorsView.ts | locale": { + "message": "语言区域" + }, + "panels/sensors/SensorsView.ts | location": { + "message": "位置" + }, + "panels/sensors/SensorsView.ts | locationUnavailable": { + "message": "无法获取位置信息" + }, + "panels/sensors/SensorsView.ts | longitude": { + "message": "经度" + }, + "panels/sensors/SensorsView.ts | manage": { + "message": "管理" + }, + "panels/sensors/SensorsView.ts | manageTheListOfLocations": { + "message": "管理位置列表" + }, + "panels/sensors/SensorsView.ts | noOverride": { + "message": "禁止替换" + }, + "panels/sensors/SensorsView.ts | off": { + "message": "停用" + }, + "panels/sensors/SensorsView.ts | orientation": { + "message": "屏幕方向" + }, + "panels/sensors/SensorsView.ts | other": { + "message": "其他…" + }, + "panels/sensors/SensorsView.ts | overrides": { + "message": "替换" + }, + "panels/sensors/SensorsView.ts | portrait": { + "message": "纵向" + }, + "panels/sensors/SensorsView.ts | portraitUpsideDown": { + "message": "纵向(上下颠倒)" + }, + "panels/sensors/SensorsView.ts | presets": { + "message": "预设" + }, + "panels/sensors/SensorsView.ts | reset": { + "message": "重置" + }, + "panels/sensors/SensorsView.ts | resetDeviceOrientation": { + "message": "重置设备屏幕方向" + }, + "panels/sensors/SensorsView.ts | shiftdragHorizontallyToRotate": { + "message": "按 Shift 键并横向拖动即可绕 y 轴旋转" + }, + "panels/sensors/SensorsView.ts | timezoneId": { + "message": "时区 ID" + }, + "panels/sensors/sensors-meta.ts | accelerometer": { + "message": "加速度计" + }, + "panels/sensors/sensors-meta.ts | deviceOrientation": { + "message": "设备屏幕方向" + }, + "panels/sensors/sensors-meta.ts | devicebased": { + "message": "基于设备" + }, + "panels/sensors/sensors-meta.ts | emulateIdleDetectorState": { + "message": "模拟空闲检测器状态" + }, + "panels/sensors/sensors-meta.ts | forceEnabled": { + "message": "已强制启用" + }, + "panels/sensors/sensors-meta.ts | geolocation": { + "message": "地理定位" + }, + "panels/sensors/sensors-meta.ts | locale": { + "message": "语言区域" + }, + "panels/sensors/sensors-meta.ts | locales": { + "message": "语言区域" + }, + "panels/sensors/sensors-meta.ts | locations": { + "message": "位置" + }, + "panels/sensors/sensors-meta.ts | noIdleEmulation": { + "message": "无空闲模拟" + }, + "panels/sensors/sensors-meta.ts | sensors": { + "message": "传感器" + }, + "panels/sensors/sensors-meta.ts | showLocations": { + "message": "显示位置" + }, + "panels/sensors/sensors-meta.ts | showSensors": { + "message": "显示“传感器”工具" + }, + "panels/sensors/sensors-meta.ts | timezones": { + "message": "时区" + }, + "panels/sensors/sensors-meta.ts | touch": { + "message": "轻触" + }, + "panels/sensors/sensors-meta.ts | userActiveScreenLocked": { + "message": "用户处于活跃状态,屏幕已锁定" + }, + "panels/sensors/sensors-meta.ts | userActiveScreenUnlocked": { + "message": "用户处于活跃状态,屏幕已解锁" + }, + "panels/sensors/sensors-meta.ts | userIdleScreenLocked": { + "message": "用户处于空闲状态,屏幕已锁定" + }, + "panels/sensors/sensors-meta.ts | userIdleScreenUnlocked": { + "message": "用户处于空闲状态,屏幕已解锁" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | addFilenamePattern": { + "message": "添加文件名模式" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | addPattern": { + "message": "添加格式…" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | behavior": { + "message": "行为" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | debuggerWillSkipThroughThe": { + "message": "调试程序将快速浏览脚本,且不会在遇到脚本抛出的异常时停止。" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | disabled": { + "message": "已停用" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | frameworkIgnoreList": { + "message": "框架忽略列表" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreList": { + "message": "忽略列表" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreListContentScripts": { + "message": "向忽略列表添加内容脚本" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreListContentScriptsExtension": { + "message": "向忽略列表添加内容脚本(网页中的扩展程序脚本)" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | ignoreScriptsWhoseNamesMatchS": { + "message": "忽略名称与“{PH1}”匹配的脚本" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | noIgnoreListPatterns": { + "message": "没有忽略列表模式" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | pattern": { + "message": "格式" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | patternAlreadyExists": { + "message": "模式已存在" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | patternCannotBeEmpty": { + "message": "模式不能为空" + }, + "panels/settings/FrameworkIgnoreListSettingsTab.ts | patternMustBeAValidRegular": { + "message": "模式必须是有效的正则表达式" + }, + "panels/settings/KeybindsSettingsTab.ts | FullListOfDevtoolsKeyboard": { + "message": "DevTools 键盘快捷键和手势的完整列表" + }, + "panels/settings/KeybindsSettingsTab.ts | ResetShortcutsForAction": { + "message": "重置操作的快捷键" + }, + "panels/settings/KeybindsSettingsTab.ts | RestoreDefaultShortcuts": { + "message": "恢复默认快捷键" + }, + "panels/settings/KeybindsSettingsTab.ts | addAShortcut": { + "message": "添加快捷方式" + }, + "panels/settings/KeybindsSettingsTab.ts | confirmChanges": { + "message": "确认更改" + }, + "panels/settings/KeybindsSettingsTab.ts | discardChanges": { + "message": "舍弃更改" + }, + "panels/settings/KeybindsSettingsTab.ts | editShortcut": { + "message": "修改快捷方式" + }, + "panels/settings/KeybindsSettingsTab.ts | keyboardShortcutsList": { + "message": "键盘快捷键列表" + }, + "panels/settings/KeybindsSettingsTab.ts | matchShortcutsFromPreset": { + "message": "与预设中的快捷键匹配" + }, + "panels/settings/KeybindsSettingsTab.ts | noShortcutForAction": { + "message": "操作未设置快捷键" + }, + "panels/settings/KeybindsSettingsTab.ts | removeShortcut": { + "message": "移除快捷键" + }, + "panels/settings/KeybindsSettingsTab.ts | shortcutModified": { + "message": "快捷方式已修改" + }, + "panels/settings/KeybindsSettingsTab.ts | shortcuts": { + "message": "快捷键" + }, + "panels/settings/KeybindsSettingsTab.ts | shortcutsCannotContainOnly": { + "message": "快捷键不能只包含辅助键。" + }, + "panels/settings/KeybindsSettingsTab.ts | thisShortcutIsInUseByS": { + "message": "{PH1}正在使用此快捷键:{PH2}。" + }, + "panels/settings/SettingsScreen.ts | experiments": { + "message": "实验" + }, + "panels/settings/SettingsScreen.ts | filterExperimentsLabel": { + "message": "过滤" + }, + "panels/settings/SettingsScreen.ts | learnMore": { + "message": "了解详情" + }, + "panels/settings/SettingsScreen.ts | noResults": { + "message": "没有符合过滤条件的实验" + }, + "panels/settings/SettingsScreen.ts | oneOrMoreSettingsHaveChanged": { + "message": "一项或多项设置已更改,需要重新加载才能生效。" + }, + "panels/settings/SettingsScreen.ts | preferences": { + "message": "偏好设置" + }, + "panels/settings/SettingsScreen.ts | restoreDefaultsAndReload": { + "message": "恢复默认值并重新加载" + }, + "panels/settings/SettingsScreen.ts | settings": { + "message": "设置" + }, + "panels/settings/SettingsScreen.ts | shortcuts": { + "message": "快捷键" + }, + "panels/settings/SettingsScreen.ts | theseExperimentsAreParticularly": { + "message": "这些实验尤其不稳定。您需要自行承担启用后所产生的风险。" + }, + "panels/settings/SettingsScreen.ts | theseExperimentsCouldBeUnstable": { + "message": "这些实验可能不稳定或不可靠,因此可能需要您重启 DevTools。" + }, + "panels/settings/SettingsScreen.ts | warning": { + "message": "警告:" + }, + "panels/settings/components/SyncSection.ts | preferencesSyncDisabled": { + "message": "若要开启此设置,您必须先在 Chrome 中启用设置同步。" + }, + "panels/settings/components/SyncSection.ts | settings": { + "message": "转到“设置”" + }, + "panels/settings/components/SyncSection.ts | signedIn": { + "message": "登录 Chrome 时使用的帐号:" + }, + "panels/settings/components/SyncSection.ts | syncDisabled": { + "message": "若要开启此设置,您必须先启用 Chrome 同步。" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | addCustomDevice": { + "message": "添加自定义设备…" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | device": { + "message": "设备" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceAddedOrUpdated": { + "message": "已成功添加/更新设备“{PH1}”。" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceName": { + "message": "设备名称" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceNameCannotBeEmpty": { + "message": "设备名称不得为空。" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | deviceNameMustBeLessThanS": { + "message": "设备名称必须少于 {PH1} 个字符。" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | devicePixelRatio": { + "message": "设备像素比" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | emulatedDevices": { + "message": "模拟的设备" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | height": { + "message": "高度" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | userAgentString": { + "message": "用户代理字符串" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | userAgentType": { + "message": "用户代理类型" + }, + "panels/settings/emulation/DevicesSettingsTab.ts | width": { + "message": "宽度" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | addBrand": { + "message": "添加品牌" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | addedBrand": { + "message": "已添加品牌行" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecture": { + "message": "架构" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | architecturePlaceholder": { + "message": "架构(例如 x86)" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandDeleteAriaLabel": { + "message": "删除 {PH1}" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandName": { + "message": "品牌" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandNameAriaLabel": { + "message": "品牌 {PH1}" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandProperties": { + "message": "品牌属性" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brandVersionAriaLabel": { + "message": "版本 {PH1}" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | brands": { + "message": "品牌" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deleteTooltip": { + "message": "删除" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deletedBrand": { + "message": "已删除品牌行" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceModel": { + "message": "设备型号" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | deviceProperties": { + "message": "设备属性" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersion": { + "message": "浏览器版本全称" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | fullBrowserVersionPlaceholder": { + "message": "完整的浏览器版本号(例如 87.0.4280.88)" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | mobileCheckboxLabel": { + "message": "手机" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | notRepresentable": { + "message": "无法显示为结构化标头字符串。" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformLabel": { + "message": "平台" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformPlaceholder": { + "message": "平台(例如 Android)" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformProperties": { + "message": "平台属性" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | platformVersion": { + "message": "平台版本" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | title": { + "message": "用户代理客户端提示" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | update": { + "message": "更新" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | userAgentClientHintsInfo": { + "message": "用户代理客户端提示是用户代理字符串的替代文字,能以结构更完善的方式识别浏览器和设备,同时提供更好的隐私保护。点击按钮可了解详情。" + }, + "panels/settings/emulation/components/UserAgentClientHintsForm.ts | version": { + "message": "版本" + }, + "panels/settings/emulation/emulation-meta.ts | devices": { + "message": "设备" + }, + "panels/settings/emulation/emulation-meta.ts | showDevices": { + "message": "显示设备" + }, + "panels/settings/settings-meta.ts | documentation": { + "message": "文档" + }, + "panels/settings/settings-meta.ts | experiments": { + "message": "实验" + }, + "panels/settings/settings-meta.ts | ignoreList": { + "message": "忽略列表" + }, + "panels/settings/settings-meta.ts | preferences": { + "message": "偏好设置" + }, + "panels/settings/settings-meta.ts | settings": { + "message": "设置" + }, + "panels/settings/settings-meta.ts | shortcuts": { + "message": "快捷键" + }, + "panels/settings/settings-meta.ts | showExperiments": { + "message": "显示实验" + }, + "panels/settings/settings-meta.ts | showIgnoreList": { + "message": "显示“忽略列表”" + }, + "panels/settings/settings-meta.ts | showPreferences": { + "message": "显示偏好设置" + }, + "panels/settings/settings-meta.ts | showShortcuts": { + "message": "显示快捷键" + }, + "panels/snippets/ScriptSnippetFileSystem.ts | linkedTo": { + "message": "已链接到 {PH1}" + }, + "panels/snippets/ScriptSnippetFileSystem.ts | scriptSnippet": { + "message": "脚本代码段 #{PH1}" + }, + "panels/snippets/SnippetsQuickOpen.ts | noSnippetsFound": { + "message": "找不到任何代码段。" + }, + "panels/snippets/SnippetsQuickOpen.ts | run": { + "message": "运行" + }, + "panels/snippets/SnippetsQuickOpen.ts | snippet": { + "message": "代码段" + }, + "panels/sources/AddSourceMapURLDialog.ts | add": { + "message": "添加" + }, + "panels/sources/AddSourceMapURLDialog.ts | sourceMapUrl": { + "message": "来源映射网址:" + }, + "panels/sources/BreakpointEditDialog.ts | breakpoint": { + "message": "断点" + }, + "panels/sources/BreakpointEditDialog.ts | breakpointType": { + "message": "断点类型" + }, + "panels/sources/BreakpointEditDialog.ts | conditionalBreakpoint": { + "message": "条件断点" + }, + "panels/sources/BreakpointEditDialog.ts | expressionToCheckBeforePausingEg": { + "message": "在暂停之前要检查的表达式,例如 x > 5" + }, + "panels/sources/BreakpointEditDialog.ts | logAMessageToConsoleDoNotBreak": { + "message": "将消息记录到控制台,不要中断" + }, + "panels/sources/BreakpointEditDialog.ts | logMessageEgXIsX": { + "message": "记录消息,例如:'x is', x" + }, + "panels/sources/BreakpointEditDialog.ts | logpoint": { + "message": "日志点" + }, + "panels/sources/BreakpointEditDialog.ts | pauseOnlyWhenTheConditionIsTrue": { + "message": "仅在条件为 true 时暂停" + }, + "panels/sources/CSSPlugin.ts | openColorPicker": { + "message": "打开颜色选择器。" + }, + "panels/sources/CSSPlugin.ts | openCubicBezierEditor": { + "message": "打开三次贝塞尔曲线编辑器。" + }, + "panels/sources/CallStackSidebarPane.ts | addAllContentScriptsToIgnoreList": { + "message": "向忽略列表添加所有内容脚本" + }, + "panels/sources/CallStackSidebarPane.ts | addScriptToIgnoreList": { + "message": "向忽略列表添加脚本" + }, + "panels/sources/CallStackSidebarPane.ts | callFrameWarnings": { + "message": "某些调用帧包含警告" + }, + "panels/sources/CallStackSidebarPane.ts | callStack": { + "message": "调用堆栈" + }, + "panels/sources/CallStackSidebarPane.ts | copyStackTrace": { + "message": "复制堆栈轨迹" + }, + "panels/sources/CallStackSidebarPane.ts | notPaused": { + "message": "未暂停" + }, + "panels/sources/CallStackSidebarPane.ts | onIgnoreList": { + "message": "在忽略列表中" + }, + "panels/sources/CallStackSidebarPane.ts | removeAllContentScriptsFrom": { + "message": "从忽略列表中移除所有内容脚本" + }, + "panels/sources/CallStackSidebarPane.ts | removeFromIgnoreList": { + "message": "从忽略列表中移除" + }, + "panels/sources/CallStackSidebarPane.ts | showIgnorelistedFrames": { + "message": "显示已列入忽略列表的帧" + }, + "panels/sources/CallStackSidebarPane.ts | showMore": { + "message": "展开" + }, + "panels/sources/CoveragePlugin.ts | clickToShowCoveragePanel": { + "message": "点击即可显示“覆盖率”面板" + }, + "panels/sources/CoveragePlugin.ts | coverageNa": { + "message": "覆盖率:不适用" + }, + "panels/sources/CoveragePlugin.ts | coverageS": { + "message": "覆盖率:{PH1}%" + }, + "panels/sources/CoveragePlugin.ts | showDetails": { + "message": "显示详细信息" + }, + "panels/sources/DebuggerPausedMessage.ts | attributeModifications": { + "message": "属性修改" + }, + "panels/sources/DebuggerPausedMessage.ts | childSAdded": { + "message": "已添加子{PH1}" + }, + "panels/sources/DebuggerPausedMessage.ts | debuggerPaused": { + "message": "调试程序已暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | descendantSAdded": { + "message": "添加了后代{PH1}" + }, + "panels/sources/DebuggerPausedMessage.ts | descendantSRemoved": { + "message": "后代{PH1}已移除" + }, + "panels/sources/DebuggerPausedMessage.ts | nodeRemoval": { + "message": "移除节点" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedBeforePotentialOutofmemory": { + "message": "在内存不足可能导致崩溃之前已暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnAssertion": { + "message": "已在断言部分暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnBreakpoint": { + "message": "已在断点暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnCspViolation": { + "message": "已在违反 CSP 时暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnDebuggedFunction": { + "message": "已在已调试的函数上暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnEventListener": { + "message": "已在事件监听器中暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnException": { + "message": "已在遇到异常时暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnPromiseRejection": { + "message": "已在 promise 遭拒时暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnS": { + "message": "已在{PH1}暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | pausedOnXhrOrFetch": { + "message": "已在 XHR 或 fetch 中暂停" + }, + "panels/sources/DebuggerPausedMessage.ts | subtreeModifications": { + "message": "子树修改" + }, + "panels/sources/DebuggerPausedMessage.ts | trustedTypePolicyViolation": { + "message": "Trusted Type - 违反政策" + }, + "panels/sources/DebuggerPausedMessage.ts | trustedTypeSinkViolation": { + "message": "Trusted Type - 接收器违规行为" + }, + "panels/sources/DebuggerPlugin.ts | addBreakpoint": { + "message": "添加断点" + }, + "panels/sources/DebuggerPlugin.ts | addConditionalBreakpoint": { + "message": "添加条件断点…" + }, + "panels/sources/DebuggerPlugin.ts | addLogpoint": { + "message": "添加日志点…" + }, + "panels/sources/DebuggerPlugin.ts | addSourceMap": { + "message": "添加来源映射…" + }, + "panels/sources/DebuggerPlugin.ts | associatedFilesAreAvailable": { + "message": "相关文件可通过文件树或按相应的组合键 ({PH1}) 获取。" + }, + "panels/sources/DebuggerPlugin.ts | associatedFilesShouldBeAdded": { + "message": "应将相关文件添加到文件树。您可以将这些已解析的源文件作为常规 JavaScript 文件进行调试。" + }, + "panels/sources/DebuggerPlugin.ts | configure": { + "message": "配置" + }, + "panels/sources/DebuggerPlugin.ts | disableBreakpoint": { + "message": "{n,plural, =1{停用断点}other{停用行内所有断点}}" + }, + "panels/sources/DebuggerPlugin.ts | editBreakpoint": { + "message": "修改断点…" + }, + "panels/sources/DebuggerPlugin.ts | enableBreakpoint": { + "message": "{n,plural, =1{启用断点}other{启用行内所有断点}}" + }, + "panels/sources/DebuggerPlugin.ts | neverPauseHere": { + "message": "一律不在此处暂停" + }, + "panels/sources/DebuggerPlugin.ts | prettyprint": { + "message": "美观输出" + }, + "panels/sources/DebuggerPlugin.ts | prettyprintThisMinifiedFile": { + "message": "要美观输出此压缩文件吗?" + }, + "panels/sources/DebuggerPlugin.ts | prettyprintingWillFormatThisFile": { + "message": "美观输出会在新标签页中为此文件设置格式,您可以继续在新标签页中调试。您也可以点击底部状态栏上的 {PH1} 按钮,美观输出此文件。" + }, + "panels/sources/DebuggerPlugin.ts | removeBreakpoint": { + "message": "{n,plural, =1{移除 1 个断点}other{移除行内所有断点}}" + }, + "panels/sources/DebuggerPlugin.ts | removeFromIgnoreList": { + "message": "从忽略列表中移除" + }, + "panels/sources/DebuggerPlugin.ts | sourceMapDetected": { + "message": "已检测到来源映射。" + }, + "panels/sources/DebuggerPlugin.ts | sourceMapFoundButIgnoredForFile": { + "message": "来源映射已找到,但对于忽略列表中的文件而言已忽略。" + }, + "panels/sources/DebuggerPlugin.ts | theDebuggerWillSkipStepping": { + "message": "调试程序将跳过逐步执行此脚本的过程,且不会在遇到异常时停止。" + }, + "panels/sources/DebuggerPlugin.ts | thisScriptIsOnTheDebuggersIgnore": { + "message": "此脚本位于调试程序的忽略列表中" + }, + "panels/sources/FilteredUISourceCodeListProvider.ts | noFilesFound": { + "message": "找不到任何文件" + }, + "panels/sources/GoToLineQuickOpen.ts | currentLineSTypeALineNumber": { + "message": "当前行:{PH1}。输入介于 1 和 {PH2} 之间的行号即可转到相应行。" + }, + "panels/sources/GoToLineQuickOpen.ts | currentPositionXsTypeAnOffset": { + "message": "当前位置:0x{PH1}。输入介于 0x{PH2} 和 0x{PH3} 之间的偏移值,即可转到相应位置。" + }, + "panels/sources/GoToLineQuickOpen.ts | goToLineS": { + "message": "转到第 {PH1} 行。" + }, + "panels/sources/GoToLineQuickOpen.ts | goToLineSAndColumnS": { + "message": "转到第 {PH1} 行第 {PH2} 列。" + }, + "panels/sources/GoToLineQuickOpen.ts | goToOffsetXs": { + "message": "转到偏移值 0x{PH1}。" + }, + "panels/sources/GoToLineQuickOpen.ts | noFileSelected": { + "message": "未选择任何文件。" + }, + "panels/sources/GoToLineQuickOpen.ts | noResultsFound": { + "message": "未找到任何结果" + }, + "panels/sources/GoToLineQuickOpen.ts | typeANumberToGoToThatLine": { + "message": "输入数字即可前往相应的行。" + }, + "panels/sources/InplaceFormatterEditorAction.ts | format": { + "message": "格式" + }, + "panels/sources/InplaceFormatterEditorAction.ts | formatS": { + "message": "格式化“{PH1}”" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | activateBreakpoints": { + "message": "启用断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | checked": { + "message": "已勾选" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | deactivateBreakpoints": { + "message": "停用断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | disableAllBreakpoints": { + "message": "停用所有断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | disableBreakpointsInFile": { + "message": "停用文件中的断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | enableAllBreakpoints": { + "message": "启用所有断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | enableBreakpointsInFile": { + "message": "在文件中启用断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | mixed": { + "message": "混合" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | noBreakpoints": { + "message": "无断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeAllBreakpoints": { + "message": "移除所有断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeAllBreakpointsInLine": { + "message": "移除行内所有断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeBreakpoint": { + "message": "移除断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | removeOtherBreakpoints": { + "message": "移除其他断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | revealLocation": { + "message": "显示位置" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | sBreakpointHit": { + "message": "遇到{PH1}断点" + }, + "panels/sources/JavaScriptBreakpointsSidebarPane.ts | unchecked": { + "message": "未选中" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteAll": { + "message": "确定要删除此文件夹中包含的所有替换项吗?" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToDeleteThis": { + "message": "确定要删除此文件吗?" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToExcludeThis": { + "message": "确定要排除此文件夹吗?" + }, + "panels/sources/NavigatorView.ts | areYouSureYouWantToRemoveThis": { + "message": "确定要移除此文件夹吗?" + }, + "panels/sources/NavigatorView.ts | delete": { + "message": "删除" + }, + "panels/sources/NavigatorView.ts | deleteAllOverrides": { + "message": "删除所有替换项" + }, + "panels/sources/NavigatorView.ts | excludeFolder": { + "message": "排除文件夹" + }, + "panels/sources/NavigatorView.ts | makeACopy": { + "message": "制作副本…" + }, + "panels/sources/NavigatorView.ts | newFile": { + "message": "新文件" + }, + "panels/sources/NavigatorView.ts | noDomain": { + "message": "(无网域)" + }, + "panels/sources/NavigatorView.ts | openFolder": { + "message": "打开文件夹" + }, + "panels/sources/NavigatorView.ts | removeFolderFromWorkspace": { + "message": "从工作区中移除文件夹" + }, + "panels/sources/NavigatorView.ts | rename": { + "message": "重命名…" + }, + "panels/sources/NavigatorView.ts | sFromSourceMap": { + "message": "{PH1}(来自来源映射)" + }, + "panels/sources/NavigatorView.ts | searchInAllFiles": { + "message": "在所有文件中搜索" + }, + "panels/sources/NavigatorView.ts | searchInFolder": { + "message": "在文件夹中搜索" + }, + "panels/sources/OutlineQuickOpen.ts | noFileSelected": { + "message": "未选择任何文件。" + }, + "panels/sources/OutlineQuickOpen.ts | noResultsFound": { + "message": "未找到任何结果" + }, + "panels/sources/OutlineQuickOpen.ts | openAJavascriptOrCssFileToSee": { + "message": "打开 JavaScript 或 CSS 文件即可查看符号" + }, + "panels/sources/ScopeChainSidebarPane.ts | closure": { + "message": "闭包" + }, + "panels/sources/ScopeChainSidebarPane.ts | closureS": { + "message": "闭包 ({PH1})" + }, + "panels/sources/ScopeChainSidebarPane.ts | couldNotOpenLinearMemory": { + "message": "无法打开线性内存检查器:无法找到缓冲区。" + }, + "panels/sources/ScopeChainSidebarPane.ts | exception": { + "message": "异常" + }, + "panels/sources/ScopeChainSidebarPane.ts | loading": { + "message": "正在加载…" + }, + "panels/sources/ScopeChainSidebarPane.ts | noVariables": { + "message": "无变量" + }, + "panels/sources/ScopeChainSidebarPane.ts | notPaused": { + "message": "未暂停" + }, + "panels/sources/ScopeChainSidebarPane.ts | returnValue": { + "message": "返回值" + }, + "panels/sources/ScopeChainSidebarPane.ts | revealInMemoryInspectorPanel": { + "message": "在“内存检查器”面板中显示" + }, + "panels/sources/ScriptFormatterEditorAction.ts | prettyPrint": { + "message": "美观输出" + }, + "panels/sources/ScriptFormatterEditorAction.ts | prettyPrintS": { + "message": "美观输出{PH1}" + }, + "panels/sources/ScriptOriginPlugin.ts | providedViaDebugInfoByS": { + "message": "(在 {PH1} 上通过调试信息提供)" + }, + "panels/sources/ScriptOriginPlugin.ts | sourceMappedFromS": { + "message": "(从 {PH1} 映射的源代码)" + }, + "panels/sources/SnippetsPlugin.ts | ctrlenter": { + "message": "Ctrl+Enter" + }, + "panels/sources/SnippetsPlugin.ts | enter": { + "message": "⌘+Enter" + }, + "panels/sources/SourcesNavigator.ts | clearConfiguration": { + "message": "清除配置" + }, + "panels/sources/SourcesNavigator.ts | contentScriptsServedByExtensions": { + "message": "扩展程序提供的内容脚本会显示在此处" + }, + "panels/sources/SourcesNavigator.ts | createAndSaveCodeSnippetsFor": { + "message": "创建并保存代码段以供之后使用" + }, + "panels/sources/SourcesNavigator.ts | createNewSnippet": { + "message": "创建新代码段" + }, + "panels/sources/SourcesNavigator.ts | learnMore": { + "message": "了解详情" + }, + "panels/sources/SourcesNavigator.ts | learnMoreAboutWorkspaces": { + "message": "详细了解工作区" + }, + "panels/sources/SourcesNavigator.ts | newSnippet": { + "message": "新代码段" + }, + "panels/sources/SourcesNavigator.ts | overridePageAssetsWithFilesFromA": { + "message": "使用本地文件夹中的文件替换网页资源" + }, + "panels/sources/SourcesNavigator.ts | remove": { + "message": "移除" + }, + "panels/sources/SourcesNavigator.ts | rename": { + "message": "重命名…" + }, + "panels/sources/SourcesNavigator.ts | run": { + "message": "运行" + }, + "panels/sources/SourcesNavigator.ts | saveAs": { + "message": "另存为…" + }, + "panels/sources/SourcesNavigator.ts | selectFolderForOverrides": { + "message": "选择放置替换项的文件夹" + }, + "panels/sources/SourcesNavigator.ts | syncChangesInDevtoolsWithThe": { + "message": "将 DevTools 中的更改与本地文件系统同步" + }, + "panels/sources/SourcesPanel.ts | continueToHere": { + "message": "继续执行到此处" + }, + "panels/sources/SourcesPanel.ts | copyS": { + "message": "复制{PH1}" + }, + "panels/sources/SourcesPanel.ts | copyStringAsJSLiteral": { + "message": "复制字符串作为 JavaScript 字面量" + }, + "panels/sources/SourcesPanel.ts | copyStringAsJSONLiteral": { + "message": "复制字符串作为 JSON 字面量" + }, + "panels/sources/SourcesPanel.ts | copyStringContents": { + "message": "复制字符串内容" + }, + "panels/sources/SourcesPanel.ts | dontPauseOnExceptions": { + "message": "不在遇到异常时暂停" + }, + "panels/sources/SourcesPanel.ts | dropWorkspaceFolderHere": { + "message": "将工作区文件夹拖放到此处" + }, + "panels/sources/SourcesPanel.ts | groupByFolder": { + "message": "按文件夹分组" + }, + "panels/sources/SourcesPanel.ts | hideDebugger": { + "message": "隐藏调试程序" + }, + "panels/sources/SourcesPanel.ts | hideNavigator": { + "message": "隐藏导航器" + }, + "panels/sources/SourcesPanel.ts | moreOptions": { + "message": "更多选项" + }, + "panels/sources/SourcesPanel.ts | openInSourcesPanel": { + "message": "在“来源”面板中打开" + }, + "panels/sources/SourcesPanel.ts | pauseOnCaughtExceptions": { + "message": "在遇到异常时暂停" + }, + "panels/sources/SourcesPanel.ts | pauseOnExceptions": { + "message": "在遇到异常时暂停" + }, + "panels/sources/SourcesPanel.ts | resumeWithAllPausesBlockedForMs": { + "message": "忽略所有暂停项达 500 毫秒并继续" + }, + "panels/sources/SourcesPanel.ts | revealInSidebar": { + "message": "在边栏中显示" + }, + "panels/sources/SourcesPanel.ts | showDebugger": { + "message": "显示调试程序" + }, + "panels/sources/SourcesPanel.ts | showFunctionDefinition": { + "message": "显示函数定义" + }, + "panels/sources/SourcesPanel.ts | showNavigator": { + "message": "显示导航器" + }, + "panels/sources/SourcesPanel.ts | storeSAsGlobalVariable": { + "message": "将{PH1}存储为全局变量" + }, + "panels/sources/SourcesPanel.ts | terminateCurrentJavascriptCall": { + "message": "终止当前 JavaScript 调用" + }, + "panels/sources/SourcesView.ts | dropInAFolderToAddToWorkspace": { + "message": "将一个文件夹拖放到此处即可添加至工作区" + }, + "panels/sources/SourcesView.ts | openFile": { + "message": "打开文件" + }, + "panels/sources/SourcesView.ts | runCommand": { + "message": "运行命令" + }, + "panels/sources/SourcesView.ts | sourceViewActions": { + "message": "源代码查看操作" + }, + "panels/sources/TabbedEditorContainer.ts | areYouSureYouWantToCloseUnsaved": { + "message": "确定要关闭未保存的文件 ({PH1}) 吗?" + }, + "panels/sources/TabbedEditorContainer.ts | changesToThisFileWereNotSavedTo": { + "message": "对此文件做出的更改未保存到文件系统。" + }, + "panels/sources/TabbedEditorContainer.ts | unableToLoadThisContent": { + "message": "无法加载此内容。" + }, + "panels/sources/ThreadsSidebarPane.ts | paused": { + "message": "已暂停" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | addPropertyPathToWatch": { + "message": "向监视表达式添加属性路径" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | addWatchExpression": { + "message": "添加监视表达式" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | copyValue": { + "message": "复制值" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | deleteAllWatchExpressions": { + "message": "删除所有监视表达式" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | deleteWatchExpression": { + "message": "删除监视表达式" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | noWatchExpressions": { + "message": "没有监视表达式" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | notAvailable": { + "message": "<无法计算>" + }, + "panels/sources/WatchExpressionsSidebarPane.ts | refreshWatchExpressions": { + "message": "刷新监视表达式" + }, + "panels/sources/sources-meta.ts | activateBreakpoints": { + "message": "启用断点" + }, + "panels/sources/sources-meta.ts | addFolderToWorkspace": { + "message": "向工作区添加文件夹" + }, + "panels/sources/sources-meta.ts | addSelectedTextToWatches": { + "message": "将所选文本添加至监视表达式" + }, + "panels/sources/sources-meta.ts | all": { + "message": "全部" + }, + "panels/sources/sources-meta.ts | allowScrollingPastEndOfFile": { + "message": "允许滚动范围超出文件末尾" + }, + "panels/sources/sources-meta.ts | autocompletion": { + "message": "自动补全" + }, + "panels/sources/sources-meta.ts | automaticallyRevealFilesIn": { + "message": "自动在边栏中显示文件" + }, + "panels/sources/sources-meta.ts | bracketMatching": { + "message": "括号匹配" + }, + "panels/sources/sources-meta.ts | breakpoints": { + "message": "断点" + }, + "panels/sources/sources-meta.ts | closeAll": { + "message": "全部关闭" + }, + "panels/sources/sources-meta.ts | closeTheActiveTab": { + "message": "关闭使用中的标签页" + }, + "panels/sources/sources-meta.ts | codeFolding": { + "message": "代码折叠" + }, + "panels/sources/sources-meta.ts | createNewSnippet": { + "message": "创建新代码段" + }, + "panels/sources/sources-meta.ts | deactivateBreakpoints": { + "message": "停用断点" + }, + "panels/sources/sources-meta.ts | decrementCssUnitBy": { + "message": "将 CSS 单位减少 {PH1}" + }, + "panels/sources/sources-meta.ts | detectIndentation": { + "message": "检测缩进" + }, + "panels/sources/sources-meta.ts | disableAutoFocusOnDebuggerPaused": { + "message": "触发断点后不聚焦于“来源”面板" + }, + "panels/sources/sources-meta.ts | disableAutocompletion": { + "message": "停用自动补全功能" + }, + "panels/sources/sources-meta.ts | disableBracketMatching": { + "message": "停用括号匹配" + }, + "panels/sources/sources-meta.ts | disableCodeFolding": { + "message": "停用代码折叠功能" + }, + "panels/sources/sources-meta.ts | disableCssSourceMaps": { + "message": "停用 CSS 源代码映射" + }, + "panels/sources/sources-meta.ts | disableJavascriptSourceMaps": { + "message": "停用 JavaScript 源代码映射" + }, + "panels/sources/sources-meta.ts | disableTabMovesFocus": { + "message": "停用通过 Tab 键移动焦点功能" + }, + "panels/sources/sources-meta.ts | disallowScrollingPastEndOfFile": { + "message": "不允许滚动范围超出文件末尾" + }, + "panels/sources/sources-meta.ts | displayVariableValuesInlineWhile": { + "message": "在调试时显示内嵌变量值" + }, + "panels/sources/sources-meta.ts | doNotAutomaticallyRevealFilesIn": { + "message": "不自动在边栏中显示文件" + }, + "panels/sources/sources-meta.ts | doNotDetectIndentation": { + "message": "不检测缩进" + }, + "panels/sources/sources-meta.ts | doNotDisplayVariableValuesInline": { + "message": "调试时不以内嵌方式显示变量值" + }, + "panels/sources/sources-meta.ts | doNotSearchInAnonymousAndContent": { + "message": "不在匿名和内容脚本中搜索" + }, + "panels/sources/sources-meta.ts | doNotShowWhitespaceCharacters": { + "message": "不显示空格字符串" + }, + "panels/sources/sources-meta.ts | enableAutoFocusOnDebuggerPaused": { + "message": "触发断点后聚焦于“来源”面板" + }, + "panels/sources/sources-meta.ts | enableAutocompletion": { + "message": "启用自动补全功能" + }, + "panels/sources/sources-meta.ts | enableBracketMatching": { + "message": "启用括号匹配功能" + }, + "panels/sources/sources-meta.ts | enableCodeFolding": { + "message": "启用代码折叠功能" + }, + "panels/sources/sources-meta.ts | enableCssSourceMaps": { + "message": "启用 CSS 源代码映射" + }, + "panels/sources/sources-meta.ts | enableJavascriptSourceMaps": { + "message": "启用 JavaScript 源代码映射" + }, + "panels/sources/sources-meta.ts | enableTabMovesFocus": { + "message": "启用通过 Tab 键移动焦点功能" + }, + "panels/sources/sources-meta.ts | evaluateSelectedTextInConsole": { + "message": "在控制台中评估所选文本" + }, + "panels/sources/sources-meta.ts | file": { + "message": "文件" + }, + "panels/sources/sources-meta.ts | filesystem": { + "message": "文件系统" + }, + "panels/sources/sources-meta.ts | goTo": { + "message": "转到" + }, + "panels/sources/sources-meta.ts | goToAFunctionDeclarationruleSet": { + "message": "转到函数声明/规则组" + }, + "panels/sources/sources-meta.ts | goToLine": { + "message": "转到行" + }, + "panels/sources/sources-meta.ts | incrementCssUnitBy": { + "message": "将 CSS 单位增加 {PH1}" + }, + "panels/sources/sources-meta.ts | jumpToNextEditingLocation": { + "message": "跳转到下一个修改位置" + }, + "panels/sources/sources-meta.ts | jumpToPreviousEditingLocation": { + "message": "跳转到上一个修改位置" + }, + "panels/sources/sources-meta.ts | line": { + "message": "行" + }, + "panels/sources/sources-meta.ts | nextCallFrame": { + "message": "下一个调用帧" + }, + "panels/sources/sources-meta.ts | none": { + "message": "无" + }, + "panels/sources/sources-meta.ts | open": { + "message": "打开" + }, + "panels/sources/sources-meta.ts | pauseScriptExecution": { + "message": "暂停脚本执行" + }, + "panels/sources/sources-meta.ts | previousCallFrame": { + "message": "上一个调用帧" + }, + "panels/sources/sources-meta.ts | quickSource": { + "message": "快速来源" + }, + "panels/sources/sources-meta.ts | rename": { + "message": "重命名" + }, + "panels/sources/sources-meta.ts | resumeScriptExecution": { + "message": "继续执行脚本" + }, + "panels/sources/sources-meta.ts | runSnippet": { + "message": "运行代码段" + }, + "panels/sources/sources-meta.ts | save": { + "message": "保存" + }, + "panels/sources/sources-meta.ts | saveAll": { + "message": "全部保存" + }, + "panels/sources/sources-meta.ts | scope": { + "message": "作用域" + }, + "panels/sources/sources-meta.ts | search": { + "message": "搜索" + }, + "panels/sources/sources-meta.ts | searchInAnonymousAndContent": { + "message": "在匿名和内容脚本中搜索" + }, + "panels/sources/sources-meta.ts | showAllWhitespaceCharacters": { + "message": "显示所有空格字符" + }, + "panels/sources/sources-meta.ts | showBreakpoints": { + "message": "显示“断点”工具" + }, + "panels/sources/sources-meta.ts | showFilesystem": { + "message": "显示“文件系统”工具" + }, + "panels/sources/sources-meta.ts | showQuickSource": { + "message": "显示“快速来源”工具" + }, + "panels/sources/sources-meta.ts | showScope": { + "message": "显示“作用域”" + }, + "panels/sources/sources-meta.ts | showSearch": { + "message": "显示“搜索”工具" + }, + "panels/sources/sources-meta.ts | showSnippets": { + "message": "显示“代码段”工具" + }, + "panels/sources/sources-meta.ts | showSources": { + "message": "显示“来源”工具" + }, + "panels/sources/sources-meta.ts | showThreads": { + "message": "显示“线程”工具" + }, + "panels/sources/sources-meta.ts | showTrailingWhitespaceCharacters": { + "message": "显示尾随空格字符" + }, + "panels/sources/sources-meta.ts | showWatch": { + "message": "显示“监视”工具" + }, + "panels/sources/sources-meta.ts | showWhitespaceCharacters": { + "message": "显示空格字符:" + }, + "panels/sources/sources-meta.ts | snippets": { + "message": "代码段" + }, + "panels/sources/sources-meta.ts | sources": { + "message": "源代码" + }, + "panels/sources/sources-meta.ts | step": { + "message": "单步调试" + }, + "panels/sources/sources-meta.ts | stepIntoNextFunctionCall": { + "message": "进入下一个函数调用" + }, + "panels/sources/sources-meta.ts | stepOutOfCurrentFunction": { + "message": "跳出当前函数" + }, + "panels/sources/sources-meta.ts | stepOverNextFunctionCall": { + "message": "跳过下一个函数调用" + }, + "panels/sources/sources-meta.ts | switchFile": { + "message": "切换文件" + }, + "panels/sources/sources-meta.ts | symbol": { + "message": "符号" + }, + "panels/sources/sources-meta.ts | threads": { + "message": "线程" + }, + "panels/sources/sources-meta.ts | toggleBreakpoint": { + "message": "切换断点" + }, + "panels/sources/sources-meta.ts | toggleBreakpointEnabled": { + "message": "已启用切换断点快捷键" + }, + "panels/sources/sources-meta.ts | toggleBreakpointInputWindow": { + "message": "开启/关闭断点输入窗口" + }, + "panels/sources/sources-meta.ts | trailing": { + "message": "尾随" + }, + "panels/sources/sources-meta.ts | watch": { + "message": "监视" + }, + "panels/timeline/CountersGraph.ts | documents": { + "message": "文档" + }, + "panels/timeline/CountersGraph.ts | gpuMemory": { + "message": "GPU 内存" + }, + "panels/timeline/CountersGraph.ts | jsHeap": { + "message": "JS 堆" + }, + "panels/timeline/CountersGraph.ts | listeners": { + "message": "监听器" + }, + "panels/timeline/CountersGraph.ts | nodes": { + "message": "节点" + }, + "panels/timeline/CountersGraph.ts | ss": { + "message": "[{PH1} - {PH2}]" + }, + "panels/timeline/EventsTimelineTreeView.ts | Dms": { + "message": "{PH1} 毫秒" + }, + "panels/timeline/EventsTimelineTreeView.ts | all": { + "message": "全部" + }, + "panels/timeline/EventsTimelineTreeView.ts | durationFilter": { + "message": "时长过滤器" + }, + "panels/timeline/EventsTimelineTreeView.ts | filterEventLog": { + "message": "过滤事件日志" + }, + "panels/timeline/EventsTimelineTreeView.ts | startTime": { + "message": "开始时间" + }, + "panels/timeline/TimelineController.ts | cpuProfileForATargetIsNot": { + "message": "无法显示目标的 CPU 性能分析报告。" + }, + "panels/timeline/TimelineController.ts | tracingNotSupported": { + "message": "无法为这类目标提供性能跟踪记录" + }, + "panels/timeline/TimelineDetailsView.ts | bottomup": { + "message": "自下而上" + }, + "panels/timeline/TimelineDetailsView.ts | callTree": { + "message": "调用树" + }, + "panels/timeline/TimelineDetailsView.ts | estimated": { + "message": "估算值" + }, + "panels/timeline/TimelineDetailsView.ts | eventLog": { + "message": "事件日志" + }, + "panels/timeline/TimelineDetailsView.ts | layers": { + "message": "图层" + }, + "panels/timeline/TimelineDetailsView.ts | learnMore": { + "message": "了解详情" + }, + "panels/timeline/TimelineDetailsView.ts | paintProfiler": { + "message": "绘制性能剖析器" + }, + "panels/timeline/TimelineDetailsView.ts | rangeSS": { + "message": "范围:{PH1} - {PH2}" + }, + "panels/timeline/TimelineDetailsView.ts | summary": { + "message": "摘要" + }, + "panels/timeline/TimelineDetailsView.ts | totalBlockingTimeSmss": { + "message": "总阻塞时间:{PH1} 毫秒{PH2}" + }, + "panels/timeline/TimelineEventOverview.ts | coverage": { + "message": "覆盖率" + }, + "panels/timeline/TimelineEventOverview.ts | cpu": { + "message": "CPU" + }, + "panels/timeline/TimelineEventOverview.ts | fps": { + "message": "FPS" + }, + "panels/timeline/TimelineEventOverview.ts | heap": { + "message": "堆" + }, + "panels/timeline/TimelineEventOverview.ts | net": { + "message": "网络" + }, + "panels/timeline/TimelineEventOverview.ts | sSDash": { + "message": "{PH1} - {PH2}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | animation": { + "message": "动画" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | console": { + "message": "控制台" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | droppedFrame": { + "message": "丢弃的帧" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | experience": { + "message": "体验" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | frame": { + "message": "帧" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | frameS": { + "message": "帧 - {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | frames": { + "message": "帧" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | gpu": { + "message": "GPU" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | idleFrame": { + "message": "空闲帧" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | input": { + "message": "输入" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | interactions": { + "message": "互动" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | longFrame": { + "message": "长帧" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | main": { + "message": "主要" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | mainS": { + "message": "主要 - {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | occurrencesS": { + "message": "发生次数:{PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | onIgnoreList": { + "message": "在忽略列表中" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | raster": { + "message": "光栅" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | rasterizerThreadS": { + "message": "光栅器线程 {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | sFfps": { + "message": "{PH1} ~ {PH2} fps" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | sSelfS": { + "message": "{PH1}(自身耗时 {PH2})" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | subframe": { + "message": "子帧" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | thread": { + "message": "线程" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | threadS": { + "message": "线程 {PH1}" + }, + "panels/timeline/TimelineFlameChartDataProvider.ts | timings": { + "message": "时间" + }, + "panels/timeline/TimelineFlameChartNetworkDataProvider.ts | network": { + "message": "网络" + }, + "panels/timeline/TimelineFlameChartView.ts | sAtS": { + "message": "{PH2}时显示的{PH1}" + }, + "panels/timeline/TimelineHistoryManager.ts | currentSessionSS": { + "message": "当前会话:{PH1}。{PH2}" + }, + "panels/timeline/TimelineHistoryManager.ts | moments": { + "message": "时刻" + }, + "panels/timeline/TimelineHistoryManager.ts | noRecordings": { + "message": "(无录制内容)" + }, + "panels/timeline/TimelineHistoryManager.ts | sAgo": { + "message": "({PH1}前)" + }, + "panels/timeline/TimelineHistoryManager.ts | sD": { + "message": "{PH1} #{PH2}" + }, + "panels/timeline/TimelineHistoryManager.ts | sH": { + "message": "{PH1} 小时" + }, + "panels/timeline/TimelineHistoryManager.ts | sM": { + "message": "{PH1} 分钟" + }, + "panels/timeline/TimelineHistoryManager.ts | selectTimelineSession": { + "message": "选择时间轴会话" + }, + "panels/timeline/TimelineLoader.ts | legacyTimelineFormatIsNot": { + "message": "旧版时间轴格式不受支持。" + }, + "panels/timeline/TimelineLoader.ts | malformedCpuProfileFormat": { + "message": "CPU 配置文件格式有误" + }, + "panels/timeline/TimelineLoader.ts | malformedTimelineDataS": { + "message": "格式有误的时间轴数据:{PH1}" + }, + "panels/timeline/TimelineLoader.ts | malformedTimelineDataUnknownJson": { + "message": "时间轴数据格式错误:未知 JSON 格式" + }, + "panels/timeline/TimelineLoader.ts | malformedTimelineInputWrongJson": { + "message": "时间轴输入项格式错误,JSON 括号对应有误" + }, + "panels/timeline/TimelinePanel.ts | CpuThrottlingIsEnabled": { + "message": "- CPU 节流已启用" + }, + "panels/timeline/TimelinePanel.ts | JavascriptSamplingIsDisabled": { + "message": "- JavaScript 采样已停用" + }, + "panels/timeline/TimelinePanel.ts | NetworkThrottlingIsEnabled": { + "message": "- 已启用网络节流功能" + }, + "panels/timeline/TimelinePanel.ts | SignificantOverheadDueToPaint": { + "message": "- 因绘制插桩而产生大量开销" + }, + "panels/timeline/TimelinePanel.ts | afterRecordingSelectAnAreaOf": { + "message": "录制结束后,在概览中以拖动方式选择感兴趣的区域。然后,使用鼠标滚轮或 {PH1} 组合键缩放并平移时间轴。{PH2}" + }, + "panels/timeline/TimelinePanel.ts | bufferUsage": { + "message": "缓冲区使用情况" + }, + "panels/timeline/TimelinePanel.ts | captureScreenshots": { + "message": "截取屏幕截图" + }, + "panels/timeline/TimelinePanel.ts | captureSettings": { + "message": "录制设置" + }, + "panels/timeline/TimelinePanel.ts | capturesAdvancedPaint": { + "message": "捕获高级绘制插桩,产生大量性能开销" + }, + "panels/timeline/TimelinePanel.ts | clear": { + "message": "清除" + }, + "panels/timeline/TimelinePanel.ts | clickTheRecordButtonSOrHitSTo": { + "message": "点击录制按钮“{PH1}”或按 {PH2} 即可开始录制新内容。" + }, + "panels/timeline/TimelinePanel.ts | clickTheReloadButtonSOrHitSTo": { + "message": "点击重新加载按钮 {PH1} 或按 {PH2} 即可录制网页加载过程。" + }, + "panels/timeline/TimelinePanel.ts | close": { + "message": "关闭" + }, + "panels/timeline/TimelinePanel.ts | coverage": { + "message": "覆盖率" + }, + "panels/timeline/TimelinePanel.ts | cpu": { + "message": "CPU:" + }, + "panels/timeline/TimelinePanel.ts | description": { + "message": "说明" + }, + "panels/timeline/TimelinePanel.ts | disableJavascriptSamples": { + "message": "停用 JavaScript 示例" + }, + "panels/timeline/TimelinePanel.ts | disablesJavascriptSampling": { + "message": "停用 JavaScript 采样,减少在移动设备上运行时的开销" + }, + "panels/timeline/TimelinePanel.ts | dropTimelineFileOrUrlHere": { + "message": "将时间轴文件或网址拖放到此处" + }, + "panels/timeline/TimelinePanel.ts | enableAdvancedPaint": { + "message": "启用高级绘制插桩(慢速)" + }, + "panels/timeline/TimelinePanel.ts | failedToSaveTimelineSSS": { + "message": "未能保存时间轴:{PH1}({PH2}、{PH3})" + }, + "panels/timeline/TimelinePanel.ts | initializingProfiler": { + "message": "正在初始化性能剖析器…" + }, + "panels/timeline/TimelinePanel.ts | learnmore": { + "message": "了解详情" + }, + "panels/timeline/TimelinePanel.ts | loadProfile": { + "message": "加载性能分析报告…" + }, + "panels/timeline/TimelinePanel.ts | loadingProfile": { + "message": "正在加载性能分析报告…" + }, + "panels/timeline/TimelinePanel.ts | memory": { + "message": "内存" + }, + "panels/timeline/TimelinePanel.ts | network": { + "message": "网络:" + }, + "panels/timeline/TimelinePanel.ts | networkConditions": { + "message": "网络状况" + }, + "panels/timeline/TimelinePanel.ts | processingProfile": { + "message": "正在处理性能分析报告…" + }, + "panels/timeline/TimelinePanel.ts | profiling": { + "message": "正在进行性能分析…" + }, + "panels/timeline/TimelinePanel.ts | received": { + "message": "已接收" + }, + "panels/timeline/TimelinePanel.ts | recordCoverageWithPerformance": { + "message": "根据性能跟踪记录来记录覆盖率" + }, + "panels/timeline/TimelinePanel.ts | recordingFailed": { + "message": "录制失败" + }, + "panels/timeline/TimelinePanel.ts | saveProfile": { + "message": "保存性能分析报告…" + }, + "panels/timeline/TimelinePanel.ts | screenshots": { + "message": "屏幕截图" + }, + "panels/timeline/TimelinePanel.ts | showMemoryTimeline": { + "message": "显示内存时间轴" + }, + "panels/timeline/TimelinePanel.ts | showWebVitals": { + "message": "显示网页指标" + }, + "panels/timeline/TimelinePanel.ts | ssec": { + "message": "{PH1} 秒" + }, + "panels/timeline/TimelinePanel.ts | status": { + "message": "状态" + }, + "panels/timeline/TimelinePanel.ts | stop": { + "message": "停止" + }, + "panels/timeline/TimelinePanel.ts | stoppingTimeline": { + "message": "正在停止时间轴…" + }, + "panels/timeline/TimelinePanel.ts | time": { + "message": "时间" + }, + "panels/timeline/TimelinePanel.ts | wasd": { + "message": "WASD" + }, + "panels/timeline/TimelinePanel.ts | webVitals": { + "message": "网页指标" + }, + "panels/timeline/TimelineTreeView.ts | activity": { + "message": "活动" + }, + "panels/timeline/TimelineTreeView.ts | chromeExtensionsOverhead": { + "message": "[Chrome 扩展程序开销]" + }, + "panels/timeline/TimelineTreeView.ts | filter": { + "message": "过滤" + }, + "panels/timeline/TimelineTreeView.ts | filterBottomup": { + "message": "过滤条件为自下而上" + }, + "panels/timeline/TimelineTreeView.ts | filterCallTree": { + "message": "过滤调用树" + }, + "panels/timeline/TimelineTreeView.ts | fms": { + "message": "{PH1} 毫秒" + }, + "panels/timeline/TimelineTreeView.ts | groupBy": { + "message": "分组依据" + }, + "panels/timeline/TimelineTreeView.ts | groupByActivity": { + "message": "按活动分组" + }, + "panels/timeline/TimelineTreeView.ts | groupByCategory": { + "message": "按类别分组" + }, + "panels/timeline/TimelineTreeView.ts | groupByDomain": { + "message": "按网域分组" + }, + "panels/timeline/TimelineTreeView.ts | groupByFrame": { + "message": "按帧分组" + }, + "panels/timeline/TimelineTreeView.ts | groupBySubdomain": { + "message": "按子网域分组" + }, + "panels/timeline/TimelineTreeView.ts | groupByUrl": { + "message": "按网址分组" + }, + "panels/timeline/TimelineTreeView.ts | heaviestStack": { + "message": "执行用时最长的堆栈" + }, + "panels/timeline/TimelineTreeView.ts | hideHeaviestStack": { + "message": "隐藏“执行用时最长的堆栈”边栏" + }, + "panels/timeline/TimelineTreeView.ts | javascript": { + "message": "JavaScript" + }, + "panels/timeline/TimelineTreeView.ts | noGrouping": { + "message": "未分组" + }, + "panels/timeline/TimelineTreeView.ts | notOptimizedS": { + "message": "未优化:{PH1}" + }, + "panels/timeline/TimelineTreeView.ts | page": { + "message": "网页" + }, + "panels/timeline/TimelineTreeView.ts | percentPlaceholder": { + "message": "{PH1}%" + }, + "panels/timeline/TimelineTreeView.ts | performance": { + "message": "性能" + }, + "panels/timeline/TimelineTreeView.ts | selectItemForDetails": { + "message": "选择项目即可查看详细信息。" + }, + "panels/timeline/TimelineTreeView.ts | selfTime": { + "message": "自身耗时" + }, + "panels/timeline/TimelineTreeView.ts | showHeaviestStack": { + "message": "显示“执行用时最长的堆栈”边栏" + }, + "panels/timeline/TimelineTreeView.ts | timelineStack": { + "message": "时间轴堆栈" + }, + "panels/timeline/TimelineTreeView.ts | totalTime": { + "message": "总时间" + }, + "panels/timeline/TimelineTreeView.ts | unattributed": { + "message": "[未归因]" + }, + "panels/timeline/TimelineTreeView.ts | vRuntime": { + "message": "[V8 运行时]" + }, + "panels/timeline/TimelineUIUtils.ts | FromCache": { + "message": " (来自缓存)" + }, + "panels/timeline/TimelineUIUtils.ts | FromMemoryCache": { + "message": " (来自内存缓存)" + }, + "panels/timeline/TimelineUIUtils.ts | FromPush": { + "message": " (来自推送)" + }, + "panels/timeline/TimelineUIUtils.ts | FromServiceWorker": { + "message": " (来自 service worker)" + }, + "panels/timeline/TimelineUIUtils.ts | SSSResourceLoading": { + "message": " ({PH1}{PH2} + {PH3}资源加载)" + }, + "panels/timeline/TimelineUIUtils.ts | UnknownNode": { + "message": "[未知节点]" + }, + "panels/timeline/TimelineUIUtils.ts | aggregatedTime": { + "message": "总时间" + }, + "panels/timeline/TimelineUIUtils.ts | allottedTime": { + "message": "分配的时间" + }, + "panels/timeline/TimelineUIUtils.ts | animation": { + "message": "动画" + }, + "panels/timeline/TimelineUIUtils.ts | animationFrameFired": { + "message": "动画帧已触发" + }, + "panels/timeline/TimelineUIUtils.ts | animationFrameRequested": { + "message": "已请求动画帧" + }, + "panels/timeline/TimelineUIUtils.ts | async": { + "message": "异步" + }, + "panels/timeline/TimelineUIUtils.ts | asyncTask": { + "message": "异步任务" + }, + "panels/timeline/TimelineUIUtils.ts | cacheModule": { + "message": "缓存模块代码" + }, + "panels/timeline/TimelineUIUtils.ts | cacheScript": { + "message": "缓存脚本代码" + }, + "panels/timeline/TimelineUIUtils.ts | cachedWasmModule": { + "message": "缓存的 Wasm 模块" + }, + "panels/timeline/TimelineUIUtils.ts | callStacks": { + "message": "调用堆栈" + }, + "panels/timeline/TimelineUIUtils.ts | callbackFunction": { + "message": "回调函数" + }, + "panels/timeline/TimelineUIUtils.ts | callbackId": { + "message": "回调 ID" + }, + "panels/timeline/TimelineUIUtils.ts | cancelAnimationFrame": { + "message": "取消动画帧" + }, + "panels/timeline/TimelineUIUtils.ts | cancelIdleCallback": { + "message": "取消空闲回调" + }, + "panels/timeline/TimelineUIUtils.ts | changedAttributeToSs": { + "message": "(已将属性更改为“{PH1}”{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedClassToSs": { + "message": "(已将类更改为“{PH1}”{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedIdToSs": { + "message": "(已将 ID 更改为“{PH1}”{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedPesudoToSs": { + "message": "(已将伪元素更改为“{PH1}”{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | changedSs": { + "message": "(已更改“{PH1}”{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | click": { + "message": "点击" + }, + "panels/timeline/TimelineUIUtils.ts | collected": { + "message": "已回收" + }, + "panels/timeline/TimelineUIUtils.ts | compilationCacheSize": { + "message": "编译缓存大小" + }, + "panels/timeline/TimelineUIUtils.ts | compilationCacheStatus": { + "message": "编译缓存状态" + }, + "panels/timeline/TimelineUIUtils.ts | compile": { + "message": "编译" + }, + "panels/timeline/TimelineUIUtils.ts | compileCode": { + "message": "编译代码" + }, + "panels/timeline/TimelineUIUtils.ts | compileModule": { + "message": "编译模块" + }, + "panels/timeline/TimelineUIUtils.ts | compileScript": { + "message": "编译脚本" + }, + "panels/timeline/TimelineUIUtils.ts | compiledWasmModule": { + "message": "已编译的 Wasm 模块" + }, + "panels/timeline/TimelineUIUtils.ts | compositeLayers": { + "message": "复合图层" + }, + "panels/timeline/TimelineUIUtils.ts | computeIntersections": { + "message": "计算相交部分" + }, + "panels/timeline/TimelineUIUtils.ts | consoleTime": { + "message": "控制台时间事件" + }, + "panels/timeline/TimelineUIUtils.ts | consumedCacheSize": { + "message": "已使用的缓存大小" + }, + "panels/timeline/TimelineUIUtils.ts | contextMenu": { + "message": "上下文菜单" + }, + "panels/timeline/TimelineUIUtils.ts | cpuTime": { + "message": "CPU 时间" + }, + "panels/timeline/TimelineUIUtils.ts | createWebsocket": { + "message": "创建 WebSocket" + }, + "panels/timeline/TimelineUIUtils.ts | cumulativeLayoutShifts": { + "message": "Cumulative Layout Shift" + }, + "panels/timeline/TimelineUIUtils.ts | cumulativeScore": { + "message": "累积分数" + }, + "panels/timeline/TimelineUIUtils.ts | currentClusterId": { + "message": "当前集群 ID" + }, + "panels/timeline/TimelineUIUtils.ts | currentClusterScore": { + "message": "当前集群分数" + }, + "panels/timeline/TimelineUIUtils.ts | decodedBody": { + "message": "经过解码的正文" + }, + "panels/timeline/TimelineUIUtils.ts | decrypt": { + "message": "解密" + }, + "panels/timeline/TimelineUIUtils.ts | decryptReply": { + "message": "解密回复" + }, + "panels/timeline/TimelineUIUtils.ts | destroyWebsocket": { + "message": "销毁 WebSocket" + }, + "panels/timeline/TimelineUIUtils.ts | details": { + "message": "详细信息" + }, + "panels/timeline/TimelineUIUtils.ts | digest": { + "message": "摘要" + }, + "panels/timeline/TimelineUIUtils.ts | digestReply": { + "message": "摘要回复" + }, + "panels/timeline/TimelineUIUtils.ts | dimensions": { + "message": "尺寸" + }, + "panels/timeline/TimelineUIUtils.ts | domGc": { + "message": "DOM GC" + }, + "panels/timeline/TimelineUIUtils.ts | domcontentloadedEvent": { + "message": "DOMContentLoaded 事件" + }, + "panels/timeline/TimelineUIUtils.ts | drag": { + "message": "拖动" + }, + "panels/timeline/TimelineUIUtils.ts | drawFrame": { + "message": "绘制帧" + }, + "panels/timeline/TimelineUIUtils.ts | duration": { + "message": "时长" + }, + "panels/timeline/TimelineUIUtils.ts | eagerCompile": { + "message": "及早编译所有函数" + }, + "panels/timeline/TimelineUIUtils.ts | elementsAffected": { + "message": "受影响的元素" + }, + "panels/timeline/TimelineUIUtils.ts | embedderCallback": { + "message": "嵌入器回调" + }, + "panels/timeline/TimelineUIUtils.ts | emptyPlaceholder": { + "message": "{PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | emptyPlaceholderColon": { + "message": ":{PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | encodedData": { + "message": "已编码的数据" + }, + "panels/timeline/TimelineUIUtils.ts | encrypt": { + "message": "加密" + }, + "panels/timeline/TimelineUIUtils.ts | encryptReply": { + "message": "加密回复" + }, + "panels/timeline/TimelineUIUtils.ts | evaluateModule": { + "message": "评估模块" + }, + "panels/timeline/TimelineUIUtils.ts | evaluateScript": { + "message": "评估脚本" + }, + "panels/timeline/TimelineUIUtils.ts | event": { + "message": "事件" + }, + "panels/timeline/TimelineUIUtils.ts | evolvedClsLink": { + "message": "演变了" + }, + "panels/timeline/TimelineUIUtils.ts | experience": { + "message": "体验" + }, + "panels/timeline/TimelineUIUtils.ts | failedToLoadScriptFromCache": { + "message": "无法从缓存加载脚本" + }, + "panels/timeline/TimelineUIUtils.ts | finishLoading": { + "message": "完成加载" + }, + "panels/timeline/TimelineUIUtils.ts | fireIdleCallback": { + "message": "触发空闲回调" + }, + "panels/timeline/TimelineUIUtils.ts | firstContentfulPaint": { + "message": "First Contentful Paint" + }, + "panels/timeline/TimelineUIUtils.ts | firstInvalidated": { + "message": "首次失效" + }, + "panels/timeline/TimelineUIUtils.ts | firstLayoutInvalidation": { + "message": "首次布局失效" + }, + "panels/timeline/TimelineUIUtils.ts | firstPaint": { + "message": "首次绘制" + }, + "panels/timeline/TimelineUIUtils.ts | fling": { + "message": "快滑" + }, + "panels/timeline/TimelineUIUtils.ts | flingHalt": { + "message": "停止快滑" + }, + "panels/timeline/TimelineUIUtils.ts | flingStart": { + "message": "开始快滑" + }, + "panels/timeline/TimelineUIUtils.ts | forcedReflow": { + "message": "已强制自动重排" + }, + "panels/timeline/TimelineUIUtils.ts | fps": { + "message": "FPS" + }, + "panels/timeline/TimelineUIUtils.ts | frame": { + "message": "帧" + }, + "panels/timeline/TimelineUIUtils.ts | frameStart": { + "message": "开始显示帧" + }, + "panels/timeline/TimelineUIUtils.ts | frameStartMainThread": { + "message": "帧开始(主线程)" + }, + "panels/timeline/TimelineUIUtils.ts | frameStartedLoading": { + "message": "帧开始加载" + }, + "panels/timeline/TimelineUIUtils.ts | function": { + "message": "函数" + }, + "panels/timeline/TimelineUIUtils.ts | functionCall": { + "message": "函数调用" + }, + "panels/timeline/TimelineUIUtils.ts | gcEvent": { + "message": "垃圾回收事件" + }, + "panels/timeline/TimelineUIUtils.ts | gpu": { + "message": "GPU" + }, + "panels/timeline/TimelineUIUtils.ts | hadRecentInput": { + "message": "包含最近输入的内容" + }, + "panels/timeline/TimelineUIUtils.ts | handlerTookS": { + "message": "处理程序耗时 {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | hitTest": { + "message": "命中测试" + }, + "panels/timeline/TimelineUIUtils.ts | idle": { + "message": "空闲" + }, + "panels/timeline/TimelineUIUtils.ts | idleCallbackExecutionExtended": { + "message": "空闲回调的执行时间超出截止时间 {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | idleCallbackRequested": { + "message": "已请求空闲回调" + }, + "panels/timeline/TimelineUIUtils.ts | imageDecode": { + "message": "图片解码" + }, + "panels/timeline/TimelineUIUtils.ts | imageResize": { + "message": "调整图片大小" + }, + "panels/timeline/TimelineUIUtils.ts | imageUrl": { + "message": "图片网址" + }, + "panels/timeline/TimelineUIUtils.ts | initiator": { + "message": "启动器" + }, + "panels/timeline/TimelineUIUtils.ts | inputLatency": { + "message": "输入延迟" + }, + "panels/timeline/TimelineUIUtils.ts | installTimer": { + "message": "安装定时器" + }, + "panels/timeline/TimelineUIUtils.ts | invalidateLayout": { + "message": "使布局失效" + }, + "panels/timeline/TimelineUIUtils.ts | invalidations": { + "message": "失效内容" + }, + "panels/timeline/TimelineUIUtils.ts | invokedByTimeout": { + "message": "根据超时时长调用" + }, + "panels/timeline/TimelineUIUtils.ts | jank": { + "message": "卡顿" + }, + "panels/timeline/TimelineUIUtils.ts | jsFrame": { + "message": "JS 帧" + }, + "panels/timeline/TimelineUIUtils.ts | keyCharacter": { + "message": "按键 - 字符" + }, + "panels/timeline/TimelineUIUtils.ts | keyDown": { + "message": "按下按键" + }, + "panels/timeline/TimelineUIUtils.ts | keyUp": { + "message": "释放按键" + }, + "panels/timeline/TimelineUIUtils.ts | largestContentfulPaint": { + "message": "Largest Contentful Paint" + }, + "panels/timeline/TimelineUIUtils.ts | layerRoot": { + "message": "图层根" + }, + "panels/timeline/TimelineUIUtils.ts | layerTree": { + "message": "图层树" + }, + "panels/timeline/TimelineUIUtils.ts | layout": { + "message": "布局" + }, + "panels/timeline/TimelineUIUtils.ts | layoutForced": { + "message": "已强制应用布局" + }, + "panels/timeline/TimelineUIUtils.ts | layoutInvalidations": { + "message": "布局失效" + }, + "panels/timeline/TimelineUIUtils.ts | layoutRoot": { + "message": "布局根" + }, + "panels/timeline/TimelineUIUtils.ts | layoutShift": { + "message": "布局偏移" + }, + "panels/timeline/TimelineUIUtils.ts | learnMore": { + "message": "了解详情" + }, + "panels/timeline/TimelineUIUtils.ts | loadFromCache": { + "message": "从缓存加载" + }, + "panels/timeline/TimelineUIUtils.ts | loading": { + "message": "正在加载" + }, + "panels/timeline/TimelineUIUtils.ts | location": { + "message": "位置" + }, + "panels/timeline/TimelineUIUtils.ts | longTask": { + "message": "长任务" + }, + "panels/timeline/TimelineUIUtils.ts | majorGc": { + "message": "主要垃圾回收" + }, + "panels/timeline/TimelineUIUtils.ts | message": { + "message": "消息" + }, + "panels/timeline/TimelineUIUtils.ts | mimeType": { + "message": "MIME 类型" + }, + "panels/timeline/TimelineUIUtils.ts | mimeTypeCaps": { + "message": "MIME 类型" + }, + "panels/timeline/TimelineUIUtils.ts | minorGc": { + "message": "次要垃圾回收" + }, + "panels/timeline/TimelineUIUtils.ts | module": { + "message": "模块" + }, + "panels/timeline/TimelineUIUtils.ts | mouseDown": { + "message": "按下鼠标" + }, + "panels/timeline/TimelineUIUtils.ts | mouseMove": { + "message": "移动鼠标" + }, + "panels/timeline/TimelineUIUtils.ts | mouseUp": { + "message": "松开鼠标" + }, + "panels/timeline/TimelineUIUtils.ts | mouseWheel": { + "message": "鼠标滚轮" + }, + "panels/timeline/TimelineUIUtils.ts | movedFrom": { + "message": "来自:" + }, + "panels/timeline/TimelineUIUtils.ts | movedTo": { + "message": "移至:" + }, + "panels/timeline/TimelineUIUtils.ts | networkRequest": { + "message": "网络请求" + }, + "panels/timeline/TimelineUIUtils.ts | networkTransfer": { + "message": "网络传输" + }, + "panels/timeline/TimelineUIUtils.ts | no": { + "message": "否" + }, + "panels/timeline/TimelineUIUtils.ts | node": { + "message": "节点:" + }, + "panels/timeline/TimelineUIUtils.ts | nodes": { + "message": "节点:" + }, + "panels/timeline/TimelineUIUtils.ts | nodesThatNeedLayout": { + "message": "需要布局的节点" + }, + "panels/timeline/TimelineUIUtils.ts | notOptimized": { + "message": "未优化" + }, + "panels/timeline/TimelineUIUtils.ts | onloadEvent": { + "message": "Onload 事件" + }, + "panels/timeline/TimelineUIUtils.ts | optimizeCode": { + "message": "优化代码" + }, + "panels/timeline/TimelineUIUtils.ts | other": { + "message": "其他" + }, + "panels/timeline/TimelineUIUtils.ts | otherInvalidations": { + "message": "其他失效内容" + }, + "panels/timeline/TimelineUIUtils.ts | ownerElement": { + "message": "所有者元素" + }, + "panels/timeline/TimelineUIUtils.ts | paint": { + "message": "绘制" + }, + "panels/timeline/TimelineUIUtils.ts | paintImage": { + "message": "绘制图片" + }, + "panels/timeline/TimelineUIUtils.ts | paintProfiler": { + "message": "绘制性能剖析器" + }, + "panels/timeline/TimelineUIUtils.ts | paintSetup": { + "message": "绘制设置" + }, + "panels/timeline/TimelineUIUtils.ts | painting": { + "message": "绘制" + }, + "panels/timeline/TimelineUIUtils.ts | parse": { + "message": "解析" + }, + "panels/timeline/TimelineUIUtils.ts | parseAndCompile": { + "message": "解析和编译" + }, + "panels/timeline/TimelineUIUtils.ts | parseHtml": { + "message": "解析 HTML" + }, + "panels/timeline/TimelineUIUtils.ts | parseStylesheet": { + "message": "解析样式表" + }, + "panels/timeline/TimelineUIUtils.ts | pendingFor": { + "message": "等待" + }, + "panels/timeline/TimelineUIUtils.ts | pinchBegin": { + "message": "双指张合开始" + }, + "panels/timeline/TimelineUIUtils.ts | pinchEnd": { + "message": "双指张合结束" + }, + "panels/timeline/TimelineUIUtils.ts | pinchUpdate": { + "message": "双指张合更新" + }, + "panels/timeline/TimelineUIUtils.ts | preview": { + "message": "预览" + }, + "panels/timeline/TimelineUIUtils.ts | priority": { + "message": "优先级" + }, + "panels/timeline/TimelineUIUtils.ts | producedCacheSize": { + "message": "已产生的缓存大小" + }, + "panels/timeline/TimelineUIUtils.ts | range": { + "message": "范围" + }, + "panels/timeline/TimelineUIUtils.ts | rasterizePaint": { + "message": "光栅化绘制内容" + }, + "panels/timeline/TimelineUIUtils.ts | recalculateStyle": { + "message": "重新计算样式" + }, + "panels/timeline/TimelineUIUtils.ts | recalculationForced": { + "message": "已强制重新计算" + }, + "panels/timeline/TimelineUIUtils.ts | receiveData": { + "message": "接收数据" + }, + "panels/timeline/TimelineUIUtils.ts | receiveResponse": { + "message": "接收响应" + }, + "panels/timeline/TimelineUIUtils.ts | receiveWebsocketHandshake": { + "message": "接收 WebSocket 握手" + }, + "panels/timeline/TimelineUIUtils.ts | recurringHandlerTookS": { + "message": "重复性处理程序耗时 {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | relatedNode": { + "message": "相关节点" + }, + "panels/timeline/TimelineUIUtils.ts | removeTimer": { + "message": "移除定时器" + }, + "panels/timeline/TimelineUIUtils.ts | rendering": { + "message": "渲染" + }, + "panels/timeline/TimelineUIUtils.ts | repeats": { + "message": "重复" + }, + "panels/timeline/TimelineUIUtils.ts | requestAnimationFrame": { + "message": "请求动画帧" + }, + "panels/timeline/TimelineUIUtils.ts | requestIdleCallback": { + "message": "请求空闲回调" + }, + "panels/timeline/TimelineUIUtils.ts | requestMainThreadFrame": { + "message": "请求主线程帧" + }, + "panels/timeline/TimelineUIUtils.ts | requestMethod": { + "message": "请求方法" + }, + "panels/timeline/TimelineUIUtils.ts | resource": { + "message": "资源" + }, + "panels/timeline/TimelineUIUtils.ts | response": { + "message": "响应" + }, + "panels/timeline/TimelineUIUtils.ts | reveal": { + "message": "显示" + }, + "panels/timeline/TimelineUIUtils.ts | runMicrotasks": { + "message": "运行微任务" + }, + "panels/timeline/TimelineUIUtils.ts | sAndS": { + "message": "{PH1} 和 {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sAndSOther": { + "message": "{PH1}、{PH2} 以及另外 1 个" + }, + "panels/timeline/TimelineUIUtils.ts | sAtS": { + "message": "{PH2}时显示的{PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | sAtSParentheses": { + "message": "{PH1}(在 {PH2}时)" + }, + "panels/timeline/TimelineUIUtils.ts | sBytes": { + "message": "{n,plural, =1{# 个字节}other{# 个字节}}" + }, + "panels/timeline/TimelineUIUtils.ts | sCLSInformation": { + "message": "{PH1} 可能会导致用户体验不佳。此指标最近{PH2}。" + }, + "panels/timeline/TimelineUIUtils.ts | sChildren": { + "message": "{PH1}(子级)" + }, + "panels/timeline/TimelineUIUtils.ts | sCollected": { + "message": "已回收 {PH1}" + }, + "panels/timeline/TimelineUIUtils.ts | sForS": { + "message": "{PH1}:{PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sIsALikelyPerformanceBottleneck": { + "message": "{PH1}可能是性能瓶颈。" + }, + "panels/timeline/TimelineUIUtils.ts | sLongFrameTimesAreAnIndicationOf": { + "message": "{PH1}。帧时间较长表明出现{PH2}。" + }, + "panels/timeline/TimelineUIUtils.ts | sOfS": { + "message": "{PH1} 个(共 {PH2} 个)" + }, + "panels/timeline/TimelineUIUtils.ts | sS": { + "message": "{PH1}:{PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sSAndSOthers": { + "message": "{PH1}、{PH2} 和另外 {PH3} 个" + }, + "panels/timeline/TimelineUIUtils.ts | sSCurlyBrackets": { + "message": "({PH1}、{PH2})" + }, + "panels/timeline/TimelineUIUtils.ts | sSDimensions": { + "message": "{PH1} × {PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sSDot": { + "message": "{PH1}。{PH2}" + }, + "panels/timeline/TimelineUIUtils.ts | sSSquareBrackets": { + "message": "{PH1} [{PH2}…]" + }, + "panels/timeline/TimelineUIUtils.ts | sSelf": { + "message": "{PH1}(自身)" + }, + "panels/timeline/TimelineUIUtils.ts | sSs": { + "message": "{PH1} [{PH2}…{PH3}]" + }, + "panels/timeline/TimelineUIUtils.ts | sTookS": { + "message": "{PH1}耗时 {PH2}。" + }, + "panels/timeline/TimelineUIUtils.ts | scheduleStyleRecalculation": { + "message": "安排重新计算样式的时间" + }, + "panels/timeline/TimelineUIUtils.ts | score": { + "message": "得分" + }, + "panels/timeline/TimelineUIUtils.ts | script": { + "message": "脚本" + }, + "panels/timeline/TimelineUIUtils.ts | scriptLoadedFromCache": { + "message": "已从缓存加载脚本" + }, + "panels/timeline/TimelineUIUtils.ts | scriptNotEligible": { + "message": "脚本不符合条件" + }, + "panels/timeline/TimelineUIUtils.ts | scripting": { + "message": "正在执行脚本" + }, + "panels/timeline/TimelineUIUtils.ts | scroll": { + "message": "滚动" + }, + "panels/timeline/TimelineUIUtils.ts | scrollBegin": { + "message": "开始滚动" + }, + "panels/timeline/TimelineUIUtils.ts | scrollEnd": { + "message": "滚动结束" + }, + "panels/timeline/TimelineUIUtils.ts | scrollUpdate": { + "message": "滚动更新" + }, + "panels/timeline/TimelineUIUtils.ts | selfTime": { + "message": "自身耗时" + }, + "panels/timeline/TimelineUIUtils.ts | sendRequest": { + "message": "发送请求" + }, + "panels/timeline/TimelineUIUtils.ts | sendWebsocketHandshake": { + "message": "发送 WebSocket 握手" + }, + "panels/timeline/TimelineUIUtils.ts | show": { + "message": "显示" + }, + "panels/timeline/TimelineUIUtils.ts | sign": { + "message": "签名" + }, + "panels/timeline/TimelineUIUtils.ts | signReply": { + "message": "签名回复" + }, + "panels/timeline/TimelineUIUtils.ts | size": { + "message": "大小" + }, + "panels/timeline/TimelineUIUtils.ts | stackTrace": { + "message": "堆栈轨迹" + }, + "panels/timeline/TimelineUIUtils.ts | stackTraceColon": { + "message": "堆栈轨迹:" + }, + "panels/timeline/TimelineUIUtils.ts | state": { + "message": "状态" + }, + "panels/timeline/TimelineUIUtils.ts | statusCode": { + "message": "状态代码" + }, + "panels/timeline/TimelineUIUtils.ts | streamed": { + "message": "流式" + }, + "panels/timeline/TimelineUIUtils.ts | streamingCompileTask": { + "message": "流式编译任务" + }, + "panels/timeline/TimelineUIUtils.ts | streamingWasmResponse": { + "message": "流式 Wasm 响应" + }, + "panels/timeline/TimelineUIUtils.ts | styleInvalidations": { + "message": "样式失效" + }, + "panels/timeline/TimelineUIUtils.ts | stylesheetUrl": { + "message": "样式表网址" + }, + "panels/timeline/TimelineUIUtils.ts | system": { + "message": "系统" + }, + "panels/timeline/TimelineUIUtils.ts | tap": { + "message": "点按" + }, + "panels/timeline/TimelineUIUtils.ts | tapBegin": { + "message": "点按开始" + }, + "panels/timeline/TimelineUIUtils.ts | tapDown": { + "message": "向下点按" + }, + "panels/timeline/TimelineUIUtils.ts | tapHalt": { + "message": "点按停止" + }, + "panels/timeline/TimelineUIUtils.ts | task": { + "message": "任务" + }, + "panels/timeline/TimelineUIUtils.ts | timeSpentInRendering": { + "message": "渲染耗时" + }, + "panels/timeline/TimelineUIUtils.ts | timeWaitingForMainThread": { + "message": "等待主线程的时间" + }, + "panels/timeline/TimelineUIUtils.ts | timeout": { + "message": "超时" + }, + "panels/timeline/TimelineUIUtils.ts | timerFired": { + "message": "定时器已触发" + }, + "panels/timeline/TimelineUIUtils.ts | timerId": { + "message": "定时器 ID" + }, + "panels/timeline/TimelineUIUtils.ts | timerInstalled": { + "message": "定时器已安装" + }, + "panels/timeline/TimelineUIUtils.ts | timestamp": { + "message": "时间戳" + }, + "panels/timeline/TimelineUIUtils.ts | totalTime": { + "message": "总时间" + }, + "panels/timeline/TimelineUIUtils.ts | touchCancel": { + "message": "轻触取消" + }, + "panels/timeline/TimelineUIUtils.ts | touchEnd": { + "message": "轻触结束" + }, + "panels/timeline/TimelineUIUtils.ts | touchMove": { + "message": "轻触移动" + }, + "panels/timeline/TimelineUIUtils.ts | touchStart": { + "message": "轻触开始" + }, + "panels/timeline/TimelineUIUtils.ts | type": { + "message": "类型" + }, + "panels/timeline/TimelineUIUtils.ts | uncategorized": { + "message": "未分类" + }, + "panels/timeline/TimelineUIUtils.ts | unknown": { + "message": "未知" + }, + "panels/timeline/TimelineUIUtils.ts | unknownCause": { + "message": "未知原因" + }, + "panels/timeline/TimelineUIUtils.ts | updateLayer": { + "message": "更新图层" + }, + "panels/timeline/TimelineUIUtils.ts | updateLayerTree": { + "message": "更新图层树" + }, + "panels/timeline/TimelineUIUtils.ts | url": { + "message": "网址" + }, + "panels/timeline/TimelineUIUtils.ts | userTiming": { + "message": "用户计时" + }, + "panels/timeline/TimelineUIUtils.ts | verify": { + "message": "验证" + }, + "panels/timeline/TimelineUIUtils.ts | verifyReply": { + "message": "验证回复" + }, + "panels/timeline/TimelineUIUtils.ts | waitingForNetwork": { + "message": "正在等待连接到网络" + }, + "panels/timeline/TimelineUIUtils.ts | warning": { + "message": "警告" + }, + "panels/timeline/TimelineUIUtils.ts | wasmModuleCacheHit": { + "message": "Wasm 模块缓存命中" + }, + "panels/timeline/TimelineUIUtils.ts | wasmModuleCacheInvalid": { + "message": "Wasm 模块缓存无效" + }, + "panels/timeline/TimelineUIUtils.ts | websocketProtocol": { + "message": "WebSocket 协议" + }, + "panels/timeline/TimelineUIUtils.ts | willSendRequest": { + "message": "将发送请求" + }, + "panels/timeline/TimelineUIUtils.ts | xhrLoad": { + "message": "XHR 加载" + }, + "panels/timeline/TimelineUIUtils.ts | xhrReadyStateChange": { + "message": "XHR 就绪状态变更" + }, + "panels/timeline/TimelineUIUtils.ts | yes": { + "message": "是" + }, + "panels/timeline/UIDevtoolsUtils.ts | drawFrame": { + "message": "绘制帧" + }, + "panels/timeline/UIDevtoolsUtils.ts | drawing": { + "message": "正在绘制" + }, + "panels/timeline/UIDevtoolsUtils.ts | frameStart": { + "message": "开始显示帧" + }, + "panels/timeline/UIDevtoolsUtils.ts | idle": { + "message": "空闲" + }, + "panels/timeline/UIDevtoolsUtils.ts | layout": { + "message": "布局" + }, + "panels/timeline/UIDevtoolsUtils.ts | painting": { + "message": "正在绘制" + }, + "panels/timeline/UIDevtoolsUtils.ts | rasterizing": { + "message": "正在光栅化" + }, + "panels/timeline/UIDevtoolsUtils.ts | system": { + "message": "系统" + }, + "panels/timeline/components/WebVitalsTimeline.ts | fcp": { + "message": "FCP" + }, + "panels/timeline/components/WebVitalsTimeline.ts | firstContentfulPaint": { + "message": "First Contentful Paint" + }, + "panels/timeline/components/WebVitalsTimeline.ts | good": { + "message": "良好" + }, + "panels/timeline/components/WebVitalsTimeline.ts | largestContentfulPaint": { + "message": "Largest Contentful Paint" + }, + "panels/timeline/components/WebVitalsTimeline.ts | lcp": { + "message": "LCP" + }, + "panels/timeline/components/WebVitalsTimeline.ts | longTask": { + "message": "长时间执行的任务" + }, + "panels/timeline/components/WebVitalsTimeline.ts | longTasks": { + "message": "长时间执行的任务" + }, + "panels/timeline/components/WebVitalsTimeline.ts | ls": { + "message": "LS" + }, + "panels/timeline/components/WebVitalsTimeline.ts | needsImprovement": { + "message": "需要改进" + }, + "panels/timeline/components/WebVitalsTimeline.ts | poor": { + "message": "较差" + }, + "panels/timeline/timeline-meta.ts | hideChromeFrameInLayersView": { + "message": "在“图层”视图中隐藏 chrome 框架" + }, + "panels/timeline/timeline-meta.ts | javascriptProfiler": { + "message": "JavaScript 性能剖析器" + }, + "panels/timeline/timeline-meta.ts | loadProfile": { + "message": "加载性能分析报告…" + }, + "panels/timeline/timeline-meta.ts | nextFrame": { + "message": "下一帧" + }, + "panels/timeline/timeline-meta.ts | nextRecording": { + "message": "下一项录制内容" + }, + "panels/timeline/timeline-meta.ts | performance": { + "message": "性能" + }, + "panels/timeline/timeline-meta.ts | previousFrame": { + "message": "上一帧" + }, + "panels/timeline/timeline-meta.ts | previousRecording": { + "message": "上一项录制内容" + }, + "panels/timeline/timeline-meta.ts | record": { + "message": "录制" + }, + "panels/timeline/timeline-meta.ts | saveProfile": { + "message": "保存性能分析报告…" + }, + "panels/timeline/timeline-meta.ts | showJavascriptProfiler": { + "message": "显示“JavaScript 性能剖析器”" + }, + "panels/timeline/timeline-meta.ts | showPerformance": { + "message": "显示“性能”工具" + }, + "panels/timeline/timeline-meta.ts | showRecentTimelineSessions": { + "message": "显示近期时间轴会话" + }, + "panels/timeline/timeline-meta.ts | startProfilingAndReloadPage": { + "message": "开始分析并重新加载网页" + }, + "panels/timeline/timeline-meta.ts | startStopRecording": { + "message": "开始/停止录制" + }, + "panels/timeline/timeline-meta.ts | stop": { + "message": "停止" + }, + "panels/web_audio/AudioContextContentBuilder.ts | callbackBufferSize": { + "message": "回调缓冲区空间" + }, + "panels/web_audio/AudioContextContentBuilder.ts | callbackInterval": { + "message": "回调时间间隔" + }, + "panels/web_audio/AudioContextContentBuilder.ts | currentTime": { + "message": "当前时间" + }, + "panels/web_audio/AudioContextContentBuilder.ts | maxOutputChannels": { + "message": "最大输出声道" + }, + "panels/web_audio/AudioContextContentBuilder.ts | renderCapacity": { + "message": "渲染能力" + }, + "panels/web_audio/AudioContextContentBuilder.ts | sampleRate": { + "message": "采样率" + }, + "panels/web_audio/AudioContextContentBuilder.ts | state": { + "message": "状态" + }, + "panels/web_audio/AudioContextSelector.ts | audioContextS": { + "message": "音频情境:{PH1}" + }, + "panels/web_audio/AudioContextSelector.ts | noRecordings": { + "message": "(无录制内容)" + }, + "panels/web_audio/WebAudioView.ts | openAPageThatUsesWebAudioApiTo": { + "message": "打开使用 Web Audio API 的网页开始监控。" + }, + "panels/web_audio/web_audio-meta.ts | audio": { + "message": "audio" + }, + "panels/web_audio/web_audio-meta.ts | showWebaudio": { + "message": "显示 WebAudio" + }, + "panels/web_audio/web_audio-meta.ts | webaudio": { + "message": "WebAudio" + }, + "panels/webauthn/WebauthnPane.ts | actions": { + "message": "操作" + }, + "panels/webauthn/WebauthnPane.ts | active": { + "message": "活跃" + }, + "panels/webauthn/WebauthnPane.ts | add": { + "message": "添加" + }, + "panels/webauthn/WebauthnPane.ts | addAuthenticator": { + "message": "添加身份验证器" + }, + "panels/webauthn/WebauthnPane.ts | authenticatorS": { + "message": "身份验证器 {PH1}" + }, + "panels/webauthn/WebauthnPane.ts | credentials": { + "message": "凭据" + }, + "panels/webauthn/WebauthnPane.ts | editName": { + "message": "修改名称" + }, + "panels/webauthn/WebauthnPane.ts | enableVirtualAuthenticator": { + "message": "启用虚拟身份验证器环境" + }, + "panels/webauthn/WebauthnPane.ts | export": { + "message": "导出" + }, + "panels/webauthn/WebauthnPane.ts | id": { + "message": "ID" + }, + "panels/webauthn/WebauthnPane.ts | isResident": { + "message": "为常驻凭据" + }, + "panels/webauthn/WebauthnPane.ts | learnMore": { + "message": "了解详情" + }, + "panels/webauthn/WebauthnPane.ts | newAuthenticator": { + "message": "新建身份验证器" + }, + "panels/webauthn/WebauthnPane.ts | no": { + "message": "否" + }, + "panels/webauthn/WebauthnPane.ts | noCredentialsTryCallingSFromYour": { + "message": "没有凭据。请尝试从您的网站调用 {PH1}。" + }, + "panels/webauthn/WebauthnPane.ts | privateKeypem": { + "message": "私钥.pem" + }, + "panels/webauthn/WebauthnPane.ts | protocol": { + "message": "协议" + }, + "panels/webauthn/WebauthnPane.ts | remove": { + "message": "移除" + }, + "panels/webauthn/WebauthnPane.ts | rpId": { + "message": "依赖方 ID" + }, + "panels/webauthn/WebauthnPane.ts | saveName": { + "message": "保存名称" + }, + "panels/webauthn/WebauthnPane.ts | setSAsTheActiveAuthenticator": { + "message": "将{PH1} 设为有效的身份验证器" + }, + "panels/webauthn/WebauthnPane.ts | signCount": { + "message": "签名数量" + }, + "panels/webauthn/WebauthnPane.ts | supportsResidentKeys": { + "message": "支持常驻密钥" + }, + "panels/webauthn/WebauthnPane.ts | supportsUserVerification": { + "message": "支持用户验证" + }, + "panels/webauthn/WebauthnPane.ts | transport": { + "message": "传输" + }, + "panels/webauthn/WebauthnPane.ts | useWebauthnForPhishingresistant": { + "message": "使用 WebAuthn 进行身份验证以防网上诱骗" + }, + "panels/webauthn/WebauthnPane.ts | userHandle": { + "message": "用户处理" + }, + "panels/webauthn/WebauthnPane.ts | uuid": { + "message": "UUID" + }, + "panels/webauthn/WebauthnPane.ts | yes": { + "message": "是" + }, + "panels/webauthn/webauthn-meta.ts | showWebauthn": { + "message": "显示 WebAuthn" + }, + "panels/webauthn/webauthn-meta.ts | webauthn": { + "message": "WebAuthn" + }, + "ui/components/data_grid/DataGrid.ts | headerOptions": { + "message": "标头选项" + }, + "ui/components/data_grid/DataGrid.ts | resetColumns": { + "message": "重置列" + }, + "ui/components/data_grid/DataGrid.ts | sortBy": { + "message": "排序依据" + }, + "ui/components/diff_view/DiffView.ts | SkippingDMatchingLines": { + "message": "(…正在跳过 {PH1} 个匹配行…)" + }, + "ui/components/diff_view/DiffView.ts | additions": { + "message": "添加的项:" + }, + "ui/components/diff_view/DiffView.ts | changesDiffViewer": { + "message": "更改差异查看器" + }, + "ui/components/diff_view/DiffView.ts | deletions": { + "message": "删除的项:" + }, + "ui/components/issue_counter/IssueCounter.ts | breakingChanges": { + "message": "{issueCount,plural, =1{# 项破坏性更改}other{# 项破坏性更改}}" + }, + "ui/components/issue_counter/IssueCounter.ts | pageErrors": { + "message": "{issueCount,plural, =1{# 个网页错误}other{# 个网页错误}}" + }, + "ui/components/issue_counter/IssueCounter.ts | possibleImprovements": { + "message": "{issueCount,plural, =1{# 个可以改进的问题}other{# 个可以改进的问题}}" + }, + "ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssue": { + "message": "点击即可在“问题”标签页中显示问题" + }, + "ui/components/issue_counter/IssueLinkIcon.ts | clickToShowIssueWithTitle": { + "message": "点击即可打开“问题”标签页并显示问题“{title}”" + }, + "ui/components/issue_counter/IssueLinkIcon.ts | issueUnavailable": { + "message": "目前无法解决的问题" + }, + "ui/components/linear_memory_inspector/LinearMemoryInspector.ts | addressHasToBeANumberBetweenSAnd": { + "message": "地址必须是一个介于 {PH1} 和 {PH2} 之间的数字" + }, + "ui/components/linear_memory_inspector/LinearMemoryInspectorPane.ts | noOpenInspections": { + "message": "没有待处理的检查" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | enterAddress": { + "message": "输入地址" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goBackInAddressHistory": { + "message": "回顾地址历史记录" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | goForwardInAddressHistory": { + "message": "在地址历史记录中前进" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | nextPage": { + "message": "下一页" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | previousPage": { + "message": "上一页" + }, + "ui/components/linear_memory_inspector/LinearMemoryNavigator.ts | refresh": { + "message": "刷新" + }, + "ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | changeEndianness": { + "message": "更改Endianness" + }, + "ui/components/linear_memory_inspector/LinearMemoryValueInterpreter.ts | toggleValueTypeSettings": { + "message": "开启/关闭值类型设置" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | addressOutOfRange": { + "message": "地址超出内存范围" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | changeValueTypeMode": { + "message": "更改模式" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | jumpToPointer": { + "message": "跳转到地址" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | signedValue": { + "message": "Signed的值" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplay.ts | unsignedValue": { + "message": "Unsigned的值" + }, + "ui/components/linear_memory_inspector/ValueInterpreterDisplayUtils.ts | notApplicable": { + "message": "不适用" + }, + "ui/components/linear_memory_inspector/ValueInterpreterSettings.ts | otherGroup": { + "message": "其他" + }, + "ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | memoryInspector": { + "message": "内存检查器" + }, + "ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts | showMemoryInspector": { + "message": "显示“内存检查器”" + }, + "ui/components/request_link_icon/RequestLinkIcon.ts | clickToShowRequestInTheNetwork": { + "message": "点击即可打开“网络”面板并显示网址请求:{url}" + }, + "ui/components/request_link_icon/RequestLinkIcon.ts | requestUnavailableInTheNetwork": { + "message": "无法在“网络”面板中显示相应请求,请尝试重新加载要检查的网页" + }, + "ui/components/request_link_icon/RequestLinkIcon.ts | shortenedURL": { + "message": "缩短后的网址" + }, + "ui/components/survey_link/SurveyLink.ts | anErrorOccurredWithTheSurvey": { + "message": "调查问卷发生错误" + }, + "ui/components/survey_link/SurveyLink.ts | openingSurvey": { + "message": "正在打开调查问卷…" + }, + "ui/components/survey_link/SurveyLink.ts | thankYouForYourFeedback": { + "message": "感谢您的反馈" + }, + "ui/components/text_editor/config.ts | codeEditor": { + "message": "代码编辑器" + }, + "ui/legacy/DockController.ts | close": { + "message": "关闭" + }, + "ui/legacy/DockController.ts | dockToBottom": { + "message": "停靠至底部" + }, + "ui/legacy/DockController.ts | dockToLeft": { + "message": "停靠至左侧" + }, + "ui/legacy/DockController.ts | dockToRight": { + "message": "停靠至右侧" + }, + "ui/legacy/DockController.ts | undockIntoSeparateWindow": { + "message": "取消停靠至单独的窗口" + }, + "ui/legacy/EmptyWidget.ts | learnMore": { + "message": "了解详情" + }, + "ui/legacy/FilterBar.ts | allStrings": { + "message": "全部" + }, + "ui/legacy/FilterBar.ts | clearFilter": { + "message": "清除输入的内容" + }, + "ui/legacy/FilterBar.ts | egSmalldUrlacomb": { + "message": "例如:/small[d]+/ url:a.com/b" + }, + "ui/legacy/FilterBar.ts | filter": { + "message": "过滤" + }, + "ui/legacy/FilterBar.ts | sclickToSelectMultipleTypes": { + "message": "{PH1}点击可选择多个类型" + }, + "ui/legacy/Infobar.ts | close": { + "message": "关闭" + }, + "ui/legacy/Infobar.ts | dontShowAgain": { + "message": "不再显示" + }, + "ui/legacy/Infobar.ts | learnMore": { + "message": "了解详情" + }, + "ui/legacy/InspectorView.ts | closeDrawer": { + "message": "关闭抽屉栏" + }, + "ui/legacy/InspectorView.ts | devToolsLanguageMissmatch": { + "message": "DevTools 现已支持{PH1}!" + }, + "ui/legacy/InspectorView.ts | drawer": { + "message": "工具抽屉式导航栏" + }, + "ui/legacy/InspectorView.ts | mainToolbar": { + "message": "主工具栏" + }, + "ui/legacy/InspectorView.ts | moreTools": { + "message": "更多工具" + }, + "ui/legacy/InspectorView.ts | moveToBottom": { + "message": "移至底部" + }, + "ui/legacy/InspectorView.ts | moveToTop": { + "message": "移至顶部" + }, + "ui/legacy/InspectorView.ts | panels": { + "message": "面板" + }, + "ui/legacy/InspectorView.ts | reloadDevtools": { + "message": "重新加载 DevTools" + }, + "ui/legacy/InspectorView.ts | setToBrowserLanguage": { + "message": "始终以 Chrome 所用的语言显示" + }, + "ui/legacy/InspectorView.ts | setToSpecificLanguage": { + "message": "将 DevTools 切换为{PH1}版" + }, + "ui/legacy/ListWidget.ts | addString": { + "message": "添加" + }, + "ui/legacy/ListWidget.ts | cancelString": { + "message": "取消" + }, + "ui/legacy/ListWidget.ts | editString": { + "message": "修改" + }, + "ui/legacy/ListWidget.ts | removeString": { + "message": "移除" + }, + "ui/legacy/ListWidget.ts | saveString": { + "message": "保存" + }, + "ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectDevtools": { + "message": "重新连接 DevTools" + }, + "ui/legacy/RemoteDebuggingTerminatedScreen.ts | reconnectWhenReadyByReopening": { + "message": "准备就绪时,打开 DevTools 即可重新连接。" + }, + "ui/legacy/SearchableView.ts | cancel": { + "message": "取消" + }, + "ui/legacy/SearchableView.ts | dMatches": { + "message": "{PH1} 条匹配结果" + }, + "ui/legacy/SearchableView.ts | dOfD": { + "message": "{PH1} 个(共 {PH2} 个)" + }, + "ui/legacy/SearchableView.ts | findString": { + "message": "查找" + }, + "ui/legacy/SearchableView.ts | matchCase": { + "message": "匹配大小写" + }, + "ui/legacy/SearchableView.ts | matchString": { + "message": "1 个匹配项" + }, + "ui/legacy/SearchableView.ts | replace": { + "message": "替换" + }, + "ui/legacy/SearchableView.ts | replaceAll": { + "message": "全部替换" + }, + "ui/legacy/SearchableView.ts | searchNext": { + "message": "搜索下一个" + }, + "ui/legacy/SearchableView.ts | searchPrevious": { + "message": "搜索上一个" + }, + "ui/legacy/SearchableView.ts | useRegularExpression": { + "message": "使用正则表达式" + }, + "ui/legacy/SettingsUI.ts | oneOrMoreSettingsHaveChanged": { + "message": "一项或多项设置已更改,需要重新加载才能生效。" + }, + "ui/legacy/SettingsUI.ts | srequiresReload": { + "message": "*需要重新加载" + }, + "ui/legacy/SoftContextMenu.ts | checked": { + "message": "已勾选" + }, + "ui/legacy/SoftContextMenu.ts | sS": { + "message": "{PH1}、{PH2}" + }, + "ui/legacy/SoftContextMenu.ts | sSS": { + "message": "{PH1},{PH2},{PH3}" + }, + "ui/legacy/SoftContextMenu.ts | unchecked": { + "message": "未选中" + }, + "ui/legacy/SoftDropDown.ts | noItemSelected": { + "message": "(未选择任何条目)" + }, + "ui/legacy/SuggestBox.ts | sSuggestionSOfS": { + "message": "{PH1},第 {PH2} 条建议(共 {PH3} 条)" + }, + "ui/legacy/SuggestBox.ts | sSuggestionSSelected": { + "message": "{PH1},这条建议已被选中" + }, + "ui/legacy/TabbedPane.ts | close": { + "message": "关闭" + }, + "ui/legacy/TabbedPane.ts | closeAll": { + "message": "全部关闭" + }, + "ui/legacy/TabbedPane.ts | closeOthers": { + "message": "关闭其他标签页" + }, + "ui/legacy/TabbedPane.ts | closeS": { + "message": "关闭{PH1}" + }, + "ui/legacy/TabbedPane.ts | closeTabsToTheRight": { + "message": "关闭右侧标签页" + }, + "ui/legacy/TabbedPane.ts | moreTabs": { + "message": "更多标签页" + }, + "ui/legacy/TabbedPane.ts | previewFeature": { + "message": "试用型功能" + }, + "ui/legacy/TargetCrashedScreen.ts | devtoolsWasDisconnectedFromThe": { + "message": "DevTools 与网页的连接已断开。" + }, + "ui/legacy/TargetCrashedScreen.ts | oncePageIsReloadedDevtoolsWill": { + "message": "网页重新加载后,DevTools 会自动重新连接。" + }, + "ui/legacy/Toolbar.ts | notPressed": { + "message": "未按下" + }, + "ui/legacy/Toolbar.ts | pressed": { + "message": "已按下" + }, + "ui/legacy/UIUtils.ts | anonymous": { + "message": "(匿名)" + }, + "ui/legacy/UIUtils.ts | anotherProfilerIsAlreadyActive": { + "message": "已激活另一个性能剖析器" + }, + "ui/legacy/UIUtils.ts | asyncCall": { + "message": "异步调用" + }, + "ui/legacy/UIUtils.ts | cancel": { + "message": "取消" + }, + "ui/legacy/UIUtils.ts | close": { + "message": "关闭" + }, + "ui/legacy/UIUtils.ts | copyFileName": { + "message": "复制文件名" + }, + "ui/legacy/UIUtils.ts | copyLinkAddress": { + "message": "复制链接地址" + }, + "ui/legacy/UIUtils.ts | ok": { + "message": "确定" + }, + "ui/legacy/UIUtils.ts | openInNewTab": { + "message": "在新标签页中打开" + }, + "ui/legacy/UIUtils.ts | promiseRejectedAsync": { + "message": "Promise 遭拒(异步)" + }, + "ui/legacy/UIUtils.ts | promiseResolvedAsync": { + "message": "Promise 已解析(异步)" + }, + "ui/legacy/UIUtils.ts | sAsync": { + "message": "{PH1}(异步)" + }, + "ui/legacy/ViewManager.ts | sPanel": { + "message": "{PH1}面板" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | aa": { + "message": "AA" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | aaa": { + "message": "AAA" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | apca": { + "message": "APCA" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | contrastRatio": { + "message": "对比度" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | noContrastInformationAvailable": { + "message": "没有可用的对比度信息" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | pickBackgroundColor": { + "message": "选择背景颜色" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | placeholderWithColon": { + "message": ":{PH1}" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | showLess": { + "message": "收起" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | showMore": { + "message": "展开" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | toggleBackgroundColorPicker": { + "message": "切换背景颜色选择器" + }, + "ui/legacy/components/color_picker/ContrastDetails.ts | useSuggestedColorStoFixLow": { + "message": "使用建议的颜色 {PH1} 修正低对比度问题" + }, + "ui/legacy/components/color_picker/Spectrum.ts | addToPalette": { + "message": "添加到调色板" + }, + "ui/legacy/components/color_picker/Spectrum.ts | changeAlpha": { + "message": "更改 Alpha" + }, + "ui/legacy/components/color_picker/Spectrum.ts | changeColorFormat": { + "message": "更改颜色格式" + }, + "ui/legacy/components/color_picker/Spectrum.ts | changeHue": { + "message": "更改色调" + }, + "ui/legacy/components/color_picker/Spectrum.ts | clearPalette": { + "message": "清除调色板" + }, + "ui/legacy/components/color_picker/Spectrum.ts | colorPalettes": { + "message": "调色板" + }, + "ui/legacy/components/color_picker/Spectrum.ts | colorS": { + "message": "颜色 {PH1}" + }, + "ui/legacy/components/color_picker/Spectrum.ts | copyColorToClipboard": { + "message": "将颜色复制到剪贴板" + }, + "ui/legacy/components/color_picker/Spectrum.ts | hex": { + "message": "十六进制" + }, + "ui/legacy/components/color_picker/Spectrum.ts | longclickOrLongpressSpaceToShow": { + "message": "长按空格键即可显示 {PH1} 的替代阴影" + }, + "ui/legacy/components/color_picker/Spectrum.ts | pressArrowKeysMessage": { + "message": "按箭头键(无论是否带辅助键)可移动色样位置。将箭头键与 Shift 键搭配使用可大幅移动位置,将箭头键与 Ctrl 键搭配使用可缩小位移幅度,将箭头键与 Alt 键搭配使用可进一步缩小位移幅度" + }, + "ui/legacy/components/color_picker/Spectrum.ts | previewPalettes": { + "message": "预览调色板" + }, + "ui/legacy/components/color_picker/Spectrum.ts | removeAllToTheRight": { + "message": "移除右侧的所有颜色" + }, + "ui/legacy/components/color_picker/Spectrum.ts | removeColor": { + "message": "移除颜色" + }, + "ui/legacy/components/color_picker/Spectrum.ts | returnToColorPicker": { + "message": "返回颜色选择器" + }, + "ui/legacy/components/color_picker/Spectrum.ts | sInS": { + "message": "{PH2} 中的 {PH1}" + }, + "ui/legacy/components/color_picker/Spectrum.ts | toggleColorPicker": { + "message": "显示/隐藏颜色选择器" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | cookies": { + "message": "Cookie" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | editableCookies": { + "message": "可修改的 Cookie" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | na": { + "message": "不适用" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | name": { + "message": "名称" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | session": { + "message": "会话" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | showIssueAssociatedWithThis": { + "message": "显示与此 Cookie 相关的问题" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | showRequestsWithThisCookie": { + "message": "显示涉及此 Cookie 的请求" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | size": { + "message": "大小" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | sourcePortTooltip": { + "message": "显示先前设定 Cookie 的来源端口(范围为 1-65535)。如果端口未知,则显示为 -1。" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | sourceSchemeTooltip": { + "message": "显示先前设定 Cookie 的来源架构(Secure、NonSecure)。如果架构未知,则显示为“Unset”。" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | timeAfter": { + "message": "{date}之后" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | timeAfterTooltip": { + "message": "到期日期时间戳是 {seconds},对应于 {date} 之后的一个日期" + }, + "ui/legacy/components/cookie_table/CookiesTable.ts | value": { + "message": "值" + }, + "ui/legacy/components/data_grid/DataGrid.ts | addNew": { + "message": "新增" + }, + "ui/legacy/components/data_grid/DataGrid.ts | checked": { + "message": "已勾选" + }, + "ui/legacy/components/data_grid/DataGrid.ts | collapsed": { + "message": "已收起" + }, + "ui/legacy/components/data_grid/DataGrid.ts | delete": { + "message": "删除" + }, + "ui/legacy/components/data_grid/DataGrid.ts | editS": { + "message": "修改“{PH1}”" + }, + "ui/legacy/components/data_grid/DataGrid.ts | emptyRowCreated": { + "message": "已创建一个空的表格行。您可以双击此行或使用上下文菜单进行编辑。" + }, + "ui/legacy/components/data_grid/DataGrid.ts | expanded": { + "message": "已展开" + }, + "ui/legacy/components/data_grid/DataGrid.ts | headerOptions": { + "message": "标头选项" + }, + "ui/legacy/components/data_grid/DataGrid.ts | levelS": { + "message": "级别 {PH1}" + }, + "ui/legacy/components/data_grid/DataGrid.ts | refresh": { + "message": "刷新" + }, + "ui/legacy/components/data_grid/DataGrid.ts | resetColumns": { + "message": "重置列" + }, + "ui/legacy/components/data_grid/DataGrid.ts | rowsS": { + "message": "行数:{PH1}" + }, + "ui/legacy/components/data_grid/DataGrid.ts | sRowS": { + "message": "{PH1}行{PH2}" + }, + "ui/legacy/components/data_grid/DataGrid.ts | sSUseTheUpAndDownArrowKeysTo": { + "message": "{PH1} {PH2},使用向上和向下箭头键可浏览表格中的各行并与之交互;使用浏览模式可逐个读取单元格。" + }, + "ui/legacy/components/data_grid/DataGrid.ts | sortByString": { + "message": "排序依据" + }, + "ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showAllD": { + "message": "显示全部 {PH1} 项" + }, + "ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDAfter": { + "message": "显示后 {PH1} 项" + }, + "ui/legacy/components/data_grid/ShowMoreDataGridNode.ts | showDBefore": { + "message": "显示前 {PH1} 项" + }, + "ui/legacy/components/data_grid/ViewportDataGrid.ts | collapsed": { + "message": "已收起" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | blur": { + "message": "模糊" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | spread": { + "message": "扩展" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | type": { + "message": "类型" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | xOffset": { + "message": "X 轴偏移" + }, + "ui/legacy/components/inline_editor/CSSShadowEditor.ts | yOffset": { + "message": "Y 轴偏移" + }, + "ui/legacy/components/inline_editor/CSSVarSwatch.ts | sIsNotDefined": { + "message": "{PH1} 未定义" + }, + "ui/legacy/components/inline_editor/ColorSwatch.ts | shiftclickToChangeColorFormat": { + "message": "按住 Shift 并点击即可更改颜色格式" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | PleaseEnterAValidValueForSText": { + "message": "* 请为 {PH1} 文本输入指定有效值" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | cssProperties": { + "message": "CSS 属性" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | deleteS": { + "message": "删除 {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fallbackS": { + "message": "后备选择器 {PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontFamily": { + "message": "字体系列" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontSelectorDeletedAtIndexS": { + "message": "已删除索引 {PH1} 处的字体选择器" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontSize": { + "message": "字号" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | fontWeight": { + "message": "字体粗细" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | lineHeight": { + "message": "行高" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sKeyValueSelector": { + "message": "{PH1}键值对选择器" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sSliderInput": { + "message": "{PH1}滑块输入" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sTextInput": { + "message": "{PH1} 文本输入" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sToggleInputType": { + "message": "{PH1} 切换输入类型" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sUnitInput": { + "message": "{PH1}单位输入" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | selectorInputMode": { + "message": "选择器输入法" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | sliderInputMode": { + "message": "滑块输入法" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | spacing": { + "message": "间距" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | thereIsNoValueToDeleteAtIndexS": { + "message": "索引 {PH1} 处没有值可以删除" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | thisPropertyIsSetToContainUnits": { + "message": "此属性设为包含单元,但没有已定义的相应 unitsArray:{PH1}" + }, + "ui/legacy/components/inline_editor/FontEditor.ts | units": { + "message": "单位" + }, + "ui/legacy/components/object_ui/CustomPreviewComponent.ts | showAsJavascriptObject": { + "message": "显示为 JavaScript 对象" + }, + "ui/legacy/components/object_ui/JavaScriptAutocomplete.ts | keys": { + "message": "键" + }, + "ui/legacy/components/object_ui/JavaScriptAutocomplete.ts | keywords": { + "message": "关键字" + }, + "ui/legacy/components/object_ui/JavaScriptAutocomplete.ts | lexicalScopeVariables": { + "message": "词法作用域变量" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | collapseChildren": { + "message": "收起子级" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copy": { + "message": "复制" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyPropertyPath": { + "message": "复制属性路径" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | copyValue": { + "message": "复制值" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | dots": { + "message": "(…)" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | exceptionS": { + "message": "[异常:{PH1}]" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | expandRecursively": { + "message": "以递归方式展开" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | invokePropertyGetter": { + "message": "调用属性 getter" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | longTextWasTruncatedS": { + "message": "长文本被截断 ({PH1})" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | noProperties": { + "message": "无属性" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | noPropertyGetter": { + "message": "无属性 getter" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showAllD": { + "message": "显示全部 {PH1} 项" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | showMoreS": { + "message": "显示更多 ({PH1})" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | stringIsTooLargeToEdit": { + "message": "<字符串过长,无法修改>" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | unknown": { + "message": "未知" + }, + "ui/legacy/components/object_ui/ObjectPropertiesSection.ts | unreadable": { + "message": "<不可读>" + }, + "ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | empty": { + "message": "空白" + }, + "ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | emptyD": { + "message": "空属性 × {PH1}" + }, + "ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts | thePropertyIsComputedWithAGetter": { + "message": "此属性使用 getter 计算得出" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | doubleclickToZoomImageClickTo": { + "message": "双击即可缩放图片。点击即可查看之前的请求。" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | nextFrame": { + "message": "下一帧" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | previousFrame": { + "message": "上一帧" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | screenshot": { + "message": "屏幕截图" + }, + "ui/legacy/components/perf_ui/FilmStripView.ts | screenshotForSSelectToView": { + "message": "{PH1}的屏幕截图 - 选择即可查看先前的请求。" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | flameChart": { + "message": "火焰图" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sCollapsed": { + "message": "已收起{PH1}" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sExpanded": { + "message": "已展开{PH1}" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sHovered": { + "message": "已悬停在“{PH1}”上" + }, + "ui/legacy/components/perf_ui/FlameChart.ts | sSelected": { + "message": "已选择“{PH1}”" + }, + "ui/legacy/components/perf_ui/LineLevelProfile.ts | kb": { + "message": "kB" + }, + "ui/legacy/components/perf_ui/LineLevelProfile.ts | mb": { + "message": "MB" + }, + "ui/legacy/components/perf_ui/LineLevelProfile.ts | ms": { + "message": "毫秒" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | high": { + "message": "高" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | highest": { + "message": "最高" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | low": { + "message": "低" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | lowest": { + "message": "最低" + }, + "ui/legacy/components/perf_ui/NetworkPriorities.ts | medium": { + "message": "中" + }, + "ui/legacy/components/perf_ui/OverviewGrid.ts | leftResizer": { + "message": "左窗口调整器" + }, + "ui/legacy/components/perf_ui/OverviewGrid.ts | overviewGridWindow": { + "message": "概览网格窗口" + }, + "ui/legacy/components/perf_ui/OverviewGrid.ts | rightResizer": { + "message": "右窗口大小调整器" + }, + "ui/legacy/components/perf_ui/PieChart.ts | total": { + "message": "总计" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | collectGarbage": { + "message": "回收垃圾" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | flamechartMouseWheelAction": { + "message": "火焰图鼠标滚轮操作:" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | hideLiveMemoryAllocation": { + "message": "隐藏实时内存分配情况注解" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | liveMemoryAllocationAnnotations": { + "message": "实时内存分配情况注解" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | scroll": { + "message": "滚动" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | showLiveMemoryAllocation": { + "message": "显示实时内存分配情况注解" + }, + "ui/legacy/components/perf_ui/perf_ui-meta.ts | zoom": { + "message": "缩放" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | command": { + "message": "命令" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | noCommandsFound": { + "message": "找不到任何命令" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | oneOrMoreSettingsHaveChanged": { + "message": "一项或多项设置已更改,需要重新加载才能生效。" + }, + "ui/legacy/components/quick_open/CommandMenu.ts | run": { + "message": "运行" + }, + "ui/legacy/components/quick_open/FilteredListWidget.ts | noResultsFound": { + "message": "未找到任何结果" + }, + "ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpen": { + "message": "快速打开" + }, + "ui/legacy/components/quick_open/FilteredListWidget.ts | quickOpenPrompt": { + "message": "快速打开提示" + }, + "ui/legacy/components/quick_open/QuickInput.ts | pressEnterToConfirmOrEscapeTo": { + "message": "{PH1}(按 Enter 键即可确认,按 Escape 键即可取消。)" + }, + "ui/legacy/components/quick_open/QuickOpen.ts | useTabToSwitchCommandsTypeToSeeAvailableCommands": { + "message": "使用“Tab”键可切换命令。输入“?”可查看可用命令" + }, + "ui/legacy/components/quick_open/quick_open-meta.ts | openFile": { + "message": "打开文件" + }, + "ui/legacy/components/quick_open/quick_open-meta.ts | runCommand": { + "message": "运行命令" + }, + "ui/legacy/components/source_frame/FontView.ts | font": { + "message": "字体" + }, + "ui/legacy/components/source_frame/FontView.ts | previewOfFontFromS": { + "message": "来自 {PH1} 的字体的预览" + }, + "ui/legacy/components/source_frame/ImageView.ts | copyImageAsDataUri": { + "message": "以数据 URI 格式复制图片" + }, + "ui/legacy/components/source_frame/ImageView.ts | copyImageUrl": { + "message": "复制图片网址" + }, + "ui/legacy/components/source_frame/ImageView.ts | dD": { + "message": "{PH1} × {PH2}" + }, + "ui/legacy/components/source_frame/ImageView.ts | download": { + "message": "download" + }, + "ui/legacy/components/source_frame/ImageView.ts | dropImageFileHere": { + "message": "将图片文件拖放到此处" + }, + "ui/legacy/components/source_frame/ImageView.ts | image": { + "message": "图片" + }, + "ui/legacy/components/source_frame/ImageView.ts | imageFromS": { + "message": "图片来自 {PH1}" + }, + "ui/legacy/components/source_frame/ImageView.ts | openImageInNewTab": { + "message": "在新标签页中打开图片" + }, + "ui/legacy/components/source_frame/ImageView.ts | saveImageAs": { + "message": "图片另存为…" + }, + "ui/legacy/components/source_frame/JSONView.ts | find": { + "message": "查找" + }, + "ui/legacy/components/source_frame/PreviewFactory.ts | nothingToPreview": { + "message": "没有可预览的内容" + }, + "ui/legacy/components/source_frame/ResourceSourceFrame.ts | find": { + "message": "查找" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | bytecodePositionXs": { + "message": "字节码位置 0x{PH1}" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | dCharactersSelected": { + "message": "已选择 {PH1} 个字符" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | dLinesDCharactersSelected": { + "message": "已选择 {PH1} 行,{PH2} 个字符" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | dSelectionRegions": { + "message": "{PH1} 个所选区域" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | lineSColumnS": { + "message": "第 {PH1} 行,第 {PH2} 列" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | loading": { + "message": "正在加载…" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | prettyPrint": { + "message": "美观输出" + }, + "ui/legacy/components/source_frame/SourceFrame.ts | source": { + "message": "来源" + }, + "ui/legacy/components/source_frame/XMLView.ts | find": { + "message": "查找" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | Spaces": { + "message": "2 个空格" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | defaultIndentation": { + "message": "默认缩进:" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | eSpaces": { + "message": "8 个空格" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | fSpaces": { + "message": "4 个空格" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToESpaces": { + "message": "将缩进设为 8 个空格" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToFSpaces": { + "message": "将缩进设为 4 个空格" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToSpaces": { + "message": "将缩进设为 2 个空格" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | setIndentationToTabCharacter": { + "message": "将缩进快捷键设置为制表符" + }, + "ui/legacy/components/source_frame/source_frame-meta.ts | tabCharacter": { + "message": "制表符" + }, + "ui/legacy/components/text_editor/CodeMirrorTextEditor.ts | codeEditor": { + "message": "代码编辑器" + }, + "ui/legacy/components/utils/ImagePreview.ts | currentSource": { + "message": "当前来源:" + }, + "ui/legacy/components/utils/ImagePreview.ts | fileSize": { + "message": "文件大小:" + }, + "ui/legacy/components/utils/ImagePreview.ts | imageFromS": { + "message": "图片来自 {PH1}" + }, + "ui/legacy/components/utils/ImagePreview.ts | intrinsicAspectRatio": { + "message": "固定宽高比:" + }, + "ui/legacy/components/utils/ImagePreview.ts | intrinsicSize": { + "message": "固定尺寸:" + }, + "ui/legacy/components/utils/ImagePreview.ts | renderedAspectRatio": { + "message": "渲染时的宽高比:" + }, + "ui/legacy/components/utils/ImagePreview.ts | renderedSize": { + "message": "渲染的大小:" + }, + "ui/legacy/components/utils/ImagePreview.ts | unknownSource": { + "message": "未知来源" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | addToIgnore": { + "message": "向忽略列表添加脚本" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | removeFromIgnore": { + "message": "从忽略列表中移除" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | showSMoreFrames": { + "message": "{n,plural, =1{显示另外 # 个框架}other{显示另外 # 个框架}}" + }, + "ui/legacy/components/utils/JSPresentationUtils.ts | unknownSource": { + "message": "未知" + }, + "ui/legacy/components/utils/Linkifier.ts | auto": { + "message": "自动" + }, + "ui/legacy/components/utils/Linkifier.ts | linkHandling": { + "message": "链接处理:" + }, + "ui/legacy/components/utils/Linkifier.ts | openUsingS": { + "message": "使用{PH1}打开" + }, + "ui/legacy/components/utils/Linkifier.ts | reveal": { + "message": "显示" + }, + "ui/legacy/components/utils/Linkifier.ts | revealInS": { + "message": "在{PH1}中显示" + }, + "ui/legacy/components/utils/Linkifier.ts | unknown": { + "message": "(未知)" + }, + "ui/legacy/components/utils/TargetDetachedDialog.ts | websocketDisconnected": { + "message": "WebSocket 已断开连接" + } +} diff --git a/chii/core/platform/platform.js b/chii/core/platform/platform.js new file mode 100644 index 00000000..fa2d5e67 --- /dev/null +++ b/chii/core/platform/platform.js @@ -0,0 +1 @@ +const e=(e,t)=>{let r=!1;for(let n=0;ns&&n(e.substring(s,r)),"%%"===t[0])n("%");else if(t[0].startsWith("%")){const[,e,r,n]=t;e&&Number(e)>0&&(u=Number(e)-1);i(n,r?Number(r):-1,u),++u}else{o(Number(t[4]))}s=r+t[0].length}return n(e.substring(s)),r},r=function(e,r,n,i,o,s){if(!e||(!r||!r.length)&&-1===e.search(/\u001b\[(\d+)m/))return{formattedResult:o(i,e),unusedSubstitutions:r};function u(){return'String.format("'+e+'", "'+Array.prototype.join.call(r,'", "')+'")'}function l(e){console.error(u()+": "+e)}let a=i;const c=s||t(e,n),f={},g=r||[];for(const e of c){if("string"===e.type){a=o(a,e.value);continue}if("specifier"!==e.type){l('Unknown token type "'+e.type+'" found.');continue}if(!e.value&&void 0!==e.substitutionIndex&&e.substitutionIndex>=g.length){l("not enough substitution arguments. Had "+g.length+" but needed "+(e.substitutionIndex+1)+", so substitution was skipped."),a=o(a,"%"+(void 0!==e.precision&&e.precision>-1?e.precision:"")+e.specifier);continue}if(e.value||void 0===e.substitutionIndex||(f[e.substitutionIndex]=!0),void 0===e.specifier||!(e.specifier in n)){h="unsupported format character “"+e.specifier+"”. Treating as a string.",console.warn(u()+": "+h);a=o(a,e.value||void 0===e.substitutionIndex?"":String(g[e.substitutionIndex]));continue}a=o(a,(0,n[e.specifier])(e.value||(void 0!==e.substitutionIndex?g[e.substitutionIndex]:void 0),e))}var h;const p=[];for(let e=0;e-1&&(e=e.toFixed(t.precision));const r=void 0!==t.precision&&t.precision>-1?Number(0).toFixed(t.precision):"0";return isNaN(e)?r:e},s:function(e){return e}},i=(e,t)=>e.toString(16).toUpperCase().padStart(t,"0"),o=new Map([["\b","\\b"],["\f","\\f"],["\n","\\n"],["\r","\\r"],["\t","\\t"],["\v","\\v"],["'","\\'"],["\\","\\\\"],["\x3c!--","\\x3C!--"],["e+t)).formattedResult},u=function(e,...t){return s(e,t)},l=(e,t)=>{const r=[];let n=e.indexOf(t);for(;-1!==n;)r.push(n),n=e.indexOf(t,n+t.length);return r},a=function(){return"^[]{}()\\.^$*+?|-,"},c=function(e,t){return(e=e.toUpperCase())===(t=t.toUpperCase())?0:e>t?1:-1};var f=Object.freeze({__proto__:null,escapeCharacters:e,tokenizeFormatString:t,format:r,standardFormatters:n,formatAsJSLiteral:e=>{const t=/(\\|<(?:!--|\/?script))|(\p{Control})|(\p{Surrogate})/gu,r=/(\\|'|<(?:!--|\/?script))|(\p{Control})|(\p{Surrogate})/gu,n=(e,t,r,n)=>{if(r){if(o.has(r))return o.get(r);return"\\x"+i(r.charCodeAt(0),2)}if(n){return"\\u"+i(n.charCodeAt(0),4)}return t?o.get(t)||"":e};let s="",u="";return e.includes("'")?e.includes('"')?e.includes("`")||e.includes("${")?(u="'",s=e.replaceAll(r,n)):(u="`",s=e.replaceAll(t,n)):(u='"',s=e.replaceAll(t,n)):(u="'",s=e.replaceAll(t,n)),`${u}${s}${u}`},vsprintf:s,sprintf:u,toBase64:e=>{function t(e){return e<26?e+65:e<52?e+71:e<62?e-4:62===e?43:63===e?47:65}const r=(new TextEncoder).encode(e.toString()),n=r.length;let i,o="";if(0===n)return o;let s=0;for(let e=0;e>>i&24),2===i&&(o+=String.fromCharCode(t(s>>>18&63),t(s>>>12&63),t(s>>>6&63),t(63&s)),s=0);return 0===i?o+=String.fromCharCode(t(s>>>18&63),t(s>>>12&63),61,61):1===i&&(o+=String.fromCharCode(t(s>>>18&63),t(s>>>12&63),t(s>>>6&63),61)),o},findIndexesOfSubString:l,findLineEndingIndexes:e=>{const t=l(e,"\n");return t.push(e.length),t},isWhitespace:e=>/^\s*$/.test(e),trimURL:(e,t)=>{let r=e.replace(/^(https|http|file):\/\//i,"");return t&&r.toLowerCase().startsWith(t.toLowerCase())&&(r=r.substr(t.length)),r},collapseWhitespace:e=>e.replace(/[\s\xA0]+/g," "),reverse:e=>e.split("").reverse().join(""),replaceControlCharacters:e=>e.replace(/[\0-\x08\x0B\f\x0E-\x1F\x80-\x9F]/g,"�"),countWtf8Bytes:e=>{let t=0;for(let r=0;re.replace(/(\r)?\n/g,""),toTitleCase:e=>e.substring(0,1).toUpperCase()+e.substring(1),removeURLFragment:e=>{const t=new URL(e);return t.hash="",t.toString()},regexSpecialCharacters:a,filterRegex:function(e){let t="";for(let r=0;re>t?1:e{if(e.length<=t)return String(e);let r=t>>1,n=t-r-1;return e.codePointAt(e.length-n-1)>=65536&&(--n,++r),r>0&&e.codePointAt(r-1)>=65536&&--r,e.substr(0,r)+"…"+e.substr(e.length-n,n)},trimEndWithMaxLength:(e,t)=>e.length<=t?String(e):e.substr(0,t-1)+"…",escapeForRegExp:t=>e(t,"^[]{}()\\.^$*+?|-,"),naturalOrderComparator:(e,t)=>{const r=/^\d+|^\D+/;let n,i,o,s;for(;;){if(!e)return t?-1:0;if(!t)return 1;if(n=e.match(r)[0],i=t.match(r)[0],o=!Number.isNaN(Number(n)),s=!Number.isNaN(Number(i)),o&&!s)return-1;if(s&&!o)return 1;if(o&&s){const e=Number(n)-Number(i);if(e)return e;if(n.length!==i.length)return Number(n)||Number(i)?i.length-n.length:n.length-i.length}else if(n!==i)return n1&&"="===e[e.length-2]&&t--,t},SINGLE_QUOTE:"'",DOUBLE_QUOTE:'"',findUnclosedCssQuote:function(e){let t="";for(let r=0;r=0&&s++}if(n){for(;o>1;r(t,e[n])>0?o=n+1:s=n}return s}var x=Object.freeze({__proto__:null,removeElement:(e,t,r)=>{let n=e.indexOf(t);if(-1===n)return!1;if(r)return e.splice(n,1),!0;for(let r=n+1,i=e.length;r=n?e.sort(t):d(e,t,r,n,i,o),e},binaryIndexOf:(e,t,r)=>{const n=m(e,t,r);return nb(e,t,r,!1),mergeOrdered:(e,t,r)=>b(e,t,r,!0),DEFAULT_COMPARATOR:(e,t)=>et?1:0,lowerBound:m,upperBound:function(e,t,r,n,i){let o=n||0,s=void 0!==i?i:e.length;for(;o>1;r(t,e[n])>=0?o=n+1:s=n}return s}});var v=Object.freeze({__proto__:null,isValid:e=>!isNaN(e.getTime()),toISO8601Compact:e=>{function t(e){return(e>9?"":"0")+e}return e.getFullYear()+t(e.getMonth()+1)+t(e.getDate())+"T"+t(e.getHours())+t(e.getMinutes())+t(e.getSeconds())}});var S=Object.freeze({__proto__:null});const _=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]);var C=Object.freeze({__proto__:null,ENTER_KEY:"Enter",ESCAPE_KEY:"Escape",TAB_KEY:"Tab",ARROW_KEYS:_,keyIsArrowKey:function(e){return _.has(e)}});class w{map=new Map;set(e,t){let r=this.map.get(e);r||(r=new Set,this.map.set(e,r)),r.add(t)}get(e){return this.map.get(e)||new Set}has(e){return this.map.has(e)}hasValue(e,t){const r=this.map.get(e);return!!r&&r.has(t)}get size(){return this.map.size}delete(e,t){const r=this.get(e);if(!r)return!1;const n=r.delete(t);return r.size||this.map.delete(e),n}deleteAll(e){this.map.delete(e)}keysArray(){return[...this.map.keys()]}valuesArray(){const e=[];for(const t of this.map.values())e.push(...t.values());return e}clear(){this.map.clear()}}var A=Object.freeze({__proto__:null,inverse:function(e){const t=new w;for(const[r,n]of e.entries())t.set(n,r);return t},Multimap:w});const y=(e,t)=>{for(e=Math.round(e),t=Math.round(t);0!==t;){const r=t;t=e%t,e=r}return e},E=new Map([["8∶5","16∶10"]]);var N=Object.freeze({__proto__:null,clamp:(e,t,r)=>{let n=e;return er&&(n=r),n},mod:(e,t)=>(e%t+t)%t,bytesToString:e=>{if(e<1e3)return s("%.0f B",[e]);const t=e/1e3;if(t<100)return s("%.1f kB",[t]);if(t<1e3)return s("%.0f kB",[t]);const r=t/1e3;return s(r<100?"%.1f MB":"%.0f MB",[r])},toFixedIfFloating:e=>{if(!e||Number.isNaN(Number(e)))return e;const t=Number(e);return t%1?t.toFixed(3):String(t)},floor:(e,t=0)=>{const r=Math.pow(10,t);return Math.floor(e*r)/r},greatestCommonDivisor:y,aspectRatio:(e,t)=>{const r=y(e,t);0!==r&&(e/=r,t/=r);const n=`${e}∶${t}`;return E.get(n)||n},withThousandsSeparator:function(e){let t=String(e);const r=/(\d+)(\d{3})/;for(;t.match(r);)t=t.replace(r,"$1 $2");return t}});var O=Object.freeze({__proto__:null,addAll:function(e,t){for(const r of t)e.add(r)},isEqual:function(e,t){if(e===t)return!0;if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}});function R(e){if(null==e)throw new Error(`Expected given value to not be null/undefined but it was: ${e}`)}function U(e){return e}var M=Object.freeze({__proto__:null,assertNotNullOrUndefined:R,assertUnhandled:U});var L=Object.freeze({__proto__:null,LocalizedEmptyString:""});function I(e,t="DCHECK"){}export{x as ArrayUtilities,I as DCHECK,v as DateUtilities,S as DevToolsPath,C as KeyboardUtilities,A as MapUtilities,N as NumberUtilities,O as SetUtilities,f as StringUtilities,M as TypeScriptUtilities,L as UIString,h as assertNever,R as assertNotNullOrUndefined,U as assertUnhandled,g as runOnWindowLoad}; diff --git a/chii/core/protocol_client/protocol_client-legacy.js b/chii/core/protocol_client/protocol_client-legacy.js new file mode 100644 index 00000000..fe92f0b6 --- /dev/null +++ b/chii/core/protocol_client/protocol_client-legacy.js @@ -0,0 +1 @@ +import*as o from"./protocol_client.js";self.ProtocolClient=self.ProtocolClient||{},ProtocolClient=ProtocolClient||{},ProtocolClient.DevToolsStubErrorCode=o.InspectorBackend.DevToolsStubErrorCode,ProtocolClient.SessionRouter=o.InspectorBackend.SessionRouter,ProtocolClient.InspectorBackend=o.InspectorBackend.InspectorBackend,ProtocolClient.Connection=o.InspectorBackend.Connection,ProtocolClient.inspectorBackend=o.InspectorBackend.inspectorBackend,ProtocolClient.test=o.InspectorBackend.test,ProtocolClient.TargetBase=o.InspectorBackend.TargetBase,ProtocolClient.NodeURL=o.NodeURL.NodeURL; diff --git a/chii/core/protocol_client/protocol_client.js b/chii/core/protocol_client/protocol_client.js new file mode 100644 index 00000000..bd0bd55e --- /dev/null +++ b/chii/core/protocol_client/protocol_client.js @@ -0,0 +1 @@ +import*as e from"../common/common.js";import*as t from"../host/host.js";class r{static patch(n){!function n(o,a){o.url&&r.isPlatformPath(o.url,t.Platform.isWin())&&(o.url=e.ParsedURL.ParsedURL.rawPathToUrlString(o.url));for(const e of Object.entries(o)){const t=e[0],r=e[1],o=a+"."+t;".result.result.value"!==o&&null!==r&&"object"==typeof r&&n(r,o)}}(n,"")}static isPlatformPath(e,t){if(t){return/^([a-z]:[\/\\]|\\\\)/i.test(e)}return!!e.length&&"/"===e[0]}}var n=Object.freeze({__proto__:null,NodeURL:r});const o=e=>{const[t,r]=e.split(".");return[t,r]},a=(e,t)=>`${e}.${t}`;class i{agentPrototypes=new Map;#e=!1;#t=new Map;getOrCreateEventParameterNamesForDomain(e){let t=this.#t.get(e);return t||(t=new Map,this.#t.set(e,t)),t}getOrCreateEventParameterNamesForDomainForTesting(e){return this.getOrCreateEventParameterNamesForDomain(e)}getEventParamterNames(){return this.#t}static reportProtocolError(e,t){console.error(e+": "+JSON.stringify(t))}static reportProtocolWarning(e,t){console.warn(e+": "+JSON.stringify(t))}isInitialized(){return this.#e}agentPrototype(e){let t=this.agentPrototypes.get(e);return t||(t=new p(e),this.agentPrototypes.set(e,t)),t}registerCommand(e,t,r){const[n,a]=o(e);this.agentPrototype(n).registerCommand(a,t,r),this.#e=!0}registerEnum(e,t){const[r,n]=o(e);Protocol[r]||(Protocol[r]={}),Protocol[r][n]=t,this.#e=!0}registerEvent(e,t){const r=e.split(".")[0];this.getOrCreateEventParameterNamesForDomain(r).set(e,t),this.#e=!0}}let s;const m={dumpProtocol:null,deprecatedRunAfterPendingDispatches:null,sendRawMessage:null,suppressRequestErrors:!1,onMessageSent:null,onMessageReceived:null},l=new Set(["CSS.takeComputedStyleUpdates"]);class d{#r;#n;#o;#a;#i;#s;constructor(e){this.#r=e,this.#n=1,this.#o=0,this.#a=new Set,this.#i=new Map,this.#s=[],m.deprecatedRunAfterPendingDispatches=this.deprecatedRunAfterPendingDispatches.bind(this),m.sendRawMessage=this.sendRawMessageForTesting.bind(this),this.#r.setOnMessage(this.onMessage.bind(this)),this.#r.setOnDisconnect((e=>{const t=this.#i.get("");t&&t.target.dispose(e)}))}registerSession(e,t,r){if(r)for(const e of this.#i.values())if(e.proxyConnection){console.error("Multiple simultaneous proxy connections are currently unsupported");break}this.#i.set(t,{target:e,callbacks:new Map,proxyConnection:r})}unregisterSession(e){const t=this.#i.get(e);if(t){for(const e of t.callbacks.values())d.dispatchUnregisterSessionError(e);this.#i.delete(e)}}getTargetBySessionId(e){const t=this.#i.get(e||"");return t?t.target:null}nextMessageId(){return this.#n++}connection(){return this.#r}sendMessage(e,t,r,n,o){const a=this.nextMessageId(),i={id:a,method:r};if(n&&(i.params=n),e&&(i.sessionId=e),m.dumpProtocol&&m.dumpProtocol("frontend: "+JSON.stringify(i)),m.onMessageSent){const o=JSON.parse(JSON.stringify(n||{}));m.onMessageSent({domain:t,method:r,params:o,id:a,sessionId:e},this.getTargetBySessionId(e))}++this.#o,l.has(r)&&this.#a.add(a);const s=this.#i.get(e);s&&(s.callbacks.set(a,{callback:o,method:r}),this.#r.sendRawMessage(JSON.stringify(i)))}sendRawMessageForTesting(e,t,r){const n=e.split(".")[0];this.sendMessage("",n,e,t,r||(()=>{}))}onMessage(e){if(m.dumpProtocol&&m.dumpProtocol("backend: "+("string"==typeof e?e:JSON.stringify(e))),m.onMessageReceived){const t=JSON.parse("string"==typeof e?e:JSON.stringify(e));m.onMessageReceived(t,this.getTargetBySessionId(t.sessionId))}const t="string"==typeof e?JSON.parse(e):e;let n=!1;for(const e of this.#i.values())e.proxyConnection&&(e.proxyConnection.onMessage?(e.proxyConnection.onMessage(t),n=!0):i.reportProtocolError("Protocol Error: the session has a proxyConnection with no _onMessage",t));const o=t.sessionId||"",a=this.#i.get(o);if(a){if(!a.proxyConnection)if(a.target.getNeedsNodeJSPatching()&&r.patch(t),void 0!==t.id){const e=a.callbacks.get(t.id);if(a.callbacks.delete(t.id),!e)return void(n||i.reportProtocolError("Protocol Error: the message with wrong id",t));e.callback(t.error||null,t.result||null),--this.#o,this.#a.delete(t.id),this.#s.length&&!this.hasOutstandingNonLongPollingRequests()&&this.deprecatedRunAfterPendingDispatches()}else{if(void 0===t.method)return void i.reportProtocolError("Protocol Error: the message without method",t);const e=t;a.target.dispatch(e)}}else n||i.reportProtocolError("Protocol Error: the message with wrong session id",t)}hasOutstandingNonLongPollingRequests(){return this.#o-this.#a.size>0}deprecatedRunAfterPendingDispatches(e){e&&this.#s.push(e),setTimeout((()=>{this.hasOutstandingNonLongPollingRequests()?this.deprecatedRunAfterPendingDispatches():this.executeAfterPendingDispatches()}),0)}executeAfterPendingDispatches(){if(!this.hasOutstandingNonLongPollingRequests()){const e=this.#s;this.#s=[];for(let t=0;te(r,null)),0)}static dispatchUnregisterSessionError({callback:e,method:t}){const r={message:`Session is unregistering, can't dispatch pending call to ${t}`,code:-32001,data:null};setTimeout((()=>e(r,null)),0)}}class p{replyArgs;domain;target;constructor(e){this.replyArgs={},this.domain=e}registerCommand(e,t,r){const n=a(this.domain,e);this[e]=function(...e){return p.prototype.sendMessageToBackendPromise.call(this,n,t,e)},this["invoke_"+e]=function(e={}){return this.invoke(n,e)},this.replyArgs[n]=r}prepareParameters(e,t,r,n){const o={};let a=!1;for(const i of t){const s=i.name,m=i.type,l=i.optional;if(!r.length&&!l)return n(`Protocol Error: Invalid number of arguments for method '${e}' call. It must have the following arguments ${JSON.stringify(t)}'.`),null;const d=r.shift();if(!l||void 0!==d){if(typeof d!==m)return n(`Protocol Error: Invalid type of argument '${s}' for method '${e}' call. It must be '${m}' but it is '${typeof d}'.`),null;o[s]=d,a=!0}}return r.length?(n(`Protocol Error: Extra ${r.length} arguments in a call to method '${e}'.`),null):a?o:null}sendMessageToBackendPromise(e,t,r){let n;const o=this.prepareParameters(e,t,r,(function(e){console.error(e),n=e}));return n?Promise.resolve(null):new Promise((t=>{const r=(r,n)=>{if(r)return m.suppressRequestErrors||-32015===r.code||-32e3===r.code||-32001===r.code||console.error("Request "+e+" failed. "+JSON.stringify(r)),void t(null);const o=this.replyArgs[e];t(n&&o.length?n[o[0]]:void 0)},n=this.target.router();n?n.sendMessage(this.target.sessionId,this.domain,e,o,r):d.dispatchConnectionError(r,e)}))}invoke(e,t){return new Promise((r=>{const n=(t,n)=>{t&&!m.suppressRequestErrors&&-32015!==t.code&&-32e3!==t.code&&-32001!==t.code&&console.error("Request "+e+" failed. "+JSON.stringify(t));const o=t?.message;r({...n,getError:()=>o})},o=this.target.router();o?o.sendMessage(this.target.sessionId,this.domain,e,t,n):d.dispatchConnectionError(n,e)}))}}class g{#m;#l=[];constructor(e){this.#m=e}addDomainDispatcher(e){this.#l.push(e)}removeDomainDispatcher(e){const t=this.#l.indexOf(e);-1!==t&&this.#l.splice(t,1)}dispatch(e,t){if(!this.#l.length)return;if(!this.#m.has(t.method))return void i.reportProtocolWarning(`Protocol Warning: Attempted to dispatch an unspecified event '${t.method}'`,t);const r={...t.params};for(let t=0;t ((this.#r = !0), this.#r))), + this.#i + ) + } + async loadModules() { + const e = (t = this.#n).includes('/') + ? t.substring(t.lastIndexOf('/') + 1, t.length) + : t + var t + const s = `${e}_module.js`, + n = `${e}.js` + this.descriptor.modules && + this.descriptor.modules.includes(s) && + (await import(`../../${this.#n}/${s}`)), + await import(`../../${this.#n}/${n}`) + } + modularizeURL(e) { + return a.normalizePath(this.#n + '/' + e) + } + fetchResource(e) { + return p( + (function (e, t) { + const s = (t || n) + e, + r = s.indexOf('://') + 3 + let i = s.indexOf('/', r) + ;-1 === i && (i = s.length) + return s.substring(0, i) + a.normalizePath(s.substring(i)) + })(this.modularizeURL(e)) + ) + } +} +class c { + #o + #a + #l + #c + #d + constructor() { + ;(this.#o = []), + (this.#a = new Set()), + (this.#l = new Set()), + (this.#c = new Set()), + (this.#d = new Set()) + } + allConfigurableExperiments() { + const e = [] + for (const t of this.#o) this.#l.has(t.name) || e.push(t) + return e + } + enabledExperiments() { + return this.#o.filter((e) => e.isEnabled()) + } + setExperimentsSetting(e) { + self.localStorage && (self.localStorage.experiments = JSON.stringify(e)) + } + register(e, t, s, n) { + a.assert(!this.#a.has(e), 'Duplicate registration of experiment ' + e), + this.#a.add(e), + this.#o.push(new d(this, e, t, Boolean(s), n ?? '')) + } + isEnabled(e) { + return ( + this.checkExperiment(e), + !1 !== a.experimentsSetting()[e] && + (!(!this.#l.has(e) && !this.#c.has(e)) || + !!this.#d.has(e) || + Boolean(a.experimentsSetting()[e])) + ) + } + setEnabled(e, t) { + this.checkExperiment(e) + const s = a.experimentsSetting() + ;(s[e] = t), this.setExperimentsSetting(s) + } + enableExperimentsTransiently(e) { + for (const t of e) this.checkExperiment(t), this.#l.add(t) + } + enableExperimentsByDefault(e) { + for (const t of e) this.checkExperiment(t), this.#c.add(t) + } + setServerEnabledExperiments(e) { + for (const t of e) this.checkExperiment(t), this.#d.add(t) + } + enableForTest(e) { + this.checkExperiment(e), this.#l.add(e) + } + clearForTest() { + ;(this.#o = []), + this.#a.clear(), + this.#l.clear(), + this.#c.clear(), + this.#d.clear() + } + cleanUpStaleExperiments() { + const e = a.experimentsSetting(), + t = {} + for (const { name: s } of this.#o) + if (e.hasOwnProperty(s)) { + const n = e[s] + ;(n || this.#c.has(s)) && (t[s] = n) + } + this.setExperimentsSetting(t) + } + checkExperiment(e) { + a.assert(this.#a.has(e), 'Unknown experiment ' + e) + } +} +class d { + name + title + unstable + docLink + #o + constructor(e, t, s, n, r) { + ;(this.name = t), + (this.title = s), + (this.unstable = n), + (this.docLink = r), + (this.#o = e) + } + isEnabled() { + return this.#o.isEnabled(this.name) + } + setEnabled(e) { + this.#o.setEnabled(this.name, e) + } +} +function p(e) { + return new Promise(function (t, s) { + const n = new XMLHttpRequest() + n.open('GET', e, !0), + (n.onreadystatechange = function (r) { + if (n.readyState !== XMLHttpRequest.DONE) return + const i = this.response, + o = /^HTTP\/1.1 404/.test(i) ? 404 : n.status + ;-1 === [0, 200, 304].indexOf(o) + ? s( + new Error( + 'While loading from url ' + + e + + ' server responded with a status of ' + + o + ) + ) + : t(i) + }), + n.send(null) + }) +} +!(function () { + const e = self.location ? self.location.origin + self.location.pathname : '' + n = e.substring(0, e.lastIndexOf('/') + 1) +})() +const m = new c(), + u = new Map() +let h +globalThis.EXPORTED_CACHED_RESOURCES_ONLY_FOR_LIGHTHOUSE = u +const f = new Promise((e) => { + h = e +}) +var g, E +!(function (e) { + ;(e.CAPTURE_NODE_CREATION_STACKS = 'captureNodeCreationStacks'), + (e.CSS_OVERVIEW = 'cssOverview'), + (e.LIVE_HEAP_PROFILE = 'liveHeapProfile'), + (e.DEVELOPER_RESOURCES_VIEW = 'developerResourcesView'), + (e.TIMELINE_REPLAY_EVENT = 'timelineReplayEvent'), + (e.CSP_VIOLATIONS_VIEW = 'cspViolationsView'), + (e.WASM_DWARF_DEBUGGING = 'wasmDWARFDebugging'), + (e.ALL = '*'), + (e.PROTOCOL_MONITOR = 'protocolMonitor'), + (e.WEBAUTHN_PANE = 'webauthnPane'), + (e.SYNC_SETTINGS = 'syncSettings') +})(g || (g = {})), + (function (e) { + ;(e.CAN_DOCK = 'can_dock'), + (e.NOT_SOURCES_HIDE_ADD_FOLDER = '!sources.hide_add_folder') + })(E || (E = {})) +var b = Object.freeze({ + __proto__: null, + getRemoteBase: function (e = self.location.toString()) { + const t = new URL(e), + s = t.searchParams.get('remoteBase') + if (!s) return null + const n = /\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(s) + return n + ? { base: `${t.origin}/remote/serve_file/${n[1]}/`, version: n[1] } + : null + }, + mappingForLayoutTests: o, + Runtime: a, + ModuleDescriptor: class { + name + dependencies + modules + resources + condition + experiment + constructor() {} + }, + Module: l, + ExperimentsSupport: c, + Experiment: d, + loadResourcePromise: p, + experiments: m, + cachedResources: u, + get appStartedPromiseCallback() { + return h + }, + appStarted: f, + get ExperimentName() { + return g + }, + get ConditionName() { + return E + }, +}) +export { b as Runtime } diff --git a/chii/core/sdk/sdk-legacy.js b/chii/core/sdk/sdk-legacy.js new file mode 100644 index 00000000..1f02e61b --- /dev/null +++ b/chii/core/sdk/sdk-legacy.js @@ -0,0 +1 @@ +import*as e from"./sdk.js";self.SDK=self.SDK||{},SDK=SDK||{},SDK.CPUProfileDataModel=e.CPUProfileDataModel.CPUProfileDataModel,SDK.CPUProfilerModel=e.CPUProfilerModel.CPUProfilerModel,SDK.CPUThrottlingManager=e.CPUThrottlingManager.CPUThrottlingManager,SDK.CPUThrottlingManager.CPUThrottlingRates=e.CPUThrottlingManager.CPUThrottlingRates,SDK.cssMetadata=e.CSSMetadata.cssMetadata,SDK.CSSModel=e.CSSModel.CSSModel,SDK.CSSModel.Events=e.CSSModel.Events,SDK.CSSLocation=e.CSSModel.CSSLocation,SDK.CSSProperty=e.CSSProperty.CSSProperty,SDK.CSSStyleDeclaration=e.CSSStyleDeclaration.CSSStyleDeclaration,SDK.CSSStyleDeclaration.Type=e.CSSStyleDeclaration.Type,SDK.MainConnection=e.Connections.MainConnection,SDK.ConsoleModel=e.ConsoleModel.ConsoleModel,SDK.ConsoleMessage=e.ConsoleModel.ConsoleMessage,SDK.ConsoleModel.Events=e.ConsoleModel.Events,SDK.ConsoleMessage.MessageSource=e.ConsoleModel.MessageSource,SDK.ConsoleMessage.MessageType=e.ConsoleModel.MessageType,SDK.ConsoleMessage.MessageLevel=e.ConsoleModel.MessageLevel,SDK.ConsoleMessage.FrontendMessageType=e.ConsoleModel.FrontendMessageType,SDK.ConsoleMessage.FrontendMessageSource=e.ConsoleModel.FrontendMessageSource,SDK.Cookie=e.Cookie.Cookie,SDK.CookieReference=e.Cookie.CookieReference,SDK.CookieParser=e.CookieParser.CookieParser,SDK.DOMDebuggerModel=e.DOMDebuggerModel.DOMDebuggerModel,SDK.DOMModel=e.DOMModel.DOMModel,SDK.DOMModel.Events=e.DOMModel.Events,SDK.DeferredDOMNode=e.DOMModel.DeferredDOMNode,SDK.DOMDocument=e.DOMModel.DOMDocument,SDK.DOMNode=e.DOMModel.DOMNode,SDK.DebuggerModel=e.DebuggerModel.DebuggerModel,SDK.DebuggerModel.PauseOnExceptionsState=e.DebuggerModel.PauseOnExceptionsState,SDK.DebuggerModel.Events=e.DebuggerModel.Events,SDK.DebuggerModel.BreakReason=Protocol.Debugger.PausedEventReason,SDK.DebuggerModel.Location=e.DebuggerModel.Location,SDK.DebuggerModel.CallFrame=e.DebuggerModel.CallFrame,SDK.DebuggerPausedDetails=e.DebuggerModel.DebuggerPausedDetails,SDK.HeapProfilerModel=e.HeapProfilerModel.HeapProfilerModel,SDK.IsolateManager=e.IsolateManager.IsolateManager,SDK.IsolateManager.MemoryTrend=e.IsolateManager.MemoryTrend,SDK.NetworkManager=e.NetworkManager.NetworkManager,SDK.NetworkManager.Events=e.NetworkManager.Events,SDK.NetworkManager.OfflineConditions=e.NetworkManager.OfflineConditions,SDK.NetworkManager.Fast3GConditions=e.NetworkManager.Fast3GConditions,SDK.NetworkDispatcher=e.NetworkManager.NetworkDispatcher,SDK.MultitargetNetworkManager=e.NetworkManager.MultitargetNetworkManager,SDK.MultitargetNetworkManager.InterceptedRequest=e.NetworkManager.InterceptedRequest,SDK.NetworkRequest=e.NetworkRequest.NetworkRequest,SDK.NetworkRequest.Events=e.NetworkRequest.Events,SDK.NetworkRequest.WebSocketFrameType=e.NetworkRequest.WebSocketFrameType,SDK.OverlayModel=e.OverlayModel.OverlayModel,SDK.PerformanceMetricsModel=e.PerformanceMetricsModel.PerformanceMetricsModel,SDK.ProfileTreeModel=e.ProfileTreeModel.ProfileTreeModel,SDK.RemoteObject=e.RemoteObject.RemoteObject,SDK.Resource=e.Resource.Resource,SDK.ResourceTreeModel=e.ResourceTreeModel.ResourceTreeModel,SDK.ResourceTreeModel.Events=e.ResourceTreeModel.Events,SDK.ResourceTreeFrame=e.ResourceTreeModel.ResourceTreeFrame,SDK.RuntimeModel=e.RuntimeModel.RuntimeModel,SDK.RuntimeModel.Events=e.RuntimeModel.Events,SDK.ExecutionContext=e.RuntimeModel.ExecutionContext,SDK.Script=e.Script.Script,SDK.SecurityOriginManager=e.SecurityOriginManager.SecurityOriginManager,SDK.SecurityOriginManager.Events=e.SecurityOriginManager.Events,SDK.ServiceWorkerCacheModel=e.ServiceWorkerCacheModel.ServiceWorkerCacheModel,SDK.ServiceWorkerManager=e.ServiceWorkerManager.ServiceWorkerManager,SDK.SourceMap=e.SourceMap.SourceMap,SDK.TextSourceMap=e.SourceMap.TextSourceMap,SDK.SourceMapManager=e.SourceMapManager.SourceMapManager,SDK.SourceMapManager.Events=e.SourceMapManager.Events,SDK.Target=e.Target.Target,SDK.Target.Type=e.Target.Type,SDK.TargetManager=e.TargetManager.TargetManager,SDK.TargetManager.Events=e.TargetManager.Events,SDK.TargetManager.Observer=e.TargetManager.Observer,SDK.TracingManager=e.TracingManager.TracingManager,SDK.TracingModel=e.TracingModel.TracingModel,SDK.TracingModel.Phase=e.TracingModel.Phase,SDK.TracingModel.LegacyTopLevelEventCategory=e.TracingModel.LegacyTopLevelEventCategory,SDK.TracingModel.DevToolsMetadataEventCategory=e.TracingModel.DevToolsMetadataEventCategory,SDK.TracingModel.Event=e.TracingModel.Event,self.SDK.targetManager=e.TargetManager.TargetManager.instance(),self.SDK.isolateManager=e.IsolateManager.IsolateManager.instance({forceNew:!0}),self.SDK.domModelUndoStack=e.DOMModel.DOMModelUndoStack.instance(); diff --git a/chii/core/sdk/sdk-meta.js b/chii/core/sdk/sdk-meta.js new file mode 100644 index 00000000..02d15cd2 --- /dev/null +++ b/chii/core/sdk/sdk-meta.js @@ -0,0 +1 @@ +import*as e from"../common/common.js";import*as t from"../i18n/i18n.js";const i={preserveLogUponNavigation:"Preserve log upon navigation",doNotPreserveLogUponNavigation:"Do not preserve log upon navigation",pauseOnExceptions:"Pause on exceptions",doNotPauseOnExceptions:"Do not pause on exceptions",disableJavascript:"Disable JavaScript",enableJavascript:"Enable JavaScript",disableAsyncStackTraces:"Disable async stack traces",doNotCaptureAsyncStackTraces:"Do not capture async stack traces",captureAsyncStackTraces:"Capture async stack traces",showRulersOnHover:"Show rulers on hover",doNotShowRulersOnHover:"Do not show rulers on hover",showAreaNames:"Show area names",showGridNamedAreas:"Show grid named areas",doNotShowGridNamedAreas:"Do not show grid named areas",showTrackSizes:"Show track sizes",showGridTrackSizes:"Show grid track sizes",doNotShowGridTrackSizes:"Do not show grid track sizes",extendGridLines:"Extend grid lines",doNotExtendGridLines:"Do not extend grid lines",showLineLabels:"Show line labels",hideLineLabels:"Hide line labels",showLineNumbers:"Show line numbers",showLineNames:"Show line names",showPaintFlashingRectangles:"Show paint flashing rectangles",hidePaintFlashingRectangles:"Hide paint flashing rectangles",showLayoutShiftRegions:"Show layout shift regions",hideLayoutShiftRegions:"Hide layout shift regions",highlightAdFrames:"Highlight ad frames",doNotHighlightAdFrames:"Do not highlight ad frames",showLayerBorders:"Show layer borders",hideLayerBorders:"Hide layer borders",showCoreWebVitalsOverlay:"Show Core Web Vitals overlay",hideCoreWebVitalsOverlay:"Hide Core Web Vitals overlay",showFramesPerSecondFpsMeter:"Show frames per second (FPS) meter",hideFramesPerSecondFpsMeter:"Hide frames per second (FPS) meter",showScrollPerformanceBottlenecks:"Show scroll performance bottlenecks",hideScrollPerformanceBottlenecks:"Hide scroll performance bottlenecks",emulateAFocusedPage:"Emulate a focused page",doNotEmulateAFocusedPage:"Do not emulate a focused page",doNotEmulateCssMediaType:"Do not emulate CSS media type",noEmulation:"No emulation",emulateCssPrintMediaType:"Emulate CSS print media type",print:"print",emulateCssScreenMediaType:"Emulate CSS screen media type",screen:"screen",query:"query",emulateCssMediaType:"Emulate CSS media type",doNotEmulateCss:"Do not emulate CSS {PH1}",emulateCss:"Emulate CSS {PH1}",emulateCssMediaFeature:"Emulate CSS media feature {PH1}",doNotEmulateAnyVisionDeficiency:"Do not emulate any vision deficiency",emulateBlurredVision:"Emulate blurred vision",blurredVision:"Blurred vision",emulateProtanopia:"Emulate protanopia",protanopia:"Protanopia",emulateDeuteranopia:"Emulate deuteranopia",deuteranopia:"Deuteranopia",emulateTritanopia:"Emulate tritanopia",tritanopia:"Tritanopia",emulateAchromatopsia:"Emulate achromatopsia",achromatopsia:"Achromatopsia",emulateVisionDeficiencies:"Emulate vision deficiencies",disableLocalFonts:"Disable local fonts",enableLocalFonts:"Enable local fonts",disableAvifFormat:"Disable `AVIF` format",enableAvifFormat:"Enable `AVIF` format",disableJpegXlFormat:"Disable `JPEG XL` format",enableJpegXlFormat:"Enable `JPEG XL` format",disableWebpFormat:"Disable `WebP` format",enableWebpFormat:"Enable `WebP` format",enableCustomFormatters:"Enable custom formatters",enableNetworkRequestBlocking:"Enable network request blocking",disableNetworkRequestBlocking:"Disable network request blocking",enableCache:"Enable cache",disableCache:"Disable cache (while DevTools is open)",emulateAutoDarkMode:"Emulate auto dark mode",enableEmulateAutoDarkMode:"Enable auto dark mode",enabledDarkMode:"Enable",disableEmulateAutoDarkMode:"Disable auto dark mode",disabledDarkMode:"Disable",doNotEmulateDarkMode:"Do not emulate auto dark mode"},a=t.i18n.registerUIStrings("core/sdk/sdk-meta.ts",i),s=t.i18n.getLazilyComputedLocalizedString.bind(void 0,a);e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"skipStackFramesPattern",settingType:e.Settings.SettingType.REGEX,defaultValue:""}),e.Settings.registerSettingExtension({storageType:e.Settings.SettingStorageType.Synced,settingName:"skipContentScripts",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.CONSOLE,storageType:e.Settings.SettingStorageType.Synced,title:s(i.preserveLogUponNavigation),settingName:"preserveConsoleLog",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:s(i.preserveLogUponNavigation)},{value:!1,title:s(i.doNotPreserveLogUponNavigation)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.DEBUGGER,settingName:"pauseOnExceptionEnabled",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:s(i.pauseOnExceptions)},{value:!1,title:s(i.doNotPauseOnExceptions)}]}),e.Settings.registerSettingExtension({settingName:"pauseOnCaughtException",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.DEBUGGER,title:s(i.disableJavascript),settingName:"javaScriptDisabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,order:1,defaultValue:!1,options:[{value:!0,title:s(i.disableJavascript)},{value:!1,title:s(i.enableJavascript)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.DEBUGGER,title:s(i.disableAsyncStackTraces),settingName:"disableAsyncStackTraces",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1,order:2,options:[{value:!0,title:s(i.doNotCaptureAsyncStackTraces)},{value:!1,title:s(i.captureAsyncStackTraces)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.DEBUGGER,settingName:"breakpointsActive",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,defaultValue:!0}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.ELEMENTS,storageType:e.Settings.SettingStorageType.Synced,title:s(i.showRulersOnHover),settingName:"showMetricsRulers",settingType:e.Settings.SettingType.BOOLEAN,options:[{value:!0,title:s(i.showRulersOnHover)},{value:!1,title:s(i.doNotShowRulersOnHover)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GRID,storageType:e.Settings.SettingStorageType.Synced,title:s(i.showAreaNames),settingName:"showGridAreas",settingType:e.Settings.SettingType.BOOLEAN,options:[{value:!0,title:s(i.showGridNamedAreas)},{value:!1,title:s(i.doNotShowGridNamedAreas)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GRID,storageType:e.Settings.SettingStorageType.Synced,title:s(i.showTrackSizes),settingName:"showGridTrackSizes",settingType:e.Settings.SettingType.BOOLEAN,options:[{value:!0,title:s(i.showGridTrackSizes)},{value:!1,title:s(i.doNotShowGridTrackSizes)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GRID,storageType:e.Settings.SettingStorageType.Synced,title:s(i.extendGridLines),settingName:"extendGridLines",settingType:e.Settings.SettingType.BOOLEAN,options:[{value:!0,title:s(i.extendGridLines)},{value:!1,title:s(i.doNotExtendGridLines)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GRID,storageType:e.Settings.SettingStorageType.Synced,title:s(i.showLineLabels),settingName:"showGridLineLabels",settingType:e.Settings.SettingType.ENUM,options:[{title:s(i.hideLineLabels),text:s(i.hideLineLabels),value:"none"},{title:s(i.showLineNumbers),text:s(i.showLineNumbers),value:"lineNumbers"},{title:s(i.showLineNames),text:s(i.showLineNames),value:"lineNames"}],defaultValue:"lineNumbers"}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showPaintRects",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.showPaintFlashingRectangles)},{value:!1,title:s(i.hidePaintFlashingRectangles)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showLayoutShiftRegions",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.showLayoutShiftRegions)},{value:!1,title:s(i.hideLayoutShiftRegions)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showAdHighlights",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.highlightAdFrames)},{value:!1,title:s(i.doNotHighlightAdFrames)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showDebugBorders",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.showLayerBorders)},{value:!1,title:s(i.hideLayerBorders)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showWebVitals",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.showCoreWebVitalsOverlay)},{value:!1,title:s(i.hideCoreWebVitalsOverlay)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showFPSCounter",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.showFramesPerSecondFpsMeter)},{value:!1,title:s(i.hideFramesPerSecondFpsMeter)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"showScrollBottleneckRects",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.showScrollPerformanceBottlenecks)},{value:!1,title:s(i.hideScrollPerformanceBottlenecks)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,title:s(i.emulateAFocusedPage),settingName:"emulatePageFocus",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:s(i.emulateAFocusedPage)},{value:!1,title:s(i.doNotEmulateAFocusedPage)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMedia",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCssMediaType),text:s(i.noEmulation),value:""},{title:s(i.emulateCssPrintMediaType),text:s(i.print),value:"print"},{title:s(i.emulateCssScreenMediaType),text:s(i.screen),value:"screen"}],tags:[s(i.query)],title:s(i.emulateCssMediaType)}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMediaFeaturePrefersColorScheme",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCss,{PH1:"prefers-color-scheme"}),text:s(i.noEmulation),value:""},{title:s(i.emulateCss,{PH1:"prefers-color-scheme: light"}),text:t.i18n.lockedLazyString("prefers-color-scheme: light"),value:"light"},{title:s(i.emulateCss,{PH1:"prefers-color-scheme: dark"}),text:t.i18n.lockedLazyString("prefers-color-scheme: dark"),value:"dark"}],tags:[s(i.query)],title:s(i.emulateCssMediaFeature,{PH1:"prefers-color-scheme"})}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMediaFeatureForcedColors",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCss,{PH1:"forced-colors"}),text:s(i.noEmulation),value:""},{title:s(i.emulateCss,{PH1:"forced-colors: active"}),text:t.i18n.lockedLazyString("forced-colors: active"),value:"active"},{title:s(i.emulateCss,{PH1:"forced-colors: none"}),text:t.i18n.lockedLazyString("forced-colors: none"),value:"none"}],tags:[s(i.query)],title:s(i.emulateCssMediaFeature,{PH1:"forced-colors"})}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMediaFeaturePrefersReducedMotion",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCss,{PH1:"prefers-reduced-motion"}),text:s(i.noEmulation),value:""},{title:s(i.emulateCss,{PH1:"prefers-reduced-motion: reduce"}),text:t.i18n.lockedLazyString("prefers-reduced-motion: reduce"),value:"reduce"}],tags:[s(i.query)],title:s(i.emulateCssMediaFeature,{PH1:"prefers-reduced-motion"})}),e.Settings.registerSettingExtension({settingName:"emulatedCSSMediaFeaturePrefersContrast",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCss,{PH1:"prefers-contrast"}),text:s(i.noEmulation),value:""},{title:s(i.emulateCss,{PH1:"prefers-contrast: more"}),text:t.i18n.lockedLazyString("prefers-contrast: more"),value:"more"},{title:s(i.emulateCss,{PH1:"prefers-contrast: less"}),text:t.i18n.lockedLazyString("prefers-contrast: less"),value:"less"},{title:s(i.emulateCss,{PH1:"prefers-contrast: custom"}),text:t.i18n.lockedLazyString("prefers-contrast: custom"),value:"custom"}],tags:[s(i.query)],title:s(i.emulateCssMediaFeature,{PH1:"prefers-contrast"})}),e.Settings.registerSettingExtension({settingName:"emulatedCSSMediaFeaturePrefersReducedData",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCss,{PH1:"prefers-reduced-data"}),text:s(i.noEmulation),value:""},{title:s(i.emulateCss,{PH1:"prefers-reduced-data: reduce"}),text:t.i18n.lockedLazyString("prefers-reduced-data: reduce"),value:"reduce"}],title:s(i.emulateCssMediaFeature,{PH1:"prefers-reduced-data"})}),e.Settings.registerSettingExtension({settingName:"emulatedCSSMediaFeatureColorGamut",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:s(i.doNotEmulateCss,{PH1:"color-gamut"}),text:s(i.noEmulation),value:""},{title:s(i.emulateCss,{PH1:"color-gamut: srgb"}),text:t.i18n.lockedLazyString("color-gamut: srgb"),value:"srgb"},{title:s(i.emulateCss,{PH1:"color-gamut: p3"}),text:t.i18n.lockedLazyString("color-gamut: p3"),value:"p3"},{title:s(i.emulateCss,{PH1:"color-gamut: rec2020"}),text:t.i18n.lockedLazyString("color-gamut: rec2020"),value:"rec2020"}],title:s(i.emulateCssMediaFeature,{PH1:"color-gamut"})}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"emulatedVisionDeficiency",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"none",options:[{title:s(i.doNotEmulateAnyVisionDeficiency),text:s(i.noEmulation),value:"none"},{title:s(i.emulateBlurredVision),text:s(i.blurredVision),value:"blurredVision"},{title:s(i.emulateProtanopia),text:s(i.protanopia),value:"protanopia"},{title:s(i.emulateDeuteranopia),text:s(i.deuteranopia),value:"deuteranopia"},{title:s(i.emulateTritanopia),text:s(i.tritanopia),value:"tritanopia"},{title:s(i.emulateAchromatopsia),text:s(i.achromatopsia),value:"achromatopsia"}],tags:[s(i.query)],title:s(i.emulateVisionDeficiencies)}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"localFontsDisabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.disableLocalFonts)},{value:!1,title:s(i.enableLocalFonts)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"avifFormatDisabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.disableAvifFormat)},{value:!1,title:s(i.enableAvifFormat)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"jpegXlFormatDisabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.disableJpegXlFormat)},{value:!1,title:s(i.enableJpegXlFormat)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,settingName:"webpFormatDisabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,options:[{value:!0,title:s(i.disableWebpFormat)},{value:!1,title:s(i.enableWebpFormat)}],defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.CONSOLE,title:s(i.enableCustomFormatters),settingName:"customFormatters",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.NETWORK,title:s(i.enableNetworkRequestBlocking),settingName:"requestBlockingEnabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:s(i.enableNetworkRequestBlocking)},{value:!1,title:s(i.disableNetworkRequestBlocking)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.NETWORK,title:s(i.disableCache),settingName:"cacheDisabled",settingType:e.Settings.SettingType.BOOLEAN,order:0,defaultValue:!1,userActionCondition:"hasOtherClients",options:[{value:!0,title:s(i.disableCache)},{value:!1,title:s(i.enableCache)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.RENDERING,title:s(i.emulateAutoDarkMode),settingName:"emulateAutoDarkMode",settingType:e.Settings.SettingType.ENUM,storageType:e.Settings.SettingStorageType.Session,defaultValue:"default",options:[{title:s(i.doNotEmulateDarkMode),text:s(i.noEmulation),value:"default"},{title:s(i.enableEmulateAutoDarkMode),text:s(i.enabledDarkMode),value:"enabled"},{title:s(i.disableEmulateAutoDarkMode),text:s(i.disabledDarkMode),value:"disabled"}]}); diff --git a/chii/core/sdk/sdk.js b/chii/core/sdk/sdk.js new file mode 100644 index 00000000..127c57e4 --- /dev/null +++ b/chii/core/sdk/sdk.js @@ -0,0 +1 @@ +import*as e from"../common/common.js";import*as t from"../platform/platform.js";import*as n from"../../models/text_utils/text_utils.js";import*as r from"../i18n/i18n.js";import*as s from"../host/host.js";import*as i from"../protocol_client/protocol_client.js";import*as o from"../root/root.js";const a=new Map;class l extends e.ObjectWrapper.ObjectWrapper{#e;constructor(e){super(),this.#e=e}target(){return this.#e}async preSuspendModel(e){}async suspendModel(e){}async resumeModel(){}async postResumeModel(){}dispose(){}static register(e,t){if(t.early&&!t.autostart)throw new Error(`Error registering model ${e.name}: early models must be autostarted.`);a.set(e,t)}static get registeredModels(){return a}}var d=Object.freeze({__proto__:null,SDKModel:l});const c=[{name:"-webkit-border-horizontal-spacing",inherited:!0},{name:"-webkit-border-image"},{name:"-webkit-border-vertical-spacing",inherited:!0},{name:"-webkit-box-align",keywords:["stretch","start","center","end","baseline"]},{name:"-webkit-box-decoration-break",keywords:["slice","clone"]},{name:"-webkit-box-direction",inherited:!0,keywords:["normal","reverse"]},{name:"-webkit-box-flex"},{name:"-webkit-box-ordinal-group"},{name:"-webkit-box-orient",keywords:["horizontal","vertical"]},{name:"-webkit-box-pack",keywords:["start","center","end","justify"]},{name:"-webkit-box-reflect"},{longhands:["break-after"],name:"-webkit-column-break-after"},{longhands:["break-before"],name:"-webkit-column-break-before"},{longhands:["break-inside"],name:"-webkit-column-break-inside"},{name:"-webkit-font-smoothing",inherited:!0},{name:"-webkit-highlight",inherited:!0},{name:"-webkit-hyphenate-character",inherited:!0},{name:"-webkit-line-break",inherited:!0,keywords:["auto","loose","normal","strict","after-white-space","anywhere"]},{name:"-webkit-line-clamp"},{name:"-webkit-locale",inherited:!0},{longhands:["-webkit-mask-image","-webkit-mask-position-x","-webkit-mask-position-y","-webkit-mask-size","-webkit-mask-repeat-x","-webkit-mask-repeat-y","-webkit-mask-origin","-webkit-mask-clip"],name:"-webkit-mask"},{longhands:["-webkit-mask-box-image-source","-webkit-mask-box-image-slice","-webkit-mask-box-image-width","-webkit-mask-box-image-outset","-webkit-mask-box-image-repeat"],name:"-webkit-mask-box-image"},{name:"-webkit-mask-box-image-outset"},{name:"-webkit-mask-box-image-repeat"},{name:"-webkit-mask-box-image-slice"},{name:"-webkit-mask-box-image-source"},{name:"-webkit-mask-box-image-width"},{name:"-webkit-mask-clip"},{name:"-webkit-mask-composite"},{name:"-webkit-mask-image"},{name:"-webkit-mask-origin"},{longhands:["-webkit-mask-position-x","-webkit-mask-position-y"],name:"-webkit-mask-position"},{name:"-webkit-mask-position-x"},{name:"-webkit-mask-position-y"},{longhands:["-webkit-mask-repeat-x","-webkit-mask-repeat-y"],name:"-webkit-mask-repeat"},{name:"-webkit-mask-repeat-x"},{name:"-webkit-mask-repeat-y"},{name:"-webkit-mask-size"},{name:"-webkit-perspective-origin-x"},{name:"-webkit-perspective-origin-y"},{name:"-webkit-print-color-adjust",inherited:!0,keywords:["economy","exact"]},{name:"-webkit-rtl-ordering",inherited:!0,keywords:["logical","visual"]},{name:"-webkit-ruby-position",inherited:!0,keywords:["before","after"]},{name:"-webkit-tap-highlight-color",inherited:!0},{name:"-webkit-text-combine",inherited:!0},{name:"-webkit-text-decorations-in-effect",inherited:!0},{longhands:["-webkit-text-emphasis-style","-webkit-text-emphasis-color"],name:"-webkit-text-emphasis",inherited:!0},{name:"-webkit-text-emphasis-color",inherited:!0},{name:"-webkit-text-emphasis-position",inherited:!0},{name:"-webkit-text-emphasis-style",inherited:!0},{name:"-webkit-text-fill-color",inherited:!0},{name:"-webkit-text-orientation",inherited:!0},{name:"-webkit-text-security",inherited:!0,keywords:["none","disc","circle","square"]},{longhands:["-webkit-text-stroke-width","-webkit-text-stroke-color"],name:"-webkit-text-stroke",inherited:!0},{name:"-webkit-text-stroke-color",inherited:!0},{name:"-webkit-text-stroke-width",inherited:!0},{name:"-webkit-transform-origin-x"},{name:"-webkit-transform-origin-y"},{name:"-webkit-transform-origin-z"},{name:"-webkit-user-drag",keywords:["auto","none","element"]},{name:"-webkit-user-modify",inherited:!0,keywords:["read-only","read-write","read-write-plaintext-only"]},{name:"-webkit-writing-mode",inherited:!0},{name:"accent-color",inherited:!0,keywords:["auto","currentcolor"]},{name:"additive-symbols"},{name:"align-content"},{name:"align-items"},{name:"align-self"},{name:"alignment-baseline",keywords:["auto","baseline","alphabetic","ideographic","middle","central","mathematical","before-edge","text-before-edge","after-edge","text-after-edge","hanging"]},{name:"all"},{longhands:["animation-duration","animation-timing-function","animation-delay","animation-iteration-count","animation-direction","animation-fill-mode","animation-play-state","animation-name","animation-timeline"],name:"animation"},{name:"animation-delay"},{name:"animation-direction",keywords:["normal","reverse","alternate","alternate-reverse"]},{name:"animation-duration"},{name:"animation-fill-mode",keywords:["none","forwards","backwards","both"]},{name:"animation-iteration-count",keywords:["infinite"]},{name:"animation-name",keywords:["none"]},{name:"animation-play-state",keywords:["running","paused"]},{name:"animation-timeline",keywords:["none","auto"]},{name:"animation-timing-function",keywords:["linear","ease","ease-in","ease-out","ease-in-out","jump-both","jump-end","jump-none","jump-start","step-start","step-end"]},{name:"app-region",keywords:["none","drag","no-drag"]},{name:"appearance"},{name:"ascent-override"},{name:"aspect-ratio",keywords:["auto"]},{name:"backdrop-filter",keywords:["none"]},{name:"backface-visibility",keywords:["visible","hidden"]},{longhands:["background-image","background-position-x","background-position-y","background-size","background-repeat-x","background-repeat-y","background-attachment","background-origin","background-clip","background-color"],name:"background"},{name:"background-attachment",keywords:["scroll","fixed","local"]},{name:"background-blend-mode",keywords:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"]},{name:"background-clip",keywords:["border-box","padding-box","content-box"]},{name:"background-color",keywords:["currentcolor"]},{name:"background-image",keywords:["auto","none"]},{name:"background-origin",keywords:["border-box","padding-box","content-box"]},{longhands:["background-position-x","background-position-y"],name:"background-position"},{name:"background-position-x"},{name:"background-position-y"},{longhands:["background-repeat-x","background-repeat-y"],name:"background-repeat"},{name:"background-repeat-x"},{name:"background-repeat-y"},{name:"background-size",keywords:["auto","cover","contain"]},{name:"baseline-shift",keywords:["baseline","sub","super"]},{name:"block-size",keywords:["auto"]},{longhands:["border-top-color","border-top-style","border-top-width","border-right-color","border-right-style","border-right-width","border-bottom-color","border-bottom-style","border-bottom-width","border-left-color","border-left-style","border-left-width","border-image-source","border-image-slice","border-image-width","border-image-outset","border-image-repeat"],name:"border"},{longhands:["border-block-start-color","border-block-start-style","border-block-start-width","border-block-end-color","border-block-end-style","border-block-end-width"],name:"border-block"},{longhands:["border-block-start-color","border-block-end-color"],name:"border-block-color"},{longhands:["border-block-end-width","border-block-end-style","border-block-end-color"],name:"border-block-end"},{name:"border-block-end-color"},{name:"border-block-end-style"},{name:"border-block-end-width"},{longhands:["border-block-start-width","border-block-start-style","border-block-start-color"],name:"border-block-start"},{name:"border-block-start-color"},{name:"border-block-start-style"},{name:"border-block-start-width"},{longhands:["border-block-start-style","border-block-end-style"],name:"border-block-style"},{longhands:["border-block-start-width","border-block-end-width"],name:"border-block-width"},{longhands:["border-bottom-width","border-bottom-style","border-bottom-color"],name:"border-bottom"},{name:"border-bottom-color",keywords:["currentcolor"]},{name:"border-bottom-left-radius"},{name:"border-bottom-right-radius"},{name:"border-bottom-style",keywords:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},{name:"border-bottom-width",keywords:["thin","medium","thick"]},{name:"border-collapse",inherited:!0,keywords:["separate","collapse"]},{longhands:["border-top-color","border-right-color","border-bottom-color","border-left-color"],name:"border-color"},{name:"border-end-end-radius"},{name:"border-end-start-radius"},{longhands:["border-image-source","border-image-slice","border-image-width","border-image-outset","border-image-repeat"],name:"border-image"},{name:"border-image-outset"},{name:"border-image-repeat",keywords:["stretch","repeat","round","space"]},{name:"border-image-slice"},{name:"border-image-source",keywords:["none"]},{name:"border-image-width",keywords:["auto"]},{longhands:["border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-end-color","border-inline-end-style","border-inline-end-width"],name:"border-inline"},{longhands:["border-inline-start-color","border-inline-end-color"],name:"border-inline-color"},{longhands:["border-inline-end-width","border-inline-end-style","border-inline-end-color"],name:"border-inline-end"},{name:"border-inline-end-color"},{name:"border-inline-end-style"},{name:"border-inline-end-width"},{longhands:["border-inline-start-width","border-inline-start-style","border-inline-start-color"],name:"border-inline-start"},{name:"border-inline-start-color"},{name:"border-inline-start-style"},{name:"border-inline-start-width"},{longhands:["border-inline-start-style","border-inline-end-style"],name:"border-inline-style"},{longhands:["border-inline-start-width","border-inline-end-width"],name:"border-inline-width"},{longhands:["border-left-width","border-left-style","border-left-color"],name:"border-left"},{name:"border-left-color",keywords:["currentcolor"]},{name:"border-left-style",keywords:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},{name:"border-left-width",keywords:["thin","medium","thick"]},{longhands:["border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius"],name:"border-radius"},{longhands:["border-right-width","border-right-style","border-right-color"],name:"border-right"},{name:"border-right-color",keywords:["currentcolor"]},{name:"border-right-style",keywords:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},{name:"border-right-width",keywords:["thin","medium","thick"]},{longhands:["-webkit-border-horizontal-spacing","-webkit-border-vertical-spacing"],name:"border-spacing",inherited:!0},{name:"border-start-end-radius"},{name:"border-start-start-radius"},{keywords:["none"],longhands:["border-top-style","border-right-style","border-bottom-style","border-left-style"],name:"border-style"},{longhands:["border-top-width","border-top-style","border-top-color"],name:"border-top"},{name:"border-top-color",keywords:["currentcolor"]},{name:"border-top-left-radius"},{name:"border-top-right-radius"},{name:"border-top-style",keywords:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},{name:"border-top-width",keywords:["thin","medium","thick"]},{longhands:["border-top-width","border-right-width","border-bottom-width","border-left-width"],name:"border-width"},{name:"bottom",keywords:["auto"]},{name:"box-shadow",keywords:["none"]},{name:"box-sizing",keywords:["content-box","border-box"]},{name:"break-after",keywords:["auto","avoid","avoid-column","avoid-page","column","left","page","recto","right","verso"]},{name:"break-before",keywords:["auto","avoid","avoid-column","avoid-page","column","left","page","recto","right","verso"]},{name:"break-inside",keywords:["auto","avoid","avoid-column","avoid-page"]},{name:"buffered-rendering",keywords:["auto","dynamic","static"]},{name:"caption-side",inherited:!0,keywords:["top","bottom"]},{name:"caret-color",inherited:!0,keywords:["auto","currentcolor"]},{name:"clear",keywords:["none","left","right","both","inline-start","inline-end"]},{name:"clip",keywords:["auto"]},{name:"clip-path",keywords:["none"]},{name:"clip-rule",inherited:!0,keywords:["nonzero","evenodd"]},{name:"color",inherited:!0,keywords:["currentcolor"]},{name:"color-interpolation",inherited:!0,keywords:["auto","srgb","linearrgb"]},{name:"color-interpolation-filters",inherited:!0,keywords:["auto","srgb","linearrgb"]},{name:"color-rendering",inherited:!0,keywords:["auto","optimizespeed","optimizequality"]},{name:"color-scheme",inherited:!0},{name:"column-count",keywords:["auto"]},{name:"column-fill",keywords:["balance","auto"]},{name:"column-gap",keywords:["normal"]},{longhands:["column-rule-width","column-rule-style","column-rule-color"],name:"column-rule"},{name:"column-rule-color",keywords:["currentcolor"]},{name:"column-rule-style",keywords:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},{name:"column-rule-width",keywords:["thin","medium","thick"]},{name:"column-span",keywords:["none","all"]},{name:"column-width",keywords:["auto"]},{longhands:["column-width","column-count"],name:"columns"},{name:"contain",keywords:["none","strict","content","size","layout","style","paint","inline-size","block-size"]},{name:"contain-intrinsic-block-size"},{name:"contain-intrinsic-height",keywords:["auto","none"]},{name:"contain-intrinsic-inline-size"},{longhands:["contain-intrinsic-width","contain-intrinsic-height"],name:"contain-intrinsic-size"},{name:"contain-intrinsic-width",keywords:["auto","none"]},{longhands:["container-type","container-name"],name:"container"},{name:"container-name",keywords:["none"]},{name:"container-type",keywords:["none","block-size","inline-size","size"]},{name:"content"},{name:"content-visibility",keywords:["visible","auto","hidden","hidden-matchable"]},{name:"counter-increment",keywords:["none"]},{name:"counter-reset",keywords:["none"]},{name:"counter-set",keywords:["none"]},{name:"cursor",inherited:!0,keywords:["auto","default","none","context-menu","help","pointer","progress","wait","cell","crosshair","text","vertical-text","alias","copy","move","no-drop","not-allowed","e-resize","n-resize","ne-resize","nw-resize","s-resize","se-resize","sw-resize","w-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","col-resize","row-resize","all-scroll","zoom-in","zoom-out","grab","grabbing"]},{name:"cx"},{name:"cy"},{name:"d",keywords:["none"]},{name:"descent-override"},{name:"direction",inherited:!0,keywords:["ltr","rtl"]},{keywords:["inline","block","list-item","inline-block","table","inline-table","table-row-group","table-header-group","table-footer-group","table-row","table-column-group","table-column","table-cell","table-caption","-webkit-box","-webkit-inline-box","flex","inline-flex","grid","inline-grid","contents","flow-root","none"],name:"display"},{name:"dominant-baseline",inherited:!0,keywords:["auto","alphabetic","ideographic","middle","central","mathematical","hanging","use-script","no-change","reset-size","text-after-edge","text-before-edge"]},{name:"empty-cells",inherited:!0,keywords:["show","hide"]},{name:"end"},{name:"fallback"},{name:"fill",inherited:!0},{name:"fill-opacity",inherited:!0},{name:"fill-rule",inherited:!0,keywords:["nonzero","evenodd"]},{name:"filter",keywords:["none"]},{longhands:["flex-grow","flex-shrink","flex-basis"],name:"flex"},{name:"flex-basis",keywords:["auto","fit-content","min-content","max-content","content"]},{name:"flex-direction",keywords:["row","row-reverse","column","column-reverse"]},{longhands:["flex-direction","flex-wrap"],name:"flex-flow"},{name:"flex-grow"},{name:"flex-shrink"},{name:"flex-wrap",keywords:["nowrap","wrap","wrap-reverse"]},{name:"float",keywords:["none","left","right","inline-start","inline-end"]},{name:"flood-color",keywords:["currentcolor"]},{name:"flood-opacity"},{longhands:["font-style","font-variant-ligatures","font-variant-caps","font-variant-numeric","font-variant-east-asian","font-weight","font-stretch","font-size","line-height","font-family"],name:"font",inherited:!0},{name:"font-display"},{name:"font-family",inherited:!0},{name:"font-feature-settings",inherited:!0,keywords:["normal"]},{name:"font-kerning",inherited:!0,keywords:["auto","normal","none"]},{name:"font-optical-sizing",inherited:!0,keywords:["auto","none"]},{name:"font-size",inherited:!0,keywords:["xx-small","x-small","small","medium","large","x-large","xx-large","xxx-large","larger","smaller","-webkit-xxx-large"]},{name:"font-size-adjust",inherited:!0,keywords:["none"]},{name:"font-stretch",inherited:!0,keywords:["normal","ultra-condensed","extra-condensed","condensed","semi-condensed","semi-expanded","expanded","extra-expanded","ultra-expanded"]},{name:"font-style",inherited:!0,keywords:["normal","italic","oblique"]},{longhands:["font-synthesis-weight","font-synthesis-style","font-synthesis-small-caps"],name:"font-synthesis",inherited:!0},{name:"font-synthesis-small-caps",inherited:!0,keywords:["auto","none"]},{name:"font-synthesis-style",inherited:!0,keywords:["auto","none"]},{name:"font-synthesis-weight",inherited:!0,keywords:["auto","none"]},{longhands:["font-variant-ligatures","font-variant-caps","font-variant-numeric","font-variant-east-asian"],name:"font-variant",inherited:!0},{inherited:!0,keywords:["normal","small-caps","all-small-caps","petite-caps","all-petite-caps","unicase","titling-caps"],name:"font-variant-caps"},{inherited:!0,keywords:["normal","jis78","jis83","jis90","jis04","simplified","traditional","full-width","proportional-width","ruby"],name:"font-variant-east-asian"},{name:"font-variant-ligatures",inherited:!0,keywords:["normal","none","common-ligatures","no-common-ligatures","discretionary-ligatures","no-discretionary-ligatures","historical-ligatures","no-historical-ligatures","contextual","no-contextual"]},{inherited:!0,keywords:["normal","lining-nums","oldstyle-nums","proportional-nums","tabular-nums","diagonal-fractions","stacked-fractions","ordinal","slashed-zero"],name:"font-variant-numeric"},{name:"font-variation-settings",inherited:!0,keywords:["normal"]},{name:"font-weight",inherited:!0,keywords:["normal","bold","bolder","lighter"]},{name:"forced-color-adjust",inherited:!0,keywords:["auto","none","preserve-parent-color"]},{longhands:["row-gap","column-gap"],name:"gap"},{longhands:["grid-template-rows","grid-template-columns","grid-template-areas","grid-auto-flow","grid-auto-rows","grid-auto-columns"],name:"grid"},{longhands:["grid-row-start","grid-column-start","grid-row-end","grid-column-end"],name:"grid-area"},{name:"grid-auto-columns",keywords:["auto","min-content","max-content"]},{name:"grid-auto-flow",keywords:["row","column"]},{name:"grid-auto-rows",keywords:["auto","min-content","max-content"]},{longhands:["grid-column-start","grid-column-end"],name:"grid-column"},{name:"grid-column-end",keywords:["auto"]},{longhands:["column-gap"],name:"grid-column-gap"},{name:"grid-column-start",keywords:["auto"]},{longhands:["row-gap","column-gap"],name:"grid-gap"},{longhands:["grid-row-start","grid-row-end"],name:"grid-row"},{name:"grid-row-end",keywords:["auto"]},{longhands:["row-gap"],name:"grid-row-gap"},{name:"grid-row-start",keywords:["auto"]},{longhands:["grid-template-rows","grid-template-columns","grid-template-areas"],name:"grid-template"},{keywords:["none"],name:"grid-template-areas"},{name:"grid-template-columns",keywords:["none"]},{name:"grid-template-rows",keywords:["none"]},{name:"height",keywords:["auto","fit-content","min-content","max-content"]},{name:"hyphens",inherited:!0,keywords:["none","manual","auto"]},{name:"image-orientation",inherited:!0},{name:"image-rendering",inherited:!0,keywords:["auto","optimizespeed","optimizequality","-webkit-optimize-contrast","pixelated"]},{name:"inherits"},{name:"initial-value"},{name:"inline-size",keywords:["auto"]},{longhands:["top","right","bottom","left"],name:"inset"},{longhands:["inset-block-start","inset-block-end"],name:"inset-block"},{name:"inset-block-end"},{name:"inset-block-start"},{longhands:["inset-inline-start","inset-inline-end"],name:"inset-inline"},{name:"inset-inline-end"},{name:"inset-inline-start"},{name:"isolation",keywords:["auto","isolate"]},{name:"justify-content"},{name:"justify-items"},{name:"justify-self"},{name:"left",keywords:["auto"]},{inherited:!0,keywords:["normal"],name:"letter-spacing"},{name:"lighting-color",keywords:["currentcolor"]},{name:"line-break",inherited:!0,keywords:["auto","loose","normal","strict","anywhere"]},{name:"line-gap-override"},{name:"line-height",inherited:!0,keywords:["normal"]},{name:"line-height-step",inherited:!0},{longhands:["list-style-position","list-style-image","list-style-type"],name:"list-style",inherited:!0},{name:"list-style-image",inherited:!0,keywords:["none"]},{name:"list-style-position",inherited:!0,keywords:["outside","inside"]},{name:"list-style-type",inherited:!0,keywords:["disc","circle","square","disclosure-open","disclosure-closed","decimal","none"]},{longhands:["margin-top","margin-right","margin-bottom","margin-left"],name:"margin"},{longhands:["margin-block-start","margin-block-end"],name:"margin-block"},{name:"margin-block-end",keywords:["auto"]},{name:"margin-block-start",keywords:["auto"]},{name:"margin-bottom",keywords:["auto"]},{longhands:["margin-inline-start","margin-inline-end"],name:"margin-inline"},{name:"margin-inline-end",keywords:["auto"]},{name:"margin-inline-start",keywords:["auto"]},{name:"margin-left",keywords:["auto"]},{name:"margin-right",keywords:["auto"]},{name:"margin-top",keywords:["auto"]},{longhands:["marker-start","marker-mid","marker-end"],name:"marker",inherited:!0},{name:"marker-end",inherited:!0,keywords:["none"]},{name:"marker-mid",inherited:!0,keywords:["none"]},{name:"marker-start",inherited:!0,keywords:["none"]},{name:"mask"},{name:"mask-type",keywords:["luminance","alpha"]},{name:"math-depth",inherited:!0},{name:"math-shift",inherited:!0,keywords:["normal","compact"]},{name:"math-style",inherited:!0,keywords:["normal","compact"]},{keywords:["none"],name:"max-block-size"},{name:"max-height",keywords:["none"]},{keywords:["none"],name:"max-inline-size"},{name:"max-width",keywords:["none"]},{name:"max-zoom"},{name:"min-block-size"},{name:"min-height"},{name:"min-inline-size"},{name:"min-width"},{name:"min-zoom"},{name:"mix-blend-mode",keywords:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"]},{name:"negative"},{name:"object-fit",keywords:["fill","contain","cover","none","scale-down"]},{name:"object-position"},{longhands:["offset-position","offset-path","offset-distance","offset-rotate","offset-anchor"],name:"offset"},{name:"offset-anchor",keywords:["auto"]},{name:"offset-distance"},{name:"offset-path",keywords:["none"]},{name:"offset-position",keywords:["auto"]},{name:"offset-rotate",keywords:["auto","reverse"]},{name:"opacity"},{name:"order"},{name:"orientation"},{name:"origin-trial-test-property",keywords:["normal","none"]},{name:"orphans",inherited:!0},{longhands:["outline-color","outline-style","outline-width"],name:"outline"},{name:"outline-color",keywords:["currentcolor"]},{name:"outline-offset"},{name:"outline-style",keywords:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},{name:"outline-width",keywords:["thin","medium","thick"]},{longhands:["overflow-x","overflow-y"],name:"overflow"},{name:"overflow-anchor",inherited:!1,keywords:["visible","none","auto"]},{name:"overflow-block"},{name:"overflow-clip-margin"},{name:"overflow-inline"},{name:"overflow-wrap",inherited:!0,keywords:["normal","break-word","anywhere"]},{name:"overflow-x",keywords:["visible","hidden","scroll","auto","overlay","clip"]},{name:"overflow-y",keywords:["visible","hidden","scroll","auto","overlay","clip"]},{longhands:["overscroll-behavior-x","overscroll-behavior-y"],name:"overscroll-behavior"},{name:"overscroll-behavior-block"},{name:"overscroll-behavior-inline"},{name:"overscroll-behavior-x",keywords:["auto","contain","none"]},{name:"overscroll-behavior-y",keywords:["auto","contain","none"]},{name:"pad"},{longhands:["padding-top","padding-right","padding-bottom","padding-left"],name:"padding"},{longhands:["padding-block-start","padding-block-end"],name:"padding-block"},{name:"padding-block-end"},{name:"padding-block-start"},{name:"padding-bottom"},{longhands:["padding-inline-start","padding-inline-end"],name:"padding-inline"},{name:"padding-inline-end"},{name:"padding-inline-start"},{name:"padding-left"},{name:"padding-right"},{name:"padding-top"},{name:"page",keywords:["auto"]},{longhands:["break-after"],name:"page-break-after"},{longhands:["break-before"],name:"page-break-before"},{longhands:["break-inside"],name:"page-break-inside"},{name:"page-orientation"},{name:"paint-order",inherited:!0,keywords:["normal","fill","stroke","markers"]},{name:"perspective",keywords:["none"]},{name:"perspective-origin"},{longhands:["align-content","justify-content"],name:"place-content"},{longhands:["align-items","justify-items"],name:"place-items"},{longhands:["align-self","justify-self"],name:"place-self"},{name:"pointer-events",inherited:!0,keywords:["none","auto","stroke","fill","painted","visible","visiblestroke","visiblefill","visiblepainted","bounding-box","all"]},{name:"position",keywords:["static","relative","absolute","fixed","sticky"]},{name:"prefix"},{name:"quotes",inherited:!0,keywords:["auto","none"]},{name:"r"},{name:"range"},{name:"resize",keywords:["none","both","horizontal","vertical","block","inline"]},{name:"right",keywords:["auto"]},{name:"rotate"},{name:"row-gap",keywords:["normal"]},{inherited:!0,name:"ruby-position"},{name:"rx",keywords:["auto"]},{name:"ry",keywords:["auto"]},{name:"scale"},{name:"scroll-behavior",keywords:["auto","smooth"]},{name:"scroll-customization"},{longhands:["scroll-margin-top","scroll-margin-right","scroll-margin-bottom","scroll-margin-left"],name:"scroll-margin"},{longhands:["scroll-margin-block-start","scroll-margin-block-end"],name:"scroll-margin-block"},{name:"scroll-margin-block-end"},{name:"scroll-margin-block-start"},{name:"scroll-margin-bottom"},{longhands:["scroll-margin-inline-start","scroll-margin-inline-end"],name:"scroll-margin-inline"},{name:"scroll-margin-inline-end"},{name:"scroll-margin-inline-start"},{name:"scroll-margin-left"},{name:"scroll-margin-right"},{name:"scroll-margin-top"},{longhands:["scroll-padding-top","scroll-padding-right","scroll-padding-bottom","scroll-padding-left"],name:"scroll-padding"},{longhands:["scroll-padding-block-start","scroll-padding-block-end"],name:"scroll-padding-block"},{name:"scroll-padding-block-end",keywords:["auto"]},{name:"scroll-padding-block-start",keywords:["auto"]},{name:"scroll-padding-bottom",keywords:["auto"]},{longhands:["scroll-padding-inline-start","scroll-padding-inline-end"],name:"scroll-padding-inline"},{name:"scroll-padding-inline-end",keywords:["auto"]},{name:"scroll-padding-inline-start",keywords:["auto"]},{name:"scroll-padding-left",keywords:["auto"]},{name:"scroll-padding-right",keywords:["auto"]},{name:"scroll-padding-top",keywords:["auto"]},{name:"scroll-snap-align",keywords:["none","start","end","center"]},{name:"scroll-snap-stop",keywords:["normal","always"]},{name:"scroll-snap-type",keywords:["none","x","y","block","inline","both","mandatory","proximity"]},{name:"scrollbar-gutter",inherited:!1,keywords:["auto","stable","both-edges"]},{name:"scrollbar-width",inherited:!1,keywords:["auto","thin","none"]},{name:"shape-image-threshold"},{name:"shape-margin",keywords:["none"]},{name:"shape-outside",keywords:["none"]},{name:"shape-rendering",inherited:!0,keywords:["auto","optimizespeed","crispedges","geometricprecision"]},{name:"size"},{name:"size-adjust"},{name:"source"},{name:"speak",inherited:!0,keywords:["none","normal","spell-out","digits","literal-punctuation","no-punctuation"]},{name:"speak-as"},{name:"src"},{name:"start"},{name:"stop-color",keywords:["currentcolor"]},{name:"stop-opacity"},{name:"stroke",inherited:!0},{name:"stroke-dasharray",inherited:!0,keywords:["none"]},{name:"stroke-dashoffset",inherited:!0},{name:"stroke-linecap",inherited:!0,keywords:["butt","round","square"]},{name:"stroke-linejoin",inherited:!0,keywords:["miter","bevel","round"]},{name:"stroke-miterlimit",inherited:!0},{name:"stroke-opacity",inherited:!0},{name:"stroke-width",inherited:!0},{name:"suffix"},{name:"symbols"},{name:"syntax"},{name:"system"},{name:"tab-size",inherited:!0},{name:"table-layout",keywords:["auto","fixed"]},{name:"text-align",inherited:!0,keywords:["left","right","center","justify","-webkit-left","-webkit-right","-webkit-center","start","end"]},{name:"text-align-last",inherited:!0,keywords:["auto","start","end","left","right","center","justify"]},{name:"text-anchor",inherited:!0,keywords:["start","middle","end"]},{name:"text-combine-upright",inherited:!0,keywords:["none","all"]},{longhands:["text-decoration-line","text-decoration-thickness","text-decoration-style","text-decoration-color"],name:"text-decoration"},{name:"text-decoration-color",keywords:["currentcolor"]},{name:"text-decoration-line",keywords:["none","underline","overline","line-through","blink","spelling-error","grammar-error"]},{name:"text-decoration-skip-ink",inherited:!0,keywords:["none","auto"]},{name:"text-decoration-style",keywords:["solid","double","dotted","dashed","wavy"]},{name:"text-decoration-thickness",inherited:!0,keywords:["auto","from-font"]},{name:"text-indent",inherited:!0},{name:"text-justify",inherited:!0,keywords:["auto","none","inter-word","distribute"]},{name:"text-orientation",inherited:!0,keywords:["sideways","mixed","upright"]},{name:"text-overflow",keywords:["clip","ellipsis"]},{name:"text-rendering",inherited:!0,keywords:["auto","optimizespeed","optimizelegibility","geometricprecision"]},{name:"text-shadow",inherited:!0,keywords:["none"]},{name:"text-size-adjust",inherited:!0,keywords:["none","auto"]},{name:"text-transform",inherited:!0,keywords:["capitalize","uppercase","lowercase","none","math-auto"]},{name:"text-underline-offset",inherited:!0,keywords:["auto"]},{name:"text-underline-position",inherited:!0,keywords:["auto","from-font","under","left","right"]},{name:"top",keywords:["auto"]},{name:"touch-action",keywords:["auto","none","pan-x","pan-left","pan-right","pan-y","pan-up","pan-down","pinch-zoom","manipulation"]},{name:"transform",keywords:["none"]},{name:"transform-box",keywords:["fill-box","view-box"]},{name:"transform-origin"},{name:"transform-style",keywords:["flat","preserve-3d"]},{longhands:["transition-property","transition-duration","transition-timing-function","transition-delay"],name:"transition"},{name:"transition-delay"},{name:"transition-duration"},{name:"transition-property",keywords:["none"]},{name:"transition-timing-function",keywords:["linear","ease","ease-in","ease-out","ease-in-out","jump-both","jump-end","jump-none","jump-start","step-start","step-end"]},{name:"translate"},{name:"unicode-bidi",keywords:["normal","embed","bidi-override","isolate","plaintext","isolate-override"]},{name:"unicode-range"},{name:"user-select",inherited:!0,keywords:["auto","none","text","all"]},{name:"user-zoom"},{name:"vector-effect",keywords:["none","non-scaling-stroke"]},{name:"vertical-align",keywords:["baseline","sub","super","text-top","text-bottom","middle"]},{name:"viewport-fit"},{name:"visibility",inherited:!0,keywords:["visible","hidden","collapse"]},{name:"white-space",inherited:!0,keywords:["none","normal","pre","pre-wrap","pre-line","nowrap","-webkit-nowrap","break-spaces"]},{name:"widows",inherited:!0},{name:"width",keywords:["auto","fit-content","min-content","max-content"]},{keywords:["auto"],name:"will-change"},{name:"word-break",inherited:!0,keywords:["normal","break-all","keep-all","break-word"]},{inherited:!0,keywords:["normal"],name:"word-spacing"},{name:"writing-mode",inherited:!0,keywords:["horizontal-tb","vertical-rl","vertical-lr"]},{name:"x"},{name:"y"},{name:"z-index",keywords:["auto"]},{name:"zoom"}],h={"-webkit-box-align":{values:["stretch","start","center","end","baseline"]},"-webkit-box-decoration-break":{values:["slice","clone"]},"-webkit-box-direction":{values:["normal","reverse"]},"-webkit-box-orient":{values:["horizontal","vertical"]},"-webkit-box-pack":{values:["start","center","end","justify"]},"-webkit-line-break":{values:["auto","loose","normal","strict","after-white-space","anywhere"]},"-webkit-print-color-adjust":{values:["economy","exact"]},"-webkit-rtl-ordering":{values:["logical","visual"]},"-webkit-ruby-position":{values:["before","after"]},"-webkit-text-security":{values:["none","disc","circle","square"]},"-webkit-user-drag":{values:["auto","none","element"]},"-webkit-user-modify":{values:["read-only","read-write","read-write-plaintext-only"]},"accent-color":{values:["auto","currentcolor"]},"alignment-baseline":{values:["auto","baseline","alphabetic","ideographic","middle","central","mathematical","before-edge","text-before-edge","after-edge","text-after-edge","hanging"]},"animation-direction":{values:["normal","reverse","alternate","alternate-reverse"]},"animation-fill-mode":{values:["none","forwards","backwards","both"]},"animation-iteration-count":{values:["infinite"]},"animation-name":{values:["none"]},"animation-play-state":{values:["running","paused"]},"animation-timeline":{values:["none","auto"]},"animation-timing-function":{values:["linear","ease","ease-in","ease-out","ease-in-out","jump-both","jump-end","jump-none","jump-start","step-start","step-end"]},"app-region":{values:["none","drag","no-drag"]},"aspect-ratio":{values:["auto"]},"backdrop-filter":{values:["none"]},"backface-visibility":{values:["visible","hidden"]},"background-attachment":{values:["scroll","fixed","local"]},"background-blend-mode":{values:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"]},"background-clip":{values:["border-box","padding-box","content-box"]},"background-color":{values:["currentcolor"]},"background-image":{values:["auto","none"]},"background-origin":{values:["border-box","padding-box","content-box"]},"background-size":{values:["auto","cover","contain"]},"baseline-shift":{values:["baseline","sub","super"]},"block-size":{values:["auto"]},"border-bottom-color":{values:["currentcolor"]},"border-bottom-style":{values:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"border-bottom-width":{values:["thin","medium","thick"]},"border-collapse":{values:["separate","collapse"]},"border-image-repeat":{values:["stretch","repeat","round","space"]},"border-image-source":{values:["none"]},"border-image-width":{values:["auto"]},"border-left-color":{values:["currentcolor"]},"border-left-style":{values:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"border-left-width":{values:["thin","medium","thick"]},"border-right-color":{values:["currentcolor"]},"border-right-style":{values:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"border-right-width":{values:["thin","medium","thick"]},"border-style":{values:["none"]},"border-top-color":{values:["currentcolor"]},"border-top-style":{values:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"border-top-width":{values:["thin","medium","thick"]},bottom:{values:["auto"]},"box-shadow":{values:["none"]},"box-sizing":{values:["content-box","border-box"]},"break-after":{values:["auto","avoid","avoid-column","avoid-page","column","left","page","recto","right","verso"]},"break-before":{values:["auto","avoid","avoid-column","avoid-page","column","left","page","recto","right","verso"]},"break-inside":{values:["auto","avoid","avoid-column","avoid-page"]},"buffered-rendering":{values:["auto","dynamic","static"]},"caption-side":{values:["top","bottom"]},"caret-color":{values:["auto","currentcolor"]},clear:{values:["none","left","right","both","inline-start","inline-end"]},clip:{values:["auto"]},"clip-path":{values:["none"]},"clip-rule":{values:["nonzero","evenodd"]},color:{values:["currentcolor"]},"color-interpolation":{values:["auto","srgb","linearrgb"]},"color-interpolation-filters":{values:["auto","srgb","linearrgb"]},"color-rendering":{values:["auto","optimizespeed","optimizequality"]},"column-count":{values:["auto"]},"column-fill":{values:["balance","auto"]},"column-gap":{values:["normal"]},"column-rule-color":{values:["currentcolor"]},"column-rule-style":{values:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"column-rule-width":{values:["thin","medium","thick"]},"column-span":{values:["none","all"]},"column-width":{values:["auto"]},contain:{values:["none","strict","content","size","layout","style","paint","inline-size","block-size"]},"contain-intrinsic-height":{values:["auto","none"]},"contain-intrinsic-width":{values:["auto","none"]},"container-name":{values:["none"]},"container-type":{values:["none","block-size","inline-size","size"]},"content-visibility":{values:["visible","auto","hidden","hidden-matchable"]},"counter-increment":{values:["none"]},"counter-reset":{values:["none"]},"counter-set":{values:["none"]},cursor:{values:["auto","default","none","context-menu","help","pointer","progress","wait","cell","crosshair","text","vertical-text","alias","copy","move","no-drop","not-allowed","e-resize","n-resize","ne-resize","nw-resize","s-resize","se-resize","sw-resize","w-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","col-resize","row-resize","all-scroll","zoom-in","zoom-out","grab","grabbing"]},d:{values:["none"]},direction:{values:["ltr","rtl"]},display:{values:["inline","block","list-item","inline-block","table","inline-table","table-row-group","table-header-group","table-footer-group","table-row","table-column-group","table-column","table-cell","table-caption","-webkit-box","-webkit-inline-box","flex","inline-flex","grid","inline-grid","contents","flow-root","none"]},"dominant-baseline":{values:["auto","alphabetic","ideographic","middle","central","mathematical","hanging","use-script","no-change","reset-size","text-after-edge","text-before-edge"]},"empty-cells":{values:["show","hide"]},"fill-rule":{values:["nonzero","evenodd"]},filter:{values:["none"]},"flex-basis":{values:["auto","fit-content","min-content","max-content","content"]},"flex-direction":{values:["row","row-reverse","column","column-reverse"]},"flex-wrap":{values:["nowrap","wrap","wrap-reverse"]},float:{values:["none","left","right","inline-start","inline-end"]},"flood-color":{values:["currentcolor"]},"font-feature-settings":{values:["normal"]},"font-kerning":{values:["auto","normal","none"]},"font-optical-sizing":{values:["auto","none"]},"font-size":{values:["xx-small","x-small","small","medium","large","x-large","xx-large","xxx-large","larger","smaller","-webkit-xxx-large"]},"font-size-adjust":{values:["none"]},"font-stretch":{values:["normal","ultra-condensed","extra-condensed","condensed","semi-condensed","semi-expanded","expanded","extra-expanded","ultra-expanded"]},"font-style":{values:["normal","italic","oblique"]},"font-synthesis-small-caps":{values:["auto","none"]},"font-synthesis-style":{values:["auto","none"]},"font-synthesis-weight":{values:["auto","none"]},"font-variant-caps":{values:["normal","small-caps","all-small-caps","petite-caps","all-petite-caps","unicase","titling-caps"]},"font-variant-east-asian":{values:["normal","jis78","jis83","jis90","jis04","simplified","traditional","full-width","proportional-width","ruby"]},"font-variant-ligatures":{values:["normal","none","common-ligatures","no-common-ligatures","discretionary-ligatures","no-discretionary-ligatures","historical-ligatures","no-historical-ligatures","contextual","no-contextual"]},"font-variant-numeric":{values:["normal","lining-nums","oldstyle-nums","proportional-nums","tabular-nums","diagonal-fractions","stacked-fractions","ordinal","slashed-zero"]},"font-variation-settings":{values:["normal"]},"font-weight":{values:["normal","bold","bolder","lighter"]},"forced-color-adjust":{values:["auto","none","preserve-parent-color"]},"grid-auto-columns":{values:["auto","min-content","max-content"]},"grid-auto-flow":{values:["row","column"]},"grid-auto-rows":{values:["auto","min-content","max-content"]},"grid-column-end":{values:["auto"]},"grid-column-start":{values:["auto"]},"grid-row-end":{values:["auto"]},"grid-row-start":{values:["auto"]},"grid-template-areas":{values:["none"]},"grid-template-columns":{values:["none"]},"grid-template-rows":{values:["none"]},height:{values:["auto","fit-content","min-content","max-content"]},hyphens:{values:["none","manual","auto"]},"image-rendering":{values:["auto","optimizespeed","optimizequality","-webkit-optimize-contrast","pixelated"]},"inline-size":{values:["auto"]},isolation:{values:["auto","isolate"]},left:{values:["auto"]},"letter-spacing":{values:["normal"]},"lighting-color":{values:["currentcolor"]},"line-break":{values:["auto","loose","normal","strict","anywhere"]},"line-height":{values:["normal"]},"list-style-image":{values:["none"]},"list-style-position":{values:["outside","inside"]},"list-style-type":{values:["disc","circle","square","disclosure-open","disclosure-closed","decimal","none"]},"margin-block-end":{values:["auto"]},"margin-block-start":{values:["auto"]},"margin-bottom":{values:["auto"]},"margin-inline-end":{values:["auto"]},"margin-inline-start":{values:["auto"]},"margin-left":{values:["auto"]},"margin-right":{values:["auto"]},"margin-top":{values:["auto"]},"marker-end":{values:["none"]},"marker-mid":{values:["none"]},"marker-start":{values:["none"]},"mask-type":{values:["luminance","alpha"]},"math-shift":{values:["normal","compact"]},"math-style":{values:["normal","compact"]},"max-block-size":{values:["none"]},"max-height":{values:["none"]},"max-inline-size":{values:["none"]},"max-width":{values:["none"]},"mix-blend-mode":{values:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"]},"object-fit":{values:["fill","contain","cover","none","scale-down"]},"offset-anchor":{values:["auto"]},"offset-path":{values:["none"]},"offset-position":{values:["auto"]},"offset-rotate":{values:["auto","reverse"]},"origin-trial-test-property":{values:["normal","none"]},"outline-color":{values:["currentcolor"]},"outline-style":{values:["none","hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"outline-width":{values:["thin","medium","thick"]},"overflow-anchor":{values:["visible","none","auto"]},"overflow-wrap":{values:["normal","break-word","anywhere"]},"overflow-x":{values:["visible","hidden","scroll","auto","overlay","clip"]},"overflow-y":{values:["visible","hidden","scroll","auto","overlay","clip"]},"overscroll-behavior-x":{values:["auto","contain","none"]},"overscroll-behavior-y":{values:["auto","contain","none"]},page:{values:["auto"]},"paint-order":{values:["normal","fill","stroke","markers"]},perspective:{values:["none"]},"pointer-events":{values:["none","auto","stroke","fill","painted","visible","visiblestroke","visiblefill","visiblepainted","bounding-box","all"]},position:{values:["static","relative","absolute","fixed","sticky"]},quotes:{values:["auto","none"]},resize:{values:["none","both","horizontal","vertical","block","inline"]},right:{values:["auto"]},"row-gap":{values:["normal"]},rx:{values:["auto"]},ry:{values:["auto"]},"scroll-behavior":{values:["auto","smooth"]},"scroll-padding-block-end":{values:["auto"]},"scroll-padding-block-start":{values:["auto"]},"scroll-padding-bottom":{values:["auto"]},"scroll-padding-inline-end":{values:["auto"]},"scroll-padding-inline-start":{values:["auto"]},"scroll-padding-left":{values:["auto"]},"scroll-padding-right":{values:["auto"]},"scroll-padding-top":{values:["auto"]},"scroll-snap-align":{values:["none","start","end","center"]},"scroll-snap-stop":{values:["normal","always"]},"scroll-snap-type":{values:["none","x","y","block","inline","both","mandatory","proximity"]},"scrollbar-gutter":{values:["auto","stable","both-edges"]},"scrollbar-width":{values:["auto","thin","none"]},"shape-margin":{values:["none"]},"shape-outside":{values:["none"]},"shape-rendering":{values:["auto","optimizespeed","crispedges","geometricprecision"]},speak:{values:["none","normal","spell-out","digits","literal-punctuation","no-punctuation"]},"stop-color":{values:["currentcolor"]},"stroke-dasharray":{values:["none"]},"stroke-linecap":{values:["butt","round","square"]},"stroke-linejoin":{values:["miter","bevel","round"]},"table-layout":{values:["auto","fixed"]},"text-align":{values:["left","right","center","justify","-webkit-left","-webkit-right","-webkit-center","start","end"]},"text-align-last":{values:["auto","start","end","left","right","center","justify"]},"text-anchor":{values:["start","middle","end"]},"text-combine-upright":{values:["none","all"]},"text-decoration-color":{values:["currentcolor"]},"text-decoration-line":{values:["none","underline","overline","line-through","blink","spelling-error","grammar-error"]},"text-decoration-skip-ink":{values:["none","auto"]},"text-decoration-style":{values:["solid","double","dotted","dashed","wavy"]},"text-decoration-thickness":{values:["auto","from-font"]},"text-justify":{values:["auto","none","inter-word","distribute"]},"text-orientation":{values:["sideways","mixed","upright"]},"text-overflow":{values:["clip","ellipsis"]},"text-rendering":{values:["auto","optimizespeed","optimizelegibility","geometricprecision"]},"text-shadow":{values:["none"]},"text-size-adjust":{values:["none","auto"]},"text-transform":{values:["capitalize","uppercase","lowercase","none","math-auto"]},"text-underline-offset":{values:["auto"]},"text-underline-position":{values:["auto","from-font","under","left","right"]},top:{values:["auto"]},"touch-action":{values:["auto","none","pan-x","pan-left","pan-right","pan-y","pan-up","pan-down","pinch-zoom","manipulation"]},transform:{values:["none"]},"transform-box":{values:["fill-box","view-box"]},"transform-style":{values:["flat","preserve-3d"]},"transition-property":{values:["none"]},"transition-timing-function":{values:["linear","ease","ease-in","ease-out","ease-in-out","jump-both","jump-end","jump-none","jump-start","step-start","step-end"]},"unicode-bidi":{values:["normal","embed","bidi-override","isolate","plaintext","isolate-override"]},"user-select":{values:["auto","none","text","all"]},"vector-effect":{values:["none","non-scaling-stroke"]},"vertical-align":{values:["baseline","sub","super","text-top","text-bottom","middle"]},visibility:{values:["visible","hidden","collapse"]},"white-space":{values:["none","normal","pre","pre-wrap","pre-line","nowrap","-webkit-nowrap","break-spaces"]},width:{values:["auto","fit-content","min-content","max-content"]},"will-change":{values:["auto"]},"word-break":{values:["normal","break-all","keep-all","break-word"]},"word-spacing":{values:["normal"]},"writing-mode":{values:["horizontal-tb","vertical-rl","vertical-lr"]},"z-index":{values:["auto"]}},u=new Map([["-epub-caption-side","caption-side"],["-epub-text-combine","-webkit-text-combine"],["-epub-text-emphasis","-webkit-text-emphasis"],["-epub-text-emphasis-color","-webkit-text-emphasis-color"],["-epub-text-emphasis-style","-webkit-text-emphasis-style"],["-epub-text-orientation","-webkit-text-orientation"],["-epub-text-transform","text-transform"],["-epub-word-break","word-break"],["-epub-writing-mode","-webkit-writing-mode"],["-webkit-align-content","align-content"],["-webkit-align-items","align-items"],["-webkit-align-self","align-self"],["-webkit-animation","animation"],["-webkit-animation-delay","animation-delay"],["-webkit-animation-direction","animation-direction"],["-webkit-animation-duration","animation-duration"],["-webkit-animation-fill-mode","animation-fill-mode"],["-webkit-animation-iteration-count","animation-iteration-count"],["-webkit-animation-name","animation-name"],["-webkit-animation-play-state","animation-play-state"],["-webkit-animation-timing-function","animation-timing-function"],["-webkit-app-region","app-region"],["-webkit-appearance","appearance"],["-webkit-backface-visibility","backface-visibility"],["-webkit-background-clip","background-clip"],["-webkit-background-origin","background-origin"],["-webkit-background-size","background-size"],["-webkit-border-after","border-block-end"],["-webkit-border-after-color","border-block-end-color"],["-webkit-border-after-style","border-block-end-style"],["-webkit-border-after-width","border-block-end-width"],["-webkit-border-before","border-block-start"],["-webkit-border-before-color","border-block-start-color"],["-webkit-border-before-style","border-block-start-style"],["-webkit-border-before-width","border-block-start-width"],["-webkit-border-bottom-left-radius","border-bottom-left-radius"],["-webkit-border-bottom-right-radius","border-bottom-right-radius"],["-webkit-border-end","border-inline-end"],["-webkit-border-end-color","border-inline-end-color"],["-webkit-border-end-style","border-inline-end-style"],["-webkit-border-end-width","border-inline-end-width"],["-webkit-border-radius","border-radius"],["-webkit-border-start","border-inline-start"],["-webkit-border-start-color","border-inline-start-color"],["-webkit-border-start-style","border-inline-start-style"],["-webkit-border-start-width","border-inline-start-width"],["-webkit-border-top-left-radius","border-top-left-radius"],["-webkit-border-top-right-radius","border-top-right-radius"],["-webkit-box-shadow","box-shadow"],["-webkit-box-sizing","box-sizing"],["-webkit-clip-path","clip-path"],["-webkit-column-count","column-count"],["-webkit-column-gap","column-gap"],["-webkit-column-rule","column-rule"],["-webkit-column-rule-color","column-rule-color"],["-webkit-column-rule-style","column-rule-style"],["-webkit-column-rule-width","column-rule-width"],["-webkit-column-span","column-span"],["-webkit-column-width","column-width"],["-webkit-columns","columns"],["-webkit-filter","filter"],["-webkit-flex","flex"],["-webkit-flex-basis","flex-basis"],["-webkit-flex-direction","flex-direction"],["-webkit-flex-flow","flex-flow"],["-webkit-flex-grow","flex-grow"],["-webkit-flex-shrink","flex-shrink"],["-webkit-flex-wrap","flex-wrap"],["-webkit-font-feature-settings","font-feature-settings"],["-webkit-justify-content","justify-content"],["-webkit-logical-height","block-size"],["-webkit-logical-width","inline-size"],["-webkit-margin-after","margin-block-end"],["-webkit-margin-before","margin-block-start"],["-webkit-margin-end","margin-inline-end"],["-webkit-margin-start","margin-inline-start"],["-webkit-max-logical-height","max-block-size"],["-webkit-max-logical-width","max-inline-size"],["-webkit-min-logical-height","min-block-size"],["-webkit-min-logical-width","min-inline-size"],["-webkit-opacity","opacity"],["-webkit-order","order"],["-webkit-padding-after","padding-block-end"],["-webkit-padding-before","padding-block-start"],["-webkit-padding-end","padding-inline-end"],["-webkit-padding-start","padding-inline-start"],["-webkit-perspective","perspective"],["-webkit-perspective-origin","perspective-origin"],["-webkit-shape-image-threshold","shape-image-threshold"],["-webkit-shape-margin","shape-margin"],["-webkit-shape-outside","shape-outside"],["-webkit-text-size-adjust","text-size-adjust"],["-webkit-transform","transform"],["-webkit-transform-origin","transform-origin"],["-webkit-transform-style","transform-style"],["-webkit-transition","transition"],["-webkit-transition-delay","transition-delay"],["-webkit-transition-duration","transition-duration"],["-webkit-transition-property","transition-property"],["-webkit-transition-timing-function","transition-timing-function"],["-webkit-user-select","user-select"],["word-wrap","overflow-wrap"]]);class g{#t;#n;#r;#s;#i;#o;#a;#l;#d;#c;constructor(e,n){this.#t=[],this.#n=new Map,this.#r=new Map,this.#s=new Set,this.#i=new Set,this.#o=new Map,this.#a=n;for(let t=0;tCSS.supports(e,t))).sort(g.sortPrefixesToEnd).map((t=>`${e}: ${t}`));this.isSVGProperty(e)||this.#d.push(...t),this.#c.push(...t)}}static sortPrefixesToEnd(e,t){const n=e.startsWith("-webkit-"),r=t.startsWith("-webkit-");return n&&!r?1:!n&&r||et?1:0}allProperties(){return this.#t}nameValuePresets(e){return e?this.#c:this.#d}isSVGProperty(e){return e=e.toLowerCase(),this.#i.has(e)}getLonghands(e){return this.#n.get(e)||null}getShorthands(e){return this.#r.get(e)||null}isColorAwareProperty(e){return T.has(e.toLowerCase())||this.isCustomProperty(e.toLowerCase())}isFontFamilyProperty(e){return"font-family"===e.toLowerCase()}isAngleAwareProperty(e){const t=e.toLowerCase();return T.has(t)||R.has(t)}isGridAreaDefiningProperty(e){return"grid"===(e=e.toLowerCase())||"grid-template"===e||"grid-template-areas"===e}isLengthProperty(e){return"line-height"!==(e=e.toLowerCase())&&(S.has(e)||e.startsWith("margin")||e.startsWith("padding")||-1!==e.indexOf("width")||-1!==e.indexOf("height"))}isBezierAwareProperty(e){return e=e.toLowerCase(),w.has(e)||this.isCustomProperty(e)}isFontAwareProperty(e){return e=e.toLowerCase(),C.has(e)||this.isCustomProperty(e)}isCustomProperty(e){return e.startsWith("--")}isShadowProperty(e){return"box-shadow"===(e=e.toLowerCase())||"text-shadow"===e||"-webkit-box-shadow"===e}isStringProperty(e){return"content"===(e=e.toLowerCase())}canonicalPropertyName(e){if(this.isCustomProperty(e))return e;e=e.toLowerCase();const t=this.#a.get(e);if(t)return t;if(!e||e.length<9||"-"!==e.charAt(0))return e;const n=e.match(/(?:-webkit-)(.+)/);return n&&this.#l.has(n[1])?n[1]:e}isCSSPropertyName(e){return!!((e=e.toLowerCase()).startsWith("--")&&e.length>2||e.startsWith("-moz-")||e.startsWith("-ms-")||e.startsWith("-o-")||e.startsWith("-webkit-"))||this.#l.has(e)}isPropertyInherited(e){return(e=e.toLowerCase()).startsWith("--")||this.#s.has(this.canonicalPropertyName(e))||this.#s.has(e)}specificPropertyValues(e){const t=e.replace(/^-webkit-/,""),n=this.#o;let r=n.get(e)||n.get(t);if(!r){r=[];for(const t of P)CSS.supports(e,t)&&r.push(t);n.set(e,r)}return r}getPropertyValues(t){const n=["inherit","initial","revert","unset"];if(t=t.toLowerCase(),n.push(...this.specificPropertyValues(t)),this.isColorAwareProperty(t)){n.push("currentColor");for(const t of e.Color.Nicknames.keys())n.push(t)}return n.sort(g.sortPrefixesToEnd)}propertyUsageWeight(e){return x.get(e)||x.get(this.canonicalPropertyName(e))||0}getValuePreset(e,t){const n=k.get(e);let r=n?n.get(t):null;if(!r)return null;let s=r.length,i=r.length;return r&&(s=r.indexOf("|"),i=r.lastIndexOf("|"),i=s===i?i:i-1,r=r.replace(/\|/g,"")),{text:r,startColumn:s,endColumn:i}}}const m=/(var\(\s*--.*?\))/g,p=/(var\(*--[\w\d]+-([\w]+-[\w]+)\))/g,b=/((?:\[[\w\- ]+\]\s*)*(?:"[^"]+"|'[^']+'))[^'"\[]*\[?[^'"\[]*/;let f=null;function I(){if(!f){f=new g(c,u)}return f}const v=new Map([["linear-gradient","linear-gradient(|45deg, black, transparent|)"],["radial-gradient","radial-gradient(|black, transparent|)"],["repeating-linear-gradient","repeating-linear-gradient(|45deg, black, transparent 100px|)"],["repeating-radial-gradient","repeating-radial-gradient(|black, transparent 100px|)"],["url","url(||)"]]),y=new Map([["blur","blur(|1px|)"],["brightness","brightness(|0.5|)"],["contrast","contrast(|0.5|)"],["drop-shadow","drop-shadow(|2px 4px 6px black|)"],["grayscale","grayscale(|1|)"],["hue-rotate","hue-rotate(|45deg|)"],["invert","invert(|1|)"],["opacity","opacity(|0.5|)"],["saturate","saturate(|0.5|)"],["sepia","sepia(|1|)"],["url","url(||)"]]),k=new Map([["filter",y],["backdrop-filter",y],["background",v],["background-image",v],["-webkit-mask-image",v],["transform",new Map([["scale","scale(|1.5|)"],["scaleX","scaleX(|1.5|)"],["scaleY","scaleY(|1.5|)"],["scale3d","scale3d(|1.5, 1.5, 1.5|)"],["rotate","rotate(|45deg|)"],["rotateX","rotateX(|45deg|)"],["rotateY","rotateY(|45deg|)"],["rotateZ","rotateZ(|45deg|)"],["rotate3d","rotate3d(|1, 1, 1, 45deg|)"],["skew","skew(|10deg, 10deg|)"],["skewX","skewX(|10deg|)"],["skewY","skewY(|10deg|)"],["translate","translate(|10px, 10px|)"],["translateX","translateX(|10px|)"],["translateY","translateY(|10px|)"],["translateZ","translateZ(|10px|)"],["translate3d","translate3d(|10px, 10px, 10px|)"],["matrix","matrix(|1, 0, 0, 1, 0, 0|)"],["matrix3d","matrix3d(|1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1|)"],["perspective","perspective(|10px|)"]])]]),S=new Set(["background-position","border-spacing","bottom","font-size","height","left","letter-spacing","max-height","max-width","min-height","min-width","right","text-indent","top","width","word-spacing","grid-row-gap","grid-column-gap","row-gap"]),w=new Set(["animation","animation-timing-function","transition","transition-timing-function","-webkit-animation","-webkit-animation-timing-function","-webkit-transition","-webkit-transition-timing-function"]),C=new Set(["font-size","line-height","font-weight","font-family","letter-spacing"]),T=new Set(["accent-color","background","background-color","background-image","border","border-color","border-image","border-image-source","border-bottom","border-bottom-color","border-left","border-left-color","border-right","border-right-color","border-top","border-top-color","box-shadow","caret-color","color","column-rule","column-rule-color","content","fill","list-style-image","outline","outline-color","stroke","text-decoration-color","text-shadow","-webkit-border-after","-webkit-border-after-color","-webkit-border-before","-webkit-border-before-color","-webkit-border-end","-webkit-border-end-color","-webkit-border-start","-webkit-border-start-color","-webkit-box-reflect","-webkit-box-shadow","-webkit-column-rule-color","-webkit-mask","-webkit-mask-box-image","-webkit-mask-box-image-source","-webkit-mask-image","-webkit-tap-highlight-color","-webkit-text-decoration-color","-webkit-text-emphasis","-webkit-text-emphasis-color","-webkit-text-fill-color","-webkit-text-stroke","-webkit-text-stroke-color"]),R=new Set(["-webkit-border-image","transform","-webkit-transform","rotate","filter","-webkit-filter","backdrop-filter","offset","offset-rotate","font-style"]),M={"background-repeat":{values:["repeat","repeat-x","repeat-y","no-repeat","space","round"]},content:{values:["normal","close-quote","no-close-quote","no-open-quote","open-quote"]},"baseline-shift":{values:["baseline"]},"max-height":{values:["min-content","max-content","-webkit-fill-available","fit-content"]},color:{values:["black"]},"background-color":{values:["white"]},"box-shadow":{values:["inset"]},"text-shadow":{values:["0 0 black"]},"-webkit-writing-mode":{values:["horizontal-tb","vertical-rl","vertical-lr"]},"writing-mode":{values:["lr","rl","tb","lr-tb","rl-tb","tb-rl"]},"page-break-inside":{values:["avoid"]},cursor:{values:["-webkit-zoom-in","-webkit-zoom-out","-webkit-grab","-webkit-grabbing"]},"border-width":{values:["medium","thick","thin"]},"border-style":{values:["hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},size:{values:["a3","a4","a5","b4","b5","landscape","ledger","legal","letter","portrait"]},overflow:{values:["hidden","visible","overlay","scroll"]},"overscroll-behavior":{values:["contain"]},"text-rendering":{values:["optimizeSpeed","optimizeLegibility","geometricPrecision"]},"text-align":{values:["-webkit-auto","-webkit-match-parent"]},"clip-path":{values:["circle","ellipse","inset","polygon","url"]},"color-interpolation":{values:["sRGB","linearRGB"]},"word-wrap":{values:["normal","break-word"]},"font-weight":{values:["100","200","300","400","500","600","700","800","900"]},"-webkit-text-emphasis":{values:["circle","filled","open","dot","double-circle","triangle","sesame"]},"color-rendering":{values:["optimizeSpeed","optimizeQuality"]},"-webkit-text-combine":{values:["horizontal"]},"text-orientation":{values:["sideways-right"]},outline:{values:["inset","groove","ridge","outset","dotted","dashed","solid","double","medium","thick","thin"]},font:{values:["caption","icon","menu","message-box","small-caption","-webkit-mini-control","-webkit-small-control","-webkit-control","status-bar"]},"dominant-baseline":{values:["text-before-edge","text-after-edge","use-script","no-change","reset-size"]},"-webkit-text-emphasis-position":{values:["over","under"]},"alignment-baseline":{values:["before-edge","after-edge","text-before-edge","text-after-edge","hanging"]},"page-break-before":{values:["left","right","always","avoid"]},"border-image":{values:["repeat","stretch","space","round"]},"text-decoration":{values:["blink","line-through","overline","underline","wavy","double","solid","dashed","dotted"]},"font-family":{values:["serif","sans-serif","cursive","fantasy","monospace","system-ui","emoji","math","fangsong","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","-webkit-body"]},zoom:{values:["normal"]},"max-width":{values:["min-content","max-content","-webkit-fill-available","fit-content"]},"-webkit-font-smoothing":{values:["antialiased","subpixel-antialiased"]},border:{values:["hidden","inset","groove","ridge","outset","dotted","dashed","solid","double","medium","thick","thin"]},"font-variant":{values:["small-caps","normal","common-ligatures","no-common-ligatures","discretionary-ligatures","no-discretionary-ligatures","historical-ligatures","no-historical-ligatures","contextual","no-contextual","all-small-caps","petite-caps","all-petite-caps","unicase","titling-caps","lining-nums","oldstyle-nums","proportional-nums","tabular-nums","diagonal-fractions","stacked-fractions","ordinal","slashed-zero","jis78","jis83","jis90","jis04","simplified","traditional","full-width","proportional-width","ruby"]},"vertical-align":{values:["top","bottom","-webkit-baseline-middle"]},"page-break-after":{values:["left","right","always","avoid"]},"-webkit-text-emphasis-style":{values:["circle","filled","open","dot","double-circle","triangle","sesame"]},transform:{values:["scale","scaleX","scaleY","scale3d","rotate","rotateX","rotateY","rotateZ","rotate3d","skew","skewX","skewY","translate","translateX","translateY","translateZ","translate3d","matrix","matrix3d","perspective"]},"align-content":{values:["normal","baseline","space-between","space-around","space-evenly","stretch","center","start","end","flex-start","flex-end"]},"justify-content":{values:["normal","space-between","space-around","space-evenly","stretch","center","start","end","flex-start","flex-end","left","right"]},"place-content":{values:["normal","space-between","space-around","space-evenly","stretch","center","start","end","flex-start","flex-end","baseline"]},"align-items":{values:["normal","stretch","baseline","center","start","end","self-start","self-end","flex-start","flex-end"]},"justify-items":{values:["normal","stretch","baseline","center","start","end","self-start","self-end","flex-start","flex-end","left","right","legacy"]},"place-items":{values:["normal","stretch","baseline","center","start","end","self-start","self-end","flex-start","flex-end"]},"align-self":{values:["normal","stretch","baseline","center","start","end","self-start","self-end","flex-start","flex-end"]},"justify-self":{values:["normal","stretch","baseline","center","start","end","self-start","self-end","flex-start","flex-end","left","right"]},"place-self":{values:["normal","stretch","baseline","center","start","end","self-start","self-end","flex-start","flex-end"]},"perspective-origin":{values:["left","center","right","top","bottom"]},"transform-origin":{values:["left","center","right","top","bottom"]},"transition-timing-function":{values:["cubic-bezier","steps"]},"animation-timing-function":{values:["cubic-bezier","steps"]},"-webkit-backface-visibility":{values:["visible","hidden"]},"-webkit-column-break-after":{values:["always","avoid"]},"-webkit-column-break-before":{values:["always","avoid"]},"-webkit-column-break-inside":{values:["avoid"]},"-webkit-column-span":{values:["all"]},"-webkit-column-gap":{values:["normal"]},filter:{values:["url","blur","brightness","contrast","drop-shadow","grayscale","hue-rotate","invert","opacity","saturate","sepia"]},"backdrop-filter":{values:["url","blur","brightness","contrast","drop-shadow","grayscale","hue-rotate","invert","opacity","saturate","sepia"]},"mix-blend-mode":{values:["unset"]},"background-blend-mode":{values:["unset"]},"grid-template-columns":{values:["min-content","max-content"]},"grid-template-rows":{values:["min-content","max-content"]},"grid-auto-flow":{values:["dense"]},background:{values:["repeat","repeat-x","repeat-y","no-repeat","top","bottom","left","right","center","fixed","local","scroll","space","round","border-box","content-box","padding-box","linear-gradient","radial-gradient","repeating-linear-gradient","repeating-radial-gradient","url"]},"background-image":{values:["linear-gradient","radial-gradient","repeating-linear-gradient","repeating-radial-gradient","url"]},"background-position":{values:["top","bottom","left","right","center"]},"background-position-x":{values:["left","right","center"]},"background-position-y":{values:["top","bottom","center"]},"background-repeat-x":{values:["repeat","no-repeat"]},"background-repeat-y":{values:["repeat","no-repeat"]},"border-bottom":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"border-left":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"border-right":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"border-top":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"buffered-rendering":{values:["static","dynamic"]},"color-interpolation-filters":{values:["srgb","linearrgb"]},"column-rule":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"flex-flow":{values:["nowrap","row","row-reverse","column","column-reverse","wrap","wrap-reverse"]},height:{values:["-webkit-fill-available"]},"inline-size":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"list-style":{values:["outside","inside","disc","circle","square","decimal","decimal-leading-zero","arabic-indic","bengali","cambodian","khmer","devanagari","gujarati","gurmukhi","kannada","lao","malayalam","mongolian","myanmar","oriya","persian","urdu","telugu","tibetan","thai","lower-roman","upper-roman","lower-greek","lower-alpha","lower-latin","upper-alpha","upper-latin","cjk-earthly-branch","cjk-heavenly-stem","ethiopic-halehame","ethiopic-halehame-am","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","hangul","hangul-consonant","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","hebrew","armenian","lower-armenian","upper-armenian","georgian","cjk-ideographic","simp-chinese-formal","simp-chinese-informal","trad-chinese-formal","trad-chinese-informal","hiragana","katakana","hiragana-iroha","katakana-iroha"]},"max-block-size":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"max-inline-size":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"min-block-size":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"min-height":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"min-inline-size":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"min-width":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"object-position":{values:["top","bottom","left","right","center"]},"shape-outside":{values:["border-box","content-box","padding-box","margin-box"]},"-webkit-appearance":{values:["checkbox","radio","push-button","square-button","button","inner-spin-button","listbox","media-slider","media-sliderthumb","media-volume-slider","media-volume-sliderthumb","menulist","menulist-button","meter","progress-bar","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","searchfield","searchfield-cancel-button","textfield","textarea"]},"-webkit-border-after":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"-webkit-border-after-style":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"-webkit-border-after-width":{values:["medium","thick","thin"]},"-webkit-border-before":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"-webkit-border-before-style":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"-webkit-border-before-width":{values:["medium","thick","thin"]},"-webkit-border-end":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"-webkit-border-end-style":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"-webkit-border-end-width":{values:["medium","thick","thin"]},"-webkit-border-start":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double","medium","thick","thin"]},"-webkit-border-start-style":{values:["hidden","inset","groove","outset","ridge","dotted","dashed","solid","double"]},"-webkit-border-start-width":{values:["medium","thick","thin"]},"-webkit-logical-height":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"-webkit-logical-width":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"-webkit-margin-collapse":{values:["collapse","separate","discard"]},"-webkit-mask-box-image":{values:["repeat","stretch","space","round"]},"-webkit-mask-box-image-repeat":{values:["repeat","stretch","space","round"]},"-webkit-mask-clip":{values:["text","border","border-box","content","content-box","padding","padding-box"]},"-webkit-mask-composite":{values:["clear","copy","source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","xor","plus-lighter"]},"-webkit-mask-image":{values:["linear-gradient","radial-gradient","repeating-linear-gradient","repeating-radial-gradient","url"]},"-webkit-mask-origin":{values:["border","border-box","content","content-box","padding","padding-box"]},"-webkit-mask-position":{values:["top","bottom","left","right","center"]},"-webkit-mask-position-x":{values:["left","right","center"]},"-webkit-mask-position-y":{values:["top","bottom","center"]},"-webkit-mask-repeat":{values:["repeat","repeat-x","repeat-y","no-repeat","space","round"]},"-webkit-mask-size":{values:["contain","cover"]},"-webkit-max-logical-height":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"-webkit-max-logical-width":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"-webkit-min-logical-height":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"-webkit-min-logical-width":{values:["-webkit-fill-available","min-content","max-content","fit-content"]},"-webkit-perspective-origin-x":{values:["left","right","center"]},"-webkit-perspective-origin-y":{values:["top","bottom","center"]},"-webkit-text-decorations-in-effect":{values:["blink","line-through","overline","underline"]},"-webkit-text-stroke":{values:["medium","thick","thin"]},"-webkit-text-stroke-width":{values:["medium","thick","thin"]},"-webkit-transform-origin-x":{values:["left","right","center"]},"-webkit-transform-origin-y":{values:["top","bottom","center"]},width:{values:["-webkit-fill-available"]}},x=new Map([["align-content",57],["align-items",129],["align-self",55],["animation",175],["animation-delay",114],["animation-direction",113],["animation-duration",137],["animation-fill-mode",132],["animation-iteration-count",124],["animation-name",139],["animation-play-state",104],["animation-timing-function",141],["backface-visibility",123],["background",260],["background-attachment",119],["background-clip",165],["background-color",259],["background-image",246],["background-origin",107],["background-position",237],["background-position-x",108],["background-position-y",93],["background-repeat",234],["background-size",203],["border",263],["border-bottom",233],["border-bottom-color",190],["border-bottom-left-radius",186],["border-bottom-right-radius",185],["border-bottom-style",150],["border-bottom-width",179],["border-collapse",209],["border-color",226],["border-image",89],["border-image-outset",50],["border-image-repeat",49],["border-image-slice",58],["border-image-source",32],["border-image-width",52],["border-left",221],["border-left-color",174],["border-left-style",142],["border-left-width",172],["border-radius",224],["border-right",223],["border-right-color",182],["border-right-style",130],["border-right-width",178],["border-spacing",198],["border-style",206],["border-top",231],["border-top-color",192],["border-top-left-radius",187],["border-top-right-radius",189],["border-top-style",152],["border-top-width",180],["border-width",214],["bottom",227],["box-shadow",213],["box-sizing",216],["caption-side",96],["clear",229],["clip",173],["clip-rule",5],["color",256],["content",219],["counter-increment",111],["counter-reset",110],["cursor",250],["direction",176],["display",262],["empty-cells",99],["fill",140],["fill-opacity",82],["fill-rule",22],["filter",160],["flex",133],["flex-basis",66],["flex-direction",85],["flex-flow",94],["flex-grow",112],["flex-shrink",61],["flex-wrap",68],["float",252],["font",211],["font-family",254],["font-kerning",18],["font-size",264],["font-stretch",77],["font-style",220],["font-variant",161],["font-weight",257],["height",266],["image-rendering",90],["justify-content",127],["left",248],["letter-spacing",188],["line-height",244],["list-style",215],["list-style-image",145],["list-style-position",149],["list-style-type",199],["margin",267],["margin-bottom",241],["margin-left",243],["margin-right",238],["margin-top",253],["mask",20],["max-height",205],["max-width",225],["min-height",217],["min-width",218],["object-fit",33],["opacity",251],["order",117],["orphans",146],["outline",222],["outline-color",153],["outline-offset",147],["outline-style",151],["outline-width",148],["overflow",255],["overflow-wrap",105],["overflow-x",184],["overflow-y",196],["padding",265],["padding-bottom",230],["padding-left",235],["padding-right",232],["padding-top",240],["page",8],["page-break-after",120],["page-break-before",69],["page-break-inside",121],["perspective",92],["perspective-origin",103],["pointer-events",183],["position",261],["quotes",158],["resize",168],["right",245],["shape-rendering",38],["size",64],["speak",118],["src",170],["stop-color",42],["stop-opacity",31],["stroke",98],["stroke-dasharray",36],["stroke-dashoffset",3],["stroke-linecap",30],["stroke-linejoin",21],["stroke-miterlimit",12],["stroke-opacity",34],["stroke-width",87],["table-layout",171],["tab-size",46],["text-align",260],["text-anchor",35],["text-decoration",247],["text-indent",207],["text-overflow",204],["text-rendering",155],["text-shadow",208],["text-transform",202],["top",258],["touch-action",80],["transform",181],["transform-origin",162],["transform-style",86],["transition",193],["transition-delay",134],["transition-duration",135],["transition-property",131],["transition-timing-function",122],["unicode-bidi",156],["unicode-range",136],["vertical-align",236],["visibility",242],["-webkit-appearance",191],["-webkit-backface-visibility",154],["-webkit-background-clip",164],["-webkit-background-origin",40],["-webkit-background-size",163],["-webkit-border-end",9],["-webkit-border-horizontal-spacing",81],["-webkit-border-image",75],["-webkit-border-radius",212],["-webkit-border-start",10],["-webkit-border-start-color",16],["-webkit-border-start-width",13],["-webkit-border-vertical-spacing",43],["-webkit-box-align",101],["-webkit-box-direction",51],["-webkit-box-flex",128],["-webkit-box-ordinal-group",91],["-webkit-box-orient",144],["-webkit-box-pack",106],["-webkit-box-reflect",39],["-webkit-box-shadow",210],["-webkit-column-break-inside",60],["-webkit-column-count",84],["-webkit-column-gap",76],["-webkit-column-rule",25],["-webkit-column-rule-color",23],["-webkit-columns",44],["-webkit-column-span",29],["-webkit-column-width",47],["-webkit-filter",159],["-webkit-font-feature-settings",59],["-webkit-font-smoothing",177],["-webkit-highlight",1],["-webkit-line-break",45],["-webkit-line-clamp",126],["-webkit-margin-after",67],["-webkit-margin-before",70],["-webkit-margin-collapse",14],["-webkit-margin-end",65],["-webkit-margin-start",100],["-webkit-margin-top-collapse",78],["-webkit-mask",19],["-webkit-mask-box-image",72],["-webkit-mask-image",88],["-webkit-mask-position",54],["-webkit-mask-repeat",63],["-webkit-mask-size",79],["-webkit-padding-after",15],["-webkit-padding-before",28],["-webkit-padding-end",48],["-webkit-padding-start",73],["-webkit-print-color-adjust",83],["-webkit-rtl-ordering",7],["-webkit-tap-highlight-color",169],["-webkit-text-emphasis-color",11],["-webkit-text-fill-color",71],["-webkit-text-security",17],["-webkit-text-stroke",56],["-webkit-text-stroke-color",37],["-webkit-text-stroke-width",53],["-webkit-user-drag",95],["-webkit-user-modify",62],["-webkit-user-select",194],["-webkit-writing-mode",4],["white-space",228],["widows",115],["width",268],["will-change",74],["word-break",166],["word-spacing",157],["word-wrap",197],["writing-mode",41],["z-index",239],["zoom",200]]),P=["auto","none"];var L=Object.freeze({__proto__:null,CSSMetadata:g,VariableRegex:m,CustomVariableRegex:p,URLRegex:/url\(\s*('.+?'|".+?"|[^)]+)\s*\)/g,GridAreaRowRegex:b,cssMetadata:I});class E{callFrame;callUID;self;total;id;parent;children;depth;deoptReason;constructor(e){this.callFrame=e,this.callUID=`${e.functionName}@${e.scriptId}:${e.lineNumber}:${e.columnNumber}`,this.self=0,this.total=0,this.id=0,this.parent=null,this.children=[]}get functionName(){return this.callFrame.functionName}get scriptId(){return this.callFrame.scriptId}get url(){return this.callFrame.url}get lineNumber(){return this.callFrame.lineNumber}get columnNumber(){return this.callFrame.columnNumber}}class A{#e;root;total;maxDepth;constructor(e){this.#e=e||null}initialize(e){this.root=e,this.assignDepthsAndParents(),this.total=this.calculateTotals(this.root)}assignDepthsAndParents(){const e=this.root;e.depth=-1,e.parent=null,this.maxDepth=0;const t=[e];for(;t.length;){const e=t.pop(),n=e.depth+1;n>this.maxDepth&&(this.maxDepth=n);const r=e.children;for(const s of r)s.depth=n,s.parent=e,s.children.length&&t.push(s)}}calculateTotals(e){const t=[e],n=[];for(;t.length;){const e=t.pop();e.total=e.self,n.push(e),t.push(...e.children)}for(;n.length>1;){const e=n.pop();e.parent&&(e.parent.total+=e.total)}return e.total}target(){return this.#e}}var O=Object.freeze({__proto__:null,ProfileNode:E,ProfileTreeModel:A});class N{#h;#u;#g;#m;#p;#b;#f;constructor(e,t,n,r){this.#h=e,this.#u=t,this.#g=n,this.#m={},this.#p=0,this.#b=r||"Medium",this.#f=null}static fromProtocolCookie(e){const t=new N(e.name,e.value,null,e.priority);return t.addAttribute("domain",e.domain),t.addAttribute("path",e.path),e.expires&&t.addAttribute("expires",1e3*e.expires),e.httpOnly&&t.addAttribute("httpOnly"),e.secure&&t.addAttribute("secure"),e.sameSite&&t.addAttribute("sameSite",e.sameSite),e.sameParty&&t.addAttribute("sameParty"),"sourcePort"in e&&t.addAttribute("sourcePort",e.sourcePort),"sourceScheme"in e&&t.addAttribute("sourceScheme",e.sourceScheme),"partitionKey"in e&&t.addAttribute("partitionKey",e.partitionKey),"partitionKeyOpaque"in e&&t.addAttribute("partitionKey",""),t.setSize(e.size),t}key(){return(this.domain()||"-")+" "+this.name()+" "+(this.path()||"-")}name(){return this.#h}value(){return this.#u}type(){return this.#g}httpOnly(){return"httponly"in this.#m}secure(){return"secure"in this.#m}sameSite(){return this.#m.samesite}sameParty(){return"sameparty"in this.#m}partitionKey(){return this.#m.partitionkey}partitionKeyOpaque(){return""===this.#m.partitionkey}priority(){return this.#b}session(){return!("expires"in this.#m||"max-age"in this.#m)}path(){return this.#m.path}domain(){return this.#m.domain}expires(){return this.#m.expires}maxAge(){return this.#m["max-age"]}sourcePort(){return this.#m.sourceport}sourceScheme(){return this.#m.sourcescheme}size(){return this.#p}url(){if(!this.domain()||!this.path())return null;let e="";const t=this.sourcePort();return t&&80!==t&&443!==t&&(e=`:${this.sourcePort()}`),(this.secure()?"https://":"http://")+this.domain()+e+this.path()}setSize(e){this.#p=e}expiresDate(e){return this.maxAge()?new Date(e.getTime()+1e3*this.maxAge()):this.expires()?new Date(this.expires()):null}addAttribute(e,t){const n=e.toLowerCase();if("priority"===n)this.#b=t;else this.#m[n]=t}setCookieLine(e){this.#f=e}getCookieLine(){return this.#f}matchesSecurityOrigin(e){const t=new URL(e).hostname;return N.isDomainMatch(this.domain(),t)}static isDomainMatch(e,t){return t===e||!(!e||"."!==e[0])&&(e.substr(1)===t||t.length>e.length&&t.endsWith(e))}}var F,D;!function(e){e[e.Request=0]="Request",e[e.Response=1]="Response"}(F||(F={})),function(e){e.Name="name",e.Value="value",e.Size="size",e.Domain="domain",e.Path="path",e.Expires="expires",e.HttpOnly="httpOnly",e.Secure="secure",e.SameSite="sameSite",e.SameParty="sameParty",e.SourceScheme="sourceScheme",e.SourcePort="sourcePort",e.Priority="priority",e.PartitionKey="partitionKey"}(D||(D={}));var B=Object.freeze({__proto__:null,Cookie:N,get Type(){return F},get Attributes(){return D},CookieReference:class{#I;#v;#y;#k;constructor(e,t,n,r){this.#I=e,this.#v=t,this.#y=n,this.#k=r}domain(){return this.#v}contextUrl(){return this.#k}}});class U{#S;#w;#C;#T;#R;#M;#x;constructor(e){e&&(this.#S=e.toLowerCase().replace(/^\./,"")),this.#w=[],this.#T=0}static parseSetCookie(e,t){return new U(t).parseSetCookie(e)}cookies(){return this.#w}parseSetCookie(e){if(!this.initialize(e))return null;for(let e=this.extractKeyValue();e;e=this.extractKeyValue())this.#R?this.#R.addAttribute(e.key,e.value):this.addCookie(e,F.Response),this.advanceAndCheckCookieDelimiter()&&this.flushCookie();return this.flushCookie(),this.#w}initialize(e){return this.#C=e,"string"==typeof e&&(this.#w=[],this.#R=null,this.#M="",this.#T=this.#C.length,!0)}flushCookie(){this.#R&&(this.#R.setSize(this.#T-this.#C.length-this.#x),this.#R.setCookieLine(this.#M.replace("\n",""))),this.#R=null,this.#M=""}extractKeyValue(){if(!this.#C||!this.#C.length)return null;const e=/^[ \t]*([^=;]+)[ \t]*(?:=[ \t]*([^;\n]*))?/.exec(this.#C);if(!e)return console.error("Failed parsing cookie header before: "+this.#C),null;const t=new H(e[1]&&e[1].trim(),e[2]&&e[2].trim(),this.#T-this.#C.length);return this.#M+=e[0],this.#C=this.#C.slice(e[0].length),t}advanceAndCheckCookieDelimiter(){if(!this.#C)return!1;const e=/^\s*[\n;]\s*/.exec(this.#C);return!!e&&(this.#M+=e[0],this.#C=this.#C.slice(e[0].length),null!==e[0].match("\n"))}addCookie(e,t){this.#R&&this.#R.setSize(e.position-this.#x),this.#R="string"==typeof e.value?new N(e.key,e.value,t):new N("",e.key,t),this.#S&&this.#R.addAttribute("domain",this.#S),this.#x=e.position,this.#w.push(this.#R)}}class H{key;value;position;constructor(e,t,n){this.key=e,this.value=t,this.position=n}}var q,_,z=Object.freeze({__proto__:null,CookieParser:U});class j extends i.InspectorBackend.TargetBase{#P;#h;#L;#E;#A;#g;#O;#N;#F;#D;#B;#U;constructor(e,t,n,r,s,i,o,a,l){switch(super(r===q.Node,s,i,a),this.#P=e,this.#h=n,this.#L="",this.#E="",this.#A=0,r){case q.Frame:this.#A=_.Browser|_.Storage|_.DOM|_.JS|_.Log|_.Network|_.Target|_.Tracing|_.Emulation|_.Input|_.Inspector|_.Audits|_.WebAuthn|_.IO|_.Media,s||(this.#A|=_.DeviceEmulation|_.ScreenCapture|_.Security|_.ServiceWorker);break;case q.ServiceWorker:this.#A=_.JS|_.Log|_.Network|_.Target|_.Inspector|_.IO,s||(this.#A|=_.Browser);break;case q.SharedWorker:this.#A=_.JS|_.Log|_.Network|_.Target|_.IO|_.Media|_.Inspector;break;case q.Worker:this.#A=_.JS|_.Log|_.Network|_.Target|_.IO|_.Media;break;case q.Node:this.#A=_.JS;break;case q.AuctionWorklet:this.#A=_.JS|_.EventBreakpoints;break;case q.Browser:this.#A=_.Target|_.IO}this.#g=r,this.#O=s,this.#N=t,this.#F=new Map,this.#D=o,this.#B=l}createModels(e){this.#U=!0;const t=Array.from(l.registeredModels.entries());for(const[e,n]of t)n.early&&this.model(e);for(const[n,r]of t)(r.autostart||e.has(n))&&this.model(n);this.#U=!1}id(){return this.#N}name(){return this.#h||this.#E}type(){return this.#g}markAsNodeJSForTest(){super.markAsNodeJSForTest(),this.#g=q.Node}targetManager(){return this.#P}hasAllCapabilities(e){return(this.#A&e)===e}decorateLabel(e){return this.#g===q.Worker||this.#g===q.ServiceWorker?"⚙ "+e:e}parentTarget(){return this.#O}dispose(e){super.dispose(e),this.#P.removeTarget(this);for(const e of this.#F.values())e.dispose()}model(e){if(!this.#F.get(e)){const t=l.registeredModels.get(e);if(void 0===t)throw"Model class is not registered @"+(new Error).stack;if((this.#A&t.capabilities)===t.capabilities){const t=new e(this);this.#F.set(e,t),this.#U||this.#P.modelAdded(this,e,t)}}return this.#F.get(e)||null}models(){return this.#F}inspectedURL(){return this.#L}setInspectedURL(t){this.#L=t;const n=e.ParsedURL.ParsedURL.fromString(t);this.#E=n?n.lastPathComponentWithFragment():"#"+this.#N,this.parentTarget()||s.InspectorFrontendHost.InspectorFrontendHostInstance.inspectedURLChanged(t||""),this.#P.onInspectedURLChange(this),this.#h||this.#P.onNameChange(this)}async suspend(e){this.#D||(this.#D=!0,await Promise.all(Array.from(this.models().values(),(t=>t.preSuspendModel(e)))),await Promise.all(Array.from(this.models().values(),(t=>t.suspendModel(e)))))}async resume(){this.#D&&(this.#D=!1,await Promise.all(Array.from(this.models().values(),(e=>e.resumeModel()))),await Promise.all(Array.from(this.models().values(),(e=>e.postResumeModel()))))}suspended(){return this.#D}updateTargetInfo(e){this.#B=e}targetInfo(){return this.#B}}!function(e){e.Frame="frame",e.ServiceWorker="service-worker",e.Worker="worker",e.SharedWorker="shared-worker",e.Node="node",e.Browser="browser",e.AuctionWorklet="auction-worklet"}(q||(q={})),function(e){e[e.Browser=1]="Browser",e[e.DOM=2]="DOM",e[e.JS=4]="JS",e[e.Log=8]="Log",e[e.Network=16]="Network",e[e.Target=32]="Target",e[e.ScreenCapture=64]="ScreenCapture",e[e.Tracing=128]="Tracing",e[e.Emulation=256]="Emulation",e[e.Security=512]="Security",e[e.Input=1024]="Input",e[e.Inspector=2048]="Inspector",e[e.DeviceEmulation=4096]="DeviceEmulation",e[e.Storage=8192]="Storage",e[e.ServiceWorker=16384]="ServiceWorker",e[e.Audits=32768]="Audits",e[e.WebAuthn=65536]="WebAuthn",e[e.IO=131072]="IO",e[e.Media=262144]="Media",e[e.EventBreakpoints=524288]="EventBreakpoints",e[e.None=0]="None"}(_||(_={}));var W=Object.freeze({__proto__:null,Target:j,get Type(){return q},get Capability(){return _}});let V;class G extends e.ObjectWrapper.ObjectWrapper{#H;#q;#_;#z;#D;#j;constructor(){super(),this.#H=new Set,this.#q=new Set,this.#_=new t.MapUtilities.Multimap,this.#z=new t.MapUtilities.Multimap,this.#D=!1,this.#j=null}static instance({forceNew:e}={forceNew:!1}){return V&&!e||(V=new G),V}static removeInstance(){V=void 0}onInspectedURLChange(e){this.dispatchEventToListeners(Q.InspectedURLChanged,e)}onNameChange(e){this.dispatchEventToListeners(Q.NameChanged,e)}async suspendAllTargets(e){if(this.#D)return;this.#D=!0,this.dispatchEventToListeners(Q.SuspendStateChanged);const t=Array.from(this.#H.values(),(t=>t.suspend(e)));await Promise.all(t)}async resumeAllTargets(){if(!this.#D)return;this.#D=!1,this.dispatchEventToListeners(Q.SuspendStateChanged);const e=Array.from(this.#H.values(),(e=>e.resume()));await Promise.all(e)}allTargetsSuspended(){return this.#D}models(e){const t=[];for(const n of this.#H){const r=n.model(e);r&&t.push(r)}return t}inspectedURL(){const e=this.mainTarget();return e?e.inspectedURL():""}observeModels(e,t){const n=this.models(e);this.#z.set(e,t);for(const e of n)t.modelAdded(e)}unobserveModels(e,t){this.#z.delete(e,t)}modelAdded(e,t,n){for(const e of this.#z.get(t).values())e.modelAdded(n)}modelRemoved(e,t,n){for(const e of this.#z.get(t).values())e.modelRemoved(n)}addModelListener(e,t,n,r){for(const s of this.models(e))s.addEventListener(t,n,r);this.#_.set(t,{modelClass:e,thisObject:r,listener:n})}removeModelListener(e,t,n,r){if(this.#_.has(t)){for(const s of this.models(e))s.removeEventListener(t,n,r);for(const s of this.#_.get(t))s.modelClass===e&&s.listener===n&&s.thisObject===r&&this.#_.delete(t,s)}}observeTargets(e){if(this.#q.has(e))throw new Error("Observer can only be registered once");for(const t of this.#H)e.targetAdded(t);this.#q.add(e)}unobserveTargets(e){this.#q.delete(e)}createTarget(e,t,n,r,s,i,o,a){const l=new j(this,e,t,n,r,s||"",this.#D,o||null,a);i&&l.pageAgent().invoke_waitForDebugger(),l.createModels(new Set(this.#z.keysArray())),this.#H.add(l);for(const e of[...this.#q])e.targetAdded(l);for(const[e,t]of l.models().entries())this.modelAdded(l,e,t);for(const e of this.#_.keysArray())for(const t of this.#_.get(e)){const n=l.model(t.modelClass);n&&n.addEventListener(e,t.listener,t.thisObject)}return l}removeTarget(e){if(this.#H.has(e)){this.#H.delete(e);for(const t of e.models().keys()){const n=e.models().get(t);this.modelRemoved(e,t,n)}for(const t of[...this.#q])t.targetRemoved(e);for(const t of this.#_.keysArray())for(const n of this.#_.get(t)){const r=e.model(n.modelClass);r&&r.removeEventListener(t,n.listener,n.thisObject)}}}targets(){return[...this.#H]}targetById(e){return this.targets().find((t=>t.id()===e))||null}mainTarget(){return this.#H.size?this.#H.values().next().value:null}browserTarget(){return this.#j}async maybeAttachInitialTarget(){if(!Boolean(o.Runtime.Runtime.queryParam("browserConnection")))return!1;this.#j||(this.#j=new j(this,"main","browser",q.Browser,null,"",!1,null,void 0),this.#j.createModels(new Set(this.#z.keysArray())));const e=await s.InspectorFrontendHost.InspectorFrontendHostInstance.initialTargetId();return this.#j.targetAgent().invoke_autoAttachRelated({targetId:e,waitForDebuggerOnStart:!0}),!0}clearAllTargetsForTest(){this.#H.clear()}}var Q;!function(e){e.AvailableTargetsChanged="AvailableTargetsChanged",e.InspectedURLChanged="InspectedURLChanged",e.NameChanged="NameChanged",e.SuspendStateChanged="SuspendStateChanged"}(Q||(Q={}));var $=Object.freeze({__proto__:null,TargetManager:G,get Events(){return Q},Observer:class{targetAdded(e){}targetRemoved(e){}},SDKModelObserver:class{modelAdded(e){}modelRemoved(e){}}});const X={noContentForWebSocket:"Content for WebSockets is currently not supported",noContentForRedirect:"No content available because this request was redirected",noContentForPreflight:"No content available for preflight request",noThrottling:"No throttling",offline:"Offline",slowG:"Slow 3G",fastG:"Fast 3G",requestWasBlockedByDevtoolsS:'Request was blocked by DevTools: "{PH1}"',crossoriginReadBlockingCorb:"Cross-Origin Read Blocking (CORB) blocked cross-origin response {PH1} with MIME type {PH2}. See https://www.chromestatus.com/feature/5629709824032768 for more details.",sFailedLoadingSS:'{PH1} failed loading: {PH2} "{PH3}".',sFinishedLoadingSS:'{PH1} finished loading: {PH2} "{PH3}".'},K=r.i18n.registerUIStrings("core/sdk/NetworkManager.ts",X),J=r.i18n.getLocalizedString.bind(void 0,K),Y=r.i18n.getLazilyComputedLocalizedString.bind(void 0,K),Z=new WeakMap,ee=new Map([["2g","cellular2g"],["3g","cellular3g"],["4g","cellular4g"],["bluetooth","bluetooth"],["wifi","wifi"],["wimax","wimax"]]);class te extends l{dispatcher;#W;#V;constructor(t){super(t),this.dispatcher=new le(this),this.#W=t.networkAgent(),t.registerNetworkDispatcher(this.dispatcher),e.Settings.Settings.instance().moduleSetting("cacheDisabled").get()&&this.#W.invoke_setCacheDisabled({cacheDisabled:!0}),this.#W.invoke_enable({maxPostDataSize:ae}),this.#W.invoke_setAttachDebugStack({enabled:!0}),this.#V=e.Settings.Settings.instance().createSetting("bypassServiceWorker",!1),this.#V.get()&&this.bypassServiceWorkerChanged(),this.#V.addChangeListener(this.bypassServiceWorkerChanged,this),e.Settings.Settings.instance().moduleSetting("cacheDisabled").addChangeListener(this.cacheDisabledSettingChanged,this)}static forRequest(e){return Z.get(e)||null}static canReplayRequest(t){return Boolean(Z.get(t))&&Boolean(t.backendRequestId())&&!t.isRedirect()&&t.resourceType()===e.ResourceType.resourceTypes.XHR}static replayRequest(e){const t=Z.get(e),n=e.backendRequestId();t&&n&&!e.isRedirect()&&t.#W.invoke_replayXHR({requestId:n})}static async searchInRequest(e,t,n,r){const s=te.forRequest(e),i=e.backendRequestId();if(!s||!i||e.isRedirect())return[];return(await s.#W.invoke_searchInResponseBody({requestId:i,query:t,caseSensitive:n,isRegex:r})).result||[]}static async requestContentData(t){if(t.resourceType()===e.ResourceType.resourceTypes.WebSocket)return{error:J(X.noContentForWebSocket),content:null,encoded:!1};if(t.finished||await t.once(we.FinishedLoading),t.isRedirect())return{error:J(X.noContentForRedirect),content:null,encoded:!1};if(t.isPreflightRequest())return{error:J(X.noContentForPreflight),content:null,encoded:!1};const n=te.forRequest(t);if(!n)return{error:"No network manager for request",content:null,encoded:!1};const r=t.backendRequestId();if(!r)return{error:"No backend request id for request",content:null,encoded:!1};const s=await n.#W.invoke_getResponseBody({requestId:r}),i=s.getError()||null;return{error:i,content:i?null:s.body,encoded:s.base64Encoded}}static async requestPostData(e){const t=te.forRequest(e);if(!t)return console.error("No network manager for request"),null;const n=e.backendRequestId();if(!n)return console.error("No backend request id for request"),null;try{const{postData:e}=await t.#W.invoke_getRequestPostData({requestId:n});return e}catch(e){return e.message}}static connectionType(e){if(!e.download&&!e.upload)return"none";const t="function"==typeof e.title?e.title().toLowerCase():e.title.toLowerCase();for(const[e,n]of ee)if(t.includes(e))return n;return"other"}static lowercaseHeaders(e){const t={};for(const n in e)t[n.toLowerCase()]=e[n];return t}requestForURL(e){return this.dispatcher.requestForURL(e)}cacheDisabledSettingChanged({data:e}){this.#W.invoke_setCacheDisabled({cacheDisabled:e})}dispose(){e.Settings.Settings.instance().moduleSetting("cacheDisabled").removeChangeListener(this.cacheDisabledSettingChanged,this)}bypassServiceWorkerChanged(){this.#W.invoke_setBypassServiceWorker({bypass:this.#V.get()})}async getSecurityIsolationStatus(e){const t=await this.#W.invoke_getSecurityIsolationStatus({frameId:e??void 0});return t.getError()?null:t.status}async enableReportingApi(e=!0){return this.#W.invoke_enableReportingApi({enable:e})}async loadNetworkResource(e,t,n){const r=await this.#W.invoke_loadNetworkResource({frameId:e??void 0,url:t,options:n});if(r.getError())throw new Error(r.getError());return r.resource}clearRequests(){this.dispatcher.clearRequests()}}var ne;!function(e){e.RequestStarted="RequestStarted",e.RequestUpdated="RequestUpdated",e.RequestFinished="RequestFinished",e.RequestUpdateDropped="RequestUpdateDropped",e.ResponseReceived="ResponseReceived",e.MessageGenerated="MessageGenerated",e.RequestRedirected="RequestRedirected",e.LoadingFinished="LoadingFinished",e.ReportingApiReportAdded="ReportingApiReportAdded",e.ReportingApiReportUpdated="ReportingApiReportUpdated",e.ReportingApiEndpointsChangedForOrigin="ReportingApiEndpointsChangedForOrigin"}(ne||(ne={}));const re={title:Y(X.noThrottling),i18nTitleKey:X.noThrottling,download:-1,upload:-1,latency:0},se={title:Y(X.offline),i18nTitleKey:X.offline,download:0,upload:0,latency:0},ie={title:Y(X.slowG),i18nTitleKey:X.slowG,download:5e4,upload:5e4,latency:2e3},oe={title:Y(X.fastG),i18nTitleKey:X.fastG,download:18e4,upload:84375,latency:562.5},ae=65536;class le{#G;#Q;#$;#X;#K;constructor(e){this.#G=e,this.#Q=new Map,this.#$=new Map,this.#X=new Map,this.#K=new Map}headersMapToHeadersArray(e){const t=[];for(const n in e){const r=e[n].split("\n");for(let e=0;e=0&&t.setTransferSize(n.encodedDataLength),n.requestHeaders&&!t.hasExtraRequestInfo()&&(t.setRequestHeaders(this.headersMapToHeadersArray(n.requestHeaders)),t.setRequestHeadersText(n.requestHeadersText||"")),t.connectionReused=n.connectionReused,t.connectionId=String(n.connectionId),n.remoteIPAddress&&t.setRemoteAddress(n.remoteIPAddress,n.remotePort||-1),n.fromServiceWorker&&(t.fetchedViaServiceWorker=!0),n.fromDiskCache&&t.setFromDiskCache(),n.fromPrefetchCache&&t.setFromPrefetchCache(),n.cacheStorageCacheName&&t.setResponseCacheStorageCacheName(n.cacheStorageCacheName),n.responseTime&&t.setResponseRetrievalTime(new Date(n.responseTime)),t.timing=n.timing,t.protocol=n.protocol||"",n.serviceWorkerResponseSource&&t.setServiceWorkerResponseSource(n.serviceWorkerResponseSource),t.setSecurityState(n.securityState),n.securityDetails&&t.setSecurityDetails(n.securityDetails);const r=e.ResourceType.ResourceType.fromMimeTypeOverride(t.mimeType);r&&t.setResourceType(r)}requestForId(e){return this.#Q.get(e)||null}requestForURL(e){return this.#$.get(e)||null}resourceChangedPriority({requestId:e,newPriority:t}){const n=this.#Q.get(e);n&&n.setPriority(t)}signedExchangeReceived({requestId:t,info:n}){let r=this.#Q.get(t);(r||(r=this.#$.get(n.outerResponse.url),r))&&(r.setSignedExchangeInfo(n),r.setResourceType(e.ResourceType.resourceTypes.SignedExchange),this.updateNetworkRequestWithResponse(r,n.outerResponse),this.updateNetworkRequest(r),this.#G.dispatchEventToListeners(ne.ResponseReceived,{request:r,response:n.outerResponse}))}requestWillBeSent({requestId:t,loaderId:n,documentURL:r,request:s,timestamp:i,wallTime:o,initiator:a,redirectResponse:l,type:d,frameId:c}){let h=this.#Q.get(t);if(h){if(!l)return;h.signedExchangeInfo()||this.responseReceived({requestId:t,loaderId:n,timestamp:i,type:d||"Other",response:l,hasExtraInfo:!1,frameId:c}),h=this.appendRedirect(t,i,s.url),this.#G.dispatchEventToListeners(ne.RequestRedirected,h)}else h=Re.create(t,s.url,r,c??null,n,a),Z.set(h,this.#G);h.hasNetworkData=!0,this.updateNetworkRequestWithRequest(h,s),h.setIssueTime(i,o),h.setResourceType(d?e.ResourceType.resourceTypes[d]:e.ResourceType.resourceTypes.Other),s.trustTokenParams&&h.setTrustTokenParams(s.trustTokenParams);const u=this.#K.get(t);u&&(h.setTrustTokenOperationDoneEvent(u),this.#K.delete(t)),this.getExtraInfoBuilder(t).addRequest(h),this.startNetworkRequest(h,s)}requestServedFromCache({requestId:e}){const t=this.#Q.get(e);t&&t.setFromMemoryCache()}responseReceived({requestId:t,loaderId:n,timestamp:r,type:s,response:i,frameId:o}){const a=this.#Q.get(t),l=te.lowercaseHeaders(i.headers);if(a)a.responseReceivedTime=r,a.setResourceType(e.ResourceType.resourceTypes[s]),this.updateNetworkRequestWithResponse(a,i),this.updateNetworkRequest(a),this.#G.dispatchEventToListeners(ne.ResponseReceived,{request:a,response:i});else{const e=l["last-modified"],t={url:i.url,frameId:o??null,loaderId:n,resourceType:s,mimeType:i.mimeType,lastModified:e?new Date(e):null};this.#G.dispatchEventToListeners(ne.RequestUpdateDropped,t)}}dataReceived({requestId:e,timestamp:t,dataLength:n,encodedDataLength:r}){let s=this.#Q.get(e);s||(s=this.maybeAdoptMainResourceRequest(e)),s&&(s.resourceSize+=n,-1!==r&&s.increaseTransferSize(r),s.endTime=t,this.updateNetworkRequest(s))}loadingFinished({requestId:e,timestamp:t,encodedDataLength:n,shouldReportCorbBlocking:r}){let s=this.#Q.get(e);s||(s=this.maybeAdoptMainResourceRequest(e)),s&&(this.getExtraInfoBuilder(e).finished(),this.finishNetworkRequest(s,t,n,r),this.#G.dispatchEventToListeners(ne.LoadingFinished,s))}loadingFailed({requestId:t,timestamp:n,type:r,errorText:s,canceled:i,blockedReason:o,corsErrorStatus:a}){const l=this.#Q.get(t);if(l){if(l.failed=!0,l.setResourceType(e.ResourceType.resourceTypes[r]),l.canceled=Boolean(i),o&&(l.setBlockedReason(o),"inspector"===o)){const e=J(X.requestWasBlockedByDevtoolsS,{PH1:l.url()});this.#G.dispatchEventToListeners(ne.MessageGenerated,{message:e,requestId:t,warning:!0})}a&&l.setCorsErrorStatus(a),l.localizedFailDescription=s,this.getExtraInfoBuilder(t).finished(),this.finishNetworkRequest(l,n,-1)}}webSocketCreated({requestId:t,url:n,initiator:r}){const s=Re.createForWebSocket(t,n,r);Z.set(s,this.#G),s.setResourceType(e.ResourceType.resourceTypes.WebSocket),this.startNetworkRequest(s,null)}webSocketWillSendHandshakeRequest({requestId:e,timestamp:t,wallTime:n,request:r}){const s=this.#Q.get(e);s&&(s.requestMethod="GET",s.setRequestHeaders(this.headersMapToHeadersArray(r.headers)),s.setIssueTime(t,n),this.updateNetworkRequest(s))}webSocketHandshakeResponseReceived({requestId:e,timestamp:t,response:n}){const r=this.#Q.get(e);r&&(r.statusCode=n.status,r.statusText=n.statusText,r.responseHeaders=this.headersMapToHeadersArray(n.headers),r.responseHeadersText=n.headersText||"",n.requestHeaders&&r.setRequestHeaders(this.headersMapToHeadersArray(n.requestHeaders)),n.requestHeadersText&&r.setRequestHeadersText(n.requestHeadersText),r.responseReceivedTime=t,r.protocol="websocket",this.updateNetworkRequest(r))}webSocketFrameReceived({requestId:e,timestamp:t,response:n}){const r=this.#Q.get(e);r&&(r.addProtocolFrame(n,t,!1),r.responseReceivedTime=t,this.updateNetworkRequest(r))}webSocketFrameSent({requestId:e,timestamp:t,response:n}){const r=this.#Q.get(e);r&&(r.addProtocolFrame(n,t,!0),r.responseReceivedTime=t,this.updateNetworkRequest(r))}webSocketFrameError({requestId:e,timestamp:t,errorMessage:n}){const r=this.#Q.get(e);r&&(r.addProtocolFrameError(n,t),r.responseReceivedTime=t,this.updateNetworkRequest(r))}webSocketClosed({requestId:e,timestamp:t}){const n=this.#Q.get(e);n&&this.finishNetworkRequest(n,t,-1)}eventSourceMessageReceived({requestId:e,timestamp:t,eventName:n,eventId:r,data:s}){const i=this.#Q.get(e);i&&i.addEventSourceMessage(t,n,r,s)}requestIntercepted({interceptionId:e,request:t,frameId:n,resourceType:r,isNavigationRequest:s,isDownload:i,redirectUrl:o,authChallenge:a,responseErrorReason:l,responseStatusCode:d,responseHeaders:c,requestId:h}){ce.instance().requestIntercepted(new he(this.#G.target().networkAgent(),e,t,n,r,s,i,o,a,l,d,c,h))}requestWillBeSentExtraInfo({requestId:e,associatedCookies:t,headers:n,clientSecurityState:r,connectTiming:s}){const i=[],o=[];for(const{blockedReasons:e,cookie:n}of t)0===e.length?o.push(N.fromProtocolCookie(n)):i.push({blockedReasons:e,cookie:N.fromProtocolCookie(n)});const a={blockedRequestCookies:i,includedRequestCookies:o,requestHeaders:this.headersMapToHeadersArray(n),clientSecurityState:r,connectTiming:s};this.getExtraInfoBuilder(e).addRequestExtraInfo(a)}responseReceivedExtraInfo({requestId:e,blockedCookies:t,headers:n,headersText:r,resourceIPAddressSpace:s,statusCode:i}){const o={blockedResponseCookies:t.map((e=>({blockedReasons:e.blockedReasons,cookieLine:e.cookieLine,cookie:e.cookie?N.fromProtocolCookie(e.cookie):null}))),responseHeaders:this.headersMapToHeadersArray(n),responseHeadersText:r,resourceIPAddressSpace:s,statusCode:i};this.getExtraInfoBuilder(e).addResponseExtraInfo(o)}getExtraInfoBuilder(e){let t;return this.#X.has(e)?t=this.#X.get(e):(t=new ue,this.#X.set(e,t)),t}appendRedirect(e,t,n){const r=this.#Q.get(e);if(!r)throw new Error(`Could not find original network request for ${e}`);let s=0;for(let e=r.redirectSource();e;e=e.redirectSource())s++;r.markAsRedirect(s),this.finishNetworkRequest(r,t,-1);const i=Re.create(e,n,r.documentURL,r.frameId,r.loaderId,r.initiator());return Z.set(i,this.#G),i.setRedirectSource(r),r.setRedirectDestination(i),i}maybeAdoptMainResourceRequest(e){const t=ce.instance().inflightMainResourceRequests.get(e);if(!t)return null;const n=te.forRequest(t).dispatcher;return n.#Q.delete(e),n.#$.delete(t.url()),this.#Q.set(e,t),this.#$.set(t.url(),t),Z.set(t,this.#G),t}startNetworkRequest(e,t){this.#Q.set(e.requestId(),e),this.#$.set(e.url(),e),e.loaderId===e.requestId()&&ce.instance().inflightMainResourceRequests.set(e.requestId(),e),this.#G.dispatchEventToListeners(ne.RequestStarted,{request:e,originalRequest:t})}updateNetworkRequest(e){this.#G.dispatchEventToListeners(ne.RequestUpdated,e)}finishNetworkRequest(t,n,r,s){if(t.endTime=n,t.finished=!0,r>=0){const e=t.redirectSource();e&&e.signedExchangeInfo()?(t.setTransferSize(0),e.setTransferSize(r),this.updateNetworkRequest(e)):t.setTransferSize(r)}if(this.#G.dispatchEventToListeners(ne.RequestFinished,t),ce.instance().inflightMainResourceRequests.delete(t.requestId()),s){const e=J(X.crossoriginReadBlockingCorb,{PH1:t.url(),PH2:t.mimeType});this.#G.dispatchEventToListeners(ne.MessageGenerated,{message:e,requestId:t.requestId(),warning:!0})}if(e.Settings.Settings.instance().moduleSetting("monitoringXHREnabled").get()&&t.resourceType().category()===e.ResourceType.resourceCategories.XHR){let e;const n=t.failed||t.hasErrorStatusCode();e=J(n?X.sFailedLoadingSS:X.sFinishedLoadingSS,{PH1:t.resourceType().title(),PH2:t.requestMethod,PH3:t.url()}),this.#G.dispatchEventToListeners(ne.MessageGenerated,{message:e,requestId:t.requestId(),warning:!1})}}clearRequests(){this.#Q.clear(),this.#$.clear(),this.#X.clear()}webTransportCreated({transportId:t,url:n,timestamp:r,initiator:s}){const i=Re.createForWebSocket(t,n,s);i.hasNetworkData=!0,Z.set(i,this.#G),i.setResourceType(e.ResourceType.resourceTypes.WebTransport),i.setIssueTime(r,0),this.startNetworkRequest(i,null)}webTransportConnectionEstablished({transportId:e,timestamp:t}){const n=this.#Q.get(e);n&&(n.responseReceivedTime=t,n.endTime=t+.001,this.updateNetworkRequest(n))}webTransportClosed({transportId:e,timestamp:t}){const n=this.#Q.get(e);n&&(n.endTime=t,this.finishNetworkRequest(n,t,0))}trustTokenOperationDone(e){const t=this.#Q.get(e.requestId);t?t.setTrustTokenOperationDoneEvent(e):this.#K.set(e.requestId,e)}subresourceWebBundleMetadataReceived({requestId:e,urls:t}){const n=this.getExtraInfoBuilder(e);n.setWebBundleInfo({resourceUrls:t});const r=n.finalRequest();r&&this.updateNetworkRequest(r)}subresourceWebBundleMetadataError({requestId:e,errorMessage:t}){const n=this.getExtraInfoBuilder(e);n.setWebBundleInfo({errorMessage:t});const r=n.finalRequest();r&&this.updateNetworkRequest(r)}subresourceWebBundleInnerResponseParsed({innerRequestId:e,bundleRequestId:t}){const n=this.getExtraInfoBuilder(e);n.setWebBundleInnerRequestInfo({bundleRequestId:t});const r=n.finalRequest();r&&this.updateNetworkRequest(r)}subresourceWebBundleInnerResponseError({innerRequestId:e,errorMessage:t}){const n=this.getExtraInfoBuilder(e);n.setWebBundleInnerRequestInfo({errorMessage:t});const r=n.finalRequest();r&&this.updateNetworkRequest(r)}reportingApiReportAdded(e){this.#G.dispatchEventToListeners(ne.ReportingApiReportAdded,e.report)}reportingApiReportUpdated(e){this.#G.dispatchEventToListeners(ne.ReportingApiReportUpdated,e.report)}reportingApiEndpointsChangedForOrigin(e){this.#G.dispatchEventToListeners(ne.ReportingApiEndpointsChangedForOrigin,e)}createNetworkRequest(e,t,n,r,s,i){const o=Re.create(e,r,s,t,n,i);return Z.set(o,this.#G),o}}let de;class ce extends e.ObjectWrapper.ObjectWrapper{#J;#Y;#Z;#ee;inflightMainResourceRequests;#te;#ne;#re;#se;#ie;#oe;#ae;#le;constructor(){super(),this.#J="",this.#Y=null,this.#Z=null,this.#ee=new Set,this.inflightMainResourceRequests=new Map,this.#te=re,this.#ne=null,this.#re=e.Settings.Settings.instance().moduleSetting("requestBlockingEnabled"),this.#se=e.Settings.Settings.instance().createSetting("networkBlockedPatterns",[]),this.#ie=[],this.updateBlockedPatterns(),this.#oe=new t.MapUtilities.Multimap,G.instance().observeModels(te,this)}static instance(e={forceNew:null}){const{forceNew:t}=e;return de&&!t||(de=new ce),de}static getChromeVersion(){const e=navigator.userAgent.match(/(?:^|\W)(?:Chrome|HeadlessChrome)\/(\S+)/);return e&&e.length>1?e[1]:""}static patchUserAgentWithChromeVersion(e){const n=ce.getChromeVersion();if(n.length>0){const r=n.split(".",1)[0]+".0.100.0";return t.StringUtilities.sprintf(e,n,r)}return e}static patchUserAgentMetadataWithChromeVersion(e){if(!e.brands)return;const n=ce.getChromeVersion();if(0===n.length)return;const r=n.split(".",1)[0];for(const n of e.brands)n.version.includes("%s")&&(n.version=t.StringUtilities.sprintf(n.version,r));e.fullVersion&&e.fullVersion.includes("%s")&&(e.fullVersion=t.StringUtilities.sprintf(e.fullVersion,n))}modelAdded(e){const t=e.target().networkAgent();this.#ae&&t.invoke_setExtraHTTPHeaders({headers:this.#ae}),this.currentUserAgent()&&t.invoke_setUserAgentOverride({userAgent:this.currentUserAgent(),userAgentMetadata:this.#Y||void 0}),this.#ie.length&&t.invoke_setBlockedURLs({urls:this.#ie}),this.isIntercepting()&&t.invoke_setRequestInterception({patterns:this.#oe.valuesArray()}),null===this.#Z?t.invoke_clearAcceptedEncodingsOverride():t.invoke_setAcceptedEncodings({encodings:this.#Z}),this.#ee.add(t),this.isThrottling()&&this.updateNetworkConditions(t)}modelRemoved(e){for(const t of this.inflightMainResourceRequests){te.forRequest(t[1])===e&&this.inflightMainResourceRequests.delete(t[0])}this.#ee.delete(e.target().networkAgent())}isThrottling(){return this.#te.download>=0||this.#te.upload>=0||this.#te.latency>0}isOffline(){return!this.#te.download&&!this.#te.upload}setNetworkConditions(e){this.#te=e;for(const e of this.#ee)this.updateNetworkConditions(e);this.dispatchEventToListeners(ce.Events.ConditionsChanged)}networkConditions(){return this.#te}updateNetworkConditions(e){const t=this.#te;this.isThrottling()?e.invoke_emulateNetworkConditions({offline:this.isOffline(),latency:t.latency,downloadThroughput:t.download<0?0:t.download,uploadThroughput:t.upload<0?0:t.upload,connectionType:te.connectionType(t)}):e.invoke_emulateNetworkConditions({offline:!1,latency:0,downloadThroughput:0,uploadThroughput:0})}setExtraHTTPHeaders(e){this.#ae=e;for(const e of this.#ee)e.invoke_setExtraHTTPHeaders({headers:this.#ae})}currentUserAgent(){return this.#le?this.#le:this.#J}updateUserAgentOverride(){const e=this.currentUserAgent();for(const t of this.#ee)t.invoke_setUserAgentOverride({userAgent:e,userAgentMetadata:this.#Y||void 0})}setUserAgentOverride(e,t){const n=this.#J!==e;this.#J=e,this.#le?this.#Y=null:(this.#Y=t,this.updateUserAgentOverride()),n&&this.dispatchEventToListeners(ce.Events.UserAgentChanged)}userAgentOverride(){return this.#J}setCustomUserAgentOverride(e,t=null){this.#le=e,this.#Y=t,this.updateUserAgentOverride()}setCustomAcceptedEncodingsOverride(e){this.#Z=e,this.updateAcceptedEncodingsOverride(),this.dispatchEventToListeners(ce.Events.AcceptedEncodingsChanged)}clearCustomAcceptedEncodingsOverride(){this.#Z=null,this.updateAcceptedEncodingsOverride(),this.dispatchEventToListeners(ce.Events.AcceptedEncodingsChanged)}isAcceptedEncodingOverrideSet(){return null!==this.#Z}updateAcceptedEncodingsOverride(){const e=this.#Z;for(const t of this.#ee)null===e?t.invoke_clearAcceptedEncodingsOverride():t.invoke_setAcceptedEncodings({encodings:e})}blockedPatterns(){return this.#se.get().slice()}blockingEnabled(){return this.#re.get()}isBlocking(){return Boolean(this.#ie.length)}setBlockedPatterns(e){this.#se.set(e),this.updateBlockedPatterns(),this.dispatchEventToListeners(ce.Events.BlockedPatternsChanged)}setBlockingEnabled(e){this.#re.get()!==e&&(this.#re.set(e),this.updateBlockedPatterns(),this.dispatchEventToListeners(ce.Events.BlockedPatternsChanged))}updateBlockedPatterns(){const e=[];if(this.#re.get())for(const t of this.#se.get())t.enabled&&e.push(t.url);if(e.length||this.#ie.length){this.#ie=e;for(const e of this.#ee)e.invoke_setBlockedURLs({urls:this.#ie})}}isIntercepting(){return Boolean(this.#oe.size)}setInterceptionHandlerForPatterns(e,t){this.#oe.deleteAll(t);for(const n of e)this.#oe.set(t,n);return this.updateInterceptionPatternsOnNextTick()}updateInterceptionPatternsOnNextTick(){return this.#ne||(this.#ne=Promise.resolve().then(this.updateInterceptionPatterns.bind(this))),this.#ne}async updateInterceptionPatterns(){e.Settings.Settings.instance().moduleSetting("cacheDisabled").get()||e.Settings.Settings.instance().moduleSetting("cacheDisabled").set(!0),this.#ne=null;const t=[];for(const e of this.#ee)t.push(e.invoke_setRequestInterception({patterns:this.#oe.valuesArray()}));this.dispatchEventToListeners(ce.Events.InterceptorsChanged),await Promise.all(t)}async requestIntercepted(e){for(const t of this.#oe.keysArray())if(await t(e),e.hasResponded())return;e.hasResponded()||e.continueRequestWithoutChange()}clearBrowserCache(){for(const e of this.#ee)e.invoke_clearBrowserCache()}clearBrowserCookies(){for(const e of this.#ee)e.invoke_clearBrowserCookies()}async getCertificate(e){const t=G.instance().mainTarget();if(!t)return[];const n=await t.networkAgent().invoke_getCertificate({origin:e});return n?n.tableNames:[]}async loadResource(t){const n={},r=this.currentUserAgent();return r&&(n["User-Agent"]=r),e.Settings.Settings.instance().moduleSetting("cacheDisabled").get()&&(n["Cache-Control"]="no-cache"),new Promise((e=>s.ResourceLoader.load(t,n,((t,n,r,s)=>{e({success:t,content:r,errorDescription:s})}))))}}!function(e){let t;!function(e){e.BlockedPatternsChanged="BlockedPatternsChanged",e.ConditionsChanged="ConditionsChanged",e.UserAgentChanged="UserAgentChanged",e.InterceptorsChanged="InterceptorsChanged",e.AcceptedEncodingsChanged="AcceptedEncodingsChanged"}(t=e.Events||(e.Events={}))}(ce||(ce={}));class he{#W;#de;#ce;request;frameId;resourceType;isNavigationRequest;isDownload;redirectUrl;authChallenge;responseErrorReason;responseStatusCode;responseHeaders;requestId;constructor(e,t,n,r,s,i,o,a,l,d,c,h,u){this.#W=e,this.#de=t,this.#ce=!1,this.request=n,this.frameId=r,this.resourceType=s,this.isNavigationRequest=i,this.isDownload=Boolean(o),this.redirectUrl=a,this.authChallenge=l,this.responseErrorReason=d,this.responseStatusCode=c,this.responseHeaders=h,this.requestId=u}hasResponded(){return this.#ce}async continueRequestWithContent(e){this.#ce=!0;const t=["HTTP/1.1 200 OK","Date: "+(new Date).toUTCString(),"Server: Chrome Devtools Request Interceptor","Connection: closed","Content-Length: "+e.size,"Content-Type: "+e.type||"text/x-unknown"],n=await async function(e){const t=new FileReader,n=new Promise((e=>{t.onloadend=e}));if(t.readAsDataURL(e),await n,t.error)return console.error("Could not convert blob to base64.",t.error),"";const r=t.result;if(null==r||"string"!=typeof r)return console.error("Could not convert blob to base64."),"";return r.substring(r.indexOf(",")+1)}(new Blob([t.join("\r\n"),"\r\n\r\n",e]));this.#W.invoke_continueInterceptedRequest({interceptionId:this.#de,rawResponse:n})}continueRequestWithoutChange(){console.assert(!this.#ce),this.#ce=!0,this.#W.invoke_continueInterceptedRequest({interceptionId:this.#de})}continueRequestWithError(e){console.assert(!this.#ce),this.#ce=!0,this.#W.invoke_continueInterceptedRequest({interceptionId:this.#de,errorReason:e})}async responseBody(){const e=await this.#W.invoke_getResponseBodyForInterception({interceptionId:this.#de}),t=e.getError()||null;return{error:t,content:t?null:e.body,encoded:e.base64Encoded}}}class ue{#he;#ue;#ge;#me;#pe;#be;#fe;constructor(){this.#he=[],this.#ue=[],this.#ge=[],this.#me=!1,this.#pe=!1,this.#be=null,this.#fe=null}addRequest(e){this.#he.push(e),this.sync(this.#he.length-1)}addRequestExtraInfo(e){this.#pe=!0,this.#ue.push(e),this.sync(this.#ue.length-1)}addResponseExtraInfo(e){this.#ge.push(e),this.sync(this.#ge.length-1)}setWebBundleInfo(e){this.#be=e,this.updateFinalRequest()}setWebBundleInnerRequestInfo(e){this.#fe=e,this.updateFinalRequest()}finished(){this.#me=!0,this.updateFinalRequest()}sync(e){const t=this.#he[e];if(!t)return;const n=this.#ue[e];n&&(t.addExtraRequestInfo(n),this.#ue[e]=null);const r=this.#ge[e];r&&(t.addExtraResponseInfo(r),this.#ge[e]=null)}finalRequest(){return this.#me&&this.#he[this.#he.length-1]||null}updateFinalRequest(){if(!this.#me)return;const e=this.finalRequest();e?.setWebBundleInfo(this.#be),e?.setWebBundleInnerRequestInfo(this.#fe)}}l.register(te,{capabilities:_.Network,autostart:!0});var ge=Object.freeze({__proto__:null,NetworkManager:te,get Events(){return ne},NoThrottlingConditions:re,OfflineConditions:se,Slow3GConditions:ie,Fast3GConditions:oe,NetworkDispatcher:le,get MultitargetNetworkManager(){return ce},InterceptedRequest:he,ConditionsSerializer:class{stringify(e){const t=e;return JSON.stringify({...t,title:"function"==typeof t.title?t.title():t.title})}parse(e){const t=JSON.parse(e);return{...t,title:t.i18nTitleKey?Y(t.i18nTitleKey):t.title}}},networkConditionsEqual:function(e,t){const n="function"==typeof e.title?e.title():e.title,r="function"==typeof t.title?t.title():t.title;return t.download===e.download&&t.upload===e.upload&&t.latency===e.latency&&r===n}});const me={deprecatedSyntaxFoundPleaseUse:"Deprecated syntax found. Please use: ;dur=;desc=",duplicateParameterSIgnored:'Duplicate parameter "{PH1}" ignored.',noValueFoundForParameterS:'No value found for parameter "{PH1}".',unrecognizedParameterS:'Unrecognized parameter "{PH1}".',extraneousTrailingCharacters:"Extraneous trailing characters.",unableToParseSValueS:'Unable to parse "{PH1}" value "{PH2}".'},pe=r.i18n.registerUIStrings("core/sdk/ServerTiming.ts",me),be=r.i18n.getLocalizedString.bind(void 0,pe);class fe{metric;value;description;constructor(e,t,n){this.metric=e,this.value=t,this.description=n}static parseHeaders(e){const n=e.filter((e=>"server-timing"===e.name.toLowerCase()));if(!n.length)return null;const r=n.reduce(((e,t)=>{const n=this.createFromHeaderValue(t.value);return e.push(...n.map((function(e){return new fe(e.name,e.hasOwnProperty("dur")?e.dur:null,e.hasOwnProperty("desc")?e.desc:"")}))),e}),[]);return r.sort(((e,n)=>t.StringUtilities.compare(e.metric.toLowerCase(),n.metric.toLowerCase()))),r}static createFromHeaderValue(e){function t(){e=e.replace(/^\s*/,"")}function n(n){return console.assert(1===n.length),t(),e.charAt(0)===n&&(e=e.substring(1),!0)}function r(){const t=/^(?:\s*)([\w!#$%&'*+\-.^`|~]+)(?:\s*)(.*)/.exec(e);return t?(e=t[2],t[1]):null}function s(){return t(),'"'===e.charAt(0)?function(){console.assert('"'===e.charAt(0)),e=e.substring(1);let t="";for(;e.length;){const n=/^([^"\\]*)(.*)/.exec(e);if(!n)return null;if(t+=n[1],'"'===n[2].charAt(0))return e=n[2].substring(1),t;console.assert("\\"===n[2].charAt(0)),t+=n[2].charAt(1),e=n[2].substring(2)}return null}():r()}function i(){const t=/([,;].*)/.exec(e);t&&(e=t[1])}const o=[];let a;for(;null!==(a=r());){const t={name:a};for("="===e.charAt(0)&&this.showWarning(be(me.deprecatedSyntaxFoundPleaseUse));n(";");){let e;if(null===(e=r()))continue;e=e.toLowerCase();const o=this.getParserForParameter(e);let a=null;if(n("=")&&(a=s(),i()),o){if(t.hasOwnProperty(e)){this.showWarning(be(me.duplicateParameterSIgnored,{PH1:e}));continue}null===a&&this.showWarning(be(me.noValueFoundForParameterS,{PH1:e})),o.call(this,t,a)}else this.showWarning(be(me.unrecognizedParameterS,{PH1:e}))}if(o.push(t),!n(","))break}return e.length&&this.showWarning(be(me.extraneousTrailingCharacters)),o}static getParserForParameter(e){switch(e){case"dur":{function t(t,n){if(t.dur=0,null!==n){const r=parseFloat(n);if(isNaN(r))return void fe.showWarning(be(me.unableToParseSValueS,{PH1:e,PH2:n}));t.dur=r}}return t}case"desc":{function e(e,t){e.desc=t||""}return e}default:return null}}static showWarning(t){e.Console.Console.instance().warn(`ServerTiming: ${t}`)}}var Ie=Object.freeze({__proto__:null,ServerTiming:fe});const ve={binary:"(binary)",secureOnly:'This cookie was blocked because it had the "`Secure`" attribute and the connection was not secure.',notOnPath:"This cookie was blocked because its path was not an exact match for or a superdirectory of the request url's path.",domainMismatch:"This cookie was blocked because neither did the request URL's domain exactly match the cookie's domain, nor was the request URL's domain a subdomain of the cookie's Domain attribute value.",sameSiteStrict:'This cookie was blocked because it had the "`SameSite=Strict`" attribute and the request was made from a different site. This includes top-level navigation requests initiated by other sites.',sameSiteLax:'This cookie was blocked because it had the "`SameSite=Lax`" attribute and the request was made from a different site and was not initiated by a top-level navigation.',sameSiteUnspecifiedTreatedAsLax:'This cookie didn\'t specify a "`SameSite`" attribute when it was stored and was defaulted to "SameSite=Lax," and was blocked because the request was made from a different site and was not initiated by a top-level navigation. The cookie had to have been set with "`SameSite=None`" to enable cross-site usage.',sameSiteNoneInsecure:'This cookie was blocked because it had the "`SameSite=None`" attribute but was not marked "Secure". Cookies without SameSite restrictions must be marked "Secure" and sent over a secure connection.',userPreferences:"This cookie was blocked due to user preferences.",unknownError:"An unknown error was encountered when trying to send this cookie.",schemefulSameSiteStrict:'This cookie was blocked because it had the "`SameSite=Strict`" attribute but the request was cross-site. This includes top-level navigation requests initiated by other sites. This request is considered cross-site because the URL has a different scheme than the current site.',schemefulSameSiteLax:'This cookie was blocked because it had the "`SameSite=Lax`" attribute but the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site.',schemefulSameSiteUnspecifiedTreatedAsLax:'This cookie didn\'t specify a "`SameSite`" attribute when it was stored, was defaulted to "`SameSite=Lax"`, and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site.',samePartyFromCrossPartyContext:"This cookie was blocked because it had the \"`SameParty`\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set.",nameValuePairExceedsMaxSize:"This cookie was blocked because it was too large. The combined size of the name and value must be less than or equal to 4096 characters.",thisSetcookieWasBlockedDueToUser:"This attempt to set a cookie via a `Set-Cookie` header was blocked due to user preferences.",thisSetcookieHadInvalidSyntax:"This `Set-Cookie` header had invalid syntax.",theSchemeOfThisConnectionIsNot:"The scheme of this connection is not allowed to store cookies.",anUnknownErrorWasEncounteredWhenTrying:"An unknown error was encountered when trying to store this cookie.",thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax:'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "{PH1}" attribute but came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site.',thisSetcookieDidntSpecifyASamesite:'This `Set-Cookie` header didn\'t specify a "`SameSite`" attribute, was defaulted to "`SameSite=Lax"`, and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site.',thisSetcookieWasBlockedBecauseItHadTheSameparty:"This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the \"`SameParty`\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set.",thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute:'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "`SameParty`" attribute but also had other conflicting attributes. Chrome requires cookies that use the "`SameParty`" attribute to also have the "Secure" attribute, and to not be restricted to "`SameSite=Strict`".',blockedReasonSecureOnly:'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "Secure" attribute but was not received over a secure connection.',blockedReasonSameSiteStrictLax:'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "{PH1}" attribute but came from a cross-site response which was not the response to a top-level navigation.',blockedReasonSameSiteUnspecifiedTreatedAsLax:'This `Set-Cookie` header didn\'t specify a "`SameSite`" attribute and was defaulted to "`SameSite=Lax,`" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The `Set-Cookie` had to have been set with "`SameSite=None`" to enable cross-site usage.',blockedReasonSameSiteNoneInsecure:'This attempt to set a cookie via a `Set-Cookie` header was blocked because it had the "`SameSite=None`" attribute but did not have the "Secure" attribute, which is required in order to use "`SameSite=None`".',blockedReasonOverwriteSecure:"This attempt to set a cookie via a `Set-Cookie` header was blocked because it was not sent over a secure connection and would have overwritten a cookie with the Secure attribute.",blockedReasonInvalidDomain:"This attempt to set a cookie via a `Set-Cookie` header was blocked because its Domain attribute was invalid with regards to the current host url.",blockedReasonInvalidPrefix:'This attempt to set a cookie via a `Set-Cookie` header was blocked because it used the "`__Secure-`" or "`__Host-`" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in `https://tools.ietf.org/html/draft-west-cookie-prefixes-05`.',thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize:"This attempt to set a cookie via a `Set-Cookie` header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters.",setcookieHeaderIsIgnoredIn:"Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters."},ye=r.i18n.registerUIStrings("core/sdk/NetworkRequest.ts",ve),ke=r.i18n.getLocalizedString.bind(void 0,ye);var Se,we,Ce,Te;!function(e){e.HTML="text/html",e.XML="text/xml",e.PLAIN="text/plain",e.XHTML="application/xhtml+xml",e.SVG="image/svg+xml",e.CSS="text/css",e.XSL="text/xsl",e.VTT="text/vtt",e.PDF="application/pdf",e.EVENTSTREAM="text/event-stream"}(Se||(Se={}));class Re extends e.ObjectWrapper.ObjectWrapper{#Ie;#ve;#ye;#ke;#Se;#we;#Ce;#Te;#Re;#Me;#xe;#Pe;#Le;#Ee;#Ae;#Oe;statusCode;statusText;requestMethod;requestTime;protocol;mixedContentType;#Ne;#Fe;#De;#Be;#Ue;#He;#qe;#_e;#ze;#je;#We;#Ve;#Ge;#Qe;#$e;#Xe;#Ke;#Je;connectionId;connectionReused;hasNetworkData;#Ye;#Ze;#et;#tt;#nt;#rt;#st;localizedFailDescription;#it;#ot;#at;#me;#lt;#dt;#ct;#ht;#ut;#h;#gt;#mt;#pt;#bt;#ft;#It;#vt;#yt;#kt;#St;#wt;#Ct;#Tt;#Rt;#Mt;#xt;#Pt;#Lt;#Et;#At;#Ot;#Nt;#Ft;constructor(t,n,r,s,i,o,a){super(),this.#Ie=t,this.#ve=n,this.setUrl(r),this.#ye=s,this.#ke=i,this.#Se=o,this.#we=a,this.#Ce=null,this.#Te=null,this.#Re=null,this.#Me=!1,this.#xe=null,this.#Pe=-1,this.#Le=-1,this.#Ee=-1,this.#Ae=void 0,this.#Oe=void 0,this.statusCode=0,this.statusText="",this.requestMethod="",this.requestTime=0,this.protocol="",this.mixedContentType="none",this.#Ne=null,this.#Fe=null,this.#De=null,this.#Be=null,this.#Ue=null,this.#He=e.ResourceType.resourceTypes.Other,this.#qe=null,this.#_e=[],this.#ze=[],this.#je={},this.#We="",this.#Ve=[],this.#Ge={},this.#Qe="",this.#$e="Unknown",this.#Xe=null,this.#Ke="unknown",this.#Je=null,this.connectionId="0",this.connectionReused=!1,this.hasNetworkData=!1,this.#Ye=null,this.#Ze=Promise.resolve(null),this.#et=!1,this.#tt=!1,this.#nt=[],this.#rt=[],this.#st=[],this.localizedFailDescription=null,this.#Ft=null}static create(e,t,n,r,s,i){return new Re(e,e,t,n,r,s,i)}static createForWebSocket(e,t,n){return new Re(e,e,t,"",null,null,n||null)}static createWithoutBackendRequest(e,t,n,r){return new Re(e,void 0,t,n,null,null,r)}identityCompare(e){const t=this.requestId(),n=e.requestId();return t>n?1:te&&(this.#ot=e)),this.dispatchEventToListeners(we.TimingChanged,this)}get duration(){return-1===this.#Ee||-1===this.#Le?-1:this.#Ee-this.#Le}get latency(){return-1===this.#ot||-1===this.#Le?-1:this.#ot-this.#Le}get resourceSize(){return this.#kt||0}set resourceSize(e){this.#kt=e}get transferSize(){return this.#at||0}increaseTransferSize(e){this.#at=(this.#at||0)+e}setTransferSize(e){this.#at=e}get finished(){return this.#me}set finished(e){this.#me!==e&&(this.#me=e,e&&this.dispatchEventToListeners(we.FinishedLoading,this))}get failed(){return this.#lt}set failed(e){this.#lt=e}get canceled(){return this.#dt}set canceled(e){this.#dt=e}get preserved(){return this.#ct}set preserved(e){this.#ct=e}blockedReason(){return this.#Ae}setBlockedReason(e){this.#Ae=e}corsErrorStatus(){return this.#Oe}setCorsErrorStatus(e){this.#Oe=e}wasBlocked(){return Boolean(this.#Ae)}cached(){return(Boolean(this.#St)||Boolean(this.#wt))&&!this.#at}cachedInMemory(){return Boolean(this.#St)&&!this.#at}fromPrefetchCache(){return Boolean(this.#Ct)}setFromMemoryCache(){this.#St=!0,this.#Rt=void 0}get fromDiskCache(){return this.#wt}setFromDiskCache(){this.#wt=!0}setFromPrefetchCache(){this.#Ct=!0}get fetchedViaServiceWorker(){return Boolean(this.#Tt)}set fetchedViaServiceWorker(e){this.#Tt=e}initiatedByServiceWorker(){const e=te.forRequest(this);return!!e&&e.target().type()===q.ServiceWorker}get timing(){return this.#Rt}set timing(e){if(!e||this.#St)return;this.#Le=e.requestTime;const t=e.requestTime+e.receiveHeadersEnd/1e3;((this.#ot||-1)<0||this.#ot>t)&&(this.#ot=t),this.#Le>this.#ot&&(this.#ot=this.#Le),this.#Rt=e,this.dispatchEventToListeners(we.TimingChanged,this)}setConnectTimingFromExtraInfo(e){this.#Le=e.requestTime,this.dispatchEventToListeners(we.TimingChanged,this)}get mimeType(){return this.#ht}set mimeType(e){this.#ht=e}get displayName(){return this.#ut.displayName}name(){return this.#h||this.parseNameAndPathFromURL(),this.#h}path(){return this.#gt||this.parseNameAndPathFromURL(),this.#gt}parseNameAndPathFromURL(){if(this.#ut.isDataURL())this.#h=this.#ut.dataURLDisplayName(),this.#gt="";else if(this.#ut.isBlobURL())this.#h=this.#ut.url,this.#gt="";else if(this.#ut.isAboutBlank())this.#h=this.#ut.url,this.#gt="";else{this.#gt=this.#ut.host+this.#ut.folderPathComponents;const n=te.forRequest(this),r=n?e.ParsedURL.ParsedURL.fromString(n.target().inspectedURL()):null;this.#gt=t.StringUtilities.trimURL(this.#gt,r?r.host:""),this.#ut.lastPathComponent||this.#ut.queryParams?this.#h=this.#ut.lastPathComponent+(this.#ut.queryParams?"?"+this.#ut.queryParams:""):this.#ut.folderPathComponents?(this.#h=this.#ut.folderPathComponents.substring(this.#ut.folderPathComponents.lastIndexOf("/")+1)+"/",this.#gt=this.#gt.substring(0,this.#gt.lastIndexOf("/"))):(this.#h=this.#ut.host,this.#gt="")}}get folder(){let e=this.#ut.path;const t=e.indexOf("?");-1!==t&&(e=e.substring(0,t));const n=e.lastIndexOf("/");return-1!==n?e.substring(0,n):""}get pathname(){return this.#ut.path}resourceType(){return this.#He}setResourceType(e){this.#He=e}get domain(){return this.#ut.host}get scheme(){return this.#ut.scheme}redirectSource(){return this.#Ce}setRedirectSource(e){this.#Ce=e}preflightRequest(){return this.#Te}setPreflightRequest(e){this.#Te=e}preflightInitiatorRequest(){return this.#Re}setPreflightInitiatorRequest(e){this.#Re=e}isPreflightRequest(){return null!==this.#we&&void 0!==this.#we&&"preflight"===this.#we.type}redirectDestination(){return this.#xe}setRedirectDestination(e){this.#xe=e}requestHeaders(){return this.#Ve}setRequestHeaders(e){this.#Ve=e,this.dispatchEventToListeners(we.RequestHeadersChanged)}requestHeadersText(){return this.#Mt}setRequestHeadersText(e){this.#Mt=e,this.dispatchEventToListeners(we.RequestHeadersChanged)}requestHeaderValue(e){return this.#Ge[e]||(this.#Ge[e]=this.computeHeaderValue(this.requestHeaders(),e)),this.#Ge[e]}requestFormData(){return this.#Ze||(this.#Ze=te.requestPostData(this)),this.#Ze}setRequestFormData(e,t){this.#Ze=e&&null===t?null:Promise.resolve(t),this.#Ye=null}filteredProtocolName(){const e=this.protocol.toLowerCase();return"h2"===e?"http/2.0":e.replace(/^http\/2(\.0)?\+/,"http/2.0+")}requestHttpVersion(){const e=this.requestHeadersText();if(!e){const e=this.requestHeaderValue("version")||this.requestHeaderValue(":version");return e||this.filteredProtocolName()}const t=e.split(/\r\n/)[0].match(/(HTTP\/\d+\.\d+)$/);return t?t[1]:"HTTP/0.9"}get responseHeaders(){return this.#xt||[]}set responseHeaders(e){this.#xt=e,this.#Pt=void 0,this.#Et=void 0,this.#Lt=void 0,this.#je={},this.dispatchEventToListeners(we.ResponseHeadersChanged)}get responseHeadersText(){return this.#We}set responseHeadersText(e){this.#We=e,this.dispatchEventToListeners(we.ResponseHeadersChanged)}get sortedResponseHeaders(){return void 0!==this.#Pt||(this.#Pt=this.responseHeaders.slice(),this.#Pt.sort((function(e,n){return t.StringUtilities.compare(e.name.toLowerCase(),n.name.toLowerCase())}))),this.#Pt}responseHeaderValue(e){return e in this.#je||(this.#je[e]=this.computeHeaderValue(this.responseHeaders,e)),this.#je[e]}get responseCookies(){return this.#Lt||(this.#Lt=U.parseSetCookie(this.responseHeaderValue("Set-Cookie"),this.domain)||[]),this.#Lt}responseLastModified(){return this.responseHeaderValue("last-modified")}allCookiesIncludingBlockedOnes(){return[...this.includedRequestCookies(),...this.responseCookies,...this.blockedRequestCookies().map((e=>e.cookie)),...this.blockedResponseCookies().map((e=>e.cookie))].filter((e=>Boolean(e)))}get serverTimings(){return void 0===this.#Et&&(this.#Et=fe.parseHeaders(this.responseHeaders)),this.#Et}queryString(){if(void 0!==this.#At)return this.#At;let e=null;const t=this.url(),n=t.indexOf("?");if(-1!==n){e=t.substring(n+1);const r=e.indexOf("#");-1!==r&&(e=e.substring(0,r))}return this.#At=e,this.#At}get queryParameters(){if(this.#Ot)return this.#Ot;const e=this.queryString();return e?(this.#Ot=this.parseParameters(e),this.#Ot):null}async parseFormParameters(){const e=this.requestContentType();if(!e)return null;if(e.match(/^application\/x-www-form-urlencoded\s*(;.*)?$/i)){const e=await this.requestFormData();return e?this.parseParameters(e):null}const t=e.match(/^multipart\/form-data\s*;\s*boundary\s*=\s*(\S+)\s*$/);if(!t)return null;const n=t[1];if(!n)return null;const r=await this.requestFormData();return r?this.parseMultipartFormDataParameters(r,n):null}formParameters(){return this.#Ye||(this.#Ye=this.parseFormParameters()),this.#Ye}responseHttpVersion(){const e=this.#We;if(!e){const e=this.responseHeaderValue("version")||this.responseHeaderValue(":version");return e||this.filteredProtocolName()}const t=e.split(/\r\n/)[0].match(/^(HTTP\/\d+\.\d+)/);return t?t[1]:"HTTP/0.9"}parseParameters(e){return e.split("&").map((function(e){const t=e.indexOf("=");return-1===t?{name:e,value:""}:{name:e.substring(0,t),value:e.substring(t+1)}}))}parseMultipartFormDataParameters(e,n){const r=t.StringUtilities.escapeForRegExp(n),s=new RegExp('^\\r\\ncontent-disposition\\s*:\\s*form-data\\s*;\\s*name="([^"]*)"(?:\\s*;\\s*filename="([^"]*)")?(?:\\r\\ncontent-type\\s*:\\s*([^\\r\\n]*))?\\r\\n\\r\\n(.*)\\r\\n$',"is");return e.split(new RegExp(`--${r}(?:--s*$)?`,"g")).reduce((function(e,t){const[n,r,i,o,a]=t.match(s)||[];if(!n)return e;const l=i||o?ke(ve.binary):a;return e.push({name:r,value:l}),e}),[])}computeHeaderValue(e,t){t=t.toLowerCase();const n=[];for(let r=0;r=400}setInitialPriority(e){this.#Ne=e}initialPriority(){return this.#Ne}setPriority(e){this.#Fe=e}priority(){return this.#Fe||this.#Ne||null}setSignedExchangeInfo(e){this.#De=e}signedExchangeInfo(){return this.#De}setWebBundleInfo(e){this.#Be=e}webBundleInfo(){return this.#Be}setWebBundleInnerRequestInfo(e){this.#Ue=e}webBundleInnerRequestInfo(){return this.#Ue}async populateImageSource(e){const{content:t,encoded:r}=await this.contentData();let s=n.ContentProvider.contentAsDataURL(t,this.#ht,r);if(null===s&&!this.#lt){(this.responseHeaderValue("cache-control")||"").includes("no-cache")||(s=this.#it)}null!==s&&(e.src=s)}initiator(){return this.#we||null}frames(){return this.#_e}addProtocolFrameError(e,t){this.addFrame({type:Te.Error,text:e,time:this.pseudoWallTime(t),opCode:-1,mask:!1})}addProtocolFrame(e,t,n){const r=n?Te.Send:Te.Receive;this.addFrame({type:r,text:e.payloadData,time:this.pseudoWallTime(t),opCode:e.opcode,mask:e.mask})}addFrame(e){this.#_e.push(e),this.dispatchEventToListeners(we.WebsocketFrameAdded,e)}eventSourceMessages(){return this.#ze}addEventSourceMessage(e,t,n,r){const s={time:this.pseudoWallTime(e),eventName:t,eventId:n,data:r};this.#ze.push(s),this.dispatchEventToListeners(we.EventSourceMessageAdded,s)}markAsRedirect(e){this.#Me=!0,this.#Ie=`${this.#ve}:redirected.${e}`}isRedirect(){return this.#Me}setRequestIdForTest(e){this.#ve=e,this.#Ie=e}charset(){const e=this.responseHeaderValue("content-type");if(!e)return null;const t=e.replace(/ /g,"").split(";").filter((e=>e.toLowerCase().startsWith("charset="))).map((e=>e.slice("charset=".length)));return t.length?t[0]:null}addExtraRequestInfo(e){this.#nt=e.blockedRequestCookies,this.#rt=e.includedRequestCookies,this.setRequestHeaders(e.requestHeaders),this.#et=!0,this.setRequestHeadersText(""),this.#mt=e.clientSecurityState,this.setConnectTimingFromExtraInfo(e.connectTiming)}hasExtraRequestInfo(){return this.#et}blockedRequestCookies(){return this.#nt}includedRequestCookies(){return this.#rt}hasRequestCookies(){return this.#rt.length>0||this.#nt.length>0}addExtraResponseInfo(e){if(this.#st=e.blockedResponseCookies,this.responseHeaders=e.responseHeaders,e.responseHeadersText&&(this.responseHeadersText=e.responseHeadersText,!this.requestHeadersText())){let e=`${this.requestMethod} ${this.parsedURL.path}`;this.parsedURL.queryParams&&(e+=`?${this.parsedURL.queryParams}`),e+=" HTTP/1.1\r\n";for(const{name:t,value:n}of this.requestHeaders())e+=`${t}: ${n}\r\n`;this.setRequestHeadersText(e)}this.#$e=e.resourceIPAddressSpace,e.statusCode&&(this.statusCode=e.statusCode),this.#tt=!0;const t=te.forRequest(this);if(t)for(const e of this.#st)if(e.blockedReasons.includes("NameValuePairExceedsMaxSize")){const e=ke(ve.setcookieHeaderIsIgnoredIn,{PH1:this.url()});t.dispatchEventToListeners(ne.MessageGenerated,{message:e,requestId:this.#Ie,warning:!0})}}hasExtraResponseInfo(){return this.#tt}blockedResponseCookies(){return this.#st}redirectSourceSignedExchangeInfoHasNoErrors(){return null!==this.#Ce&&null!==this.#Ce.#De&&!this.#Ce.#De.errors}clientSecurityState(){return this.#mt}setTrustTokenParams(e){this.#pt=e}trustTokenParams(){return this.#pt}setTrustTokenOperationDoneEvent(e){this.#bt=e,this.dispatchEventToListeners(we.TrustTokenResultAdded)}trustTokenOperationDoneEvent(){return this.#bt}setIsSameSite(e){this.#Ft=e}isSameSite(){return this.#Ft}}!function(e){e.FinishedLoading="FinishedLoading",e.TimingChanged="TimingChanged",e.RemoteAddressChanged="RemoteAddressChanged",e.RequestHeadersChanged="RequestHeadersChanged",e.ResponseHeadersChanged="ResponseHeadersChanged",e.WebsocketFrameAdded="WebsocketFrameAdded",e.EventSourceMessageAdded="EventSourceMessageAdded",e.TrustTokenResultAdded="TrustTokenResultAdded"}(we||(we={})),function(e){e.Other="other",e.Parser="parser",e.Redirect="redirect",e.Script="script",e.Preload="preload",e.SignedExchange="signedExchange",e.Preflight="preflight"}(Ce||(Ce={})),function(e){e.Send="send",e.Receive="receive",e.Error="error"}(Te||(Te={}));var Me=Object.freeze({__proto__:null,get MIME_TYPE(){return Se},NetworkRequest:Re,get Events(){return we},get InitiatorType(){return Ce},get WebSocketFrameType(){return Te},cookieBlockedReasonToUiString:function(e){switch(e){case"SecureOnly":return ke(ve.secureOnly);case"NotOnPath":return ke(ve.notOnPath);case"DomainMismatch":return ke(ve.domainMismatch);case"SameSiteStrict":return ke(ve.sameSiteStrict);case"SameSiteLax":return ke(ve.sameSiteLax);case"SameSiteUnspecifiedTreatedAsLax":return ke(ve.sameSiteUnspecifiedTreatedAsLax);case"SameSiteNoneInsecure":return ke(ve.sameSiteNoneInsecure);case"UserPreferences":return ke(ve.userPreferences);case"UnknownError":return ke(ve.unknownError);case"SchemefulSameSiteStrict":return ke(ve.schemefulSameSiteStrict);case"SchemefulSameSiteLax":return ke(ve.schemefulSameSiteLax);case"SchemefulSameSiteUnspecifiedTreatedAsLax":return ke(ve.schemefulSameSiteUnspecifiedTreatedAsLax);case"SamePartyFromCrossPartyContext":return ke(ve.samePartyFromCrossPartyContext);case"NameValuePairExceedsMaxSize":return ke(ve.nameValuePairExceedsMaxSize)}return""},setCookieBlockedReasonToUiString:function(e){switch(e){case"SecureOnly":return ke(ve.blockedReasonSecureOnly);case"SameSiteStrict":return ke(ve.blockedReasonSameSiteStrictLax,{PH1:"SameSite=Strict"});case"SameSiteLax":return ke(ve.blockedReasonSameSiteStrictLax,{PH1:"SameSite=Lax"});case"SameSiteUnspecifiedTreatedAsLax":return ke(ve.blockedReasonSameSiteUnspecifiedTreatedAsLax);case"SameSiteNoneInsecure":return ke(ve.blockedReasonSameSiteNoneInsecure);case"UserPreferences":return ke(ve.thisSetcookieWasBlockedDueToUser);case"SyntaxError":return ke(ve.thisSetcookieHadInvalidSyntax);case"SchemeNotSupported":return ke(ve.theSchemeOfThisConnectionIsNot);case"OverwriteSecure":return ke(ve.blockedReasonOverwriteSecure);case"InvalidDomain":return ke(ve.blockedReasonInvalidDomain);case"InvalidPrefix":return ke(ve.blockedReasonInvalidPrefix);case"UnknownError":return ke(ve.anUnknownErrorWasEncounteredWhenTrying);case"SchemefulSameSiteStrict":return ke(ve.thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax,{PH1:"SameSite=Strict"});case"SchemefulSameSiteLax":return ke(ve.thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax,{PH1:"SameSite=Lax"});case"SchemefulSameSiteUnspecifiedTreatedAsLax":return ke(ve.thisSetcookieDidntSpecifyASamesite);case"SamePartyFromCrossPartyContext":return ke(ve.thisSetcookieWasBlockedBecauseItHadTheSameparty);case"SamePartyConflictsWithOtherAttributes":return ke(ve.thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute);case"NameValuePairExceedsMaxSize":return ke(ve.thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize)}return""},cookieBlockedReasonToAttribute:function(e){switch(e){case"SecureOnly":return D.Secure;case"NotOnPath":return D.Path;case"DomainMismatch":return D.Domain;case"SameSiteStrict":case"SameSiteLax":case"SameSiteUnspecifiedTreatedAsLax":case"SameSiteNoneInsecure":case"SchemefulSameSiteStrict":case"SchemefulSameSiteLax":case"SchemefulSameSiteUnspecifiedTreatedAsLax":return D.SameSite;case"SamePartyFromCrossPartyContext":return D.SameParty;case"NameValuePairExceedsMaxSize":case"UserPreferences":case"UnknownError":return null}return null},setCookieBlockedReasonToAttribute:function(e){switch(e){case"SecureOnly":case"OverwriteSecure":return D.Secure;case"SameSiteStrict":case"SameSiteLax":case"SameSiteUnspecifiedTreatedAsLax":case"SameSiteNoneInsecure":case"SchemefulSameSiteStrict":case"SchemefulSameSiteLax":case"SchemefulSameSiteUnspecifiedTreatedAsLax":return D.SameSite;case"InvalidDomain":return D.Domain;case"InvalidPrefix":return D.Name;case"SamePartyConflictsWithOtherAttributes":case"SamePartyFromCrossPartyContext":return D.SameParty;case"NameValuePairExceedsMaxSize":case"UserPreferences":case"SyntaxError":case"SchemeNotSupported":case"UnknownError":return null}return null}});class xe{static fromLocalObject(e){return new Oe(e)}static type(e){if(null===e)return"null";const t=typeof e;return"object"!==t&&"function"!==t?t:e.type}static arrayNameFromDescription(e){return e.replace(De,"").replace(Be,"")}static arrayLength(e){if("array"!==e.subtype&&"typedarray"!==e.subtype)return 0;const t=e.description&&e.description.match(De),n=e.description&&e.description.match(Be);return t?parseInt(t[1],10):n?parseInt(n[1],10):0}static arrayBufferByteLength(e){if("arraybuffer"!==e.subtype)return 0;const t=e.description&&e.description.match(De);return t?parseInt(t[1],10):0}static unserializableDescription(e){const t=typeof e;if("number"===t){const t=String(e);if(0===e&&1/e<0)return"-0";if("NaN"===t||"Infinity"===t||"-Infinity"===t)return t}return"bigint"===t?e+"n":null}static toCallArgument(e){const t=typeof e;if("undefined"===t)return{};const n=xe.unserializableDescription(e);if("number"===t)return null!==n?{unserializableValue:n}:{value:e};if("bigint"===t)return{unserializableValue:n};if("string"===t||"boolean"===t)return{value:e};if(!e)return{value:null};const r=e;if(e instanceof xe){const t=e.unserializableValue();if(void 0!==t)return{unserializableValue:t}}else if(void 0!==r.unserializableValue)return{unserializableValue:r.unserializableValue};return void 0!==r.objectId?{objectId:r.objectId}:{value:r.value}}static async loadFromObjectPerProto(e,t,n=!1){const r=await Promise.all([e.getAllProperties(!0,t,n),e.getOwnProperties(t,n)]),s=r[0].properties,i=r[1].properties,o=r[1].internalProperties;if(!i||!s)return{properties:null,internalProperties:null};const a=new Map,l=[];for(let e=0;e100){r+=",…";break}e&&(r+=", "),r+=t}return r+=t,r}get type(){return typeof this.valueInternal}get subtype(){return null===this.valueInternal?"null":Array.isArray(this.valueInternal)?"array":this.valueInternal instanceof Date?"date":void 0}get hasChildren(){return"object"==typeof this.valueInternal&&null!==this.valueInternal&&Boolean(Object.keys(this.valueInternal).length)}async getOwnProperties(e,t=!1){let n=this.children();return t&&(n=n.filter((e=>!function(e){const t=Number(e)>>>0;return String(t)===e}(e.name)))),{properties:n,internalProperties:null}}async getAllProperties(e,t,n=!1){return e?{properties:[],internalProperties:null}:await this.getOwnProperties(t,n)}children(){if(!this.hasChildren)return[];const e=this.valueInternal;return this.#Qt||(this.#Qt=Object.keys(e).map((function(t){let n=e[t];return n instanceof xe||(n=xe.fromLocalObject(n)),new Ae(t,n)}))),this.#Qt}arrayLength(){return Array.isArray(this.valueInternal)?this.valueInternal.length:0}async callFunction(e,t){const n=this.valueInternal,r=t?t.map((e=>e.value)):[];let s,i=!1;try{s=e.apply(n,r)}catch(e){i=!0}return{object:xe.fromLocalObject(s),wasThrown:i}}async callFunctionJSON(e,t){const n=this.valueInternal,r=t?t.map((e=>e.value)):[];let s;try{s=e.apply(n,r)}catch(e){s=null}return s}}class Ne{#$t;constructor(e){this.#$t=e}static objectAsArray(e){if(!e||"object"!==e.type||"array"!==e.subtype&&"typedarray"!==e.subtype)throw new Error("Object is empty or not an array");return new Ne(e)}static createFromRemoteObjects(e){if(!e.length)throw new Error("Input array is empty");const t=[];for(let n=0;n1)return new Array(arguments);return[arguments[0]]}),t).then((function(e){if(e.wasThrown||!e.object)throw new Error("Call function throws exceptions or returns empty value");return Ne.objectAsArray(e.object)}))}at(e){if(e<0||e>this.#$t.arrayLength())throw new Error("Out of range");return this.#$t.callFunction((function(e){return this[e]}),[xe.toCallArgument(e)]).then((function(e){if(e.wasThrown||!e.object)throw new Error("Exception in callFunction or result value is empty");return e.object}))}length(){return this.#$t.arrayLength()}map(e){const t=[];for(let n=0;n=this.byteLength())throw new RangeError("start is out of range");if(tthis.byteLength())throw new RangeError("end is out of range");return await this.#$t.callFunctionJSON((function(e,t){return[...new Uint8Array(this,e,t)]}),[{value:e},{value:t-e}])}object(){return this.#$t}},RemoteArray:Ne,RemoteFunction:Fe});class He{#Xt;#Kt;#Jt;constructor(e){this.#Xt=e.fontFamily,this.#Kt=e.fontVariationAxes||[],this.#Jt=new Map;for(const e of this.#Kt)this.#Jt.set(e.tag,e)}getFontFamily(){return this.#Xt}getVariationAxisByTag(e){return this.#Jt.get(e)}}var qe=Object.freeze({__proto__:null,CSSFontFace:He});class _e{text="";range;styleSheetId;cssModel;constructor(e){this.cssModel=e}rebase(e){this.styleSheetId===e.styleSheetId&&this.range&&(e.oldRange.equal(this.range)?this.reinitialize(e.payload):this.range=this.range.rebaseAfterTextEdit(e.oldRange,e.newRange))}equal(e){return!!(this.styleSheetId&&this.range&&e.range)&&(this.styleSheetId===e.styleSheetId&&this.range.equal(e.range))}lineNumberInSource(){if(this.range)return this.header()?.lineNumberInSource(this.range.startLine)}columnNumberInSource(){if(this.range)return this.header()?.columnNumberInSource(this.range.startLine,this.range.startColumn)}header(){return this.styleSheetId?this.cssModel.styleSheetHeaderForId(this.styleSheetId):null}rawLocation(){const e=this.header();if(!e||void 0===this.lineNumberInSource())return null;const t=Number(this.lineNumberInSource());return new rn(e,t,this.columnNumberInSource())}}var ze=Object.freeze({__proto__:null,CSSQuery:_e});class je extends _e{name;static parseContainerQueriesPayload(e,t){return t.map((t=>new je(e,t)))}constructor(e,t){super(e),this.reinitialize(t)}reinitialize(e){this.text=e.text,this.range=e.range?n.TextRange.TextRange.fromObject(e.range):null,this.styleSheetId=e.styleSheetId,this.name=e.name}active(){return!0}async getContainerForNode(e){const t=await this.cssModel.domModel().getContainerForNode(e,this.name);if(t)return new We(t)}}class We{containerNode;constructor(e){this.containerNode=e}async getContainerSizeDetails(){const e=await this.containerNode.domModel().cssModel().computedStylePromise(this.containerNode.id);if(!e)return;const t=e.get("container-type"),n=e.get("contain"),r=e.get("writing-mode");if(!t||!n||!r)return;const s=Ve(`${t} ${n}`),i=Ge(s,r);let o,a;return"Both"!==i&&"Horizontal"!==i||(o=e.get("width")),"Both"!==i&&"Vertical"!==i||(a=e.get("height")),{queryAxis:s,physicalAxis:i,width:o,height:a}}}const Ve=e=>{const t=e.split(" ");let n=!1,r=!1;for(const e of t){if("size"===e)return"size";n=n||"inline-size"===e,r=r||"block-size"===e}return n&&r?"size":n?"inline-size":r?"block-size":""},Ge=(e,t)=>{const n=t.startsWith("vertical");switch(e){case"":return"";case"size":return"Both";case"inline-size":return n?"Vertical":"Horizontal";case"block-size":return n?"Horizontal":"Vertical"}};var Qe=Object.freeze({__proto__:null,CSSContainerQuery:je,CSSContainerQueryContainer:We,getQueryAxis:Ve,getPhysicalAxisFromQueryAxis:Ge});class $e{#Yt;#Zt;constructor(e){this.#Yt=e.active,this.#Zt=[];for(let t=0;tnew Ke(e,t)))}constructor(e,t){super(e),this.reinitialize(t)}reinitialize(e){if(this.text=e.text,this.source=e.source,this.sourceURL=e.sourceURL||"",this.range=e.range?n.TextRange.TextRange.fromObject(e.range):null,this.styleSheetId=e.styleSheetId,this.mediaList=null,e.mediaList){this.mediaList=[];for(let t=0;ts)return;const i=new n.TextRange.SourceRange(r,this.name.length),o=new n.TextRange.SourceRange(s,this.value.length);function a(e,t,n){return 0===e.startLine&&(e.startColumn+=n,e.endColumn+=n),e.startLine+=t,e.endLine+=t,e}this.#in=a(t.toTextRange(i),e.startLine,e.startColumn),this.#nn=a(t.toTextRange(o),e.startLine,e.startColumn)}nameRange(){return this.ensureRanges(),this.#in}valueRange(){return this.ensureRanges(),this.#nn}rebase(e){this.ownerStyle.styleSheetId===e.styleSheetId&&this.range&&(this.range=this.range.rebaseAfterTextEdit(e.oldRange,e.newRange))}setActive(e){this.#sn=e}get propertyText(){return void 0!==this.text?this.text:""===this.name?"":this.name+": "+this.value+(this.important?" !important":"")+";"}activeInStyle(){return this.#sn}trimmedValueWithoutImportant(){const e="!important";return this.value.endsWith(e)?this.value.slice(0,-e.length).trim():this.value.trim()}async setText(r,i,o){if(!this.ownerStyle)return Promise.reject(new Error("No ownerStyle for property"));if(!this.ownerStyle.styleSheetId)return Promise.reject(new Error("No owner style id"));if(!this.range||!this.ownerStyle.range)return Promise.reject(new Error("Style not editable"));if(i&&(s.userMetrics.actionTaken(s.UserMetrics.Action.StyleRuleEdited),this.name.startsWith("--")&&s.userMetrics.actionTaken(s.UserMetrics.Action.CustomPropertyEdited)),o&&r===this.propertyText)return this.ownerStyle.cssModel().domModel().markUndoableState(!i),Promise.resolve(!0);const a=this.range.relativeTo(this.ownerStyle.range.startLine,this.ownerStyle.range.startColumn),l=this.ownerStyle.cssText?this.detectIndentation(this.ownerStyle.cssText):e.Settings.Settings.instance().moduleSetting("textEditorIndent").get(),d=this.ownerStyle.cssText?l.substring(0,this.ownerStyle.range.endColumn):"",c=new n.Text.Text(this.ownerStyle.cssText||"").replaceRange(a,t.StringUtilities.sprintf(";%s;",r)),h=n.CodeMirrorUtils.TokenizerFactory.instance(),u=Ye.formatStyle(c,l,d,h);return this.ownerStyle.setText(u,i)}static formatStyle(e,t,n,r){const s=t.substring(n.length)+t;t&&(t="\n"+t);let i="",a="",l="",d=!1,c=!1;return r.createTokenizer("text/css")("*{"+e+"}",(function(e,n,r,h){if(!d){const r=n&&n.includes("comment")&&function(e){const t=e.indexOf(":");if(-1===t)return!1;const n=e.substring(2,t).trim();return I().isCSSPropertyName(n)}(e),s=n&&(n.includes("string")||n.includes("meta")||n.includes("property")||n.includes("variable-2"));return r?i=i.trimRight()+t+e:s?(d=!0,l=e):(";"!==e||c)&&(i+=e,!e.trim()||n&&n.includes("comment")||(c=";"!==e)),void("{"!==e||n||(c=!1))}if("}"===e||";"===e){const n=l.trim();if(i=i.trimRight()+t+n+(n.endsWith(":")?" ":""),c=!1,d=!1,a="",o.Runtime.experiments.isEnabled("preciseChanges"))return void(i+=e);i+=";","}"===e&&(i+="}")}else{if(I().isGridAreaDefiningProperty(a)){const t=b.exec(e);t&&0===t.index&&!l.trimRight().endsWith("]")&&(l=l.trimRight()+"\n"+s)}a||":"!==e||(a=l),l+=e}})),d&&(i+=l),i=i.substring(2,i.length-1).trimRight(),i+(t?"\n"+n:"")}detectIndentation(e){const t=e.split("\n");return t.length<2?"":n.TextUtils.Utils.lineIndent(t[1])}setValue(e,t,n,r){const s=this.name+": "+e+(this.important?" !important":"")+";";this.setText(s,t,n).then(r)}setDisabled(e){if(!this.ownerStyle)return Promise.resolve(!1);if(e===this.disabled)return Promise.resolve(!0);if(!this.text)return Promise.resolve(!0);const t=this.text.trim(),n=e?"/* "+t+" */":this.text.substring(2,t.length-2).trim();return this.setText(n,!0,!0)}setDisplayedStringForInvalidProperty(e){this.#an=e}getInvalidStringForInvalidProperty(){return this.#an}}var Ze,et=Object.freeze({__proto__:null,CSSProperty:Ye});class tt{#ln;parentRule;#dn;styleSheetId;range;cssText;#cn;#hn;#un;#gn;type;constructor(e,t,n,r){this.#ln=e,this.parentRule=t,this.reinitialize(n),this.type=r}rebase(e){if(this.styleSheetId===e.styleSheetId&&this.range)if(e.oldRange.equal(this.range))this.reinitialize(e.payload);else{this.range=this.range.rebaseAfterTextEdit(e.oldRange,e.newRange);for(let t=0;t=0;--e)if(this.allProperties()[e].range)return e+1;return 0}insertionRange(e){const t=this.propertyAt(e);if(t&&t.range)return t.range.collapseToStart();if(!this.range)throw new Error("CSSStyleDeclaration.range is null");return this.range.collapseToEnd()}newBlankProperty(e){e=void 0===e?this.pastLastSourcePropertyIndex():e;return new Ye(this,e,"","",!1,!1,!0,!1,"",this.insertionRange(e))}setText(e,t){return this.range&&this.styleSheetId?this.#ln.setStyleText(this.styleSheetId,this.range,e,t):Promise.resolve(!1)}insertPropertyAt(e,t,n,r){this.newBlankProperty(e).setText(t+": "+n+";",!1,!0).then(r)}appendProperty(e,t,n){this.insertPropertyAt(this.allProperties().length,e,t,n)}}!function(e){e.Regular="Regular",e.Inline="Inline",e.Attributes="Attributes"}(Ze||(Ze={}));var nt=Object.freeze({__proto__:null,CSSStyleDeclaration:tt,get Type(){return Ze}});class rt{cssModelInternal;styleSheetId;sourceURL;origin;style;constructor(e,t){if(this.cssModelInternal=e,this.styleSheetId=t.styleSheetId,this.styleSheetId){const e=this.getStyleSheetHeader(this.styleSheetId);this.sourceURL=e.sourceURL}this.origin=t.origin,this.style=new tt(this.cssModelInternal,this,t.style,Ze.Regular)}rebase(e){this.styleSheetId===e.styleSheetId&&this.style.rebase(e)}resourceURL(){if(!this.styleSheetId)return"";return this.getStyleSheetHeader(this.styleSheetId).resourceURL()}isUserAgent(){return"user-agent"===this.origin}isInjected(){return"injected"===this.origin}isViaInspector(){return"inspector"===this.origin}isRegular(){return"regular"===this.origin}cssModel(){return this.cssModelInternal}getStyleSheetHeader(e){const t=this.cssModelInternal.styleSheetHeaderForId(e);return console.assert(null!==t),t}}class st{text;range;constructor(e){this.text=e.text,e.range&&(this.range=n.TextRange.TextRange.fromObject(e.range))}rebase(e){this.range&&(this.range=this.range.rebaseAfterTextEdit(e.oldRange,e.newRange))}}class it extends rt{selectors;media;containerQueries;wasUsed;constructor(e,t,n){super(e,{origin:t.origin,style:t.style,styleSheetId:t.styleSheetId}),this.reinitializeSelectors(t.selectorList),this.media=t.media?Ke.parseMediaArrayPayload(e,t.media):[],this.containerQueries=t.containerQueries?je.parseContainerQueriesPayload(e,t.containerQueries):[],this.wasUsed=n||!1}static createDummyRule(e,t){const r={selectorList:{text:"",selectors:[{text:t,value:void 0}]},style:{styleSheetId:"0",range:new n.TextRange.TextRange(0,0,0,0),shorthandEntries:[],cssProperties:[]},origin:"inspector"};return new it(e,r)}reinitializeSelectors(e){this.selectors=[];for(let t=0;te.text)).join(", ")}selectorRange(){const e=this.selectors[0].range,t=this.selectors[this.selectors.length-1].range;return e&&t?new n.TextRange.TextRange(e.startLine,e.startColumn,t.endLine,t.endColumn):null}lineNumberInSource(e){const t=this.selectors[e];if(!t||!t.range||!this.styleSheetId)return 0;return this.getStyleSheetHeader(this.styleSheetId).lineNumberInSource(t.range.startLine)}columnNumberInSource(e){const t=this.selectors[e];if(!t||!t.range||!this.styleSheetId)return;return this.getStyleSheetHeader(this.styleSheetId).columnNumberInSource(t.range.startLine,t.range.startColumn)}rebase(e){if(this.styleSheetId!==e.styleSheetId)return;const t=this.selectorRange();if(t&&t.equal(e.oldRange))this.reinitializeSelectors(e.payload);else for(let t=0;tnew at(e,t)))}name(){return this.#pn}keyframes(){return this.#bn}}class at extends rt{#fn;constructor(e,t){super(e,{origin:t.origin,style:t.style,styleSheetId:t.styleSheetId}),this.reinitializeKey(t.keyText)}key(){return this.#fn}reinitializeKey(e){this.#fn=new st(e)}rebase(e){this.styleSheetId===e.styleSheetId&&this.#fn.range&&(e.oldRange.equal(this.#fn.range)?this.reinitializeKey(e.payload):this.#fn.rebase(e),super.rebase(e))}setKeyText(e){const t=this.styleSheetId;if(!t)throw"No rule stylesheet id";const n=this.#fn.range;if(!n)throw"Keyframe key is not editable";return this.cssModelInternal.setKeyframeKey(t,n,e)}}var lt,dt=Object.freeze({__proto__:null,CSSRule:rt,CSSStyleRule:it,CSSKeyframesRule:ot,CSSKeyframeRule:at});class ct{#ln;#In;#vn;#yn;#bn;#kn;#Sn;#wn;#Cn;#Tn;constructor(e,t,n,r,s,i,o,a){this.#ln=e,this.#In=t,this.#vn=new Map,this.#yn=new Map,this.#bn=[],a&&(this.#bn=a.map((t=>new ot(e,t)))),this.#kn=new Map,this.#Sn=new Set,s=l(s);for(const e of o)e.matchedCSSRules=l(e.matchedCSSRules);this.#wn=this.buildMainCascade(n,r,s,o),this.#Cn=this.buildPseudoCascades(i),this.#Tn=new Map;for(const e of Array.from(this.#Cn.values()).concat(this.#wn))for(const t of e.styles())this.#Tn.set(t,e);function l(e){for(const t of e)s(t);const t=[];for(const s of e){const e=t[t.length-1];e&&"user-agent"===s.rule.origin&&"user-agent"===e.rule.origin&&s.rule.selectorList.text===e.rule.selectorList.text&&r(s)===r(e)?n(s,e):t.push(s)}return t;function n(e,t){const n=new Map,r=new Map;for(const e of t.rule.style.shorthandEntries)n.set(e.name,e.value);for(const e of t.rule.style.cssProperties)r.set(e.name,e.value);for(const t of e.rule.style.shorthandEntries)n.set(t.name,t.value);for(const t of e.rule.style.cssProperties)r.set(t.name,t.value);t.rule.style.shorthandEntries=[...n.entries()].map((([e,t])=>({name:e,value:t}))),t.rule.style.cssProperties=[...r.entries()].map((([e,t])=>({name:e,value:t})))}function r(e){return e.rule.media?e.rule.media.map((e=>e.text)).join(", "):null}function s(e){const{matchingSelectors:t,rule:n}=e;"user-agent"===n.origin&&t.length&&(n.selectorList.selectors=n.selectorList.selectors.filter(((e,n)=>t.includes(n))),n.selectorList.text=n.selectorList.selectors.map((e=>e.text)).join(", "),e.matchingSelectors=t.map(((e,t)=>t)))}}}buildMainCascade(e,t,n,r){const s=[],i=[];function o(){if(!t)return;const e=new tt(this.#ln,null,t,Ze.Attributes);this.#kn.set(e,this.#In),i.push(e)}if(e&&this.#In.nodeType()===Node.ELEMENT_NODE){const t=new tt(this.#ln,null,e,Ze.Inline);this.#kn.set(t,this.#In),i.push(t)}let a;for(let e=n.length-1;e>=0;--e){const t=new it(this.#ln,n[e].rule);!t.isInjected()&&!t.isUserAgent()||a||(a=!0,o.call(this)),this.#kn.set(t.style,this.#In),i.push(t.style),this.addMatchingSelectors(this.#In,t,n[e].matchingSelectors)}a||o.call(this),s.push(new ht(this,i,!1));let l=this.#In.parentNode;for(let e=0;l&&r&&e=0;--e){const n=new it(this.#ln,a[e].rule);this.addMatchingSelectors(l,n,a[e].matchingSelectors),this.containsInherited(n.style)&&(d(i,n.style)||d(this.#Sn,n.style)||(this.#kn.set(n.style,l),t.push(n.style),this.#Sn.add(n.style)))}l=l.parentNode,s.push(new ht(this,t,!0))}return new ut(s);function d(e,t){if(!t.styleSheetId||!t.range)return!1;for(const n of e)if(t.styleSheetId===n.styleSheetId&&n.range&&t.range.equal(n.range))return!0;return!1}}buildPseudoCascades(e){const t=new Map;if(!e)return t;for(let n=0;n=0;--e){const t=new it(this.#ln,o[e].rule);i.push(t.style),this.#kn.set(t.style,s),s&&this.addMatchingSelectors(s,t,o[e].matchingSelectors)}const a=new ht(this,i,!1);t.set(r.pseudoType,new ut([a]))}return t}addMatchingSelectors(e,t,n){for(const r of n){const n=t.selectors[r];this.setSelectorMatches(e,n.text,!0)}}node(){return this.#In}cssModel(){return this.#ln}hasMatchingSelectors(e){return this.getMatchingSelectors(e).length>0&&this.mediaMatches(e.style)}getMatchingSelectors(e){const t=this.nodeForStyle(e.style);if(!t||"number"!=typeof t.id)return[];const n=this.#yn.get(t.id);if(!n)return[];const r=[];for(let t=0;te.replace(p,"$2"))).forEach((n=>{if(e.isCSSPropertyName(n)){const e=this.activeProperties.get(n);e?(this.propertiesState.set(e,lt.Overloaded),this.activeProperties.set(n,t)):this.activeProperties.set(n,t)}}))}const r=this.activeProperties.get(n);!r||!r.important&&t.important?(r&&this.propertiesState.set(r,lt.Overloaded),this.propertiesState.set(t,lt.Active),this.activeProperties.set(n,t)):this.propertiesState.set(t,lt.Overloaded)}}}}class ut{#xn;#Pn;#Ln;#En;#An;#On;constructor(e){this.#xn=e,this.#Pn=new Map,this.#Ln=new Map,this.#En=new Map,this.#An=!1,this.#On=new Map;for(const t of e)for(const e of t.styles)this.#On.set(e,t)}findAvailableCSSVariables(e){const t=this.#On.get(e);if(!t)return[];this.ensureInitialized();const n=this.#Ln.get(t);return n?Array.from(n.keys()):[]}computeCSSVariable(e,t){const n=this.#On.get(e);if(!n)return null;this.ensureInitialized();const r=this.#Ln.get(n),s=this.#En.get(n);return r&&s?this.innerComputeCSSVariable(r,s,t):null}computeValue(e,t){const n=this.#On.get(e);if(!n)return null;this.ensureInitialized();const r=this.#Ln.get(n),s=this.#En.get(n);return r&&s?this.innerComputeValue(r,s,t):null}computeSingleVariableValue(e,t){const n=this.#On.get(e);if(!n)return null;this.ensureInitialized();const r=this.#Ln.get(n),s=this.#En.get(n);if(!r||!s)return null;const i=this.innerComputeValue(r,s,t),{variableName:o}=this.getCSSVariableNameAndFallback(t);return{computedValue:i,fromFallback:null!==o&&!r.has(o)}}getCSSVariableNameAndFallback(e){const t=e.match(/^var\((--[a-zA-Z0-9-_]+)[,]?\s*(.*)\)$/);return{variableName:t&&t[1],fallback:t&&t[2]}}innerComputeCSSVariable(e,t,n){if(!e.has(n))return null;if(t.has(n))return t.get(n)||null;t.set(n,null);const r=e.get(n);if(null==r)return null;const s=this.innerComputeValue(e,t,r);return t.set(n,s),s}innerComputeValue(e,t,r){const s=n.TextUtils.Utils.splitStringByRegexes(r,[m]),i=[];for(const n of s){if(-1===n.regexIndex){i.push(n.value);continue}const{variableName:r,fallback:s}=this.getCSSVariableNameAndFallback(n.value);if(!r)return null;const o=this.innerComputeCSSVariable(e,t,r);if(null===o&&!s)return null;null===o?i.push(s):i.push(o)}return i.map((e=>e?e.trim():"")).join(" ")}styles(){return Array.from(this.#On.keys())}propertyState(e){return this.ensureInitialized(),this.#Pn.get(e)||null}reset(){this.#An=!1,this.#Pn.clear(),this.#Ln.clear(),this.#En.clear()}ensureInitialized(){if(this.#An)return;this.#An=!0;const e=new Map;for(const t of this.#xn){t.computeActiveProperties();for(const n of t.propertiesState.entries()){const t=n[0];if(n[1]===lt.Overloaded){this.#Pn.set(t,lt.Overloaded);continue}const r=I().canonicalPropertyName(t.name);e.has(r)?this.#Pn.set(t,lt.Overloaded):(e.set(r,t),this.#Pn.set(t,lt.Active))}}for(const t of e.entries()){const n=t[0],r=t[1],s=r.ownerStyle,i=s.longhandProperties(r.name);if(!i.length)continue;let o=!1;for(const t of i){const n=I().canonicalPropertyName(t.name),r=e.get(n);if(r&&r.ownerStyle===s){o=!0;break}}o||(e.delete(n),this.#Pn.set(r,lt.Overloaded))}const t=new Map;for(let e=this.#xn.length-1;e>=0;--e){const n=this.#xn[e],r=[];for(const e of n.activeProperties.entries()){const n=e[0],s=e[1];n.startsWith("--")&&(t.set(n,s.value),r.push(n))}const s=new Map(t),i=new Map;this.#Ln.set(n,s),this.#En.set(n,i);for(const e of r)t.delete(e),t.set(e,this.innerComputeCSSVariable(s,i,e))}}}!function(e){e.Active="Active",e.Overloaded="Overloaded"}(lt||(lt={}));var gt=Object.freeze({__proto__:null,CSSMatchedStyles:ct,get PropertyState(){return lt}});const mt={couldNotFindTheOriginalStyle:"Could not find the original style sheet.",thereWasAnErrorRetrievingThe:"There was an error retrieving the source styles."},pt=r.i18n.registerUIStrings("core/sdk/CSSStyleSheetHeader.ts",mt),bt=r.i18n.getLocalizedString.bind(void 0,pt);class ft{#ln;id;frameId;sourceURL;hasSourceURL;origin;title;disabled;isInline;isMutable;isConstructed;startLine;startColumn;endLine;endColumn;contentLength;ownerNode;sourceMapURL;#Nn;constructor(e,t){this.#ln=e,this.id=t.styleSheetId,this.frameId=t.frameId,this.sourceURL=t.sourceURL,this.hasSourceURL=Boolean(t.hasSourceURL),this.origin=t.origin,this.title=t.title,this.disabled=t.disabled,this.isInline=t.isInline,this.isMutable=t.isMutable,this.isConstructed=t.isConstructed,this.startLine=t.startLine,this.startColumn=t.startColumn,this.endLine=t.endLine,this.endColumn=t.endColumn,this.contentLength=t.length,t.ownerNode&&(this.ownerNode=new Rn(e.target(),t.ownerNode)),this.sourceMapURL=t.sourceMapURL,this.#Nn=null}originalContentProvider(){if(!this.#Nn){const e=async()=>{const e=await this.#ln.originalStyleSheetText(this);return null===e?{content:null,error:bt(mt.couldNotFindTheOriginalStyle),isEncoded:!1}:{content:e,isEncoded:!1}};this.#Nn=new n.StaticContentProvider.StaticContentProvider(this.contentURL(),this.contentType(),e)}return this.#Nn}setSourceMapURL(e){this.sourceMapURL=e}cssModel(){return this.#ln}isAnonymousInlineStyleSheet(){return!this.resourceURL()&&!this.#ln.sourceMapManager().sourceMapForClient(this)}isConstructedByNew(){return this.isConstructed&&0===this.sourceURL.length}resourceURL(){return this.isViaInspector()?this.viaInspectorResourceURL():this.sourceURL}viaInspectorResourceURL(){const t=this.#ln.target().model(qn);if(console.assert(Boolean(t)),!t)return"";const n=t.frameForId(this.frameId);if(!n)return"";console.assert(Boolean(n));const r=new e.ParsedURL.ParsedURL(n.url);let s="inspector://"+r.host+r.folderPathComponents;return s.endsWith("/")||(s+="/"),s+="inspector-stylesheet",s}lineNumberInSource(e){return this.startLine+e}columnNumberInSource(e,t){return(e?0:this.startColumn)+t}containsLocation(e,t){const n=e===this.startLine&&t>=this.startColumn||e>this.startLine,r=ee.isTopFrame()));this.#Un=e.length>0?e[0]:null}getFrame(e){const t=this.#Dn.get(e);return t?t.frame:null}getAllFrames(){return Array.from(this.#Dn.values(),(e=>e.frame))}getTopFrame(){return this.#Un}async getOrWaitForFrame(e,t){const n=this.getFrame(e);return!n||t&&t===n.resourceTreeModel().target()?new Promise((n=>{const r=this.#qn.get(e);r?r.push({notInTarget:t,resolve:n}):this.#qn.set(e,[{notInTarget:t,resolve:n}])})):n}resolveAwaitedFrame(e){const t=this.#qn.get(e.id);if(!t)return;const n=t.filter((({notInTarget:t,resolve:n})=>!(!t||t!==e.resourceTreeModel().target())||(n(e),!1)));n.length>0?this.#qn.set(e.id,n):this.#qn.delete(e.id)}}var kt;!function(e){e.FrameAddedToTarget="FrameAddedToTarget",e.FrameNavigated="FrameNavigated",e.FrameRemoved="FrameRemoved",e.ResourceAdded="ResourceAdded",e.TopFrameNavigated="TopFrameNavigated"}(kt||(kt={}));var St=Object.freeze({__proto__:null,FrameManager:yt,get Events(){return kt}});class wt extends l{constructor(e){super(e)}async read(t,n,r){const s=await this.target().ioAgent().invoke_read({handle:t,offset:r,size:n});if(s.getError())throw new Error(s.getError());return s.eof?null:s.base64Encoded?e.Base64.decode(s.data):s.data}async close(e){(await this.target().ioAgent().invoke_close({handle:e})).getError()&&console.error("Could not close stream.")}async resolveBlob(e){const t=e instanceof xe?e.objectId:e;if(!t)throw new Error("Remote object has undefined objectId");const n=await this.target().ioAgent().invoke_resolveBlob({objectId:t});if(n.getError())throw new Error(n.getError());return`blob:${n.uuid}`}async readToString(e){const t=[],n=new TextDecoder;for(;;){const r=await this.read(e,1048576);if(null===r){t.push(n.decode());break}r instanceof ArrayBuffer?t.push(n.decode(r,{stream:!0})):t.push(r)}return t.join("")}}l.register(wt,{capabilities:_.IO,autostart:!0});var Ct=Object.freeze({__proto__:null,IOModel:wt});const Tt={loadCanceledDueToReloadOf:"Load canceled due to reload of inspected page",loadCanceledDueToLoadTimeout:"Load canceled due to load timeout"},Rt=r.i18n.registerUIStrings("core/sdk/PageResourceLoader.ts",Tt),Mt=r.i18n.getLocalizedString.bind(void 0,Rt);let xt=null;class Pt extends e.ObjectWrapper.ObjectWrapper{#_n;#zn;#jn;#Wn;#Vn;#Gn;constructor(e,t,n){super(),this.#_n=0,this.#zn=t,this.#jn=new Map,this.#Wn=[],G.instance().addModelListener(qn,Un.MainFrameNavigated,this.onMainFrameNavigated,this),this.#Vn=e,this.#Gn=n}static instance({forceNew:e,loadOverride:t,maxConcurrentLoads:n,loadTimeout:r}={forceNew:!1,loadOverride:null,maxConcurrentLoads:500,loadTimeout:3e4}){return xt&&!e||(xt=new Pt(t,n,r)),xt}onMainFrameNavigated(e){if(e.data.isTopFrame()){for(const{reject:e}of this.#Wn)e(new Error(Mt(Tt.loadCanceledDueToReloadOf)));this.#Wn=[],this.#jn.clear(),this.dispatchEventToListeners(Et.Update)}}getResourcesLoaded(){return this.#jn}getNumberOfResources(){return{loading:this.#_n,queued:this.#Wn.length,resources:this.#jn.size}}async acquireLoadSlot(){if(this.#_n++,this.#_n>this.#zn){const e={resolve:()=>{},reject:()=>{}},t=new Promise(((t,n)=>{e.resolve=t,e.reject=n}));this.#Wn.push(e),await t}}releaseLoadSlot(){this.#_n--;const e=this.#Wn.shift();e&&e.resolve()}static async withTimeout(e,t){const n=new Promise(((e,n)=>setTimeout(n,t,new Error(Mt(Tt.loadCanceledDueToLoadTimeout)))));return Promise.race([e,n])}static makeKey(e,t){if(t.frameId)return`${e}-${t.frameId}`;if(t.target)return`${e}-${t.target.id()}`;throw new Error("Invalid initiator")}async loadResource(e,t){const n=Pt.makeKey(e,t),r={success:null,size:null,errorMessage:void 0,url:e,initiator:t};this.#jn.set(n,r),this.dispatchEventToListeners(Et.Update);try{await this.acquireLoadSlot();const n=this.dispatchLoad(e,t),s=await Pt.withTimeout(n,this.#Gn);if(r.errorMessage=s.errorDescription.message,r.success=s.success,s.success)return r.size=s.content.length,{content:s.content};throw new Error(s.errorDescription.message)}catch(e){throw void 0===r.errorMessage&&(r.errorMessage=e.message),null===r.success&&(r.success=!1),e}finally{this.releaseLoadSlot(),this.dispatchEventToListeners(Et.Update)}}async dispatchLoad(t,n){let r=null;if(this.#Vn)return this.#Vn(t);const i=new e.ParsedURL.ParsedURL(t),o=Lt().get()&&i&&i.isHttpOrHttps();if(s.userMetrics.developerResourceScheme(this.getDeveloperResourceScheme(i)),o){try{if(n.target){s.userMetrics.developerResourceLoaded(s.UserMetrics.DeveloperResourceLoaded.LoadThroughPageViaTarget);return await this.loadFromTarget(n.target,n.frameId,t)}const e=yt.instance().getFrame(n.frameId);if(e){s.userMetrics.developerResourceLoaded(s.UserMetrics.DeveloperResourceLoaded.LoadThroughPageViaFrame);return await this.loadFromTarget(e.resourceTreeModel().target(),n.frameId,t)}}catch(e){e instanceof Error&&(s.userMetrics.developerResourceLoaded(s.UserMetrics.DeveloperResourceLoaded.LoadThroughPageFailure),r=e.message)}s.userMetrics.developerResourceLoaded(s.UserMetrics.DeveloperResourceLoaded.LoadThroughPageFallback),console.warn("Fallback triggered",t,n)}else{const e=Lt().get()?s.UserMetrics.DeveloperResourceLoaded.FallbackPerProtocol:s.UserMetrics.DeveloperResourceLoaded.FallbackPerOverride;s.userMetrics.developerResourceLoaded(e)}const a=await ce.instance().loadResource(t);return o&&!a.success&&s.userMetrics.developerResourceLoaded(s.UserMetrics.DeveloperResourceLoaded.FallbackFailure),r&&(a.errorDescription.message=`Fetch through target failed: ${r}; Fallback: ${a.errorDescription.message}`),a}getDeveloperResourceScheme(e){if(!e||""===e.scheme)return s.UserMetrics.DeveloperResourceScheme.SchemeUnknown;const t="localhost"===e.host||e.host.endsWith(".localhost");switch(e.scheme){case"file":return s.UserMetrics.DeveloperResourceScheme.SchemeFile;case"data":return s.UserMetrics.DeveloperResourceScheme.SchemeData;case"blob":return s.UserMetrics.DeveloperResourceScheme.SchemeBlob;case"http":return t?s.UserMetrics.DeveloperResourceScheme.SchemeHttpLocalhost:s.UserMetrics.DeveloperResourceScheme.SchemeHttp;case"https":return t?s.UserMetrics.DeveloperResourceScheme.SchemeHttpsLocalhost:s.UserMetrics.DeveloperResourceScheme.SchemeHttps}return s.UserMetrics.DeveloperResourceScheme.SchemeOther}async loadFromTarget(e,t,n){const r=e.model(te),i=e.model(wt),o=await r.loadNetworkResource(t,n,{disableCache:!0,includeCredentials:!0});try{const e=o.stream?await i.readToString(o.stream):"";return{success:o.success,content:e,errorDescription:{statusCode:o.httpStatusCode||0,netError:o.netError,netErrorName:o.netErrorName,message:s.ResourceLoader.netErrorToMessage(o.netError,o.httpStatusCode,o.netErrorName)||"",urlValid:void 0}}}finally{o.stream&&i.close(o.stream)}}}function Lt(){return e.Settings.Settings.instance().createSetting("loadThroughTarget",!0)}var Et;(Et||(Et={})).Update="Update";var At=Object.freeze({__proto__:null,PageResourceLoader:Pt,getLoadThroughTargetSetting:Lt,get Events(){return Et}});const Ot={couldNotLoadContentForSS:"Could not load content for {PH1} ({PH2})"},Nt=r.i18n.registerUIStrings("core/sdk/CompilerSourceMappingContentProvider.ts",Ot),Ft=r.i18n.getLocalizedString.bind(void 0,Nt);class Dt{#Qn;#$n;#Xn;constructor(e,t,n){this.#Qn=e,this.#$n=t,this.#Xn=n}contentURL(){return this.#Qn}contentType(){return this.#$n}async contentEncoded(){return!1}async requestContent(){try{const{content:e}=await Pt.instance().loadResource(this.#Qn,this.#Xn);return{content:e,isEncoded:!1}}catch(e){const t=Ft(Ot.couldNotLoadContentForSS,{PH1:this.#Qn,PH2:e.message});return console.error(t),{content:null,error:t,isEncoded:!1}}}async searchInContent(e,t,r){const{content:s}=await this.requestContent();return"string"!=typeof s?[]:n.TextUtils.performSearchInContent(s,e,t,r)}}var Bt=Object.freeze({__proto__:null,CompilerSourceMappingContentProvider:Dt});const Ut={couldNotLoadContentForSS:"Could not load content for {PH1}: {PH2}",couldNotParseContentForSS:"Could not parse content for {PH1}: {PH2}"},Ht=r.i18n.registerUIStrings("core/sdk/SourceMap.ts",Ut),qt=r.i18n.getLocalizedString.bind(void 0,Ht);class _t{lineNumber;columnNumber;sourceURL;sourceLineNumber;sourceColumnNumber;name;constructor(e,t,n,r,s,i){this.lineNumber=e,this.columnNumber=t,this.sourceURL=n,this.sourceLineNumber=r,this.sourceColumnNumber=s,this.name=i}static compare(e,t){return e.lineNumber!==t.lineNumber?e.lineNumber-t.lineNumber:e.columnNumber-t.columnNumber}}const zt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",jt=new Map;for(let e=0;eBoolean(e.url))))&&e.Console.Console.instance().warn(`SourceMap "${n}" contains unsupported "URL" field in one of its sections.`)}this.eachSection(this.parseSources.bind(this))}static async load(e,t,n){let r;try{const{content:t}=await Pt.instance().loadResource(e,n);r=t,")]}"===t.slice(0,3)&&(r=t.substring(t.indexOf("\n")))}catch(t){throw new Error(qt(Ut.couldNotLoadContentForSS,{PH1:e,PH2:t.message}))}try{const s=JSON.parse(r);return new Vt(t,e,s,n)}catch(t){throw new Error(qt(Ut.couldNotParseContentForSS,{PH1:e,PH2:t.message}))}}compiledURL(){return this.#Jn}url(){return this.#Yn}sourceURLs(){return[...this.#tr.keys()]}sourceContentProvider(e,t){const r=this.#tr.get(e);return r&&r.content?n.StaticContentProvider.StaticContentProvider.fromString(e,t,r.content):new Dt(e,t,this.#Xn)}embeddedContentByURL(e){const t=this.#tr.get(e);return t?t.content:null}findEntry(e,n){const r=this.mappings(),s=t.ArrayUtilities.upperBound(r,void 0,((t,r)=>e-r.lineNumber||n-r.columnNumber));return s?r[s-1]:null}sourceLineMapping(e,n,r){const s=this.mappings(),i=this.reversedMappings(e),o=t.ArrayUtilities.lowerBound(i,n,c),a=t.ArrayUtilities.upperBound(i,n,c);if(o>=i.length||s[i[o]].sourceLineNumber!==n)return null;const l=i.slice(o,a);if(!l.length)return null;const d=t.ArrayUtilities.lowerBound(l,r,((e,t)=>e-s[t].sourceColumnNumber));return d>=l.length?s[l[l.length-1]]:s[l[d]];function c(e,t){return e-s[t].sourceLineNumber}}findReverseIndices(e,n,r){const s=this.mappings(),i=this.reversedMappings(e),o=t.ArrayUtilities.upperBound(i,void 0,((e,t)=>n-s[t].sourceLineNumber||r-s[t].sourceColumnNumber));let a=o;for(;a>0&&s[i[a-1]].sourceLineNumber===s[i[o-1]].sourceLineNumber&&s[i[a-1]].sourceColumnNumber===s[i[o-1]].sourceColumnNumber;)--a;return i.slice(a,o)}findReverseEntries(e,t,n){const r=this.mappings();return this.findReverseIndices(e,t,n).map((e=>r[e]))}findReverseRanges(e,t,r){const s=this.mappings(),i=this.findReverseIndices(e,t,r),o=[];for(let e=0;et));t.reverseMappings=r.filter((t=>n[t].sourceURL===e)).sort((function(e,t){const r=n[e],s=n[t];if(r.sourceLineNumber!==s.sourceLineNumber)return r.sourceLineNumber-s.sourceLineNumber;if(r.sourceColumnNumber!==s.sourceColumnNumber)return r.sourceColumnNumber-s.sourceColumnNumber;if(r.lineNumber!==s.lineNumber)return r.lineNumber-s.lineNumber;return r.columnNumber-s.columnNumber}))}return t.reverseMappings}eachSection(e){if(this.#Kn)if(this.#Kn.sections)for(const t of this.#Kn.sections)e(t.map,t.offset.line,t.offset.column);else e(this.#Kn,0,0)}parseSources(t){const n=[];let r=t.sourceRoot||"";r&&!r.endsWith("/")&&(r+="/");for(let s=0;s>=1,s?-t:t}reverseMapTextRange(e,r){function s(e,t){return e.lineNumber!==o[t].sourceLineNumber?e.lineNumber-o[t].sourceLineNumber:e.columnNumber-o[t].sourceColumnNumber}const i=this.reversedMappings(e),o=this.mappings();if(!i.length)return null;const a=t.ArrayUtilities.lowerBound(i,{lineNumber:r.startLine,columnNumber:r.startColumn},s),l=t.ArrayUtilities.upperBound(i,{lineNumber:r.endLine,columnNumber:r.endColumn},s);if(l>=i.length)return null;const d=o[i[a]],c=o[i[l]];return new n.TextRange.TextRange(d.lineNumber,d.columnNumber,c.lineNumber,c.columnNumber)}mapsOrigin(){const e=this.mappings();if(e.length>0){const t=e[0];return 0===t?.lineNumber||0===t.columnNumber}return!1}}!function(e){e._VLQ_BASE_SHIFT=5,e._VLQ_BASE_MASK=31,e._VLQ_CONTINUATION_MASK=32;e.StringCharIterator=class{string;position;constructor(e){this.string=e,this.position=0}next(){return this.string.charAt(this.position++)}peek(){return this.string.charAt(this.position)}hasNext(){return this.position(e.Console.Console.instance().warn(Xt(Qt.devtoolsFailedToLoadSourcemapS,{PH1:t.message})),null))).then(function(e,t){this.sourceMapLoadedForTest();const n=this.#lr.get(e);if(this.#lr.deleteAll(e),!n.size)return;if(!t){for(const e of n)this.dispatchEventToListeners(Jt.SourceMapFailedToAttach,{client:e});return}this.#ar.set(e,t);for(const t of n)l.call(this,e,t)}.bind(this,a)),this.#lr.set(a,t)))}detachSourceMap(e){const t=this.#or.get(e);if(this.#sr.delete(e),this.#ir.delete(e),this.#or.delete(e),!t)return;if(!this.#dr.hasValue(t,e))return void(this.#lr.delete(t,e)&&this.dispatchEventToListeners(Jt.SourceMapFailedToAttach,{client:e}));this.#dr.delete(t,e);const n=this.#ar.get(t);n&&(this.#dr.has(t)||this.#ar.delete(t),this.dispatchEventToListeners(Jt.SourceMapDetached,{client:e,sourceMap:n}))}sourceMapLoadedForTest(){}dispose(){G.instance().removeEventListener(Q.InspectedURLChanged,this.inspectedURLChanged,this)}}var Jt;!function(e){e.SourceMapWillAttach="SourceMapWillAttach",e.SourceMapFailedToAttach="SourceMapFailedToAttach",e.SourceMapAttached="SourceMapAttached",e.SourceMapDetached="SourceMapDetached"}(Jt||(Jt={}));var Yt,Zt=Object.freeze({__proto__:null,SourceMapManager:Kt,get Events(){return Jt}});class en extends l{agent;#cr;#hr;#ur;#gr;#mr;#pr;#br;#fr;#Ir;#vr;#yr;#kr;#Sr;#rr;#wr;#Cr;constructor(t){super(t),this.#rr=!1,this.#vr=null,this.#yr=null,this.#cr=t.model(Pn),this.#mr=new Kt(t),this.agent=t.cssAgent(),this.#pr=new on(this),this.#gr=t.model(qn),this.#gr&&this.#gr.addEventListener(Un.MainFrameNavigated,this.onMainFrameNavigated,this),t.registerCSSDispatcher(new sn(this)),t.suspended()||this.enable(),this.#Ir=new Map,this.#fr=new Map,this.#ur=new Map,this.#wr=!1,this.#hr=new Map,this.#kr=null,this.#Sr=!1,this.#Cr=!1,this.#br=new e.Throttler.Throttler(dn),this.#mr.setEnabled(e.Settings.Settings.instance().moduleSetting("cssSourceMapsEnabled").get()),e.Settings.Settings.instance().moduleSetting("cssSourceMapsEnabled").addChangeListener((e=>this.#mr.setEnabled(e.data)))}headersForSourceURL(e){const t=[];for(const n of this.getStyleSheetIdsForURL(e)){const e=this.styleSheetHeaderForId(n);e&&t.push(e)}return t}createRawLocationsByURL(e,n,r=0){const s=this.headersForSourceURL(e);s.sort((function(e,t){return e.startLine-t.startLine||e.startColumn-t.startColumn||e.id.localeCompare(t.id)}));const i=t.ArrayUtilities.upperBound(s,void 0,((e,t)=>n-t.startLine||r-t.startColumn));if(!i)return[];const o=[],a=s[i-1];for(let e=i-1;e>=0&&s[e].startLine===a.startLine&&s[e].startColumn===a.startColumn;--e)s[e].containsLocation(n,r)&&o.push(new rn(s[e],n,r));return o}sourceMapManager(){return this.#mr}static trimSourceURL(e){let t=e.lastIndexOf("/*# sourceURL=");if(-1===t&&(t=e.lastIndexOf("/*@ sourceURL="),-1===t))return e;const n=e.lastIndexOf("\n",t);if(-1===n)return e;const r=e.substr(n+1).split("\n",1)[0];return-1===r.search(/[\040\t]*\/\*[#@] sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/)?e:e.substr(0,n)+e.substr(n+r.length+1)}domModel(){return this.#cr}async setStyleText(e,t,n,r){try{await this.ensureOriginalStyleSheetText(e);const{styles:s}=await this.agent.invoke_setStyleTexts({edits:[{styleSheetId:e,range:t.serializeToObject(),text:n}]});if(!s||1!==s.length)return!1;this.#cr.markUndoableState(!r);const i=new nn(e,t,n,s[0]);return this.fireStyleSheetChanged(e,i),!0}catch(e){return!1}}async setSelectorText(e,t,n){s.userMetrics.actionTaken(s.UserMetrics.Action.StyleRuleEdited);try{await this.ensureOriginalStyleSheetText(e);const{selectorList:r}=await this.agent.invoke_setRuleSelector({styleSheetId:e,range:t,selector:n});if(!r)return!1;this.#cr.markUndoableState();const s=new nn(e,t,n,r);return this.fireStyleSheetChanged(e,s),!0}catch(e){return!1}}async setKeyframeKey(e,t,n){s.userMetrics.actionTaken(s.UserMetrics.Action.StyleRuleEdited);try{await this.ensureOriginalStyleSheetText(e);const{keyText:r}=await this.agent.invoke_setKeyframeKey({styleSheetId:e,range:t,keyText:n});if(!r)return!1;this.#cr.markUndoableState();const s=new nn(e,t,n,r);return this.fireStyleSheetChanged(e,s),!0}catch(e){return!1}}startCoverage(){return this.#wr=!0,this.agent.invoke_startRuleUsageTracking()}async takeCoverageDelta(){const e=await this.agent.invoke_takeCoverageDelta();return{timestamp:e&&e.timestamp||0,coverage:e&&e.coverage||[]}}setLocalFontsEnabled(e){return this.agent.invoke_setLocalFontsEnabled({enabled:e})}async stopCoverage(){this.#wr=!1,await this.agent.invoke_stopRuleUsageTracking()}async mediaQueriesPromise(){const{medias:e}=await this.agent.invoke_getMediaQueries();return e?Ke.parseMediaArrayPayload(this,e):[]}isEnabled(){return this.#rr}async enable(){await this.agent.invoke_enable(),this.#rr=!0,this.#wr&&await this.startCoverage(),this.dispatchEventToListeners(Yt.ModelWasEnabled)}async matchedStylesPromise(e){const t=await this.agent.invoke_getMatchedStylesForNode({nodeId:e});if(t.getError())return null;const n=this.#cr.nodeForId(e);return n?new ct(this,n,t.inlineStyle||null,t.attributesStyle||null,t.matchedCSSRules||[],t.pseudoElements||[],t.inherited||[],t.cssKeyframesRules||[]):null}async classNamesPromise(e){const{classNames:t}=await this.agent.invoke_collectClassNames({styleSheetId:e});return t||[]}computedStylePromise(e){return this.#pr.computedStylePromise(e)}async backgroundColorsPromise(e){const t=await this.agent.invoke_getBackgroundColors({nodeId:e});return t.getError()?null:{backgroundColors:t.backgroundColors||null,computedFontSize:t.computedFontSize||"",computedFontWeight:t.computedFontWeight||""}}async platformFontsPromise(e){const{fonts:t}=await this.agent.invoke_getPlatformFontsForNode({nodeId:e});return t}allStyleSheets(){const e=[...this.#Ir.values()];return e.sort((function(e,t){return e.sourceURLt.sourceURL?1:e.startLine-t.startLine||e.startColumn-t.startColumn})),e}async inlineStylesPromise(e){const t=await this.agent.invoke_getInlineStylesForNode({nodeId:e});if(t.getError()||!t.inlineStyle)return null;const n=new tt(this,null,t.inlineStyle,Ze.Inline),r=t.attributesStyle?new tt(this,null,t.attributesStyle,Ze.Attributes):null;return new an(n,r)}forcePseudoState(e,n,r){const s=e.marker(tn)||[],i=s.includes(n);if(r){if(i)return!1;s.push(n),e.setMarker(tn,s)}else{if(!i)return!1;t.ArrayUtilities.removeElement(s,n),s.length?e.setMarker(tn,s):e.setMarker(tn,null)}return void 0!==e.id&&(this.agent.invoke_forcePseudoState({nodeId:e.id,forcedPseudoClasses:s}),this.dispatchEventToListeners(Yt.PseudoStateForced,{node:e,pseudoClass:n,enable:r}),!0)}pseudoState(e){return e.marker(tn)||[]}async setMediaText(e,t,n){s.userMetrics.actionTaken(s.UserMetrics.Action.StyleRuleEdited);try{await this.ensureOriginalStyleSheetText(e);const{media:r}=await this.agent.invoke_setMediaText({styleSheetId:e,range:t,text:n});if(!r)return!1;this.#cr.markUndoableState();const s=new nn(e,t,n,r);return this.fireStyleSheetChanged(e,s),!0}catch(e){return!1}}async setContainerQueryText(e,t,n){s.userMetrics.actionTaken(s.UserMetrics.Action.StyleRuleEdited);try{await this.ensureOriginalStyleSheetText(e);const{containerQuery:r}=await this.agent.invoke_setContainerQueryText({styleSheetId:e,range:t,text:n});if(!r)return!1;this.#cr.markUndoableState();const s=new nn(e,t,n,r);return this.fireStyleSheetChanged(e,s),!0}catch(e){return!1}}async addRule(e,t,n){try{await this.ensureOriginalStyleSheetText(e);const{rule:r}=await this.agent.invoke_addRule({styleSheetId:e,ruleText:t,location:n});if(!r)return null;this.#cr.markUndoableState();const s=new nn(e,n,t,r);return this.fireStyleSheetChanged(e,s),new it(this,r)}catch(e){return null}}async requestViaInspectorStylesheet(e){const t=e.frameId()||(this.#gr&&this.#gr.mainFrame?this.#gr.mainFrame.id:null),n=[...this.#Ir.values()].find((e=>e.frameId===t&&e.isViaInspector()));if(n)return n;if(!t)return null;try{const{styleSheetId:e}=await this.agent.invoke_createStyleSheet({frameId:t});return e&&this.#Ir.get(e)||null}catch(e){return null}}mediaQueryResultChanged(){this.dispatchEventToListeners(Yt.MediaQueryResultChanged)}fontsUpdated(e){e&&this.#hr.set(e.src,new He(e)),this.dispatchEventToListeners(Yt.FontsUpdated)}fontFaces(){return[...this.#hr.values()]}styleSheetHeaderForId(e){return this.#Ir.get(e)||null}styleSheetHeaders(){return[...this.#Ir.values()]}fireStyleSheetChanged(e,t){this.dispatchEventToListeners(Yt.StyleSheetChanged,{styleSheetId:e,edit:t})}ensureOriginalStyleSheetText(e){const t=this.styleSheetHeaderForId(e);if(!t)return Promise.resolve(null);let n=this.#ur.get(t);return n||(n=this.getStyleSheetText(t.id),this.#ur.set(t,n),this.originalContentRequestedForTest(t)),n}originalContentRequestedForTest(e){}originalStyleSheetText(e){return this.ensureOriginalStyleSheetText(e.id)}getAllStyleSheetHeaders(){return this.#Ir.values()}styleSheetAdded(e){console.assert(!this.#Ir.get(e.styleSheetId));const t=new ft(this,e);this.#Ir.set(e.styleSheetId,t);const n=t.resourceURL();let r=this.#fr.get(n);if(r||(r=new Map,this.#fr.set(n,r)),r){let e=r.get(t.frameId);e||(e=new Set,r.set(t.frameId,e)),e.add(t.id)}this.#mr.attachSourceMap(t,t.sourceURL,t.sourceMapURL),this.dispatchEventToListeners(Yt.StyleSheetAdded,t)}styleSheetRemoved(e){const t=this.#Ir.get(e);if(console.assert(Boolean(t)),!t)return;this.#Ir.delete(e);const n=t.resourceURL(),r=this.#fr.get(n);if(console.assert(Boolean(r),"No frameId to styleSheetId map is available for given style sheet URL."),r){const s=r.get(t.frameId);s&&(s.delete(e),s.size||(r.delete(t.frameId),r.size||this.#fr.delete(n)))}this.#ur.delete(t),this.#mr.detachSourceMap(t),this.dispatchEventToListeners(Yt.StyleSheetRemoved,t)}getStyleSheetIdsForURL(e){const t=this.#fr.get(e);if(!t)return[];const n=[];for(const e of t.values())n.push(...e);return n}async setStyleSheetText(e,t,n){const r=this.#Ir.get(e);if(!r)return"Unknown stylesheet in CSS.setStyleSheetText";t=en.trimSourceURL(t),r.hasSourceURL&&(t+="\n/*# sourceURL="+r.sourceURL+" */"),await this.ensureOriginalStyleSheetText(e);const s=(await this.agent.invoke_setStyleSheetText({styleSheetId:r.id,text:t})).sourceMapURL;return this.#mr.detachSourceMap(r),r.setSourceMapURL(s),this.#mr.attachSourceMap(r,r.sourceURL,r.sourceMapURL),null===s?"Error in CSS.setStyleSheetText":(this.#cr.markUndoableState(!n),this.fireStyleSheetChanged(e),null)}async getStyleSheetText(e){try{const{text:t}=await this.agent.invoke_getStyleSheetText({styleSheetId:e});return t&&en.trimSourceURL(t)}catch(e){return null}}async onMainFrameNavigated(e){e.data.backForwardCacheDetails.restoredFromCache?(await this.suspendModel(),await this.resumeModel()):(this.resetStyleSheets(),this.resetFontFaces())}resetStyleSheets(){const e=[...this.#Ir.values()];this.#fr.clear(),this.#Ir.clear();for(const t of e)this.#mr.detachSourceMap(t),this.dispatchEventToListeners(Yt.StyleSheetRemoved,t)}resetFontFaces(){this.#hr.clear()}async suspendModel(){this.#rr=!1,await this.agent.invoke_disable(),this.resetStyleSheets(),this.resetFontFaces()}async resumeModel(){return this.enable()}setEffectivePropertyValueForNode(e,t,n){this.agent.invoke_setEffectivePropertyValueForNode({nodeId:e,propertyName:t,value:n})}cachedMatchedCascadeForNode(e){if(this.#vr!==e&&this.discardCachedMatchedCascade(),this.#vr=e,!this.#yr){if(!e.id)return Promise.resolve(null);this.#yr=this.matchedStylesPromise(e.id)}return this.#yr}discardCachedMatchedCascade(){this.#vr=null,this.#yr=null}createCSSPropertyTracker(e){return new ln(this,e)}enableCSSPropertyTracker(e){const t=e.getTrackedProperties();0!==t.length&&(this.agent.invoke_trackComputedStyleUpdates({propertiesToTrack:t}),this.#Sr=!0,this.#kr=e,this.pollComputedStyleUpdates())}disableCSSPropertyTracker(){this.#Sr=!1,this.#kr=null,this.agent.invoke_trackComputedStyleUpdates({propertiesToTrack:[]})}async pollComputedStyleUpdates(){if(!this.#Cr){if(this.#Sr){this.#Cr=!0;const e=await this.agent.invoke_takeComputedStyleUpdates();if(this.#Cr=!1,e.getError()||!e.nodeIds||!this.#Sr)return;this.#kr&&this.#kr.dispatchEventToListeners(cn.TrackedCSSPropertiesUpdated,e.nodeIds.map((e=>this.#cr.nodeForId(e))))}this.#Sr&&this.#br.schedule(this.pollComputedStyleUpdates.bind(this))}}dispose(){this.disableCSSPropertyTracker(),super.dispose(),this.#mr.dispose()}getAgent(){return this.agent}}!function(e){e.FontsUpdated="FontsUpdated",e.MediaQueryResultChanged="MediaQueryResultChanged",e.ModelWasEnabled="ModelWasEnabled",e.PseudoStateForced="PseudoStateForced",e.StyleSheetAdded="StyleSheetAdded",e.StyleSheetChanged="StyleSheetChanged",e.StyleSheetRemoved="StyleSheetRemoved"}(Yt||(Yt={}));const tn="pseudo-state-marker";class nn{styleSheetId;oldRange;newRange;newText;payload;constructor(e,t,r,s){this.styleSheetId=e,this.oldRange=t,this.newRange=n.TextRange.TextRange.fromEdit(t,r),this.newText=r,this.payload=s}}class rn{#ln;styleSheetId;url;lineNumber;columnNumber;constructor(e,t,n){this.#ln=e.cssModel(),this.styleSheetId=e.id,this.url=e.resourceURL(),this.lineNumber=t,this.columnNumber=n||0}cssModel(){return this.#ln}header(){return this.#ln.styleSheetHeaderForId(this.styleSheetId)}}class sn{#mn;constructor(e){this.#mn=e}mediaQueryResultChanged(){this.#mn.mediaQueryResultChanged()}fontsUpdated({font:e}){this.#mn.fontsUpdated(e)}styleSheetChanged({styleSheetId:e}){this.#mn.fireStyleSheetChanged(e)}styleSheetAdded({header:e}){this.#mn.styleSheetAdded(e)}styleSheetRemoved({styleSheetId:e}){this.#mn.styleSheetRemoved(e)}}class on{#mn;#Tr;constructor(e){this.#mn=e,this.#Tr=new Map}computedStylePromise(e){let t=this.#Tr.get(e);return t||(t=this.#mn.getAgent().invoke_getComputedStyleForNode({nodeId:e}).then((({computedStyle:t})=>{if(this.#Tr.delete(e),!t||!t.length)return null;const n=new Map;for(const e of t)n.set(e.name,e.value);return n})),this.#Tr.set(e,t),t)}}class an{inlineStyle;attributesStyle;constructor(e,t){this.inlineStyle=e,this.attributesStyle=t}}class ln extends e.ObjectWrapper.ObjectWrapper{#mn;#Rr;constructor(e,t){super(),this.#mn=e,this.#Rr=t}start(){this.#mn.enableCSSPropertyTracker(this)}stop(){this.#mn.disableCSSPropertyTracker()}getTrackedProperties(){return this.#Rr}}const dn=1e3;var cn;!function(e){e.TrackedCSSPropertiesUpdated="TrackedCSSPropertiesUpdated"}(cn||(cn={})),l.register(en,{capabilities:_.DOM,autostart:!0});var hn=Object.freeze({__proto__:null,CSSModel:en,get Events(){return Yt},Edit:nn,CSSLocation:rn,InlineStyleResult:an,CSSPropertyTracker:ln,get CSSPropertyTrackerEvents(){return cn}});class un{#Mr;#xr;constructor(){const{Color:t,Format:n}=e.Color;this.#Mr=[new t([.9607843137254902,.592156862745098,.5803921568627451,1],n.RGBA),new t([.9411764705882353,.7490196078431373,.2980392156862745,1],n.RGBA),new t([.8313725490196079,.9294117647058824,.19215686274509805,1],n.RGBA),new t([.6196078431372549,.9215686274509803,.2784313725490196,1],n.RGBA),new t([.3568627450980392,.8196078431372549,.8431372549019608,1],n.RGBA),new t([.7372549019607844,.807843137254902,.984313725490196,1],n.RGBA),new t([.7764705882352941,.7450980392156863,.9333333333333333,1],n.RGBA),new t([.8156862745098039,.5803921568627451,.9176470588235294,1],n.RGBA),new t([.9215686274509803,.5803921568627451,.8117647058823529,1],n.RGBA)],this.#xr=0}next(){const e=this.#Mr[this.#xr];return this.#xr++,this.#xr>=this.#Mr.length&&(this.#xr=0),e}}var gn=Object.freeze({__proto__:null,OverlayColorGenerator:un});class mn{#Pr;#Lr;#Er;#Ar;#Or;#Nr;#Mr;#Fr;#Dr;#Br;#Ur;#Hr;#qr;#_r;constructor(t,n=!0){this.#Pr=t,this.#Lr=new Map,this.#Er=new Map,this.#Ar=new Map,this.#Or=new Map,this.#Nr=new Map,this.#Mr=new Map,this.#Fr=new un,this.#Dr=new un,this.#Br=n,this.#Ur=e.Settings.Settings.instance().moduleSetting("showGridLineLabels"),this.#Ur.addChangeListener(this.onSettingChange,this),this.#Hr=e.Settings.Settings.instance().moduleSetting("extendGridLines"),this.#Hr.addChangeListener(this.onSettingChange,this),this.#qr=e.Settings.Settings.instance().moduleSetting("showGridAreas"),this.#qr.addChangeListener(this.onSettingChange,this),this.#_r=e.Settings.Settings.instance().moduleSetting("showGridTrackSizes"),this.#_r.addChangeListener(this.onSettingChange,this)}onSettingChange(){this.resetOverlay()}buildGridHighlightConfig(e){const t=this.colorOfGrid(e),n=t.setAlpha(.1),r=t.setAlpha(.3),s=t.setAlpha(.8),i=this.#Hr.get(),o="lineNumbers"===this.#Ur.get(),a=o,l="lineNames"===this.#Ur.get();return{rowGapColor:r.toProtocolRGBA(),rowHatchColor:s.toProtocolRGBA(),columnGapColor:r.toProtocolRGBA(),columnHatchColor:s.toProtocolRGBA(),gridBorderColor:t.toProtocolRGBA(),gridBorderDash:!1,rowLineColor:t.toProtocolRGBA(),columnLineColor:t.toProtocolRGBA(),rowLineDash:!0,columnLineDash:!0,showGridExtensionLines:i,showPositiveLineNumbers:o,showNegativeLineNumbers:a,showLineNames:l,showAreaNames:this.#qr.get(),showTrackSizes:this.#_r.get(),areaBorderColor:t.toProtocolRGBA(),gridBackgroundColor:n.toProtocolRGBA()}}buildFlexContainerHighlightConfig(e){const t=this.colorOfFlex(e);return{containerBorder:{color:t.toProtocolRGBA(),pattern:"dashed"},itemSeparator:{color:t.toProtocolRGBA(),pattern:"dotted"},lineSeparator:{color:t.toProtocolRGBA(),pattern:"dashed"},mainDistributedSpace:{hatchColor:t.toProtocolRGBA()},crossDistributedSpace:{hatchColor:t.toProtocolRGBA()}}}buildScrollSnapContainerHighlightConfig(t){return{snapAreaBorder:{color:e.Color.PageHighlight.GridBorder.toProtocolRGBA(),pattern:"dashed"},snapportBorder:{color:e.Color.PageHighlight.GridBorder.toProtocolRGBA()},scrollMarginColor:e.Color.PageHighlight.Margin.toProtocolRGBA(),scrollPaddingColor:e.Color.PageHighlight.Padding.toProtocolRGBA()}}highlightGridInOverlay(e){this.#Lr.set(e,this.buildGridHighlightConfig(e)),this.updateHighlightsInOverlay()}isGridHighlighted(e){return this.#Lr.has(e)}colorOfGrid(e){let t=this.#Mr.get(e);return t||(t=this.#Fr.next(),this.#Mr.set(e,t)),t}setColorOfGrid(e,t){this.#Mr.set(e,t)}hideGridInOverlay(e){this.#Lr.has(e)&&(this.#Lr.delete(e),this.updateHighlightsInOverlay())}highlightScrollSnapInOverlay(e){this.#Er.set(e,this.buildScrollSnapContainerHighlightConfig(e)),this.updateHighlightsInOverlay()}isScrollSnapHighlighted(e){return this.#Er.has(e)}hideScrollSnapInOverlay(e){this.#Er.has(e)&&(this.#Er.delete(e),this.updateHighlightsInOverlay())}highlightFlexInOverlay(e){this.#Ar.set(e,this.buildFlexContainerHighlightConfig(e)),this.updateHighlightsInOverlay()}isFlexHighlighted(e){return this.#Ar.has(e)}colorOfFlex(e){let t=this.#Mr.get(e);return t||(t=this.#Dr.next(),this.#Mr.set(e,t)),t}setColorOfFlex(e,t){this.#Mr.set(e,t)}hideFlexInOverlay(e){this.#Ar.has(e)&&(this.#Ar.delete(e),this.updateHighlightsInOverlay())}highlightContainerQueryInOverlay(e){this.#Or.set(e,this.buildContainerQueryContainerHighlightConfig()),this.updateHighlightsInOverlay()}hideContainerQueryInOverlay(e){this.#Or.has(e)&&(this.#Or.delete(e),this.updateHighlightsInOverlay())}isContainerQueryHighlighted(e){return this.#Or.has(e)}buildContainerQueryContainerHighlightConfig(){return{containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},descendantBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"}}}highlightIsolatedElementInOverlay(e){this.#Nr.set(e,this.buildIsolationModeHighlightConfig()),this.updateHighlightsInOverlay()}hideIsolatedElementInOverlay(e){this.#Nr.has(e)&&(this.#Nr.delete(e),this.updateHighlightsInOverlay())}isIsolatedElementHighlighted(e){return this.#Nr.has(e)}buildIsolationModeHighlightConfig(){return{resizerColor:e.Color.IsolationModeHighlight.Resizer.toProtocolRGBA(),resizerHandleColor:e.Color.IsolationModeHighlight.ResizerHandle.toProtocolRGBA(),maskColor:e.Color.IsolationModeHighlight.Mask.toProtocolRGBA()}}hideAllInOverlay(){this.#Ar.clear(),this.#Lr.clear(),this.#Er.clear(),this.#Or.clear(),this.#Nr.clear(),this.updateHighlightsInOverlay()}refreshHighlights(){const e=this.updateHighlightsForDeletedNodes(this.#Lr),t=this.updateHighlightsForDeletedNodes(this.#Ar),n=this.updateHighlightsForDeletedNodes(this.#Er),r=this.updateHighlightsForDeletedNodes(this.#Or),s=this.updateHighlightsForDeletedNodes(this.#Nr);(t||e||n||r||s)&&this.updateHighlightsInOverlay()}updateHighlightsForDeletedNodes(e){let t=!1;for(const n of e.keys())null===this.#Pr.getDOMModel().nodeForId(n)&&(e.delete(n),t=!0);return t}resetOverlay(){for(const e of this.#Lr.keys())this.#Lr.set(e,this.buildGridHighlightConfig(e));for(const e of this.#Ar.keys())this.#Ar.set(e,this.buildFlexContainerHighlightConfig(e));for(const e of this.#Er.keys())this.#Er.set(e,this.buildScrollSnapContainerHighlightConfig(e));for(const e of this.#Or.keys())this.#Or.set(e,this.buildContainerQueryContainerHighlightConfig());for(const e of this.#Nr.keys())this.#Nr.set(e,this.buildIsolationModeHighlightConfig());this.updateHighlightsInOverlay()}updateHighlightsInOverlay(){const e=this.#Lr.size>0||this.#Ar.size>0||this.#Or.size>0||this.#Nr.size>0;this.#Pr.setShowViewportSizeOnResize(!e),this.updateGridHighlightsInOverlay(),this.updateFlexHighlightsInOverlay(),this.updateScrollSnapHighlightsInOverlay(),this.updateContainerQueryHighlightsInOverlay(),this.updateIsolatedElementHighlightsInOverlay()}updateGridHighlightsInOverlay(){const e=this.#Pr,t=[];for(const[e,n]of this.#Lr.entries())t.push({nodeId:e,gridHighlightConfig:n});e.target().overlayAgent().invoke_setShowGridOverlays({gridNodeHighlightConfigs:t})}updateFlexHighlightsInOverlay(){if(!this.#Br)return;const e=this.#Pr,t=[];for(const[e,n]of this.#Ar.entries())t.push({nodeId:e,flexContainerHighlightConfig:n});e.target().overlayAgent().invoke_setShowFlexOverlays({flexNodeHighlightConfigs:t})}updateScrollSnapHighlightsInOverlay(){const e=this.#Pr,t=[];for(const[e,n]of this.#Er.entries())t.push({nodeId:e,scrollSnapContainerHighlightConfig:n});e.target().overlayAgent().invoke_setShowScrollSnapOverlays({scrollSnapHighlightConfigs:t})}updateContainerQueryHighlightsInOverlay(){const e=this.#Pr,t=[];for(const[e,n]of this.#Or.entries())t.push({nodeId:e,containerQueryContainerHighlightConfig:n});e.target().overlayAgent().invoke_setShowContainerQueryOverlays({containerQueryHighlightConfigs:t})}updateIsolatedElementHighlightsInOverlay(){const e=this.#Pr,t=[];for(const[e,n]of this.#Nr.entries())t.push({nodeId:e,isolationModeHighlightConfig:n});e.target().overlayAgent().invoke_setShowIsolatedElements({isolatedElementHighlightConfigs:t})}}var pn=Object.freeze({__proto__:null,OverlayPersistentHighlighter:mn});const bn={pausedInDebugger:"Paused in debugger"},fn=r.i18n.registerUIStrings("core/sdk/OverlayModel.ts",bn),In=r.i18n.getLocalizedString.bind(void 0,fn);class vn extends l{#cr;overlayAgent;#zr;#jr;#Wr;#Vr;#Gr;#Qr;#$r;#Xr;#Kr;#Jr;#Yr;#Zr;#es;#ts;#ns;#rs;#ss;constructor(t){super(t),this.#cr=t.model(Pn),t.registerOverlayDispatcher(this),this.overlayAgent=t.overlayAgent(),this.#zr=t.model(nr),this.#zr&&(e.Settings.Settings.instance().moduleSetting("disablePausedStateOverlay").addChangeListener(this.updatePausedInDebuggerMessage,this),this.#zr.addEventListener(or.DebuggerPaused,this.updatePausedInDebuggerMessage,this),this.#zr.addEventListener(or.DebuggerResumed,this.updatePausedInDebuggerMessage,this),this.#zr.addEventListener(or.GlobalObjectCleared,this.updatePausedInDebuggerMessage,this)),this.#jr=!1,this.#Wr=null,this.#Vr=new kn(this),this.#Gr=this.#Vr,this.#Qr=e.Settings.Settings.instance().moduleSetting("showPaintRects"),this.#$r=e.Settings.Settings.instance().moduleSetting("showLayoutShiftRegions"),this.#Xr=e.Settings.Settings.instance().moduleSetting("showAdHighlights"),this.#Kr=e.Settings.Settings.instance().moduleSetting("showDebugBorders"),this.#Jr=e.Settings.Settings.instance().moduleSetting("showFPSCounter"),this.#Yr=e.Settings.Settings.instance().moduleSetting("showScrollBottleneckRects"),this.#Zr=e.Settings.Settings.instance().moduleSetting("showWebVitals"),this.#es=[],this.#ts=!0,t.suspended()||(this.overlayAgent.invoke_enable(),this.wireAgentToSettings()),this.#ns=new mn(this),this.#cr.addEventListener(wn.NodeRemoved,(()=>{this.#ns&&this.#ns.refreshHighlights()})),this.#cr.addEventListener(wn.DocumentUpdated,(()=>{this.#ns&&this.#ns.hideAllInOverlay()})),this.#rs=new Sn(this),this.#ss=!1}static highlightObjectAsDOMNode(e){const t=e.runtimeModel().target().model(Pn);t&&t.overlayModel().highlightInOverlay({object:e,selectorList:void 0})}static hideDOMNodeHighlight(){for(const e of G.instance().models(vn))e.delayedHideHighlight(0)}static async muteHighlight(){return Promise.all(G.instance().models(vn).map((e=>e.suspendModel())))}static async unmuteHighlight(){return Promise.all(G.instance().models(vn).map((e=>e.resumeModel())))}static highlightRect(e){for(const t of G.instance().models(vn))t.highlightRect(e)}static clearHighlight(){for(const e of G.instance().models(vn))e.clearHighlight()}getDOMModel(){return this.#cr}highlightRect({x:e,y:t,width:n,height:r,color:s,outlineColor:i}){const o=s||{r:255,g:0,b:255,a:.3},a=i||{r:255,g:0,b:255,a:.5};return this.overlayAgent.invoke_highlightRect({x:e,y:t,width:n,height:r,color:o,outlineColor:a})}clearHighlight(){return this.overlayAgent.invoke_hideHighlight()}async wireAgentToSettings(){this.#es=[this.#Qr.addChangeListener((()=>this.overlayAgent.invoke_setShowPaintRects({result:this.#Qr.get()}))),this.#$r.addChangeListener((()=>this.overlayAgent.invoke_setShowLayoutShiftRegions({result:this.#$r.get()}))),this.#Xr.addChangeListener((()=>this.overlayAgent.invoke_setShowAdHighlights({show:this.#Xr.get()}))),this.#Kr.addChangeListener((()=>this.overlayAgent.invoke_setShowDebugBorders({show:this.#Kr.get()}))),this.#Jr.addChangeListener((()=>this.overlayAgent.invoke_setShowFPSCounter({show:this.#Jr.get()}))),this.#Yr.addChangeListener((()=>this.overlayAgent.invoke_setShowScrollBottleneckRects({show:this.#Yr.get()}))),this.#Zr.addChangeListener((()=>this.overlayAgent.invoke_setShowWebVitals({show:this.#Zr.get()})))],this.#Qr.get()&&this.overlayAgent.invoke_setShowPaintRects({result:!0}),this.#$r.get()&&this.overlayAgent.invoke_setShowLayoutShiftRegions({result:!0}),this.#Xr.get()&&this.overlayAgent.invoke_setShowAdHighlights({show:!0}),this.#Kr.get()&&this.overlayAgent.invoke_setShowDebugBorders({show:!0}),this.#Jr.get()&&this.overlayAgent.invoke_setShowFPSCounter({show:!0}),this.#Yr.get()&&this.overlayAgent.invoke_setShowScrollBottleneckRects({show:!0}),this.#Zr.get()&&this.overlayAgent.invoke_setShowWebVitals({show:!0}),this.#zr&&this.#zr.isPaused()&&this.updatePausedInDebuggerMessage(),await this.overlayAgent.invoke_setShowViewportSizeOnResize({show:this.#ts})}async suspendModel(){e.EventTarget.removeEventListeners(this.#es),await this.overlayAgent.invoke_disable()}async resumeModel(){await Promise.all([this.overlayAgent.invoke_enable(),this.wireAgentToSettings()])}setShowViewportSizeOnResize(e){this.#ts!==e&&(this.#ts=e,this.target().suspended()||this.overlayAgent.invoke_setShowViewportSizeOnResize({show:e}))}updatePausedInDebuggerMessage(){if(this.target().suspended())return;const t=this.#zr&&this.#zr.isPaused()&&!e.Settings.Settings.instance().moduleSetting("disablePausedStateOverlay").get()?In(bn.pausedInDebugger):void 0;this.overlayAgent.invoke_setPausedInDebuggerMessage({message:t})}setHighlighter(e){this.#Gr=e||this.#Vr}async setInspectMode(e,t=!0){await this.#cr.requestDocument(),this.#jr="none"!==e,this.dispatchEventToListeners(yn.InspectModeWillBeToggled,this),this.#Gr.setInspectMode(e,this.buildHighlightConfig("all",t))}inspectModeEnabled(){return this.#jr}highlightInOverlay(e,t,n){if(this.#ss)return;this.#Wr&&(clearTimeout(this.#Wr),this.#Wr=null);const r=this.buildHighlightConfig(t);void 0!==n&&(r.showInfo=n),this.#Gr.highlightInOverlay(e,r)}highlightInOverlayForTwoSeconds(e){this.highlightInOverlay(e),this.delayedHideHighlight(2e3)}highlightGridInPersistentOverlay(e){this.#ns&&(this.#ns.highlightGridInOverlay(e),this.dispatchEventToListeners(yn.PersistentGridOverlayStateChanged,{nodeId:e,enabled:!0}))}isHighlightedGridInPersistentOverlay(e){return!!this.#ns&&this.#ns.isGridHighlighted(e)}hideGridInPersistentOverlay(e){this.#ns&&(this.#ns.hideGridInOverlay(e),this.dispatchEventToListeners(yn.PersistentGridOverlayStateChanged,{nodeId:e,enabled:!1}))}highlightScrollSnapInPersistentOverlay(e){this.#ns&&(this.#ns.highlightScrollSnapInOverlay(e),this.dispatchEventToListeners(yn.PersistentScrollSnapOverlayStateChanged,{nodeId:e,enabled:!0}))}isHighlightedScrollSnapInPersistentOverlay(e){return!!this.#ns&&this.#ns.isScrollSnapHighlighted(e)}hideScrollSnapInPersistentOverlay(e){this.#ns&&(this.#ns.hideScrollSnapInOverlay(e),this.dispatchEventToListeners(yn.PersistentScrollSnapOverlayStateChanged,{nodeId:e,enabled:!1}))}highlightFlexContainerInPersistentOverlay(e){this.#ns&&(this.#ns.highlightFlexInOverlay(e),this.dispatchEventToListeners(yn.PersistentFlexContainerOverlayStateChanged,{nodeId:e,enabled:!0}))}isHighlightedFlexContainerInPersistentOverlay(e){return!!this.#ns&&this.#ns.isFlexHighlighted(e)}hideFlexContainerInPersistentOverlay(e){this.#ns&&(this.#ns.hideFlexInOverlay(e),this.dispatchEventToListeners(yn.PersistentFlexContainerOverlayStateChanged,{nodeId:e,enabled:!1}))}highlightContainerQueryInPersistentOverlay(e){this.#ns&&(this.#ns.highlightContainerQueryInOverlay(e),this.dispatchEventToListeners(yn.PersistentContainerQueryOverlayStateChanged,{nodeId:e,enabled:!0}))}isHighlightedContainerQueryInPersistentOverlay(e){return!!this.#ns&&this.#ns.isContainerQueryHighlighted(e)}hideContainerQueryInPersistentOverlay(e){this.#ns&&(this.#ns.hideContainerQueryInOverlay(e),this.dispatchEventToListeners(yn.PersistentContainerQueryOverlayStateChanged,{nodeId:e,enabled:!1}))}highlightSourceOrderInOverlay(t){const n={parentOutlineColor:e.Color.SourceOrderHighlight.ParentOutline.toProtocolRGBA(),childOutlineColor:e.Color.SourceOrderHighlight.ChildOutline.toProtocolRGBA()};this.#rs.highlightSourceOrderInOverlay(t,n)}colorOfGridInPersistentOverlay(t){return this.#ns?this.#ns.colorOfGrid(t).asString(e.Color.Format.HEX):null}setColorOfGridInPersistentOverlay(t,n){if(!this.#ns)return;const r=e.Color.Color.parse(n);r&&(this.#ns.setColorOfGrid(t,r),this.#ns.resetOverlay())}colorOfFlexInPersistentOverlay(t){return this.#ns?this.#ns.colorOfFlex(t).asString(e.Color.Format.HEX):null}setColorOfFlexInPersistentOverlay(t,n){if(!this.#ns)return;const r=e.Color.Color.parse(n);r&&(this.#ns.setColorOfFlex(t,r),this.#ns.resetOverlay())}hideSourceOrderInOverlay(){this.#rs.hideSourceOrderHighlight()}setSourceOrderActive(e){this.#ss=e}sourceOrderModeActive(){return this.#ss}highlightIsolatedElementInPersistentOverlay(e){this.#ns&&this.#ns.highlightIsolatedElementInOverlay(e)}hideIsolatedElementInPersistentOverlay(e){this.#ns&&this.#ns.hideIsolatedElementInOverlay(e)}isHighlightedIsolatedElementInPersistentOverlay(e){return!!this.#ns&&this.#ns.isIsolatedElementHighlighted(e)}delayedHideHighlight(e){null===this.#Wr&&(this.#Wr=window.setTimeout((()=>this.highlightInOverlay({clear:!0})),e))}highlightFrame(e){this.#Wr&&(clearTimeout(this.#Wr),this.#Wr=null),this.#Gr.highlightFrame(e)}showHingeForDualScreen(e){if(e){const{x:t,y:n,width:r,height:s,contentColor:i,outlineColor:o}=e;this.overlayAgent.invoke_setShowHinge({hingeConfig:{rect:{x:t,y:n,width:r,height:s},contentColor:i,outlineColor:o}})}else this.overlayAgent.invoke_setShowHinge({})}buildHighlightConfig(t="all",n=!1){const r=e.Settings.Settings.instance().moduleSetting("showMetricsRulers").get(),s=e.Settings.Settings.instance().moduleSetting("colorFormat").get(),i={showInfo:"all"===t||"container-outline"===t,showRulers:r,showStyles:n,showAccessibilityInfo:n,showExtensionLines:r,gridHighlightConfig:{},flexContainerHighlightConfig:{},flexItemHighlightConfig:{},contrastAlgorithm:o.Runtime.experiments.isEnabled("APCA")?"apca":"aa"};"all"!==t&&"content"!==t||(i.contentColor=e.Color.PageHighlight.Content.toProtocolRGBA()),"all"!==t&&"padding"!==t||(i.paddingColor=e.Color.PageHighlight.Padding.toProtocolRGBA()),"all"!==t&&"border"!==t||(i.borderColor=e.Color.PageHighlight.Border.toProtocolRGBA()),"all"!==t&&"margin"!==t||(i.marginColor=e.Color.PageHighlight.Margin.toProtocolRGBA()),"all"===t&&(i.eventTargetColor=e.Color.PageHighlight.EventTarget.toProtocolRGBA(),i.shapeColor=e.Color.PageHighlight.Shape.toProtocolRGBA(),i.shapeMarginColor=e.Color.PageHighlight.ShapeMargin.toProtocolRGBA(),i.gridHighlightConfig={rowGapColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA(),rowHatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),columnGapColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA(),columnHatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),rowLineColor:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),columnLineColor:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),rowLineDash:!0,columnLineDash:!0},i.flexContainerHighlightConfig={containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},itemSeparator:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dotted"},lineSeparator:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},mainDistributedSpace:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()},crossDistributedSpace:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()},rowGapSpace:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()},columnGapSpace:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()}},i.flexItemHighlightConfig={baseSizeBox:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA()},baseSizeBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dotted"},flexibilityArrow:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA()}}),t.endsWith("gap")&&(i.gridHighlightConfig={gridBorderColor:e.Color.PageHighlight.GridBorder.toProtocolRGBA(),gridBorderDash:!0},"gap"!==t&&"row-gap"!==t||(i.gridHighlightConfig.rowGapColor=e.Color.PageHighlight.GapBackground.toProtocolRGBA(),i.gridHighlightConfig.rowHatchColor=e.Color.PageHighlight.GapHatch.toProtocolRGBA()),"gap"!==t&&"column-gap"!==t||(i.gridHighlightConfig.columnGapColor=e.Color.PageHighlight.GapBackground.toProtocolRGBA(),i.gridHighlightConfig.columnHatchColor=e.Color.PageHighlight.GapHatch.toProtocolRGBA())),t.endsWith("gap")&&(i.flexContainerHighlightConfig={containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"}},"gap"!==t&&"row-gap"!==t||(i.flexContainerHighlightConfig.rowGapSpace={hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()}),"gap"!==t&&"column-gap"!==t||(i.flexContainerHighlightConfig.columnGapSpace={hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()})),"grid-areas"===t&&(i.gridHighlightConfig={rowLineColor:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),columnLineColor:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),rowLineDash:!0,columnLineDash:!0,showAreaNames:!0,areaBorderColor:e.Color.PageHighlight.GridAreaBorder.toProtocolRGBA()}),"grid-template-columns"===t&&(i.contentColor=e.Color.PageHighlight.Content.toProtocolRGBA(),i.gridHighlightConfig={columnLineColor:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),columnLineDash:!0}),"grid-template-rows"===t&&(i.contentColor=e.Color.PageHighlight.Content.toProtocolRGBA(),i.gridHighlightConfig={rowLineColor:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),rowLineDash:!0}),"justify-content"===t&&(i.flexContainerHighlightConfig={containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},mainDistributedSpace:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()}}),"align-content"===t&&(i.flexContainerHighlightConfig={containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},crossDistributedSpace:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA(),fillColor:e.Color.PageHighlight.GapBackground.toProtocolRGBA()}}),"align-items"===t&&(i.flexContainerHighlightConfig={containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},lineSeparator:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"},crossAlignment:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA()}}),"flexibility"===t&&(i.flexItemHighlightConfig={baseSizeBox:{hatchColor:e.Color.PageHighlight.GapHatch.toProtocolRGBA()},baseSizeBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dotted"},flexibilityArrow:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA()}}),"container-outline"===t&&(i.containerQueryContainerHighlightConfig={containerBorder:{color:e.Color.PageHighlight.LayoutLine.toProtocolRGBA(),pattern:"dashed"}});return new Set(["rgb","hsl","hex"]).has(s)&&(i.colorFormat=s),i}nodeHighlightRequested({nodeId:e}){const t=this.#cr.nodeForId(e);t&&this.dispatchEventToListeners(yn.HighlightNodeRequested,t)}static setInspectNodeHandler(e){vn.inspectNodeHandler=e}inspectNodeRequested({backendNodeId:t}){const n=new Rn(this.target(),t);vn.inspectNodeHandler?n.resolvePromise().then((e=>{e&&vn.inspectNodeHandler&&vn.inspectNodeHandler(e)})):e.Revealer.reveal(n),this.dispatchEventToListeners(yn.ExitedInspectMode)}screenshotRequested({viewport:e}){this.dispatchEventToListeners(yn.ScreenshotRequested,e),this.dispatchEventToListeners(yn.ExitedInspectMode)}inspectModeCanceled(){this.dispatchEventToListeners(yn.ExitedInspectMode)}static inspectNodeHandler=null;getOverlayAgent(){return this.overlayAgent}}var yn;!function(e){e.InspectModeWillBeToggled="InspectModeWillBeToggled",e.ExitedInspectMode="InspectModeExited",e.HighlightNodeRequested="HighlightNodeRequested",e.ScreenshotRequested="ScreenshotRequested",e.PersistentGridOverlayStateChanged="PersistentGridOverlayStateChanged",e.PersistentFlexContainerOverlayStateChanged="PersistentFlexContainerOverlayStateChanged",e.PersistentScrollSnapOverlayStateChanged="PersistentScrollSnapOverlayStateChanged",e.PersistentContainerQueryOverlayStateChanged="PersistentContainerQueryOverlayStateChanged"}(yn||(yn={}));class kn{#Pr;constructor(e){this.#Pr=e}highlightInOverlay(e,t){const{node:n,deferredNode:r,object:s,selectorList:i}={node:void 0,deferredNode:void 0,object:void 0,selectorList:void 0,...e},o=n?n.id:void 0,a=r?r.backendNodeId():void 0,l=s?s.objectId:void 0;o||a||l?this.#Pr.target().overlayAgent().invoke_highlightNode({highlightConfig:t,nodeId:o,backendNodeId:a,objectId:l,selector:i}):this.#Pr.target().overlayAgent().invoke_hideHighlight()}async setInspectMode(e,t){await this.#Pr.target().overlayAgent().invoke_setInspectMode({mode:e,highlightConfig:t})}highlightFrame(t){this.#Pr.target().overlayAgent().invoke_highlightFrame({frameId:t,contentColor:e.Color.PageHighlight.Content.toProtocolRGBA(),contentOutlineColor:e.Color.PageHighlight.ContentOutline.toProtocolRGBA()})}}class Sn{#Pr;constructor(e){this.#Pr=e}highlightSourceOrderInOverlay(e,t){this.#Pr.setSourceOrderActive(!0),this.#Pr.setShowViewportSizeOnResize(!1),this.#Pr.getOverlayAgent().invoke_highlightSourceOrder({sourceOrderConfig:t,nodeId:e.id})}hideSourceOrderHighlight(){this.#Pr.setSourceOrderActive(!1),this.#Pr.setShowViewportSizeOnResize(!0),this.#Pr.clearHighlight()}}l.register(vn,{capabilities:_.DOM,autostart:!0});var wn,Cn=Object.freeze({__proto__:null,OverlayModel:vn,get Events(){return yn},SourceOrderHighlighter:Sn});class Tn{#is;#os;ownerDocument;#as;id;index;#ls;#ds;#cs;#hs;nodeValueInternal;#us;#gs;#ms;#ps;#bs;#fs;pseudoElementsInternal;#Is;shadowRootsInternal;#vs;#ys;#ks;childNodeCountInternal;childrenInternal;nextSibling;previousSibling;firstChild;lastChild;parentNode;templateContentInternal;contentDocumentInternal;childDocumentPromiseForTesting;#Ss;publicId;systemId;internalSubset;name;value;constructor(e){this.#is=e,this.#os=this.#is.getAgent(),this.index=void 0,this.#fs=null,this.pseudoElementsInternal=new Map,this.#Is=[],this.shadowRootsInternal=[],this.#vs=new Map,this.#ys=new Map,this.#ks=0,this.childrenInternal=null,this.nextSibling=null,this.previousSibling=null,this.firstChild=null,this.lastChild=null,this.parentNode=null}static create(e,t,n,r){const s=new Tn(e);return s.init(t,n,r),s}init(e,t,n){if(this.#os=this.#is.getAgent(),this.ownerDocument=e,this.#as=t,this.id=n.nodeId,this.#ls=n.backendNodeId,this.#is.registerNode(this),this.#ds=n.nodeType,this.#cs=n.nodeName,this.#hs=n.localName,this.nodeValueInternal=n.nodeValue,this.#us=n.pseudoType,this.#gs=n.shadowRootType,this.#ms=n.frameId||null,this.#ps=n.xmlVersion,this.#bs=Boolean(n.isSVG),n.attributes&&this.setAttributesPayload(n.attributes),this.childNodeCountInternal=n.childNodeCount||0,n.shadowRoots)for(let e=0;ee.creation||null)),this.#fs}get subtreeMarkerCount(){return this.#ks}domModel(){return this.#is}backendNodeId(){return this.#ls}children(){return this.childrenInternal?this.childrenInternal.slice():null}setChildren(e){this.childrenInternal=e}hasAttributes(){return this.#vs.size>0}childNodeCount(){return this.childNodeCountInternal}setChildNodeCount(e){this.childNodeCountInternal=e}hasShadowRoots(){return Boolean(this.shadowRootsInternal.length)}shadowRoots(){return this.shadowRootsInternal.slice()}templateContent(){return this.templateContentInternal||null}contentDocument(){return this.contentDocumentInternal||null}setContentDocument(e){this.contentDocumentInternal=e}isIframe(){return"IFRAME"===this.#cs}isPortal(){return"PORTAL"===this.#cs}importedDocument(){return this.#Ss||null}nodeType(){return this.#ds}nodeName(){return this.#cs}pseudoType(){return this.#us}hasPseudoElements(){return this.pseudoElementsInternal.size>0}pseudoElements(){return this.pseudoElementsInternal}beforePseudoElement(){return this.pseudoElementsInternal&&this.pseudoElementsInternal.get(Tn.PseudoElementNames.Before)||null}afterPseudoElement(){return this.pseudoElementsInternal&&this.pseudoElementsInternal.get(Tn.PseudoElementNames.After)||null}markerPseudoElement(){return this.pseudoElementsInternal&&this.pseudoElementsInternal.get(Tn.PseudoElementNames.Marker)||null}isInsertionPoint(){return!this.isXMLNode()&&("SHADOW"===this.#cs||"CONTENT"===this.#cs||"SLOT"===this.#cs)}distributedNodes(){return this.#Is}isInShadowTree(){return this.#as}ancestorShadowHost(){const e=this.ancestorShadowRoot();return e?e.parentNode:null}ancestorShadowRoot(){if(!this.#as)return null;let e=this;for(;e&&!e.isShadowRoot();)e=e.parentNode;return e}ancestorUserAgentShadowRoot(){const e=this.ancestorShadowRoot();return e&&e.shadowRootType()===Tn.ShadowRootTypes.UserAgent?e:null}isShadowRoot(){return Boolean(this.#gs)}shadowRootType(){return this.#gs||null}nodeNameInCorrectCase(){const e=this.shadowRootType();return e?"#shadow-root ("+e+")":this.localName()?this.localName().length!==this.nodeName().length?this.nodeName():this.localName():this.nodeName()}setNodeName(e,t){this.#os.invoke_setNodeName({nodeId:this.id,name:e}).then((e=>{e.getError()||this.#is.markUndoableState(),t&&t(e.getError()||null,this.#is.nodeForId(e.nodeId))}))}localName(){return this.#hs}nodeValue(){return this.nodeValueInternal}setNodeValueInternal(e){this.nodeValueInternal=e}setNodeValue(e,t){this.#os.invoke_setNodeValue({nodeId:this.id,value:e}).then((e=>{e.getError()||this.#is.markUndoableState(),t&&t(e.getError()||null)}))}getAttribute(e){const t=this.#vs.get(e);return t?t.value:void 0}setAttribute(e,t,n){this.#os.invoke_setAttributesAsText({nodeId:this.id,text:t,name:e}).then((e=>{e.getError()||this.#is.markUndoableState(),n&&n(e.getError()||null)}))}setAttributeValue(e,t,n){this.#os.invoke_setAttributeValue({nodeId:this.id,name:e,value:t}).then((e=>{e.getError()||this.#is.markUndoableState(),n&&n(e.getError()||null)}))}setAttributeValuePromise(e,t){return new Promise((n=>this.setAttributeValue(e,t,n)))}attributes(){return[...this.#vs.values()]}async removeAttribute(e){(await this.#os.invoke_removeAttribute({nodeId:this.id,name:e})).getError()||(this.#vs.delete(e),this.#is.markUndoableState())}getChildNodes(e){this.childrenInternal?e(this.children()):this.#os.invoke_requestChildNodes({nodeId:this.id}).then((t=>{e(t.getError()?null:this.children())}))}async getSubtree(e,t){return(await this.#os.invoke_requestChildNodes({nodeId:this.id,depth:e,pierce:t})).getError()?null:this.childrenInternal}async getOuterHTML(){const{outerHTML:e}=await this.#os.invoke_getOuterHTML({nodeId:this.id});return e}setOuterHTML(e,t){this.#os.invoke_setOuterHTML({nodeId:this.id,outerHTML:e}).then((e=>{e.getError()||this.#is.markUndoableState(),t&&t(e.getError()||null)}))}removeNode(e){return this.#os.invoke_removeNode({nodeId:this.id}).then((t=>{t.getError()||this.#is.markUndoableState(),e&&e(t.getError()||null)}))}async copyNode(){const{outerHTML:e}=await this.#os.invoke_getOuterHTML({nodeId:this.id});return null!==e&&s.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(e),e}path(){function e(e){return(void 0!==e.index||e.isShadowRoot()&&e.parentNode)&&e.#cs.length}const t=[];let n=this;for(;n&&e(n);){const e="number"==typeof n.index?n.index:n.shadowRootType()===Tn.ShadowRootTypes.UserAgent?"u":"a";t.push([e,n.#cs]),n=n.parentNode}return t.reverse(),t.join(",")}isAncestor(e){if(!e)return!1;let t=e.parentNode;for(;t;){if(this===t)return!0;t=t.parentNode}return!1}isDescendant(e){return null!==e&&e.isAncestor(this)}frameOwnerFrameId(){return this.#ms}frameId(){let e=this.parentNode||this;for(;!e.#ms&&e.parentNode;)e=e.parentNode;return e.#ms}setAttributesPayload(e){let t=!this.#vs||e.length!==2*this.#vs.size;const n=this.#vs||new Map;this.#vs=new Map;for(let r=0;r=0?this.childrenInternal[e-1]:null,t.parentNode=this}}addAttribute(e,t){const n={name:e,value:t,_node:this};this.#vs.set(e,n)}setAttributeInternal(e,t){const n=this.#vs.get(e);n?n.value=t:this.addAttribute(e,t)}removeAttributeInternal(e){this.#vs.delete(e)}copyTo(e,t,n){this.#os.invoke_copyTo({nodeId:this.id,targetNodeId:e.id,insertBeforeNodeId:t?t.id:void 0}).then((e=>{e.getError()||this.#is.markUndoableState(),n&&n(e.getError()||null,this.#is.nodeForId(e.nodeId))}))}moveTo(e,t,n){this.#os.invoke_moveTo({nodeId:this.id,targetNodeId:e.id,insertBeforeNodeId:t?t.id:void 0}).then((e=>{e.getError()||this.#is.markUndoableState(),n&&n(e.getError()||null,this.#is.nodeForId(e.nodeId))}))}isXMLNode(){return Boolean(this.#ps)}setMarker(e,t){if(null!==t){if(this.parentNode&&!this.#ys.has(e))for(let e=this;e;e=e.parentNode)++e.#ks;this.#ys.set(e,t);for(let e=this;e;e=e.parentNode)this.#is.dispatchEventToListeners(wn.MarkersChanged,e)}else{if(!this.#ys.has(e))return;this.#ys.delete(e);for(let e=this;e;e=e.parentNode)--e.#ks;for(let e=this;e;e=e.parentNode)this.#is.dispatchEventToListeners(wn.MarkersChanged,e)}}marker(e){return this.#ys.get(e)||null}getMarkerKeysForTest(){return[...this.#ys.keys()]}traverseMarkers(e){!function t(n){if(n.#ks){for(const t of n.#ys.keys())e(n,t);if(n.childrenInternal)for(const e of n.childrenInternal)t(e)}}(this)}resolveURL(t){if(!t)return t;for(let n=this;n;n=n.parentNode)if(n instanceof xn&&n.baseURL)return e.ParsedURL.ParsedURL.completeURL(n.baseURL,t);return null}highlight(e){this.#is.overlayModel().highlightInOverlay({node:this,selectorList:void 0},e)}highlightForTwoSeconds(){this.#is.overlayModel().highlightInOverlayForTwoSeconds({node:this,selectorList:void 0})}async resolveToObject(e){const{object:t}=await this.#os.invoke_resolveNode({nodeId:this.id,backendNodeId:void 0,objectGroup:e});return t&&this.#is.runtimeModelInternal.createRemoteObject(t)||null}async boxModel(){const{model:e}=await this.#os.invoke_getBoxModel({nodeId:this.id});return e}async setAsInspectedNode(){let e=this;for(e&&e.pseudoType()&&(e=e.parentNode);e;){let t=e.ancestorUserAgentShadowRoot();if(!t)break;if(t=e.ancestorShadowHost(),!t)break;e=t}if(!e)throw new Error("In DOMNode.setAsInspectedNode: node is expected to not be null.");await this.#os.invoke_setInspectedNode({nodeId:e.id})}enclosingElementOrSelf(){let e=this;return e&&e.nodeType()===Node.TEXT_NODE&&e.parentNode&&(e=e.parentNode),e&&e.nodeType()!==Node.ELEMENT_NODE&&(e=null),e}async scrollIntoView(){const e=this.enclosingElementOrSelf();if(!e)return;const t=await e.resolveToObject();t&&(t.callFunction((function(){this.scrollIntoViewIfNeeded(!0)})),t.release(),e.highlightForTwoSeconds())}async focus(){const e=this.enclosingElementOrSelf();if(!e)throw new Error("DOMNode.focus expects node to not be null.");const t=await e.resolveToObject();t&&(await t.callFunction((function(){this.focus()})),t.release(),e.highlightForTwoSeconds(),await this.#is.target().pageAgent().invoke_bringToFront())}simpleSelector(){const e=this.localName()||this.nodeName().toLowerCase();if(this.nodeType()!==Node.ELEMENT_NODE)return e;const t=this.getAttribute("type"),n=this.getAttribute("id"),r=this.getAttribute("class");if("input"===e&&t&&!n&&!r)return e+'[type="'+CSS.escape(t)+'"]';if(n)return e+"#"+CSS.escape(n);if(r){return("div"===e?"":e)+"."+r.trim().split(/\s+/g).map((e=>CSS.escape(e))).join(".")}return e}}!function(e){let t,n;!function(e){e.Before="before",e.After="after",e.Marker="marker"}(t=e.PseudoElementNames||(e.PseudoElementNames={})),function(e){e.UserAgent="user-agent",e.Open="open",e.Closed="closed"}(n=e.ShadowRootTypes||(e.ShadowRootTypes={}))}(Tn||(Tn={}));class Rn{#is;#ls;constructor(e,t){this.#is=e.model(Pn),this.#ls=t}resolve(e){this.resolvePromise().then(e)}async resolvePromise(){const e=await this.#is.pushNodesByBackendIdsToFrontend(new Set([this.#ls]));return e&&e.get(this.#ls)||null}backendNodeId(){return this.#ls}domModel(){return this.#is}highlight(){this.#is.overlayModel().highlightInOverlay({deferredNode:this,selectorList:void 0})}}class Mn{nodeType;nodeName;deferredNode;constructor(e,t,n,r){this.nodeType=n,this.nodeName=r,this.deferredNode=new Rn(e,t)}}class xn extends Tn{body;documentElement;documentURL;baseURL;constructor(e,t){super(e),this.body=null,this.documentElement=null,this.init(this,!1,t),this.documentURL=t.documentURL||"",this.baseURL=t.baseURL||""}}class Pn extends l{agent;idToDOMNode=new Map;#ws;#Cs;runtimeModelInternal;#Ts;#Rs;#Ms;#xs;#Ps;constructor(e){super(e),this.agent=e.domAgent(),this.#ws=null,this.#Cs=new Set,e.registerDOMDispatcher(new Ln(this)),this.runtimeModelInternal=e.model(yr),this.#Rs=null,e.suspended()||this.agent.invoke_enable(),o.Runtime.experiments.isEnabled("captureNodeCreationStacks")&&this.agent.invoke_setNodeStackTracesEnabled({enable:!0})}runtimeModel(){return this.runtimeModelInternal}cssModel(){return this.target().model(en)}overlayModel(){return this.target().model(vn)}static cancelSearch(){for(const e of G.instance().models(Pn))e.cancelSearch()}scheduleMutationEvent(e){this.hasEventListeners(wn.DOMMutated)&&(this.#Ts=(this.#Ts||0)+1,Promise.resolve().then(function(e,t){if(!this.hasEventListeners(wn.DOMMutated)||this.#Ts!==t)return;this.dispatchEventToListeners(wn.DOMMutated,e)}.bind(this,e,this.#Ts)))}requestDocument(){return this.#ws?Promise.resolve(this.#ws):(this.#Rs||(this.#Rs=this.requestDocumentInternal()),this.#Rs)}async getOwnerNodeForFrame(e){const t=await this.agent.invoke_getFrameOwner({frameId:e});return t.getError()?null:new Rn(this.target(),t.backendNodeId)}async requestDocumentInternal(){const e=await this.agent.invoke_getDocument({});if(e.getError())return console.error(e.getError()),null;const{root:t}=e;if(this.#Rs=null,t&&this.setDocument(t),!this.#ws)return console.error("No document"),null;const n=this.parentModel();if(n&&!this.#Ms){await n.requestDocument();const e=this.target().model(qn)?.mainFrame;if(e){const t=await n.agent.invoke_getFrameOwner({frameId:e.id});!t.getError()&&t.nodeId&&(this.#Ms=n.nodeForId(t.nodeId))}}if(this.#Ms){const e=this.#Ms.contentDocument();this.#Ms.setContentDocument(this.#ws),this.#Ms.setChildren([]),this.#ws?(this.#ws.parentNode=this.#Ms,this.dispatchEventToListeners(wn.NodeInserted,this.#ws)):e&&this.dispatchEventToListeners(wn.NodeRemoved,{node:e,parent:this.#Ms})}return this.#ws}existingDocument(){return this.#ws}async pushNodeToFrontend(e){await this.requestDocument();const{nodeId:t}=await this.agent.invoke_requestNode({objectId:e});return t?this.nodeForId(t):null}pushNodeByPathToFrontend(e){return this.requestDocument().then((()=>this.agent.invoke_pushNodeByPathToFrontend({path:e}))).then((({nodeId:e})=>e))}async pushNodesByBackendIdsToFrontend(e){await this.requestDocument();const t=[...e],{nodeIds:n}=await this.agent.invoke_pushNodesByBackendIdsToFrontend({backendNodeIds:t});if(!n)return null;const r=new Map;for(let e=0;e{if(!t)return;const n=this.idToDOMNode.get(e);n&&n.setAttributesPayload(t)&&(this.dispatchEventToListeners(wn.AttrModified,{node:n,name:"style"}),this.scheduleMutationEvent(n))}));this.#Cs.clear()}characterDataModified(e,t){const n=this.idToDOMNode.get(e);n?(n.setNodeValueInternal(t),this.dispatchEventToListeners(wn.CharacterDataModified,n),this.scheduleMutationEvent(n)):console.error("nodeId could not be resolved to a node")}nodeForId(e){return e&&this.idToDOMNode.get(e)||null}documentUpdated(){const e=this.#ws||this.#Rs;this.setDocument(null),this.parentModel()&&e&&this.requestDocument()}setDocument(e){this.idToDOMNode=new Map,this.#ws=e&&"nodeId"in e?new xn(this,e):null,An.instance().dispose(this),this.parentModel()||this.dispatchEventToListeners(wn.DocumentUpdated,this)}setDetachedRoot(e){"#document"===e.nodeName?new xn(this,e):Tn.create(this,null,!1,e)}setChildNodes(e,t){if(!e&&t.length)return void this.setDetachedRoot(t[0]);this.idToDOMNode.get(e)?.setChildrenPayload(t)}childNodeCountUpdated(e,t){const n=this.idToDOMNode.get(e);n?(n.setChildNodeCount(t),this.dispatchEventToListeners(wn.ChildNodeCountUpdated,n),this.scheduleMutationEvent(n)):console.error("nodeId could not be resolved to a node")}childNodeInserted(e,t,n){const r=this.idToDOMNode.get(e),s=this.idToDOMNode.get(t);if(!r)return void console.error("parentId could not be resolved to a node");const i=r.insertChild(s,n);this.idToDOMNode.set(i.id,i),this.dispatchEventToListeners(wn.NodeInserted,i),this.scheduleMutationEvent(i)}childNodeRemoved(e,t){const n=this.idToDOMNode.get(e),r=this.idToDOMNode.get(t);n&&r?(n.removeChild(r),this.unbind(r),this.dispatchEventToListeners(wn.NodeRemoved,{node:r,parent:n}),this.scheduleMutationEvent(r)):console.error("parentId or nodeId could not be resolved to a node")}shadowRootPushed(e,t){const n=this.idToDOMNode.get(e);if(!n)return;const r=Tn.create(this,n.ownerDocument,!0,t);r.parentNode=n,this.idToDOMNode.set(r.id,r),n.shadowRootsInternal.unshift(r),this.dispatchEventToListeners(wn.NodeInserted,r),this.scheduleMutationEvent(r)}shadowRootPopped(e,t){const n=this.idToDOMNode.get(e);if(!n)return;const r=this.idToDOMNode.get(t);r&&(n.removeChild(r),this.unbind(r),this.dispatchEventToListeners(wn.NodeRemoved,{node:r,parent:n}),this.scheduleMutationEvent(r))}pseudoElementAdded(e,t){const n=this.idToDOMNode.get(e);if(!n)return;const r=Tn.create(this,n.ownerDocument,!1,t);r.parentNode=n,this.idToDOMNode.set(r.id,r);const s=r.pseudoType();if(!s)throw new Error("DOMModel._pseudoElementAdded expects pseudoType to be defined.");if(n.pseudoElements().get(s))throw new Error("DOMModel._pseudoElementAdded expects parent to not already have this pseudo type added.");n.pseudoElements().set(s,r),this.dispatchEventToListeners(wn.NodeInserted,r),this.scheduleMutationEvent(r)}pseudoElementRemoved(e,t){const n=this.idToDOMNode.get(e);if(!n)return;const r=this.idToDOMNode.get(t);r&&(n.removeChild(r),this.unbind(r),this.dispatchEventToListeners(wn.NodeRemoved,{node:r,parent:n}),this.scheduleMutationEvent(r))}distributedNodesUpdated(e,t){const n=this.idToDOMNode.get(e);n&&(n.setDistributedNodePayloads(t),this.dispatchEventToListeners(wn.DistributedNodesChanged,n),this.scheduleMutationEvent(n))}unbind(e){this.idToDOMNode.delete(e.id);const t=e.children();for(let e=0;t&&ee||[]))}querySelector(e,t){return this.agent.invoke_querySelector({nodeId:e,selector:t}).then((({nodeId:e})=>e))}querySelectorAll(e,t){return this.agent.invoke_querySelectorAll({nodeId:e,selector:t}).then((({nodeIds:e})=>e))}markUndoableState(e){An.instance().markUndoableState(this,e||!1)}async nodeForLocation(e,t,n){const r=await this.agent.invoke_getNodeForLocation({x:e,y:t,includeUserAgentShadowDOM:n});return r.getError()||!r.nodeId?null:this.nodeForId(r.nodeId)}async getContainerForNode(e,t){const{nodeId:n}=await this.agent.invoke_getContainerForNode({nodeId:e,containerName:t});return n?this.nodeForId(n):null}pushObjectAsNodeToFrontend(e){return e.isNode()&&e.objectId?this.pushNodeToFrontend(e.objectId):Promise.resolve(null)}suspendModel(){return this.agent.invoke_disable().then((()=>this.setDocument(null)))}async resumeModel(){await this.agent.invoke_enable()}dispose(){An.instance().dispose(this)}parentModel(){const e=this.target().parentTarget();return e?e.model(Pn):null}getAgent(){return this.agent}registerNode(e){this.idToDOMNode.set(e.id,e)}}!function(e){e.AttrModified="AttrModified",e.AttrRemoved="AttrRemoved",e.CharacterDataModified="CharacterDataModified",e.DOMMutated="DOMMutated",e.NodeInserted="NodeInserted",e.NodeRemoved="NodeRemoved",e.DocumentUpdated="DocumentUpdated",e.ChildNodeCountUpdated="ChildNodeCountUpdated",e.DistributedNodesChanged="DistributedNodesChanged",e.MarkersChanged="MarkersChanged"}(wn||(wn={}));class Ln{#cr;constructor(e){this.#cr=e}documentUpdated(){this.#cr.documentUpdated()}attributeModified({nodeId:e,name:t,value:n}){this.#cr.attributeModified(e,t,n)}attributeRemoved({nodeId:e,name:t}){this.#cr.attributeRemoved(e,t)}inlineStyleInvalidated({nodeIds:e}){this.#cr.inlineStyleInvalidated(e)}characterDataModified({nodeId:e,characterData:t}){this.#cr.characterDataModified(e,t)}setChildNodes({parentId:e,nodes:t}){this.#cr.setChildNodes(e,t)}childNodeCountUpdated({nodeId:e,childNodeCount:t}){this.#cr.childNodeCountUpdated(e,t)}childNodeInserted({parentNodeId:e,previousNodeId:t,node:n}){this.#cr.childNodeInserted(e,t,n)}childNodeRemoved({parentNodeId:e,nodeId:t}){this.#cr.childNodeRemoved(e,t)}shadowRootPushed({hostId:e,root:t}){this.#cr.shadowRootPushed(e,t)}shadowRootPopped({hostId:e,rootId:t}){this.#cr.shadowRootPopped(e,t)}pseudoElementAdded({parentId:e,pseudoElement:t}){this.#cr.pseudoElementAdded(e,t)}pseudoElementRemoved({parentId:e,pseudoElementId:t}){this.#cr.pseudoElementRemoved(e,t)}distributedNodesUpdated({insertionPointId:e,distributedNodes:t}){this.#cr.distributedNodesUpdated(e,t)}}let En;class An{#Ls;#xr;#Es;constructor(){this.#Ls=[],this.#xr=0,this.#Es=null}static instance(e={forceNew:null}){const{forceNew:t}=e;return En&&!t||(En=new An),En}async markUndoableState(e,t){this.#Es&&e!==this.#Es&&(this.#Es.markUndoableState(),this.#Es=null),t&&this.#Es===e||(this.#Ls=this.#Ls.slice(0,this.#xr),this.#Ls.push(e),this.#xr=this.#Ls.length,t?this.#Es=e:(await e.getAgent().invoke_markUndoableState(),this.#Es=null))}async undo(){if(0===this.#xr)return Promise.resolve();--this.#xr,this.#Es=null,await this.#Ls[this.#xr].getAgent().invoke_undo()}async redo(){if(this.#xr>=this.#Ls.length)return Promise.resolve();++this.#xr,this.#Es=null,await this.#Ls[this.#xr-1].getAgent().invoke_redo()}dispose(e){let n=0;for(let t=0;t{this.#qs.push(e),this.#As&&!this.#As.finished||this.innerRequestContent()}))}canonicalMimeType(){return this.contentType().canonicalMimeType()||this.mimeType}async searchInContent(e,t,n){if(!this.frameId)return[];if(this.request)return this.request.searchInContent(e,t,n);return(await this.#gr.target().pageAgent().invoke_searchInResource({frameId:this.frameId,url:this.url,query:e,caseSensitive:t,isRegex:n})).result||[]}async populateImageSource(e){const{content:t}=await this.requestContent(),r=this.#Hs;e.src=n.ContentProvider.contentAsDataURL(t,this.#ht,r)||this.#it}requestFinished(){this.#As&&this.#As.removeEventListener(we.FinishedLoading,this.requestFinished,this),this.#qs.length&&this.innerRequestContent()}async innerRequestContent(){if(this.#_s)return;this.#_s=!0;let e=null;if(this.request){const t=await this.request.contentData();t.error||(this.#Bs=t.content,this.#Hs=t.encoded,e={content:t.content,isEncoded:t.encoded})}if(!e){const t=await this.#gr.target().pageAgent().invoke_getResourceContent({frameId:this.frameId,url:this.url}),n=t.getError();n?(this.#Us=n,this.#Bs=null,e={content:null,error:n,isEncoded:!1}):(this.#Bs=t.content,this.#Us=null,e={content:t.content,isEncoded:t.base64Encoded}),this.#Hs=t.base64Encoded}null===this.#Bs&&(this.#Hs=!1);for(const t of this.#qs.splice(0))t(e);this.#_s=void 0}hasTextContent(){return!!this.#Os.isTextType()||this.#Os===e.ResourceType.resourceTypes.Other&&(Boolean(this.#Bs)&&!this.#Hs)}frame(){return this.#ke?this.#gr.frameForId(this.#ke):null}statusCode(){return this.#As?this.#As.statusCode:0}}var Fn,Dn=Object.freeze({__proto__:null,Resource:Nn});class Bn extends l{#zs;#js;#Ws;constructor(e){super(e),this.#zs="",this.#js="",this.#Ws=new Set}updateSecurityOrigins(e){const t=this.#Ws;this.#Ws=e;for(const e of t)this.#Ws.has(e)||this.dispatchEventToListeners(Fn.SecurityOriginRemoved,e);for(const e of this.#Ws)t.has(e)||this.dispatchEventToListeners(Fn.SecurityOriginAdded,e)}securityOrigins(){return[...this.#Ws]}mainSecurityOrigin(){return this.#zs}unreachableMainSecurityOrigin(){return this.#js}setMainSecurityOrigin(e,t){this.#zs=e,this.#js=t||null,this.dispatchEventToListeners(Fn.MainSecurityOriginChanged,{mainSecurityOrigin:this.#zs,unreachableMainSecurityOrigin:this.#js})}}!function(e){e.SecurityOriginAdded="SecurityOriginAdded",e.SecurityOriginRemoved="SecurityOriginRemoved",e.MainSecurityOriginChanged="MainSecurityOriginChanged"}(Fn||(Fn={})),l.register(Bn,{capabilities:_.None,autostart:!1});var Un,Hn=Object.freeze({__proto__:null,SecurityOriginManager:Bn,get Events(){return Fn}});class qn extends l{agent;#Vs;framesInternal;#Gs;#Qs;#$s;isInterstitialShowing;mainFrame;#Xs;constructor(e){super(e);const t=e.model(te);t&&(t.addEventListener(ne.RequestFinished,this.onRequestFinished,this),t.addEventListener(ne.RequestUpdateDropped,this.onRequestUpdateDropped,this)),this.agent=e.pageAgent(),this.agent.invoke_enable(),this.#Vs=e.model(Bn),this.#Xs=new Set,e.registerPageDispatcher(new zn(this)),this.framesInternal=new Map,this.#Gs=!1,this.#Qs=null,this.#$s=0,this.isInterstitialShowing=!1,this.mainFrame=null,this.agent.invoke_getResourceTree().then((e=>{this.processCachedResources(e.getError()?null:e.frameTree)}))}static frameForRequest(e){const t=te.forRequest(e),n=t?t.target().model(qn):null;return n&&e.frameId?n.frameForId(e.frameId):null}static frames(){const e=[];for(const t of G.instance().models(qn))e.push(...t.framesInternal.values());return e}static resourceForURL(e){for(const t of G.instance().models(qn)){const n=t.mainFrame,r=n?n.resourceForURL(e):null;if(r)return r}return null}static reloadAllPages(e,t){for(const n of G.instance().models(qn))n.target().parentTarget()||n.reloadPage(e,t)}domModel(){return this.target().model(Pn)}processCachedResources(e){e&&":"!==e.frame.url&&(this.dispatchEventToListeners(Un.WillLoadCachedResources),this.addFramesRecursively(null,e),this.target().setInspectedURL(e.frame.url)),this.#Gs=!0;const t=this.target().model(yr);t&&(t.setExecutionContextComparator(this.executionContextComparator.bind(this)),t.fireExecutionContextOrderChanged()),this.dispatchEventToListeners(Un.CachedResourcesLoaded,this)}cachedResourcesLoaded(){return this.#Gs}addFrame(e,t){this.framesInternal.set(e.id,e),e.isMainFrame()&&(this.mainFrame=e),this.dispatchEventToListeners(Un.FrameAdded,e),this.updateSecurityOrigins()}frameAttached(e,t,n){const r=t&&this.framesInternal.get(t)||null;if(!this.#Gs&&r)return null;if(this.framesInternal.has(e))return null;const s=new _n(this,r,e,null,n||null);return t&&!r&&(s.crossTargetParentFrameId=t),s.isMainFrame()&&this.mainFrame&&this.frameDetached(this.mainFrame.id,!1),this.addFrame(s,!0),s}frameNavigated(e,t){const n=e.parentId&&this.framesInternal.get(e.parentId)||null;if(!this.#Gs&&n)return;let r=this.framesInternal.get(e.id)||null;if(!r&&(r=this.frameAttached(e.id,e.parentId||null),console.assert(Boolean(r)),!r))return;if(this.dispatchEventToListeners(Un.FrameWillNavigate,r),r.navigate(e),t&&(r.backForwardCacheDetails.restoredFromCache="BackForwardCacheRestore"===t),this.dispatchEventToListeners(Un.FrameNavigated,r),r.isMainFrame()){this.processPendingBackForwardCacheNotUsedEvents(r),this.dispatchEventToListeners(Un.MainFrameNavigated,r);const e=this.target().model(te);e&&e.clearRequests()}const s=r.resources();for(let e=0;e=0,"Unbalanced call to ResourceTreeModel.resumeReload()"),!this.#$s&&this.#Qs){const{ignoreCache:e,scriptToEvaluateOnLoad:t}=this.#Qs;this.reloadPage(e,t)}}reloadPage(e,t){if(this.#Qs||this.dispatchEventToListeners(Un.PageReloadRequested,this),this.#$s)return void(this.#Qs={ignoreCache:e,scriptToEvaluateOnLoad:t});this.#Qs=null;const n=this.target().model(te);n&&n.clearRequests(),this.dispatchEventToListeners(Un.WillReloadPage),this.agent.invoke_reload({ignoreCache:e,scriptToEvaluateOnLoad:t})}navigate(e){return this.agent.invoke_navigate({url:e})}async navigationHistory(){const e=await this.agent.invoke_getNavigationHistory();return e.getError()?null:{currentIndex:e.currentIndex,entries:e.entries}}navigateToHistoryEntry(e){this.agent.invoke_navigateToHistoryEntry({entryId:e.id})}setLifecycleEventsEnabled(e){return this.agent.invoke_setLifecycleEventsEnabled({enabled:e})}async fetchAppManifest(){const e=await this.agent.invoke_getAppManifest();return e.getError()?{url:e.url,data:null,errors:[]}:{url:e.url,data:e.data||null,errors:e.errors}}async getInstallabilityErrors(){return(await this.agent.invoke_getInstallabilityErrors()).installabilityErrors||[]}async getManifestIcons(){return{primaryIcon:(await this.agent.invoke_getManifestIcons()).primaryIcon||null}}async getAppId(){return this.agent.invoke_getAppId()}executionContextComparator(e,t){function n(e){let t=e;const n=[];for(;t;)n.push(t),t=t.sameTargetParentFrame();return n.reverse()}if(e.target()!==t.target())return Cr.comparator(e,t);const r=e.frameId?n(this.frameForId(e.frameId)):[],s=t.frameId?n(this.frameForId(t.frameId)):[];let i,o;for(let e=0;;e++)if(!r[e]||!s[e]||r[e]!==s[e]){i=r[e],o=s[e];break}return!i&&o?-1:!o&&i?1:i&&o?i.id.localeCompare(o.id):Cr.comparator(e,t)}getSecurityOriginData(){const t=new Set;let n=null,r=null;for(const s of this.framesInternal.values()){const i=s.securityOrigin;if(i&&(t.add(i),s.isMainFrame()&&(n=i,s.unreachableUrl()))){r=new e.ParsedURL.ParsedURL(s.unreachableUrl()).securityOrigin()}}return{securityOrigins:t,mainSecurityOrigin:n,unreachableMainSecurityOrigin:r}}updateSecurityOrigins(){const e=this.getSecurityOriginData();this.#Vs.setMainSecurityOrigin(e.mainSecurityOrigin||"",e.unreachableMainSecurityOrigin||""),this.#Vs.updateSecurityOrigins(e.securityOrigins)}getMainSecurityOrigin(){const e=this.getSecurityOriginData();return e.mainSecurityOrigin||e.unreachableMainSecurityOrigin}onBackForwardCacheNotUsed(e){this.mainFrame&&this.mainFrame.id===e.frameId&&this.mainFrame.loaderId===e.loaderId?(this.mainFrame.setBackForwardCacheDetails(e),this.dispatchEventToListeners(Un.BackForwardCacheDetailsUpdated,this.mainFrame)):this.#Xs.add(e)}processPendingBackForwardCacheNotUsedEvents(e){if(e.isMainFrame())for(const t of this.#Xs)if(e.id===t.frameId&&e.loaderId===t.loaderId)return e.setBackForwardCacheDetails(t),void this.#Xs.delete(t)}}!function(e){e.FrameAdded="FrameAdded",e.FrameNavigated="FrameNavigated",e.FrameDetached="FrameDetached",e.FrameResized="FrameResized",e.FrameWillNavigate="FrameWillNavigate",e.MainFrameNavigated="MainFrameNavigated",e.ResourceAdded="ResourceAdded",e.WillLoadCachedResources="WillLoadCachedResources",e.CachedResourcesLoaded="CachedResourcesLoaded",e.DOMContentLoaded="DOMContentLoaded",e.LifecycleEvent="LifecycleEvent",e.Load="Load",e.PageReloadRequested="PageReloadRequested",e.WillReloadPage="WillReloadPage",e.InterstitialShown="InterstitialShown",e.InterstitialHidden="InterstitialHidden",e.BackForwardCacheDetailsUpdated="BackForwardCacheDetailsUpdated"}(Un||(Un={}));class _n{#Pr;#Ks;#N;crossTargetParentFrameId;#Se;#h;#it;#Js;#Ys;#Zs;#ei;#ti;#ni;#ri;#si;#ii;#oi;#ai;resourcesMap;backForwardCacheDetails={restoredFromCache:void 0,explanations:[]};constructor(e,t,n,r,s){this.#Pr=e,this.#Ks=t,this.#N=n,this.crossTargetParentFrameId=null,this.#Se=r&&r.loaderId||"",this.#h=r&&r.name,this.#it=r&&r.url||"",this.#Js=r&&r.domainAndRegistry||"",this.#Ys=r&&r.securityOrigin,this.#Zs=r&&r.mimeType,this.#ei=r&&r.unreachableUrl||"",this.#ti=r?.adFrameStatus,this.#ni=r&&r.secureContextType,this.#ri=r&&r.crossOriginIsolatedContextType,this.#si=r&&r.gatedAPIFeatures,this.#ii=s,this.#oi=null,this.#ai=new Set,this.resourcesMap=new Map,this.#Ks&&this.#Ks.#ai.add(this)}isSecureContext(){return null!==this.#ni&&this.#ni.startsWith("Secure")}getSecureContextType(){return this.#ni}isCrossOriginIsolated(){return null!==this.#ri&&this.#ri.startsWith("Isolated")}getCrossOriginIsolatedContextType(){return this.#ri}getGatedAPIFeatures(){return this.#si}getCreationStackTraceData(){return{creationStackTrace:this.#ii,creationStackTraceTarget:this.#oi||this.resourceTreeModel().target()}}navigate(e){this.#Se=e.loaderId,this.#h=e.name,this.#it=e.url,this.#Js=e.domainAndRegistry,this.#Ys=e.securityOrigin,this.#Zs=e.mimeType,this.#ei=e.unreachableUrl||"",this.#ti=e?.adFrameStatus,this.#ni=e.secureContextType,this.#ri=e.crossOriginIsolatedContextType,this.#si=e.gatedAPIFeatures,this.backForwardCacheDetails={restoredFromCache:void 0,explanations:[]};const t=this.resourcesMap.get(this.#it);this.resourcesMap.clear(),this.removeChildFrames(),t&&t.loaderId===this.#Se&&this.addResource(t)}resourceTreeModel(){return this.#Pr}get id(){return this.#N}get name(){return this.#h||""}get url(){return this.#it}domainAndRegistry(){return this.#Js}get securityOrigin(){return this.#Ys}unreachableUrl(){return this.#ei}get loaderId(){return this.#Se}adFrameType(){return this.#ti?.adFrameType||"none"}adFrameStatus(){return this.#ti}get childFrames(){return[...this.#ai]}sameTargetParentFrame(){return this.#Ks}crossTargetParentFrame(){if(!this.crossTargetParentFrameId)return null;const e=this.#Pr.target().parentTarget();if(!e)return null;const t=e.model(qn);return t&&t.framesInternal.get(this.crossTargetParentFrameId)||null}parentFrame(){return this.sameTargetParentFrame()||this.crossTargetParentFrame()}isMainFrame(){return!this.#Ks}isTopFrame(){return!this.#Pr.target().parentTarget()&&!this.#Ks&&!this.crossTargetParentFrameId}removeChildFrame(e,t){this.#ai.delete(e),e.remove(t)}removeChildFrames(){const e=this.#ai;this.#ai=new Set;for(const t of e)t.remove(!1)}remove(e){this.removeChildFrames(),this.#Pr.framesInternal.delete(this.id),this.#Pr.dispatchEventToListeners(Un.FrameDetached,{frame:this,isSwap:e})}addResource(e){this.resourcesMap.get(e.url)!==e&&(this.resourcesMap.set(e.url,e),this.#Pr.dispatchEventToListeners(Un.ResourceAdded,e))}addRequest(e){let t=this.resourcesMap.get(e.url());t&&t.request===e||(t=new Nn(this.#Pr,e,e.url(),e.documentURL,e.frameId,e.loaderId,e.resourceType(),e.mimeType,null,null),this.resourcesMap.set(t.url,t),this.#Pr.dispatchEventToListeners(Un.ResourceAdded,t))}resources(){return Array.from(this.resourcesMap.values())}resourceForURL(e){const t=this.resourcesMap.get(e);if(t)return t;for(const t of this.#ai){const n=t.resourceForURL(e);if(n)return n}return null}callForFrameResources(e){for(const t of this.resourcesMap.values())if(e(t))return!0;for(const t of this.#ai)if(t.callForFrameResources(e))return!0;return!1}displayName(){if(this.isTopFrame())return r.i18n.lockedString("top");const t=new e.ParsedURL.ParsedURL(this.#it).displayName;return t?this.#h?this.#h+" ("+t+")":t:r.i18n.lockedString("iframe")}async getOwnerDeferredDOMNode(){const e=this.parentFrame();return e?e.resourceTreeModel().domModel().getOwnerNodeForFrame(this.#N):null}async getOwnerDOMNodeOrDocument(){const e=await this.getOwnerDeferredDOMNode();return e?e.resolvePromise():this.isTopFrame()?this.resourceTreeModel().domModel().requestDocument():null}async highlight(){const e=this.parentFrame(),t=this.resourceTreeModel().target().parentTarget(),n=async e=>{const t=await e.getOwnerNodeForFrame(this.#N);t&&e.overlayModel().highlightInOverlay({deferredNode:t,selectorList:""},"all",!0)};if(e)return n(e.resourceTreeModel().domModel());if(t){const e=t.model(Pn);if(e)return n(e)}const r=await this.resourceTreeModel().domModel().requestDocument();r&&this.resourceTreeModel().domModel().overlayModel().highlightInOverlay({node:r,selectorList:""},"all",!0)}async getPermissionsPolicyState(){const e=await this.resourceTreeModel().target().pageAgent().invoke_getPermissionsPolicyState({frameId:this.#N});return e.getError()?null:e.states}async getOriginTrials(){const e=await this.resourceTreeModel().target().pageAgent().invoke_getOriginTrials({frameId:this.#N});return e.getError()?[]:e.originTrials}setCreationStackTrace(e){this.#ii=e.creationStackTrace,this.#oi=e.creationStackTraceTarget}setBackForwardCacheDetails(e){this.backForwardCacheDetails.restoredFromCache=!1,this.backForwardCacheDetails.explanations=e.notRestoredExplanations}getResourcesMap(){return this.resourcesMap}}class zn{#gr;constructor(e){this.#gr=e}backForwardCacheNotUsed(e){this.#gr.onBackForwardCacheNotUsed(e)}domContentEventFired({timestamp:e}){this.#gr.dispatchEventToListeners(Un.DOMContentLoaded,e)}loadEventFired({timestamp:e}){this.#gr.dispatchEventToListeners(Un.Load,{resourceTreeModel:this.#gr,loadTime:e})}lifecycleEvent({frameId:e,name:t}){this.#gr.dispatchEventToListeners(Un.LifecycleEvent,{frameId:e,name:t})}frameAttached({frameId:e,parentFrameId:t,stack:n}){this.#gr.frameAttached(e,t,n)}frameNavigated({frame:e,type:t}){this.#gr.frameNavigated(e,t)}documentOpened({frame:e}){this.#gr.documentOpened(e)}frameDetached({frameId:e,reason:t}){this.#gr.frameDetached(e,"swap"===t)}frameStartedLoading({}){}frameStoppedLoading({}){}frameRequestedNavigation({}){}frameScheduledNavigation({}){}frameClearedScheduledNavigation({}){}navigatedWithinDocument({}){}frameResized(){this.#gr.dispatchEventToListeners(Un.FrameResized)}javascriptDialogOpening({hasBrowserHandler:e}){e||this.#gr.agent.invoke_handleJavaScriptDialog({accept:!1})}javascriptDialogClosed({}){}screencastFrame({}){}screencastVisibilityChanged({}){}interstitialShown(){this.#gr.isInterstitialShowing=!0,this.#gr.dispatchEventToListeners(Un.InterstitialShown)}interstitialHidden(){this.#gr.isInterstitialShowing=!1,this.#gr.dispatchEventToListeners(Un.InterstitialHidden)}windowOpen({}){}compilationCacheProduced({}){}fileChooserOpened({}){}downloadWillBegin({}){}downloadProgress(){}}l.register(qn,{capabilities:_.DOM,autostart:!0,early:!0});var jn=Object.freeze({__proto__:null,ResourceTreeModel:qn,get Events(){return Un},ResourceTreeFrame:_n,PageDispatcher:zn});const Wn={scriptRemovedOrDeleted:"Script removed or deleted.",unableToFetchScriptSource:"Unable to fetch script source."},Vn=r.i18n.registerUIStrings("core/sdk/Script.ts",Wn),Gn=r.i18n.getLocalizedString.bind(void 0,Vn);class Qn{debuggerModel;scriptId;sourceURL;lineOffset;columnOffset;endLine;endColumn;executionContextId;hash;#li;#di;sourceMapURL;debugSymbols;hasSourceURL;contentLength;#Nn;originStackTrace;#ci;#hi;#ui;#gi;isModule;constructor(e,t,n,r,s,i,o,a,l,d,c,h,u,g,m,p,b,f,I,v){this.debuggerModel=e,this.scriptId=t,this.sourceURL=n,this.lineOffset=r,this.columnOffset=s,this.endLine=i,this.endColumn=o,this.isModule=m,this.executionContextId=a,this.hash=l,this.#li=d,this.#di=c,this.sourceMapURL=h,this.debugSymbols=I,this.hasSourceURL=u,this.contentLength=g,this.#Nn=null,this.originStackTrace=p,this.#ci=b,this.#hi=f,this.#ui=null,this.#gi=v}embedderName(){return this.#gi}target(){return this.debuggerModel.target()}static trimSourceURLComment(e){let t=e.lastIndexOf("//# sourceURL=");if(-1===t&&(t=e.lastIndexOf("//@ sourceURL="),-1===t))return e;const n=e.lastIndexOf("\n",t);if(-1===n)return e;return e.substr(n+1).match(Xn)?e.substr(0,n):e}isContentScript(){return this.#li}codeOffset(){return this.#ci}isJavaScript(){return"JavaScript"===this.#hi}isWasm(){return"WebAssembly"===this.#hi}scriptLanguage(){return this.#hi}executionContext(){return this.debuggerModel.runtimeModel().executionContext(this.executionContextId)}isLiveEdit(){return this.#di}contentURL(){return this.sourceURL}contentType(){return e.ResourceType.resourceTypes.Script}async contentEncoded(){return!1}requestContent(){return this.#ui||(this.#ui=this.originalContentProvider().requestContent()),this.#ui}async getWasmBytecode(){const e=await this.debuggerModel.target().debuggerAgent().invoke_getWasmBytecode({scriptId:this.scriptId});return(await fetch(`data:application/wasm;base64,${e.bytecode}`)).arrayBuffer()}originalContentProvider(){if(!this.#Nn){let e;this.#Nn=new n.StaticContentProvider.StaticContentProvider(this.contentURL(),this.contentType(),(()=>(e||(e=(async()=>{if(!this.scriptId)return{content:null,error:Gn(Wn.scriptRemovedOrDeleted),isEncoded:!1};try{const e=await this.debuggerModel.target().debuggerAgent().invoke_getScriptSource({scriptId:this.scriptId});if(e.getError())throw new Error(e.getError());const{scriptSource:t,bytecode:n}=e;if(n)return{content:n,isEncoded:!0};let r=t||"";return this.hasSourceURL&&(r=Qn.trimSourceURLComment(r)),{content:r,isEncoded:!1}}catch(e){return{content:null,error:Gn(Wn.unableToFetchScriptSource),isEncoded:!1}}})()),e)))}return this.#Nn}async searchInContent(e,t,r){if(!this.scriptId)return[];return((await this.debuggerModel.target().debuggerAgent().invoke_searchInContent({scriptId:this.scriptId,query:e,caseSensitive:t,isRegex:r})).result||[]).map((e=>new n.ContentProvider.SearchMatch(e.lineNumber,e.lineContent)))}appendSourceURLCommentIfNeeded(e){return this.hasSourceURL?e+"\n //# sourceURL="+this.sourceURL:e}async editSource(e,t){if(e=Qn.trimSourceURLComment(e),e=this.appendSourceURLCommentIfNeeded(e),!this.scriptId)return void t("Script failed to parse");const{content:n}=await this.requestContent();if(n===e)return void t(null);const r=await this.debuggerModel.target().debuggerAgent().invoke_setScriptSource({scriptId:this.scriptId,scriptSource:e});r.getError()||r.exceptionDetails||(this.#ui=Promise.resolve({content:e,isEncoded:!1}));const s=Boolean(r.stackChanged);t(r.getError()||null,r.exceptionDetails,r.callFrames,r.asyncStackTrace,r.asyncStackTraceId,s)}rawLocation(e,t){return this.containsLocation(e,t)?new lr(this.debuggerModel,this.scriptId,e,t):null}toRelativeLocation(e){console.assert(e.scriptId===this.scriptId,"`toRelativeLocation` must be used with location of the same script");const t=e.lineNumber-this.lineOffset;return[t,(e.columnNumber||0)-(0===t?this.columnOffset:0)]}isInlineScript(){const e=!this.lineOffset&&!this.columnOffset;return!this.isWasm()&&Boolean(this.sourceURL)&&!e}isAnonymousScript(){return!this.sourceURL}async setBlackboxedRanges(e){return!(await this.debuggerModel.target().debuggerAgent().invoke_setBlackboxedRanges({scriptId:this.scriptId,positions:e})).getError()}containsLocation(e,t){const n=e===this.lineOffset&&t>=this.columnOffset||e>this.lineOffset,r=e0?t.end:s.end;t=new cr(t.scriptId,t.start,e)}else n.push(t),t=s}return n.push(t),n}var tr;!function(e){e.StepInto="StepInto",e.StepOut="StepOut",e.StepOver="StepOver"}(tr||(tr={}));class nr extends l{agent;runtimeModelInternal;#mi;#pi;#bi;#fi;#Ii;#vi;continueToLocationCallback;#yi;#ki;#Si;#wi;#Ci;#Ti;#Ri;evaluateOnCallFrameCallback;#Mi=new e.ObjectWrapper.ObjectWrapper;#xi;#Pi;constructor(t){super(t),t.registerDebuggerDispatcher(new ar(this)),this.agent=t.debuggerAgent(),this.runtimeModelInternal=t.model(yr),this.#mi=new Kt(t),this.#pi=new Map,this.#bi=null,this.#fi=new Map,this.#Ii=new Map,this.#vi=[],this.continueToLocationCallback=null,this.#yi=null,this.#ki=!1,this.#Si=null,this.#wi=0,this.#Ci=null,this.#Ti=null,this.#Ri=null,this.evaluateOnCallFrameCallback=null,this.#xi=!1,this.#Pi=!1,e.Settings.Settings.instance().moduleSetting("pauseOnExceptionEnabled").addChangeListener(this.pauseOnExceptionStateChanged,this),e.Settings.Settings.instance().moduleSetting("pauseOnCaughtException").addChangeListener(this.pauseOnExceptionStateChanged,this),e.Settings.Settings.instance().moduleSetting("disableAsyncStackTraces").addChangeListener(this.asyncStackTracesStateChanged,this),e.Settings.Settings.instance().moduleSetting("breakpointsActive").addChangeListener(this.breakpointsActiveChanged,this),t.suspended()||this.enableDebugger(),this.#mi.setEnabled(e.Settings.Settings.instance().moduleSetting("jsSourceMapsEnabled").get()),e.Settings.Settings.instance().moduleSetting("jsSourceMapsEnabled").addChangeListener((e=>this.#mi.setEnabled(e.data)));const n=t.model(qn);n&&n.addEventListener(Un.FrameNavigated,this.onFrameNavigated,this)}static sourceMapId(e,t,n){return n?e+":"+t+":"+n:null}sourceMapManager(){return this.#mi}runtimeModel(){return this.runtimeModelInternal}debuggerEnabled(){return Boolean(this.#ki)}async enableDebugger(){if(this.#ki)return;this.#ki=!0;const t=o.Runtime.Runtime.queryParam("remoteFrontend")||o.Runtime.Runtime.queryParam("ws")?1e7:1e8,n=this.agent.invoke_enable({maxScriptsCacheSize:t});n.then(this.registerDebugger.bind(this)),this.pauseOnExceptionStateChanged(),this.asyncStackTracesStateChanged(),e.Settings.Settings.instance().moduleSetting("breakpointsActive").get()||this.breakpointsActiveChanged(),sr&&this.pauseOnAsyncCall(sr),this.dispatchEventToListeners(or.DebuggerWasEnabled,this),await n}async syncDebuggerId(){const e=o.Runtime.Runtime.queryParam("remoteFrontend")||o.Runtime.Runtime.queryParam("ws")?1e7:1e8,t=this.agent.invoke_enable({maxScriptsCacheSize:e});return t.then(this.registerDebugger.bind(this)),t}onFrameNavigated(){nr.shouldResyncDebuggerId||(nr.shouldResyncDebuggerId=!0)}registerDebugger(e){if(e.getError())return;const{debuggerId:t}=e;rr.set(t,this),this.#Si=t,this.dispatchEventToListeners(or.DebuggerIsReadyToPause,this)}isReadyToPause(){return Boolean(this.#Si)}static async modelForDebuggerId(e){return nr.shouldResyncDebuggerId&&(await nr.resyncDebuggerIdForModels(),nr.shouldResyncDebuggerId=!1),rr.get(e)||null}static async resyncDebuggerIdForModels(){const e=rr.values();for(const t of e)t.debuggerEnabled()&&await t.syncDebuggerId()}async disableDebugger(){this.#ki&&(this.#ki=!1,await this.asyncStackTracesStateChanged(),await this.agent.invoke_disable(),this.#Pi=!1,this.globalObjectCleared(),this.dispatchEventToListeners(or.DebuggerWasDisabled),"string"==typeof this.#Si&&rr.delete(this.#Si),this.#Si=null)}skipAllPauses(e){this.#wi&&(clearTimeout(this.#wi),this.#wi=0),this.agent.invoke_setSkipAllPauses({skip:e})}skipAllPausesUntilReloadOrTimeout(e){this.#wi&&clearTimeout(this.#wi),this.agent.invoke_setSkipAllPauses({skip:!0}),this.#wi=window.setTimeout(this.skipAllPauses.bind(this,!1),e)}pauseOnExceptionStateChanged(){let t;t=e.Settings.Settings.instance().moduleSetting("pauseOnExceptionEnabled").get()?e.Settings.Settings.instance().moduleSetting("pauseOnCaughtException").get()?"all":"uncaught":"none",this.agent.invoke_setPauseOnExceptions({state:t})}asyncStackTracesStateChanged(){const t=!e.Settings.Settings.instance().moduleSetting("disableAsyncStackTraces").get()&&this.#ki?32:0;return this.agent.invoke_setAsyncCallStackDepth({maxDepth:t})}breakpointsActiveChanged(){this.agent.invoke_setBreakpointsActive({active:e.Settings.Settings.instance().moduleSetting("breakpointsActive").get()})}setComputeAutoStepRangesCallback(e){this.#Ti=e}async computeAutoStepSkipList(e){let t=[];if(this.#Ti&&this.#bi){const[n]=this.#bi.callFrames;t=await this.#Ti.call(null,e,n)}return er(t.map((e=>new cr(e.start.scriptId,new dr(e.start.lineNumber,e.start.columnNumber),new dr(e.end.lineNumber,e.end.columnNumber))))).map((e=>e.payload()))}async stepInto(){const e=await this.computeAutoStepSkipList(tr.StepInto);this.agent.invoke_stepInto({breakOnAsyncCall:!1,skipList:e})}async stepOver(){this.#xi=!0;const e=await this.computeAutoStepSkipList(tr.StepOver);this.agent.invoke_stepOver({skipList:e})}async stepOut(){const e=await this.computeAutoStepSkipList(tr.StepOut);0!==e.length?this.agent.invoke_stepOver({skipList:e}):this.agent.invoke_stepOut()}scheduleStepIntoAsync(){this.computeAutoStepSkipList(tr.StepInto).then((e=>{this.agent.invoke_stepInto({breakOnAsyncCall:!0,skipList:e})}))}resume(){this.agent.invoke_resume({terminateOnResume:!1}),this.#Pi=!1}pause(){this.#Pi=!0,this.skipAllPauses(!1),this.agent.invoke_pause()}pauseOnAsyncCall(e){return this.agent.invoke_pauseOnAsyncCall({parentStackTraceId:e})}async setBreakpointByURL(n,r,i,o){let a;if(this.target().type()===q.Node&&n.startsWith("file://")){const r=e.ParsedURL.ParsedURL.capFilePrefix(n,s.Platform.isWin());a=`${t.StringUtilities.escapeForRegExp(r)}|${t.StringUtilities.escapeForRegExp(n)}`}let l=0;const d=this.#Ii.get(n)||[];for(let e=0,t=d.length;elr.fromPayload(this,e)))),{locations:h,breakpointId:c.breakpointId}}async setBreakpointInAnonymousScript(e,t,n,r,s){const i=await this.agent.invoke_setBreakpointByUrl({lineNumber:n,scriptHash:t,columnNumber:r,condition:s}),o=i.getError();if(o)return"Either url or urlRegex must be specified."!==o?{locations:[],breakpointId:null}:this.setBreakpointBySourceId(e,n,r,s);let a=[];return i.locations&&(a=i.locations.map((e=>lr.fromPayload(this,e)))),{locations:a,breakpointId:i.breakpointId}}async setBreakpointBySourceId(e,t,n,r){const s=await this.agent.invoke_setBreakpoint({location:{scriptId:e,lineNumber:t,columnNumber:n},condition:r});if(s.getError())return{breakpointId:null,locations:[]};let i=[];return s.actualLocation&&(i=[lr.fromPayload(this,s.actualLocation)]),{locations:i,breakpointId:s.breakpointId}}async removeBreakpoint(e){const t=await this.agent.invoke_removeBreakpoint({breakpointId:e});t.getError()&&console.error("Failed to remove breakpoint: "+t.getError())}async getPossibleBreakpoints(e,t,n){const r=await this.agent.invoke_getPossibleBreakpoints({start:e.payload(),end:t?t.payload():void 0,restrictToFunction:n});return r.getError()||!r.locations?[]:r.locations.map((e=>hr.fromPayload(this,e)))}async fetchAsyncStackTrace(e){const t=await this.agent.invoke_getStackTrace({stackTraceId:e});return t.getError()?null:t.stackTrace}breakpointResolved(e,t){this.#Mi.dispatchEventToListeners(e,lr.fromPayload(this,t))}globalObjectCleared(){this.setDebuggerPausedDetails(null),this.reset(),this.dispatchEventToListeners(or.GlobalObjectCleared,this)}reset(){for(const e of this.#pi.values())this.#mi.detachSourceMap(e);this.#pi.clear(),this.#fi.clear(),this.#Ii.clear(),this.#vi=[],this.#xi=!1}scripts(){return Array.from(this.#fi.values())}scriptForId(e){return this.#fi.get(e)||null}scriptsForSourceURL(e){return e&&this.#Ii.get(e)||[]}scriptsForExecutionContext(e){const t=[];for(const n of this.#fi.values())n.executionContextId===e.id&&t.push(n);return t}setScriptSource(e,t,n){const r=this.#fi.get(e);r&&r.editSource(t,this.didEditScriptSource.bind(this,e,t,n))}didEditScriptSource(e,t,n,r,s,i,o,a,l){n(r,s),l?this.stepInto():!r&&i&&i.length&&this.#bi&&this.pausedScript(i,this.#bi.reason,this.#bi.auxData,this.#bi.breakpointIds,o,a)}get callFrames(){return this.#bi?this.#bi.callFrames:null}debuggerPausedDetails(){return this.#bi}setDebuggerPausedDetails(e){if(e){if(this.#Pi=!1,this.#bi=e,this.#Ci&&!this.#Ci.call(null,e))return!1;this.#xi=!1,this.dispatchEventToListeners(or.DebuggerPaused,this),this.setSelectedCallFrame(e.callFrames[0])}else this.#Pi=!1,this.#bi=null,this.setSelectedCallFrame(null);return!0}setBeforePausedCallback(e){this.#Ci=e}setExpandCallFramesCallback(e){this.#Ri=e}setEvaluateOnCallFrameCallback(e){this.evaluateOnCallFrameCallback=e}async pausedScript(t,n,r,s,i,o,a){if(a){sr=a;const e=[];for(const t of rr.values())e.push(t.pauseOnAsyncCall(a));return await Promise.all(e),void this.resume()}const l=new mr(this,t,n,r,s,i,o);if(this.#Ri&&(l.callFrames=await this.#Ri.call(null,l.callFrames)),this.continueToLocationCallback){const e=this.continueToLocationCallback;if(this.continueToLocationCallback=null,e(l))return}this.setDebuggerPausedDetails(l)?e.EventTarget.fireEvent("DevTools.DebuggerPaused"):this.#xi?this.stepOver():this.stepInto(),sr=null}resumedScript(){this.setDebuggerPausedDetails(null),this.dispatchEventToListeners(or.DebuggerResumed,this)}parsedScriptSource(e,t,n,r,s,i,o,a,l,d,c,h,u,g,m,p,b,f,I,v){const y=this.#fi.get(e);if(y)return y;let k=!1;l&&"isDefault"in l&&(k=!l.isDefault);const S=new Qn(this,e,t,n,r,s,i,o,a,k,d,c,h,g,m,p,b,f,I,v);this.registerScript(S),this.dispatchEventToListeners(or.ParsedScriptSource,S);const w=nr.sourceMapId(S.executionContextId,S.sourceURL,S.sourceMapURL);if(w&&!u){const e=this.#pi.get(w);e&&this.#mi.detachSourceMap(e),this.#pi.set(w,S),this.#mi.attachSourceMap(S,S.sourceURL,S.sourceMapURL)}return u&&S.isAnonymousScript()&&(this.#vi.push(S),this.collectDiscardedScripts()),S}setSourceMapURL(e,t){let n=nr.sourceMapId(e.executionContextId,e.sourceURL,e.sourceMapURL);n&&this.#pi.get(n)===e&&this.#pi.delete(n),this.#mi.detachSourceMap(e),e.sourceMapURL=t,n=nr.sourceMapId(e.executionContextId,e.sourceURL,e.sourceMapURL),n&&(this.#pi.set(n,e),this.#mi.attachSourceMap(e,e.sourceURL,e.sourceMapURL))}executionContextDestroyed(e){const t=Array.from(this.#pi.keys());for(const n of t){const t=this.#pi.get(n);t&&t.executionContextId===e.id&&(this.#pi.delete(n),this.#mi.detachSourceMap(t))}}registerScript(e){if(this.#fi.set(e.scriptId,e),e.isAnonymousScript())return;let t=this.#Ii.get(e.sourceURL);t||(t=[],this.#Ii.set(e.sourceURL,t)),t.push(e)}unregisterScript(e){console.assert(e.isAnonymousScript()),this.#fi.delete(e.scriptId)}collectDiscardedScripts(){if(this.#vi.length<1e3)return;const e=this.#vi.splice(0,100);for(const t of e)this.unregisterScript(t),this.dispatchEventToListeners(or.DiscardedAnonymousScriptSource,t)}createRawLocation(e,t,n,r){return this.createRawLocationByScriptId(e.scriptId,t,n,r)}createRawLocationByURL(e,t,n,r){for(const s of this.#Ii.get(e)||[])if(!(s.lineOffset>t||s.lineOffset===t&&void 0!==n&&s.columnOffset>n||s.endLinee.scriptId?1:-1;const t=this.start.compareTo(e.start);return t||this.end.compareTo(e.end)}overlap(e){if(this.scriptId!==e.scriptId)return!1;const t=this.start.compareTo(e.start);return t<0?this.end.compareTo(e.start)>=0:!(t>0)||this.start.compareTo(e.end)<=0}}class hr extends lr{type;constructor(e,t,n,r,s){super(e,t,n,r),s&&(this.type=s)}static fromPayload(e,t){return new hr(e,t.scriptId,t.lineNumber,t.columnNumber,t.type)}}class ur{debuggerModel;#Li;payload;#Ei;#Ai;#Oi;#Ni;#Fi;#Di;#Bi;warnings=[];constructor(e,t,n,r,s){this.debuggerModel=e,this.#Li=t,this.payload=n,this.#Ei=lr.fromPayload(e,n.location,r),this.#Ai=[],this.#Oi=null,this.#Ni=r||0,this.#Fi=s||n.functionName;for(let e=0;enull===this.#eo.axNodeForId(e)))}hasUnloadedChildren(){return!(!this.#do||!this.#do.length)&&this.#do.some((e=>null===this.#eo.axNodeForId(e)))}getFrameId(){return this.#lo||this.parentNode()?.getFrameId()||null}}(Rr||(Rr={})).TreeUpdated="TreeUpdated";class Pr extends l{agent;#co;#ho;#uo;#go;#mo;constructor(e){super(e),e.registerAccessibilityDispatcher(this),this.agent=e.accessibilityAgent(),this.resumeModel(),this.#co=new Map,this.#ho=new Map,this.#uo=new Map,this.#go=new Map,this.#mo=null}clear(){this.#mo=null,this.#co.clear(),this.#ho.clear(),this.#uo.clear()}async resumeModel(){await this.agent.invoke_enable()}async suspendModel(){await this.agent.invoke_disable()}async requestPartialAXTree(e){const{nodes:t}=await this.agent.invoke_getPartialAXTree({nodeId:e.id,fetchRelatives:!0});if(!t)return;const n=[];for(const e of t)n.push(new xr(this,e))}loadComplete({root:e}){this.clear(),this.#mo=new xr(this,e),this.dispatchEventToListeners(Rr.TreeUpdated,{root:this.#mo})}nodesUpdated({nodes:e}){this.createNodesFromPayload(e),this.dispatchEventToListeners(Rr.TreeUpdated,{})}createNodesFromPayload(e){return e.map((e=>new xr(this,e)))}async requestRootNode(e){if(e&&this.#uo.has(e))return this.#uo.get(e);if(!e&&this.#mo)return this.#mo;const{node:t}=await this.agent.invoke_getRootAXNode({frameId:e});return t?this.createNodesFromPayload([t])[0]:void 0}async requestAXChildren(e,t){const n=this.#co.get(e);if(n&&!n.hasUnloadedChildren())return n.children();let r;const s=this.#go.get(e);if(s)r=(await s).nodes;else{const n=this.agent.invoke_getChildAXNodes({id:e,frameId:t});this.#go.set(e,n),r=(await n).nodes,this.#go.delete(e)}if(!r)return[];return this.createNodesFromPayload(r)}async requestAndLoadSubTreeToNode(e){const t=[];let n=this.axNodeForDOMNode(e);for(;n;){t.push(n);const e=n.parentNode();if(!e)return t;n=e}const{nodes:r}=await this.agent.invoke_getAXNodeAndAncestors({backendNodeId:e.backendNodeId()});if(!r)return null;return this.createNodesFromPayload(r)}axNodeForId(e){return this.#co.get(e)||null}setRootAXNodeForFrameId(e,t){this.#uo.set(e,t)}axNodeForFrameId(e){return this.#uo.get(e)??null}setAXNodeForAXId(e,t){this.#co.set(e,t)}axNodeForDOMNode(e){return e?this.#ho.get(e.backendNodeId())??null:null}setAXNodeForBackendDOMNodeId(e,t){this.#ho.set(e,t)}getAgent(){return this.agent}}l.register(Pr,{capabilities:_.DOM,autostart:!1});var Lr=Object.freeze({__proto__:null,get CoreAxPropertyName(){return Tr},AccessibilityNode:xr,get Events(){return Rr},AccessibilityModel:Pr});class Er{#po;titleInternal;enabledInternal;constructor(e,t){this.#po=e,this.titleInternal=t,this.enabledInternal=!1}category(){return this.#po}enabled(){return this.enabledInternal}setEnabled(e){this.enabledInternal=e}title(){return this.titleInternal}setTitle(e){this.titleInternal=e}}var Ar=Object.freeze({__proto__:null,CategorizedBreakpoint:Er});class Or{onMessage;#bo;#fo;#Io;#Fn;constructor(){this.onMessage=null,this.#bo=null,this.#fo="",this.#Io=0,this.#Fn=[s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.DispatchMessage,this.dispatchMessage,this),s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.DispatchMessageChunk,this.dispatchMessageChunk,this)]}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#bo=e}sendRawMessage(e){this.onMessage&&s.InspectorFrontendHost.InspectorFrontendHostInstance.sendMessageToBackend(e)}dispatchMessage(e){this.onMessage&&this.onMessage.call(null,e.data)}dispatchMessageChunk(e){const{messageChunk:t,messageSize:n}=e.data;n&&(this.#fo="",this.#Io=n),this.#fo+=t,this.#fo.length===this.#Io&&this.onMessage&&(this.onMessage.call(null,this.#fo),this.#fo="",this.#Io=0)}async disconnect(){const t=this.#bo;e.EventTarget.removeEventListeners(this.#Fn),this.#bo=null,this.onMessage=null,t&&t.call(null,"force disconnect")}}class Nr{#vo;onMessage;#bo;#yo;#ko;#So;#wo;#Co;constructor(e,t){this.#vo=new WebSocket(e),this.#vo.onerror=this.onSocketError.bind(this),this.#vo.onopen=this.onSocketOpen.bind(this),this.#vo.onmessage=e=>{const{type:t,data:n}=JSON.parse(e.data);"answer"===t?this.#So?.setRemoteDescription(n):"candidate"===t&&this.#So?.addIceCandidate(n)},this.#vo.onclose=this.onSocketClose.bind(this),this.onMessage=null,this.#bo=null,this.#yo=t,this.#ko=[];const n=this.#So=new RTCPeerConnection({iceServers:[{urls:["stun:stun.qq.com:3478"]}]});this.#wo=n.createDataChannel("dev-tool"),this.#wo.onerror=this.onChannelError.bind(this),this.#wo.onopen=this.onChannelOpen.bind(this),this.#wo.onmessage=e=>{this.onMessage&&this.onMessage.call(null,e.data)},this.#wo.onclose=this.onChannelClose.bind(this),this.#Co=!1,n.onicecandidate=e=>{e.candidate&&this.#vo?.send(JSON.stringify({type:"candidate",data:e.candidate}))}}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#bo=e}onSocketError(){this.#yo&&this.#yo.call(null),this.#bo&&this.#bo.call(null,"connection failed"),this.closeSocket()}onChannelError(){this.closeChannel()}async onSocketOpen(){if(this.#vo&&this.#So){this.#vo.onerror=console.error;const e=await this.#So.createOffer();await this.#So.setLocalDescription(e),this.#vo.send(JSON.stringify({type:"offer",data:e}))}}onChannelOpen(){if(this.#Co=!0,this.#wo){this.#wo.onerror=console.error;for(const e of this.#ko)this.#wo.send(e)}this.#ko=[]}onSocketClose(){this.#yo&&this.#yo.call(null),this.#bo&&this.#bo.call(null,"websocket closed"),this.closeSocket()}onChannelClose(){this.closeChannel()}closeSocket(e){this.#vo&&(this.#vo.onerror=null,this.#vo.onopen=null,this.#vo.onclose=e||null,this.#vo.onmessage=null,this.#vo.close(),this.#vo=null),this.#yo=null}closeChannel(e){this.#wo&&(this.#wo.onerror=null,this.#wo.onopen=null,this.#wo.onclose=e||null,this.#wo.onmessage=null,this.#wo.close())}sendRawMessage(e){this.#Co&&this.#wo?this.#wo.send(e):this.#ko.push(e)}async disconnect(){await Promise.all([new Promise(this.closeSocket.bind(this)),new Promise(this.closeChannel.bind(this))]),this.#bo&&this.#bo.call(null,"force disconnect")}}class Fr{onMessage;targetOrigin="";constructor(e){this.targetOrigin=e,this.onMessage=null,window.addEventListener("message",(e=>{e.origin===this.targetOrigin&&this.onMessage&&this.onMessage(e.data)}))}setOnMessage(e){this.onMessage=e}sendRawMessage(e){window.parent.postMessage(e,this.targetOrigin)}setOnDisconnect(e){}disconnect(){return Promise.resolve()}}class Dr{#vo;onMessage;#bo;#yo;#To;#ko;constructor(e,t){this.#vo=new WebSocket(e),this.#vo.onerror=this.onError.bind(this),this.#vo.onopen=this.onOpen.bind(this),this.#vo.onmessage=e=>{this.onMessage&&this.onMessage.call(null,e.data)},this.#vo.onclose=this.onClose.bind(this),this.onMessage=null,this.#bo=null,this.#yo=t,this.#To=!1,this.#ko=[]}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#bo=e}onError(){this.#yo&&this.#yo.call(null),this.#bo&&this.#bo.call(null,"connection failed"),this.close()}onOpen(){if(this.#To=!0,this.#vo){this.#vo.onerror=console.error;for(const e of this.#ko)this.#vo.send(e)}this.#ko=[]}onClose(){this.#yo&&this.#yo.call(null),this.#bo&&this.#bo.call(null,"websocket closed"),this.close()}close(e){this.#vo&&(this.#vo.onerror=null,this.#vo.onopen=null,this.#vo.onclose=e||null,this.#vo.onmessage=null,this.#vo.close(),this.#vo=null),this.#yo=null}sendRawMessage(e){this.#To&&this.#vo?this.#vo.send(e):this.#ko.push(e)}disconnect(){return new Promise((e=>{this.close((()=>{this.#bo&&this.#bo.call(null,"force disconnect"),e()}))}))}}class Br{onMessage;#bo;constructor(){this.onMessage=null,this.#bo=null}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#bo=e}sendRawMessage(e){setTimeout(this.respondWithError.bind(this,e),0)}respondWithError(e){const t=JSON.parse(e),n={message:"This is a stub connection, can't dispatch message.",code:i.InspectorBackend.DevToolsStubErrorCode,data:t};this.onMessage&&this.onMessage.call(null,{id:t.id,error:n})}async disconnect(){this.#bo&&this.#bo.call(null,"force disconnect"),this.#bo=null,this.onMessage=null}}class Ur{#So;#Ro;onMessage;#bo;constructor(e,t){this.#So=e,this.#Ro=t,this.onMessage=null,this.#bo=null}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.#bo=e}getOnDisconnect(){return this.#bo}sendRawMessage(e){const t=JSON.parse(e);t.sessionId||(t.sessionId=this.#Ro),this.#So.sendRawMessage(JSON.stringify(t))}getSessionId(){return this.#Ro}async disconnect(){this.#bo&&this.#bo.call(null,"force disconnect"),this.#bo=null,this.onMessage=null}}function Hr(e){const t=o.Runtime.Runtime.queryParam("ws"),n=o.Runtime.Runtime.queryParam("wss"),r=o.Runtime.Runtime.queryParam("embedded");if("true"===o.Runtime.Runtime.queryParam("rtc")){return new Nr(t?`ws://${t}`:`wss://${n}`,e)}if(r)return new Fr(r);if(t||n){return new Dr(t?`ws://${t}`:`wss://${n}`,e)}return s.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode()?new Br:new Or}var qr,_r=Object.freeze({__proto__:null,MainConnection:Or,PeerConnection:Nr,EmbeddedConnection:Fr,WebSocketConnection:Dr,StubConnection:Br,ParallelConnection:Ur,initMainConnection:async function(e,t){i.InspectorBackend.Connection.setFactory(Hr.bind(null,t)),await e(),s.InspectorFrontendHost.InspectorFrontendHostInstance.connectionReady(),s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.ReattachMainTarget,(()=>{const t=G.instance().mainTarget();if(t){const e=t.router();e&&e.connection().disconnect()}e()}))}});class zr extends l{#Mo;#xo;#Po;#Lo=new Map;#Eo=new Map;#Ao=new Map;#Oo=new Map;#No=null;constructor(e){super(e),this.#Mo=e.targetManager(),this.#xo=e,this.#Po=e.targetAgent(),e.registerTargetDispatcher(this);const t=this.#Mo.browserTarget();t?t!==e&&t.targetAgent().invoke_autoAttachRelated({targetId:e.id(),waitForDebuggerOnStart:!0}):this.#Po.invoke_setAutoAttach({autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),e.parentTarget()||s.InspectorFrontendHost.isUnderTest()||(this.#Po.invoke_setDiscoverTargets({discover:!0}),this.#Po.invoke_setRemoteLocations({locations:[{host:"localhost",port:9229}]}))}static install(e){zr.attachCallback=e,l.register(zr,{capabilities:_.Target,autostart:!0})}childTargets(){return Array.from(this.#Eo.values())}async suspendModel(){await this.#Po.invoke_setAutoAttach({autoAttach:!0,waitForDebuggerOnStart:!1,flatten:!0})}async resumeModel(){await this.#Po.invoke_setAutoAttach({autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0})}dispose(){for(const e of this.#Eo.keys())this.detachedFromTarget({sessionId:e,targetId:void 0})}targetCreated({targetInfo:e}){this.#Lo.set(e.targetId,e),this.fireAvailableTargetsChanged(),this.dispatchEventToListeners(qr.TargetCreated,e)}targetInfoChanged({targetInfo:e}){this.#Lo.set(e.targetId,e);const t=this.#Ao.get(e.targetId);t&&t.updateTargetInfo(e),this.fireAvailableTargetsChanged(),this.dispatchEventToListeners(qr.TargetInfoChanged,e)}targetDestroyed({targetId:e}){this.#Lo.delete(e),this.fireAvailableTargetsChanged(),this.dispatchEventToListeners(qr.TargetDestroyed,e)}targetCrashed({targetId:e,status:t,errorCode:n}){}fireAvailableTargetsChanged(){G.instance().dispatchEventToListeners(Q.AvailableTargetsChanged,[...this.#Lo.values()])}async getParentTargetId(){return this.#No||(this.#No=(await this.#xo.targetAgent().invoke_getTargetInfo({})).targetInfo.targetId),this.#No}async attachedToTarget({sessionId:t,targetInfo:n,waitingForDebugger:r}){if(this.#No===n.targetId)return;let s="";if("worker"===n.type&&n.title&&n.title!==n.url)s=n.title;else if("iframe"!==n.type&&"webview"!==n.type){const t=e.ParsedURL.ParsedURL.fromString(n.url);s=t?t.lastPathComponentWithFragment():"#"+ ++zr.lastAnonymousTargetId}let i=q.Browser;"iframe"===n.type||"webview"===n.type||"page"===n.type?i=q.Frame:"worker"===n.type?i=q.Worker:"shared_worker"===n.type?i=q.SharedWorker:"service_worker"===n.type?i=q.ServiceWorker:"auction_worklet"===n.type&&(i=q.AuctionWorklet);const o=this.#Mo.createTarget(n.targetId,s,i,this.#xo,t,void 0,void 0,n);this.#Eo.set(t,o),this.#Ao.set(o.id(),o),zr.attachCallback&&await zr.attachCallback({target:o,waitingForDebugger:r}),o.runtimeAgent().invoke_runIfWaitingForDebugger()}detachedFromTarget({sessionId:e}){if(this.#Oo.has(e))this.#Oo.delete(e);else{const t=this.#Eo.get(e);t&&(t.dispose("target terminated"),this.#Eo.delete(e),this.#Ao.delete(t.id()))}}receivedMessageFromTarget({}){}async createParallelConnection(e){const t=await this.getParentTargetId(),{connection:n,sessionId:r}=await this.createParallelConnectionAndSessionForTarget(this.#xo,t);return n.setOnMessage(e),this.#Oo.set(r,n),n}async createParallelConnectionAndSessionForTarget(e,t){const n=e.targetAgent(),r=e.router(),s=(await n.invoke_attachToTarget({targetId:t,flatten:!0})).sessionId,i=new Ur(r.connection(),s);return r.registerSession(e,s,i),i.setOnDisconnect((()=>{r.unregisterSession(s),n.invoke_detachFromTarget({sessionId:s})})),{connection:i,sessionId:s}}targetInfos(){return Array.from(this.#Lo.values())}static lastAnonymousTargetId=0;static attachCallback}!function(e){e.TargetCreated="TargetCreated",e.TargetDestroyed="TargetDestroyed",e.TargetInfoChanged="TargetInfoChanged"}(qr||(qr={}));var jr,Wr,Vr=Object.freeze({__proto__:null,ChildTargetManager:zr,get Events(){return qr}});!function(e){e.Result="result",e.Command="command",e.System="system",e.QueryObjectResult="queryObjectResult"}(jr||(jr={})),function(e){e.CSS="css",e.ConsoleAPI="console-api"}(Wr||(Wr={}));const Gr={profileD:"Profile {PH1}"},Qr=r.i18n.registerUIStrings("core/sdk/CPUProfilerModel.ts",Gr),$r=r.i18n.getLocalizedString.bind(void 0,Qr);class Xr extends l{#Fo;#Do;#Bo;#Uo;#Ho;#qo;registeredConsoleProfileMessages=[];constructor(e){super(e),this.#Fo=!1,this.#Do=1,this.#Bo=new Map,this.#Uo=e.profilerAgent(),this.#Ho=null,e.registerProfilerDispatcher(this),this.#Uo.invoke_enable(),this.#qo=e.model(nr)}runtimeModel(){return this.#qo.runtimeModel()}debuggerModel(){return this.#qo}consoleProfileStarted({id:e,location:t,title:n}){n||(n=$r(Gr.profileD,{PH1:this.#Do++}),this.#Bo.set(e,n));const r=this.createEventDataFrom(e,t,n);this.dispatchEventToListeners(Kr.ConsoleProfileStarted,r)}consoleProfileFinished({id:e,location:t,profile:n,title:r}){r||(r=this.#Bo.get(e),this.#Bo.delete(e));const s={...this.createEventDataFrom(e,t,r),cpuProfile:n};this.registeredConsoleProfileMessages.push(s),this.dispatchEventToListeners(Kr.ConsoleProfileFinished,s)}createEventDataFrom(e,t,n){const r=lr.fromPayload(this.#qo,t);return{id:this.target().id()+"."+e,scriptLocation:r,title:n||"",cpuProfilerModel:this}}isRecordingProfile(){return this.#Fo}startRecording(){this.#Fo=!0;return this.#Uo.invoke_setSamplingInterval({interval:100}),this.#Uo.invoke_start()}stopRecording(){return this.#Fo=!1,this.#Uo.invoke_stop().then((e=>e.profile||null))}startPreciseCoverage(e,t){this.#Ho=t;return this.#Uo.invoke_startPreciseCoverage({callCount:!1,detailed:e,allowTriggeredUpdates:!0})}async takePreciseCoverage(){const e=await this.#Uo.invoke_takePreciseCoverage();return{timestamp:e&&e.timestamp||0,coverage:e&&e.result||[]}}stopPreciseCoverage(){return this.#Ho=null,this.#Uo.invoke_stopPreciseCoverage()}preciseCoverageDeltaUpdate({timestamp:e,occasion:t,result:n}){this.#Ho&&this.#Ho(e,t,n)}}var Kr;!function(e){e.ConsoleProfileStarted="ConsoleProfileStarted",e.ConsoleProfileFinished="ConsoleProfileFinished"}(Kr||(Kr={})),l.register(Xr,{capabilities:_.JS,autostart:!0});var Jr,Yr=Object.freeze({__proto__:null,CPUProfilerModel:Xr,get Events(){return Kr}});class Zr extends l{#_o;constructor(e){super(e),e.registerLogDispatcher(this),this.#_o=e.logAgent(),this.#_o.invoke_enable(),s.InspectorFrontendHost.isUnderTest()||this.#_o.invoke_startViolationsReport({config:[{name:"longTask",threshold:200},{name:"longLayout",threshold:30},{name:"blockedEvent",threshold:100},{name:"blockedParser",threshold:-1},{name:"handler",threshold:150},{name:"recurringHandler",threshold:50},{name:"discouragedAPIUse",threshold:-1}]})}entryAdded({entry:e}){this.dispatchEventToListeners(Jr.EntryAdded,{logModel:this,entry:e})}requestClear(){this.#_o.invoke_clear()}}(Jr||(Jr={})).EntryAdded="EntryAdded",l.register(Zr,{capabilities:_.Log,autostart:!0});var es=Object.freeze({__proto__:null,LogModel:Zr,get Events(){return Jr}});const ts={navigatedToS:"Navigated to {PH1}",profileSStarted:"Profile ''{PH1}'' started.",profileSFinished:"Profile ''{PH1}'' finished.",failedToSaveToTempVariable:"Failed to save to temp variable."},ns=r.i18n.registerUIStrings("core/sdk/ConsoleModel.ts",ts),rs=r.i18n.getLocalizedString.bind(void 0,ns);let ss;class is extends e.ObjectWrapper.ObjectWrapper{#zo;#jo;#Wo;#Vo;#Go;#Qo;#$o;constructor(){super(),this.#zo=[],this.#jo=new Map,this.#Wo=0,this.#Vo=0,this.#Go=0,this.#Qo=0,this.#$o=new WeakMap,G.instance().observeTargets(this)}static instance(e={forceNew:null}){const{forceNew:t}=e;return ss&&!t||(ss=new is),ss}targetAdded(t){const n=t.model(qn);if(!n||n.cachedResourcesLoaded())return void this.initTarget(t);const r=n.addEventListener(Un.CachedResourcesLoaded,(()=>{e.EventTarget.removeEventListeners([r]),this.initTarget(t)}))}initTarget(e){const t=[],n=e.model(Xr);n&&(t.push(n.addEventListener(Kr.ConsoleProfileStarted,this.consoleProfileStarted.bind(this,n))),t.push(n.addEventListener(Kr.ConsoleProfileFinished,this.consoleProfileFinished.bind(this,n))));const r=e.model(qn);r&&!e.parentTarget()&&t.push(r.addEventListener(Un.MainFrameNavigated,this.mainFrameNavigated,this));const s=e.model(yr);s&&(t.push(s.addEventListener(Sr.ExceptionThrown,this.exceptionThrown.bind(this,s))),t.push(s.addEventListener(Sr.ExceptionRevoked,this.exceptionRevoked.bind(this,s))),t.push(s.addEventListener(Sr.ConsoleAPICalled,this.consoleAPICalled.bind(this,s))),e.parentTarget()||t.push(s.debuggerModel().addEventListener(or.GlobalObjectCleared,this.clearIfNecessary,this)),t.push(s.addEventListener(Sr.QueryObjectRequested,this.queryObjectRequested.bind(this,s)))),this.#$o.set(e,t)}targetRemoved(t){const n=t.model(yr);n&&this.#jo.delete(n),e.EventTarget.removeEventListeners(this.#$o.get(t)||[])}async evaluateCommandInConsole(t,n,r,i){const o=await t.evaluate({expression:r,objectGroup:"console",includeCommandLineAPI:i,silent:!1,returnByValue:!1,generatePreview:!0,replMode:!0,allowUnsafeEvalBlockedByCSP:!1,disableBreaks:void 0,throwOnSideEffect:void 0,timeout:void 0},e.Settings.Settings.instance().moduleSetting("consoleUserActivationEval").get(),!1);s.userMetrics.actionTaken(s.UserMetrics.Action.ConsoleEvaluated),"error"in o||(await e.Console.Console.instance().showPromise(),this.dispatchEventToListeners(os.CommandEvaluated,{result:o.object,commandMessage:n,exceptionDetails:o.exceptionDetails}))}addCommandMessage(e,t){const n=new ls(e.runtimeModel,"javascript",null,t,{type:jr.Command});return n.setExecutionContextId(e.id),this.addMessage(n),n}addMessage(e){e.setPageLoadSequenceNumber(this.#Qo),e.source===Wr.ConsoleAPI&&"clear"===e.type&&this.clearIfNecessary(),this.#zo.push(e);const t=e.runtimeModel(),n=e.getExceptionId();if(n&&t){let r=this.#jo.get(t);r||(r=new Map,this.#jo.set(t,r)),r.set(n,e)}this.incrementErrorWarningCount(e),this.dispatchEventToListeners(os.MessageAdded,e)}exceptionThrown(e,t){const n=t.data,r=function(e){if(!e)return;return{requestId:e.requestId||void 0,issueId:e.issueId||void 0}}(n.details.exceptionMetaData),s=ls.fromException(e,n.details,void 0,n.timestamp,void 0,r);s.setExceptionId(n.details.exceptionId),this.addMessage(s)}exceptionRevoked(e,t){const n=t.data,r=this.#jo.get(e),s=r?r.get(n):null;s&&(this.#Vo--,s.level="verbose",this.dispatchEventToListeners(os.MessageUpdated,s))}consoleAPICalled(e,t){const n=t.data;let r="info";"debug"===n.type?r="verbose":"error"===n.type||"assert"===n.type?r="error":"warning"===n.type?r="warning":"info"!==n.type&&"log"!==n.type||(r="info");let s="";n.args.length&&n.args[0].unserializableValue?s=n.args[0].unserializableValue:!n.args.length||"object"==typeof n.args[0].value&&null!==n.args[0].value?n.args.length&&n.args[0].description&&(s=n.args[0].description):s=String(n.args[0].value);const i=n.stackTrace&&n.stackTrace.callFrames.length?n.stackTrace.callFrames[0]:null,o={type:n.type,url:i?.url,line:i?.lineNumber,column:i?.columnNumber,parameters:n.args,stackTrace:n.stackTrace,timestamp:n.timestamp,executionContextId:n.executionContextId,context:n.context},a=new ls(e,Wr.ConsoleAPI,r,s,o);this.addMessage(a)}queryObjectRequested(e,t){const{objects:n,executionContextId:r}=t.data,s={type:jr.QueryObjectResult,parameters:[n],executionContextId:r},i=new ls(e,Wr.ConsoleAPI,"info","",s);this.addMessage(i)}clearIfNecessary(){e.Settings.Settings.instance().moduleSetting("preserveConsoleLog").get()||this.clear(),++this.#Qo}mainFrameNavigated(t){e.Settings.Settings.instance().moduleSetting("preserveConsoleLog").get()&&e.Console.Console.instance().log(rs(ts.navigatedToS,{PH1:t.data.url}))}consoleProfileStarted(e,t){const{data:n}=t;this.addConsoleProfileMessage(e,"profile",n.scriptLocation,rs(ts.profileSStarted,{PH1:n.title}))}consoleProfileFinished(e,t){const{data:n}=t;this.addConsoleProfileMessage(e,"profileEnd",n.scriptLocation,rs(ts.profileSFinished,{PH1:n.title}))}addConsoleProfileMessage(e,t,n,r){const s=n.script(),i=[{functionName:"",scriptId:n.scriptId,url:s?s.contentURL():"",lineNumber:n.lineNumber,columnNumber:n.columnNumber||0}];this.addMessage(new ls(e.runtimeModel(),Wr.ConsoleAPI,"info",r,{type:t,stackTrace:{callFrames:i}}))}incrementErrorWarningCount(e){if("violation"!==e.source)switch(e.level){case"warning":this.#Wo++;break;case"error":this.#Vo++}else this.#Go++}messages(){return this.#zo}requestClearMessages(){for(const e of G.instance().models(Zr))e.requestClear();for(const e of G.instance().models(yr))e.discardConsoleEntries();this.clear()}clear(){this.#zo=[],this.#jo.clear(),this.#Vo=0,this.#Wo=0,this.#Go=0,this.dispatchEventToListeners(os.ConsoleCleared)}errors(){return this.#Vo}warnings(){return this.#Wo}violations(){return this.#Go}async saveToTempVariable(t,n){if(!n||!t)return void a(null);const r=t,s=await r.globalObject("",!1);if("error"in s||Boolean(s.exceptionDetails)||!s.object)return void a("object"in s&&s.object||null);const i=s.object,o=await i.callFunction((function(e){const t="temp";let n=1;for(;t+n in this;)++n;const r=t+n;return this[r]=e,r}),[xe.toCallArgument(n)]);if(i.release(),o.wasThrown||!o.object||"string"!==o.object.type)a(o.object||null);else{const e=o.object.value,t=this.addCommandMessage(r,e);this.evaluateCommandInConsole(r,t,e,!1)}function a(t){let n=rs(ts.failedToSaveToTempVariable);t&&(n=n+" "+t.description),e.Console.Console.instance().error(n)}o.object&&o.object.release()}}var os;function as(e,t){if(!e!=!t)return!1;if(!e||!t)return!0;const n=e.callFrames,r=t.callFrames;if(n.length!==r.length)return!1;for(let e=0,t=n.length;ee.matchesSecurityOrigin(t)));await this.deleteCookies(e)}else await this.deleteCookies(n)}async saveCookie(e){let t,n=e.domain();n.startsWith(".")||(n=""),e.expires()&&(t=Math.floor(Date.parse(`${e.expires()}`)/1e3));const r=o.Runtime.experiments.isEnabled("experimentalCookieFeatures"),s={name:e.name(),value:e.value(),url:e.url()||void 0,domain:n,path:e.path(),secure:e.secure(),httpOnly:e.httpOnly(),sameSite:e.sameSite(),expires:t,priority:e.priority(),sameParty:e.sameParty(),partitionKey:e.partitionKey(),sourceScheme:r?e.sourceScheme():(i=e.sourceScheme(),"Unset"===i?i:void 0),sourcePort:r?e.sourcePort():void 0};var i;const a=await this.target().networkAgent().invoke_setCookie(s);return!(a.getError()||!a.success)&&a.success}getCookiesForDomain(t){const n=[];const r=this.target().model(qn);return r&&(r.mainFrame&&r.mainFrame.unreachableUrl()&&n.push(r.mainFrame.unreachableUrl()),r.forAllResources((function(r){const s=e.ParsedURL.ParsedURL.fromString(r.documentURL);return!s||t&&s.securityOrigin()!==t||n.push(r.url),!1}))),this.getCookies(n)}async deleteCookies(e){const t=this.target().networkAgent();this.#Zo.clear(),this.#ea.clear(),await Promise.all(e.map((e=>t.invoke_deleteCookies({name:e.name(),url:void 0,domain:e.domain(),path:e.path()}))))}}l.register(hs,{capabilities:_.Network,autostart:!1});var us=Object.freeze({__proto__:null,CookieModel:hs});const gs={devtoolsCpuProfileParserIsFixing:"`DevTools`: `CPU` profile parser is fixing {PH1} missing samples."},ms=r.i18n.registerUIStrings("core/sdk/CPUProfileDataModel.ts",gs),ps=r.i18n.getLocalizedString.bind(void 0,ms);class bs extends E{id;self;positionTicks;deoptReason;constructor(e,t){super(e.callFrame||{functionName:e.functionName,scriptId:e.scriptId,url:e.url,lineNumber:e.lineNumber-1,columnNumber:e.columnNumber-1}),this.id=e.id,this.self=(e.hitCount||0)*t,this.positionTicks=e.positionTicks,this.deoptReason=e.deoptReason&&"no reason"!==e.deoptReason?e.deoptReason:null}}var fs=Object.freeze({__proto__:null,CPUProfileNode:bs,CPUProfileDataModel:class extends A{profileStartTime;profileEndTime;timestamps;samples;lines;totalHitCount;profileHead;#ta;gcNode;programNode;idleNode;#na;#ra;constructor(e,t){super(t);Boolean(e.head)?(this.profileStartTime=1e3*e.startTime,this.profileEndTime=1e3*e.endTime,this.timestamps=e.timestamps,this.compatibilityConversionHeadToNodes(e)):(this.profileStartTime=e.startTime/1e3,this.profileEndTime=e.endTime/1e3,this.timestamps=this.convertTimeDeltas(e)),this.samples=e.samples,this.lines=e.lines,this.totalHitCount=0,this.profileHead=this.translateProfileTree(e.nodes),this.initialize(this.profileHead),this.extractMetaNodes(),this.samples&&(this.buildIdToNodeMap(),this.sortSamples(),this.normalizeTimestamps(),this.fixMissingSamples())}compatibilityConversionHeadToNodes(e){if(!e.head||e.nodes)return;const t=[];!function e(n){return t.push(n),n.children=n.children.map(e),n.id}(e.head),e.nodes=t,delete e.head}convertTimeDeltas(e){if(!e.timeDeltas)return[];let t=e.startTime;const n=new Array(e.timeDeltas.length);for(let r=0;re+(t.hitCount||0)),0);const r=(this.profileEndTime-this.profileStartTime)/this.totalHitCount,s=Boolean(e.Settings.Settings.instance().moduleSetting("showNativeFunctionsInJSProfile").get()),i=t[0],o=new Map([[i.id,i.id]]),a=new bs(i,r);if(!i.children)throw new Error("Missing children for root");const l=i.children.map((()=>a)),d=i.children.map((e=>n.get(e)));for(;d.length;){let e=l.pop();const t=d.pop();if(!t||!e)continue;t.children||(t.children=[]);const i=new bs(t,r);s||!((c=t).callFrame?Boolean(c.callFrame.url)&&c.callFrame.url.startsWith("native "):Boolean(c.url)&&c.url.startsWith("native "))?(e.children.push(i),e=i):e.self+=i.self,o.set(t.id,e.id),l.push.apply(l,t.children.map((()=>e))),d.push.apply(d,t.children.map((e=>n.get(e))))}var c;return this.samples&&(this.samples=this.samples.map((e=>o.get(e)))),a}sortSamples(){const e=this.timestamps;if(!e)return;const t=this.samples;if(!t)return;const n=e.map(((e,t)=>t));n.sort(((t,n)=>e[t]-e[n]));for(let r=0;r=s));y++){const t=i[y];if(t===m)continue;v=a.get(t);let r=a.get(m);if(v!==l){if(r===l&&p){const e=f[h],t=g-e;I[h-1]+=t,n(p.depth+1,l,e,t,t-I[h]),--h,r=p,m=r.id,p=null}for(;v&&v.depth>r.depth;)u.push(v),v=v.parent;for(;r!==v;){const e=f[h],t=g-e;I[h-1]+=t,n(r.depth,r,e,t,t-I[h]),--h,v&&v.depth===r.depth&&(u.push(v),v=v.parent),r=r.parent}for(;u.length;){const t=u.pop();v=t,e(t.depth,t,g),f[++h]=g,I[h]=0}m=t}else p=r,e(p.depth+1,l,g),f[++h]=g,I[h]=0,m=t}if(g=o[y]||this.profileEndTime,p&&a.get(m)===l){const e=f[h],t=g-e;I[h-1]+=t,n(p.depth+1,v,e,t,t-I[h]),--h,m=p.id}for(let e=a.get(m);e&&e.parent;e=e.parent){const t=f[h],r=g-t;I[h-1]+=r,n(e.depth,e,t,r,r-I[h]),--h}}nodeByIndex(e){return this.samples&&this.#ta.get(this.samples[e])||null}}});class Is extends l{#sa;#ia;#oa;#mn;#aa;#la;#da;#ca;#ha;#ua;constructor(t){super(t),this.#sa=t.emulationAgent(),this.#ia=t.pageAgent(),this.#oa=t.deviceOrientationAgent(),this.#mn=t.model(en),this.#aa=t.model(vn),this.#aa&&this.#aa.addEventListener(yn.InspectModeWillBeToggled,(()=>{this.updateTouch()}),this);const n=e.Settings.Settings.instance().moduleSetting("javaScriptDisabled");n.addChangeListener((async()=>await this.#sa.invoke_setScriptExecutionDisabled({value:n.get()}))),n.get()&&this.#sa.invoke_setScriptExecutionDisabled({value:!0});const r=e.Settings.Settings.instance().moduleSetting("emulation.touch");r.addChangeListener((()=>{const e=r.get();this.overrideEmulateTouch("force"===e)}));const s=e.Settings.Settings.instance().moduleSetting("emulation.idleDetection");s.addChangeListener((async()=>{const e=s.get();if("none"===e)return void await this.clearIdleOverride();const t=JSON.parse(e);await this.setIdleOverride(t)}));const i=e.Settings.Settings.instance().moduleSetting("emulatedCSSMedia"),o=e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeatureColorGamut"),a=e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersColorScheme"),l=e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeatureForcedColors"),d=e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersContrast"),c=e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedData"),h=e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedMotion");this.#la=new Map([["type",i.get()],["color-gamut",o.get()],["prefers-color-scheme",a.get()],["forced-colors",l.get()],["prefers-contrast",d.get()],["prefers-reduced-data",c.get()],["prefers-reduced-motion",h.get()]]),i.addChangeListener((()=>{this.#la.set("type",i.get()),this.updateCssMedia()})),o.addChangeListener((()=>{this.#la.set("color-gamut",o.get()),this.updateCssMedia()})),a.addChangeListener((()=>{this.#la.set("prefers-color-scheme",a.get()),this.updateCssMedia()})),l.addChangeListener((()=>{this.#la.set("forced-colors",l.get()),this.updateCssMedia()})),d.addChangeListener((()=>{this.#la.set("prefers-contrast",d.get()),this.updateCssMedia()})),c.addChangeListener((()=>{this.#la.set("prefers-reduced-data",c.get()),this.updateCssMedia()})),h.addChangeListener((()=>{this.#la.set("prefers-reduced-motion",h.get()),this.updateCssMedia()})),this.updateCssMedia();const u=e.Settings.Settings.instance().moduleSetting("emulateAutoDarkMode");u.addChangeListener((()=>this.emulateAutoDarkMode(u.get()))),u.get()&&this.emulateAutoDarkMode(u.get());const g=e.Settings.Settings.instance().moduleSetting("emulatedVisionDeficiency");g.addChangeListener((()=>this.emulateVisionDeficiency(g.get()))),g.get()&&this.emulateVisionDeficiency(g.get());const m=e.Settings.Settings.instance().moduleSetting("localFontsDisabled");m.addChangeListener((()=>this.setLocalFontsDisabled(m.get()))),m.get()&&this.setLocalFontsDisabled(m.get());const p=e.Settings.Settings.instance().moduleSetting("avifFormatDisabled"),b=e.Settings.Settings.instance().moduleSetting("jpegXlFormatDisabled"),f=e.Settings.Settings.instance().moduleSetting("webpFormatDisabled"),I=()=>{const e=[];p.get()&&e.push("avif"),b.get()&&e.push("jxl"),f.get()&&e.push("webp"),this.setDisabledImageTypes(e)};p.addChangeListener(I),f.addChangeListener(I),b.addChangeListener(I),(p.get()||b.get()||f.get())&&I(),this.#da=!1,this.#ca=!1,this.#ha=!1,this.#ua={enabled:!1,configuration:"mobile"}}supportsDeviceEmulation(){return this.target().hasAllCapabilities(_.DeviceEmulation)}async resetPageScaleFactor(){await this.#sa.invoke_resetPageScaleFactor()}async emulateDevice(e){e?await this.#sa.invoke_setDeviceMetricsOverride(e):await this.#sa.invoke_clearDeviceMetricsOverride()}overlayModel(){return this.#aa}async emulateLocation(e){if(!e||e.error)await Promise.all([this.#sa.invoke_clearGeolocationOverride(),this.#sa.invoke_setTimezoneOverride({timezoneId:""}),this.#sa.invoke_setLocaleOverride({locale:""}),this.#sa.invoke_setUserAgentOverride({userAgent:ce.instance().currentUserAgent()})]);else{function t(e,t){const n=t.getError();return n?Promise.reject({type:e,message:n}):Promise.resolve()}await Promise.all([this.#sa.invoke_setGeolocationOverride({latitude:e.latitude,longitude:e.longitude,accuracy:vs.defaultGeoMockAccuracy}).then((e=>t("emulation-set-location",e))),this.#sa.invoke_setTimezoneOverride({timezoneId:e.timezoneId}).then((e=>t("emulation-set-timezone",e))),this.#sa.invoke_setLocaleOverride({locale:e.locale}).then((e=>t("emulation-set-locale",e))),this.#sa.invoke_setUserAgentOverride({userAgent:ce.instance().currentUserAgent(),acceptLanguage:e.locale}).then((e=>t("emulation-set-user-agent",e)))])}}async emulateDeviceOrientation(e){e?await this.#oa.invoke_setDeviceOrientationOverride({alpha:e.alpha,beta:e.beta,gamma:e.gamma}):await this.#oa.invoke_clearDeviceOrientationOverride()}async setIdleOverride(e){await this.#sa.invoke_setIdleOverride(e)}async clearIdleOverride(){await this.#sa.invoke_clearIdleOverride()}async emulateCSSMedia(e,t){await this.#sa.invoke_setEmulatedMedia({media:e,features:t}),this.#mn&&this.#mn.mediaQueryResultChanged()}static parseAutoDarkModeSetting(e){switch(e){case"default":return;case"enabled":return!0;case"disabled":return!1;default:throw Error("unrecognized auto dark mode setting")}}async emulateAutoDarkMode(e){const t=Is.parseAutoDarkModeSetting(e);await this.#sa.invoke_setAutoDarkModeOverride({enabled:t})}async emulateVisionDeficiency(e){await this.#sa.invoke_setEmulatedVisionDeficiency({type:e})}setLocalFontsDisabled(e){this.#mn&&this.#mn.setLocalFontsEnabled(!e)}setDisabledImageTypes(e){this.#sa.invoke_setDisabledImageTypes({imageTypes:e})}async setCPUThrottlingRate(e){await this.#sa.invoke_setCPUThrottlingRate({rate:e})}async emulateTouch(e,t){this.#da=e,this.#ca=t,await this.updateTouch()}async overrideEmulateTouch(e){this.#ha=e,await this.updateTouch()}async updateTouch(){let e={enabled:this.#da,configuration:this.#ca?"mobile":"desktop"};this.#ha&&(e={enabled:!0,configuration:"mobile"}),this.#aa&&this.#aa.inspectModeEnabled()&&(e={enabled:!1,configuration:"mobile"}),(this.#ua.enabled||e.enabled)&&(this.#ua.enabled&&e.enabled&&this.#ua.configuration===e.configuration||(this.#ua=e,await this.#sa.invoke_setTouchEmulationEnabled({enabled:e.enabled,maxTouchPoints:1}),await this.#sa.invoke_setEmitTouchEventsForMouse({enabled:e.enabled,configuration:e.configuration})))}updateCssMedia(){const e=this.#la.get("type")??"",t=[{name:"color-gamut",value:this.#la.get("color-gamut")??""},{name:"prefers-color-scheme",value:this.#la.get("prefers-color-scheme")??""},{name:"forced-colors",value:this.#la.get("forced-colors")??""},{name:"prefers-contrast",value:this.#la.get("prefers-contrast")??""},{name:"prefers-reduced-data",value:this.#la.get("prefers-reduced-data")??""},{name:"prefers-reduced-motion",value:this.#la.get("prefers-reduced-motion")??""}];this.emulateCSSMedia(e,t)}}class vs{latitude;longitude;timezoneId;locale;error;constructor(e,t,n,r,s){this.latitude=e,this.longitude=t,this.timezoneId=n,this.locale=r,this.error=s}static parseSetting(e){if(e){const[t,n,r,s]=e.split(":"),[i,o]=t.split("@");return new vs(parseFloat(i),parseFloat(o),n,r,Boolean(s))}return new vs(0,0,"","",!1)}static parseUserInput(e,t,n,r){if(!e&&!t)return null;const{valid:s}=vs.latitudeValidator(e),{valid:i}=vs.longitudeValidator(t);if(!s&&!i)return null;const o=s?parseFloat(e):-1,a=i?parseFloat(t):-1;return new vs(o,a,n,r,!1)}static latitudeValidator(e){const t=parseFloat(e);return{valid:/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(e)&&t>=-90&&t<=90,errorMessage:void 0}}static longitudeValidator(e){const t=parseFloat(e);return{valid:/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(e)&&t>=-180&&t<=180,errorMessage:void 0}}static timezoneIdValidator(e){return{valid:""===e||/[a-zA-Z]/.test(e),errorMessage:void 0}}static localeValidator(e){return{valid:""===e||/[a-zA-Z]{2}/.test(e),errorMessage:void 0}}toSetting(){return`${this.latitude}@${this.longitude}:${this.timezoneId}:${this.locale}:${this.error||""}`}static defaultGeoMockAccuracy=150}class ys{alpha;beta;gamma;constructor(e,t,n){this.alpha=e,this.beta=t,this.gamma=n}static parseSetting(e){if(e){const t=JSON.parse(e);return new ys(t.alpha,t.beta,t.gamma)}return new ys(0,0,0)}static parseUserInput(e,t,n){if(!e&&!t&&!n)return null;const{valid:r}=ys.alphaAngleValidator(e),{valid:s}=ys.betaAngleValidator(t),{valid:i}=ys.gammaAngleValidator(n);if(!r&&!s&&!i)return null;const o=r?parseFloat(e):-1,a=s?parseFloat(t):-1,l=i?parseFloat(n):-1;return new ys(o,a,l)}static angleRangeValidator(e,t){const n=parseFloat(e);return{valid:/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(e)&&n>=t.minimum&&ne.trim()))}function As(e){return e.replaceAll(/(\/\*(?:.|\s)*?\*\/)/g,"")}var Os=Object.freeze({__proto__:null,parseFontVariationSettings:function(e){if(Ms.has(e.trim())||"normal"===e.trim())return[];const t=[];for(const n of Es(As(e))){const e=n.match(Ps);e&&t.push({tag:e[1]||e[2],value:parseFloat(e[3])})}return t},parseFontFamily:function(e){if(Ms.has(e.trim()))return[];const t=[];for(const n of Es(As(e))){const e=n.match(Ls);e?t.push(e[1]||e[2]):t.push(n)}return t},splitByComma:Es,stripComments:As});const Ns={trustedTypeViolations:"Trusted Type Violations",sinkViolations:"Sink Violations",policyViolations:"Policy Violations",animation:"Animation",canvas:"Canvas",geolocation:"Geolocation",notification:"Notification",parse:"Parse",script:"Script",timer:"Timer",window:"Window",webaudio:"WebAudio",media:"Media",pictureinpicture:"Picture-in-Picture",clipboard:"Clipboard",control:"Control",device:"Device",domMutation:"DOM Mutation",dragDrop:"Drag / drop",keyboard:"Keyboard",load:"Load",mouse:"Mouse",pointer:"Pointer",touch:"Touch",xhr:"XHR",setTimeoutOrIntervalFired:"{PH1} fired",scriptFirstStatement:"Script First Statement",scriptBlockedByContentSecurity:"Script Blocked by Content Security Policy",requestAnimationFrame:"Request Animation Frame",cancelAnimationFrame:"Cancel Animation Frame",animationFrameFired:"Animation Frame Fired",webglErrorFired:"WebGL Error Fired",webglWarningFired:"WebGL Warning Fired",setInnerhtml:"Set `innerHTML`",createCanvasContext:"Create canvas context",createAudiocontext:"Create `AudioContext`",closeAudiocontext:"Close `AudioContext`",resumeAudiocontext:"Resume `AudioContext`",suspendAudiocontext:"Suspend `AudioContext`",webglErrorFiredS:"WebGL Error Fired ({PH1})",scriptBlockedDueToContent:"Script blocked due to Content Security Policy directive: {PH1}",worker:"Worker"},Fs=r.i18n.registerUIStrings("core/sdk/DOMDebuggerModel.ts",Ns),Ds=r.i18n.getLocalizedString.bind(void 0,Fs);class Bs extends l{agent;#Gi;#cr;#ma;#pa;suspended=!1;constructor(t){super(t),this.agent=t.domdebuggerAgent(),this.#Gi=t.model(yr),this.#cr=t.model(Pn),this.#cr.addEventListener(wn.DocumentUpdated,this.documentUpdated,this),this.#cr.addEventListener(wn.NodeRemoved,this.nodeRemoved,this),this.#ma=[],this.#pa=e.Settings.Settings.instance().createLocalSetting("domBreakpoints",[]),this.#cr.existingDocument()&&this.documentUpdated()}runtimeModel(){return this.#Gi}async suspendModel(){this.suspended=!0}async resumeModel(){this.suspended=!1}async eventListeners(e){if(console.assert(e.runtimeModel()===this.#Gi),!e.objectId)return[];const t=await this.agent.invoke_getEventListeners({objectId:e.objectId}),n=[];for(const r of t.listeners||[]){const t=this.#Gi.debuggerModel().createRawLocationByScriptId(r.scriptId,r.lineNumber,r.columnNumber);t&&n.push(new _s(this,e,r.type,r.useCapture,r.passive,r.once,r.handler?this.#Gi.createRemoteObject(r.handler):null,r.originalHandler?this.#Gi.createRemoteObject(r.originalHandler):null,t,null))}return n}retrieveDOMBreakpoints(){this.#cr.requestDocument()}domBreakpoints(){return this.#ma.slice()}hasDOMBreakpoint(e,t){return this.#ma.some((n=>n.node===e&&n.type===t))}setDOMBreakpoint(e,t){for(const n of this.#ma)if(n.node===e&&n.type===t)return this.toggleDOMBreakpoint(n,!0),n;const n=new qs(this,e,t,!0);return this.#ma.push(n),this.saveDOMBreakpoints(),this.enableDOMBreakpoint(n),this.dispatchEventToListeners(Us.DOMBreakpointAdded,n),n}removeDOMBreakpoint(e,t){this.removeDOMBreakpoints((n=>n.node===e&&n.type===t))}removeAllDOMBreakpoints(){this.removeDOMBreakpoints((e=>!0))}toggleDOMBreakpoint(e,t){t!==e.enabled&&(e.enabled=t,t?this.enableDOMBreakpoint(e):this.disableDOMBreakpoint(e),this.dispatchEventToListeners(Us.DOMBreakpointToggled,e))}enableDOMBreakpoint(e){e.node.id&&(this.agent.invoke_setDOMBreakpoint({nodeId:e.node.id,type:e.type}),e.node.setMarker(Hs,!0))}disableDOMBreakpoint(e){e.node.id&&(this.agent.invoke_removeDOMBreakpoint({nodeId:e.node.id,type:e.type}),e.node.setMarker(Hs,!!this.nodeHasBreakpoints(e.node)||null))}nodeHasBreakpoints(e){for(const t of this.#ma)if(t.node===e&&t.enabled)return!0;return!1}resolveDOMBreakpointData(e){const t=e.type,n=this.#cr.nodeForId(e.nodeId);if(!t||!n)return null;let r=null,s=!1;return"subtree-modified"===t&&(s=e.insertion||!1,r=this.#cr.nodeForId(e.targetNodeId)),{type:t,node:n,targetNode:r,insertion:s}}currentURL(){const e=this.#cr.existingDocument();return e?e.documentURL:""}async documentUpdated(){if(this.suspended)return;const e=this.#ma;this.#ma=[],this.dispatchEventToListeners(Us.DOMBreakpointsRemoved,e);const t=await this.#cr.requestDocument(),n=t?t.documentURL:"";for(const e of this.#pa.get())e.url===n&&this.#cr.pushNodeByPathToFrontend(e.path).then(r.bind(this,e));function r(e,t){const n=t?this.#cr.nodeForId(t):null;if(!n)return;const r=new qs(this,n,e.type,e.enabled);this.#ma.push(r),e.enabled&&this.enableDOMBreakpoint(r),this.dispatchEventToListeners(Us.DOMBreakpointAdded,r)}}removeDOMBreakpoints(e){const t=[],n=[];for(const r of this.#ma)e(r)?(t.push(r),r.enabled&&(r.enabled=!1,this.disableDOMBreakpoint(r))):n.push(r);t.length&&(this.#ma=n,this.saveDOMBreakpoints(),this.dispatchEventToListeners(Us.DOMBreakpointsRemoved,t))}nodeRemoved(e){if(this.suspended)return;const{node:t}=e.data,n=t.children()||[];this.removeDOMBreakpoints((e=>e.node===t||-1!==n.indexOf(e.node)))}saveDOMBreakpoints(){const e=this.currentURL(),t=this.#pa.get().filter((t=>t.url!==e));for(const n of this.#ma)t.push({url:e,path:n.node.path(),type:n.type,enabled:n.enabled});this.#pa.set(t)}}var Us;!function(e){e.DOMBreakpointAdded="DOMBreakpointAdded",e.DOMBreakpointToggled="DOMBreakpointToggled",e.DOMBreakpointsRemoved="DOMBreakpointsRemoved"}(Us||(Us={}));const Hs="breakpoint-marker";class qs{domDebuggerModel;node;type;enabled;constructor(e,t,n,r){this.domDebuggerModel=e,this.node=t,this.type=n,this.enabled=r}}class _s{#ba;#fa;#g;#Ia;#va;#ya;#ka;#Sa;#Ei;#wa;#Ca;#Ta;constructor(e,t,n,r,s,i,o,a,l,d,c){this.#ba=e,this.#fa=t,this.#g=n,this.#Ia=r,this.#va=s,this.#ya=i,this.#ka=o,this.#Sa=a||o,this.#Ei=l;const h=l.script();this.#wa=h?h.contentURL():"",this.#Ca=d,this.#Ta=c||_s.Origin.Raw}domDebuggerModel(){return this.#ba}type(){return this.#g}useCapture(){return this.#Ia}passive(){return this.#va}once(){return this.#ya}handler(){return this.#ka}location(){return this.#Ei}sourceURL(){return this.#wa}originalHandler(){return this.#Sa}canRemove(){return Boolean(this.#Ca)||this.#Ta!==_s.Origin.FrameworkUser}remove(){if(!this.canRemove())return Promise.resolve(void 0);if(this.#Ta!==_s.Origin.FrameworkUser){function e(e,t,n){this.removeEventListener(e,t,n),this["on"+e]&&(this["on"+e]=void 0)}return this.#fa.callFunction(e,[xe.toCallArgument(this.#g),xe.toCallArgument(this.#Sa),xe.toCallArgument(this.#Ia)]).then((()=>{}))}if(this.#Ca){function e(e,t,n,r){this.call(null,e,t,n,r)}return this.#Ca.callFunction(e,[xe.toCallArgument(this.#g),xe.toCallArgument(this.#Sa),xe.toCallArgument(this.#Ia),xe.toCallArgument(this.#va)]).then((()=>{}))}return Promise.resolve(void 0)}canTogglePassive(){return this.#Ta!==_s.Origin.FrameworkUser}togglePassive(){return this.#fa.callFunction((function(e,t,n,r){this.removeEventListener(e,t,{capture:n}),this.addEventListener(e,t,{capture:n,passive:!r})}),[xe.toCallArgument(this.#g),xe.toCallArgument(this.#Sa),xe.toCallArgument(this.#Ia),xe.toCallArgument(this.#va)]).then((()=>{}))}origin(){return this.#Ta}markAsFramework(){this.#Ta=_s.Origin.Framework}isScrollBlockingType(){return"touchstart"===this.#g||"touchmove"===this.#g||"mousewheel"===this.#g||"wheel"===this.#g}}!function(e){let t;!function(e){e.Raw="Raw",e.Framework="Framework",e.FrameworkUser="FrameworkUser"}(t=e.Origin||(e.Origin={}))}(_s||(_s={}));class zs extends Er{#g;constructor(e,t,n){super(e,t),this.#g=n}type(){return this.#g}}class js extends Er{instrumentationName;eventName;eventTargetNames;constructor(e,t,n,r,s){super(r,s),this.instrumentationName=e,this.eventName=t,this.eventTargetNames=n}setEnabled(e){if(this.enabled()!==e){super.setEnabled(e);for(const e of G.instance().models(Bs))this.updateOnModel(e)}}updateOnModel(e){if(this.instrumentationName)this.enabled()?e.agent.invoke_setInstrumentationBreakpoint({eventName:this.instrumentationName}):e.agent.invoke_removeInstrumentationBreakpoint({eventName:this.instrumentationName});else for(const t of this.eventTargetNames)this.enabled()?e.agent.invoke_setEventListenerBreakpoint({eventName:this.eventName,targetName:t}):e.agent.invoke_removeEventListenerBreakpoint({eventName:this.eventName,targetName:t})}static listener="listener:";static instrumentation="instrumentation:"}let Ws;class Vs{#Ra;#Ma;#xa;#Pa;constructor(){this.#Ra=e.Settings.Settings.instance().createLocalSetting("xhrBreakpoints",[]),this.#Ma=new Map;for(const e of this.#Ra.get())this.#Ma.set(e.url,e.enabled);this.#xa=[],this.#xa.push(new zs(Ds(Ns.trustedTypeViolations),Ds(Ns.sinkViolations),"trustedtype-sink-violation")),this.#xa.push(new zs(Ds(Ns.trustedTypeViolations),Ds(Ns.policyViolations),"trustedtype-policy-violation")),this.#Pa=[],this.createInstrumentationBreakpoints(Ds(Ns.animation),["requestAnimationFrame","cancelAnimationFrame","requestAnimationFrame.callback"]),this.createInstrumentationBreakpoints(Ds(Ns.canvas),["canvasContextCreated","webglErrorFired","webglWarningFired"]),this.createInstrumentationBreakpoints(Ds(Ns.geolocation),["Geolocation.getCurrentPosition","Geolocation.watchPosition"]),this.createInstrumentationBreakpoints(Ds(Ns.notification),["Notification.requestPermission"]),this.createInstrumentationBreakpoints(Ds(Ns.parse),["Element.setInnerHTML","Document.write"]),this.createInstrumentationBreakpoints(Ds(Ns.script),["scriptFirstStatement","scriptBlockedByCSP"]),this.createInstrumentationBreakpoints(Ds(Ns.timer),["setTimeout","clearTimeout","setInterval","clearInterval","setTimeout.callback","setInterval.callback"]),this.createInstrumentationBreakpoints(Ds(Ns.window),["DOMWindow.close"]),this.createInstrumentationBreakpoints(Ds(Ns.webaudio),["audioContextCreated","audioContextClosed","audioContextResumed","audioContextSuspended"]),this.createEventListenerBreakpoints(Ds(Ns.media),["play","pause","playing","canplay","canplaythrough","seeking","seeked","timeupdate","ended","ratechange","durationchange","volumechange","loadstart","progress","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","waiting"],["audio","video"]),this.createEventListenerBreakpoints(Ds(Ns.pictureinpicture),["enterpictureinpicture","leavepictureinpicture"],["video"]),this.createEventListenerBreakpoints(Ds(Ns.pictureinpicture),["resize"],["PictureInPictureWindow"]),this.createEventListenerBreakpoints(Ds(Ns.clipboard),["copy","cut","paste","beforecopy","beforecut","beforepaste"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.control),["resize","scroll","zoom","focus","blur","select","change","submit","reset"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.device),["deviceorientation","devicemotion"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.domMutation),["DOMActivate","DOMFocusIn","DOMFocusOut","DOMAttrModified","DOMCharacterDataModified","DOMNodeInserted","DOMNodeInsertedIntoDocument","DOMNodeRemoved","DOMNodeRemovedFromDocument","DOMSubtreeModified","DOMContentLoaded"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.dragDrop),["drag","dragstart","dragend","dragenter","dragover","dragleave","drop"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.keyboard),["keydown","keyup","keypress","input"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.load),["load","beforeunload","unload","abort","error","hashchange","popstate","navigate","navigatesuccess","navigateerror","currentchange","navigateto","navigatefrom","finish","dispose"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.mouse),["auxclick","click","dblclick","mousedown","mouseup","mouseover","mousemove","mouseout","mouseenter","mouseleave","mousewheel","wheel","contextmenu"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.pointer),["pointerover","pointerout","pointerenter","pointerleave","pointerdown","pointerup","pointermove","pointercancel","gotpointercapture","lostpointercapture","pointerrawupdate"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.touch),["touchstart","touchmove","touchend","touchcancel"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.worker),["message","messageerror"],["*"]),this.createEventListenerBreakpoints(Ds(Ns.xhr),["readystatechange","load","loadstart","loadend","abort","error","progress","timeout"],["xmlhttprequest","xmlhttprequestupload"]);for(const[e,t]of[["setTimeout.callback",Ds(Ns.setTimeoutOrIntervalFired,{PH1:"setTimeout"})],["setInterval.callback",Ds(Ns.setTimeoutOrIntervalFired,{PH1:"setInterval"})],["scriptFirstStatement",Ds(Ns.scriptFirstStatement)],["scriptBlockedByCSP",Ds(Ns.scriptBlockedByContentSecurity)],["requestAnimationFrame",Ds(Ns.requestAnimationFrame)],["cancelAnimationFrame",Ds(Ns.cancelAnimationFrame)],["requestAnimationFrame.callback",Ds(Ns.animationFrameFired)],["webglErrorFired",Ds(Ns.webglErrorFired)],["webglWarningFired",Ds(Ns.webglWarningFired)],["Element.setInnerHTML",Ds(Ns.setInnerhtml)],["canvasContextCreated",Ds(Ns.createCanvasContext)],["Geolocation.getCurrentPosition","getCurrentPosition"],["Geolocation.watchPosition","watchPosition"],["Notification.requestPermission","requestPermission"],["DOMWindow.close","window.close"],["Document.write","document.write"],["audioContextCreated",Ds(Ns.createAudiocontext)],["audioContextClosed",Ds(Ns.closeAudiocontext)],["audioContextResumed",Ds(Ns.resumeAudiocontext)],["audioContextSuspended",Ds(Ns.suspendAudiocontext)]]){const n=this.resolveEventListenerBreakpointInternal("instrumentation:"+e);n&&n.setTitle(t)}G.instance().observeModels(Bs,this)}static instance(e={forceNew:null}){const{forceNew:t}=e;return Ws&&!t||(Ws=new Vs),Ws}cspViolationBreakpoints(){return this.#xa.slice()}createInstrumentationBreakpoints(e,t){for(const n of t)this.#Pa.push(new js(n,"",[],e,n))}createEventListenerBreakpoints(e,t,n){for(const r of t)this.#Pa.push(new js("",r,n,e,r))}resolveEventListenerBreakpointInternal(e,t){const n="instrumentation:",r="listener:";let s="";if(e.startsWith(n))s=e.substring(n.length),e="";else{if(!e.startsWith(r))return null;e=e.substring(r.length)}t=(t||"*").toLowerCase();let i=null;for(const n of this.#Pa)s&&n.instrumentationName===s&&(i=n),e&&n.eventName===e&&-1!==n.eventTargetNames.indexOf(t)&&(i=n),!i&&e&&n.eventName===e&&-1!==n.eventTargetNames.indexOf("*")&&(i=n);return i}eventListenerBreakpoints(){return this.#Pa.slice()}resolveEventListenerBreakpointTitle(e){const t=e.eventName;if("instrumentation:webglErrorFired"===t&&e.webglErrorName){let t=e.webglErrorName;return t=t.replace(/^.*(0x[0-9a-f]+).*$/i,"$1"),Ds(Ns.webglErrorFiredS,{PH1:t})}if("instrumentation:scriptBlockedByCSP"===t&&e.directiveText)return Ds(Ns.scriptBlockedDueToContent,{PH1:e.directiveText});const n=this.resolveEventListenerBreakpointInternal(t,e.targetName);return n?e.targetName?e.targetName+"."+n.title():n.title():""}resolveEventListenerBreakpoint(e){return this.resolveEventListenerBreakpointInternal(e.eventName,e.targetName)}updateCSPViolationBreakpoints(){const e=this.#xa.filter((e=>e.enabled())).map((e=>e.type()));for(const t of G.instance().models(Bs))this.updateCSPViolationBreakpointsForModel(t,e)}updateCSPViolationBreakpointsForModel(e,t){e.agent.invoke_setBreakOnCSPViolation({violationTypes:t})}xhrBreakpoints(){return this.#Ma}saveXHRBreakpoints(){const e=[];for(const t of this.#Ma.keys())e.push({url:t,enabled:this.#Ma.get(t)||!1});this.#Ra.set(e)}addXHRBreakpoint(e,t){if(this.#Ma.set(e,t),t)for(const t of G.instance().models(Bs))t.agent.invoke_setXHRBreakpoint({url:e});this.saveXHRBreakpoints()}removeXHRBreakpoint(e){const t=this.#Ma.get(e);if(this.#Ma.delete(e),t)for(const t of G.instance().models(Bs))t.agent.invoke_removeXHRBreakpoint({url:e});this.saveXHRBreakpoints()}toggleXHRBreakpoint(e,t){this.#Ma.set(e,t);for(const n of G.instance().models(Bs))t?n.agent.invoke_setXHRBreakpoint({url:e}):n.agent.invoke_removeXHRBreakpoint({url:e});this.saveXHRBreakpoints()}modelAdded(e){for(const t of this.#Ma.keys())this.#Ma.get(t)&&e.agent.invoke_setXHRBreakpoint({url:t});for(const t of this.#Pa)t.enabled()&&t.updateOnModel(e);const t=this.#xa.filter((e=>e.enabled())).map((e=>e.type()));this.updateCSPViolationBreakpointsForModel(e,t)}modelRemoved(e){}}l.register(Bs,{capabilities:_.DOM,autostart:!1});var Gs=Object.freeze({__proto__:null,DOMDebuggerModel:Bs,get Events(){return Us},DOMBreakpoint:qs,get EventListener(){return _s},CSPViolationBreakpoint:zs,DOMEventListenerBreakpoint:js,DOMDebuggerManager:Vs});const Qs={auctionWorklet:"Ad Auction Worklet",beforeBidderWorkletBiddingStart:"Bidder Bidding Phase Start",beforeBidderWorkletReportingStart:"Bidder Reporting Phase Start",beforeSellerWorkletScoringStart:"Seller Scoring Phase Start",beforeSellerWorkletReportingStart:"Seller Reporting Phase Start"},$s=r.i18n.registerUIStrings("core/sdk/EventBreakpointsModel.ts",Qs),Xs=r.i18n.getLocalizedString.bind(void 0,$s);class Ks extends l{agent;constructor(e){super(e),this.agent=e.eventBreakpointsAgent()}}class Js extends Er{instrumentationName;constructor(e,t){super(t,function(e){switch(e){case"beforeBidderWorkletBiddingStart":return Xs(Qs.beforeBidderWorkletBiddingStart);case"beforeBidderWorkletReportingStart":return Xs(Qs.beforeBidderWorkletReportingStart);case"beforeSellerWorkletScoringStart":return Xs(Qs.beforeSellerWorkletScoringStart);case"beforeSellerWorkletReportingStart":return Xs(Qs.beforeSellerWorkletReportingStart)}}(e)),this.instrumentationName=e}setEnabled(e){if(this.enabled()!==e){super.setEnabled(e);for(const e of G.instance().models(Ks))this.updateOnModel(e)}}updateOnModel(e){this.enabled()?e.agent.invoke_setInstrumentationBreakpoint({eventName:this.instrumentationName}):e.agent.invoke_removeInstrumentationBreakpoint({eventName:this.instrumentationName})}static instrumentationPrefix="instrumentation:"}let Ys;class Zs{#Pa=[];constructor(){this.createInstrumentationBreakpoints(Xs(Qs.auctionWorklet),["beforeBidderWorkletBiddingStart","beforeBidderWorkletReportingStart","beforeSellerWorkletScoringStart","beforeSellerWorkletReportingStart"]),G.instance().observeModels(Ks,this)}static instance(e={forceNew:null}){const{forceNew:t}=e;return Ys&&!t||(Ys=new Zs),Ys}createInstrumentationBreakpoints(e,t){for(const n of t)this.#Pa.push(new Js(n,e))}eventListenerBreakpoints(){return this.#Pa.slice()}resolveEventListenerBreakpointTitle(e){const t=this.resolveEventListenerBreakpoint(e);return t?t.title():null}resolveEventListenerBreakpoint(e){const t=e.eventName;if(!t.startsWith(Js.instrumentationPrefix))return null;const n=t.substring(Js.instrumentationPrefix.length);return this.#Pa.find((e=>e.instrumentationName===n))||null}modelAdded(e){for(const t of this.#Pa)t.enabled()&&t.updateOnModel(e)}modelRemoved(e){}}l.register(Ks,{capabilities:_.EventBreakpoints,autostart:!1});var ei,ti=Object.freeze({__proto__:null,EventBreakpointsModel:Ks,EventBreakpointsManager:Zs});class ni{#La;#Ea;#Aa;#Oa;#Na;#Fa;#Da;#Ba;#Ua;#Ha;#qa;#_a;#za;constructor(e){this.#La=e,this.#Ea=!0,this.#Aa=new Map,this.#Oa=new Map,this.#Na=Number(1/0),this.#Fa=Number(-1/0),this.#Da=[],this.#Ba=[],this.#Ua=new Map,this.#Ha=new Map,this.#qa=new Map,this.#_a=new Map,this.#za=new Map}static isNestableAsyncPhase(e){return"b"===e||"e"===e||"n"===e}static isAsyncBeginPhase(e){return"S"===e||"b"===e}static isAsyncPhase(e){return ni.isNestableAsyncPhase(e)||"S"===e||"T"===e||"F"===e||"p"===e}static isFlowPhase(e){return"s"===e||"t"===e||"f"===e}static isCompletePhase(e){return"X"===e}static isTopLevelEvent(e){return e.hasCategory(oi)&&"RunTask"===e.name||e.hasCategory(si)||e.hasCategory(ii)&&"Program"===e.name}static extractId(e){const t=e.scope||"";if(void 0===e.id2)return t&&e.id?`${t}@${e.id}`:e.id;const n=e.id2;if("object"==typeof n&&"global"in n!="local"in n)return void 0!==n.global?`:${t}:${n.global}`:`:${t}:${e.pid}:${n.local}`;console.error(`Unexpected id2 field at ${e.ts/1e3}, one and only one of 'local' and 'global' should be present.`)}static browserMainThread(t){const n=t.sortedProcesses();if(!n.length)return null;const r="CrBrowserMain",s=[],i=[];for(const e of n)e.name().toLowerCase().endsWith("browser")&&s.push(e),i.push(...e.sortedThreads().filter((e=>e.name()===r)));if(1===i.length)return i[0];if(1===s.length)return s[0].threadByName(r);const o=t.devToolsMetadataEvents().filter((e=>"TracingStartedInBrowser"===e.name));return 1===o.length?o[0].thread:(e.Console.Console.instance().error("Failed to find browser main thread in trace, some timeline features may be unavailable"),null)}devToolsMetadataEvents(){return this.#Da}addEvents(e){for(let t=0;t1e4?s=this.#La.appendAccessibleString(r):this.#La.appendString(r);const i=e.ts/1e3;if(i&&ie.#Va!==t.#Va?e.#Va-t.#Va:e.name().localeCompare(t.name())))}setName(e){this.#h=e}name(){return this.#h}id(){return this.idInternal}setSortIndex(e){this.#Va=e}getModel(){return this.model}}class ui extends hi{threads;#Ga;constructor(e,t){super(e,t),this.threads=new Map,this.#Ga=new Map}threadById(e){let t=this.threads.get(e);return t||(t=new gi(this,e),this.threads.set(e,t)),t}threadByName(e){return this.#Ga.get(e)||null}setThreadByName(e,t){this.#Ga.set(e,t)}addEvent(e){return this.threadById(e.tid).addEvent(e)}sortedThreads(){return hi.sort([...this.threads.values()])}}class gi extends hi{#Qa;#$a;#Xa;#Ka;constructor(e,t){super(e.getModel(),t),this.#Qa=e,this.#$a=[],this.#Xa=[],this.#Ka=null}tracingComplete(){this.#Xa.sort(ai.compareStartTime),this.#$a.sort(ai.compareStartTime);const e=ei,t=[],n=new Set;for(let r=0;r!n.has(t)))}addEvent(e){const t=e.ph===ei.SnapshotObject?li.fromPayload(e,this):ai.fromPayload(e,this);if(ni.isTopLevelEvent(t)){const e=this.#Ka;if(e&&(e.endTime||0)>t.startTime)return null;this.#Ka=t}return this.#$a.push(t),t}addAsyncEvent(e){this.#Xa.push(e)}setName(e){super.setName(e),this.#Qa.setThreadByName(e,this)}process(){return this.#Qa}events(){return this.#$a}asyncEvents(){return this.#Xa}removeEventsByName(e){const t=[];return this.#$a=this.#$a.filter((n=>!!n&&(n.name!==e||(t.push(n),!1)))),t}}var mi=Object.freeze({__proto__:null,TracingModel:ni,get Phase(){return ei},MetadataEvent:ri,LegacyTopLevelEventCategory:si,DevToolsMetadataEventCategory:ii,DevToolsTimelineEventCategory:oi,BackingStorage:class{appendString(e){}finishWriting(){}reset(){}},Event:ai,ObjectSnapshot:li,AsyncEvent:di,Process:ui,Thread:gi});const pi="disabled-by-default-devtools.screenshot",bi={CaptureFrame:"CaptureFrame",Screenshot:"Screenshot"};class fi{#Ja;timestamp;index;#Ya;#Za;constructor(e,t,n){this.#Ja=e,this.timestamp=t,this.index=n,this.#Ya=null,this.#Za=null}static fromEvent(e,t,n){const r=new fi(e,t.startTime,n);return r.#Ya=t.args.data,r}static fromSnapshot(e,t,n){const r=new fi(e,t.startTime,n);return r.#Za=t,r}model(){return this.#Ja}imageDataPromise(){return this.#Ya||!this.#Za?Promise.resolve(this.#Ya):this.#Za.objectPromise()}}var Ii=Object.freeze({__proto__:null,FilmStripModel:class{#_e;#el;#tl;constructor(e,t){this.#_e=[],this.#el=0,this.#tl=0,this.reset(e,t)}reset(e,t){this.#el=t||e.minimumRecordTime(),this.#tl=e.maximumRecordTime()-this.#el,this.#_e=[];const n=ni.browserMainThread(e);if(!n)return;const r=n.events();for(let e=0;ee-t.timestamp))-1;return n>=0?this.#_e[n]:null}},Frame:fi});let vi;class yi extends e.ObjectWrapper.ObjectWrapper{#nl;#rl;#q;#sl;constructor(){super(),this.#nl=new Map,this.#rl=new Map,this.#q=new Set,G.instance().observeModels(yr,this),this.#sl=0}static instance({forceNew:e}={forceNew:!1}){return vi&&!e||(vi=new yi),vi}observeIsolates(e){if(this.#q.has(e))throw new Error("Observer can only be registered once");this.#q.size||this.poll(),this.#q.add(e);for(const t of this.#nl.values())e.isolateAdded(t)}unobserveIsolates(e){this.#q.delete(e),this.#q.size||++this.#sl}modelAdded(e){this.modelAddedInternal(e)}async modelAddedInternal(e){this.#rl.set(e,null);const t=await e.isolateId();if(!this.#rl.has(e))return;if(!t)return void this.#rl.delete(e);this.#rl.set(e,t);let n=this.#nl.get(t);if(n||(n=new wi(t),this.#nl.set(t,n)),n.modelsInternal.add(e),1===n.modelsInternal.size)for(const e of this.#q)e.isolateAdded(n);else for(const e of this.#q)e.isolateChanged(n)}modelRemoved(e){const t=this.#rl.get(e);if(this.#rl.delete(e),!t)return;const n=this.#nl.get(t);if(n)if(n.modelsInternal.delete(e),n.modelsInternal.size)for(const e of this.#q)e.isolateChanged(n);else{for(const e of this.#q)e.isolateRemoved(n);this.#nl.delete(t)}}isolateByModel(e){return this.#nl.get(this.#rl.get(e)||"")||null}isolates(){return this.#nl.values()}async poll(){const e=this.#sl;for(;e===this.#sl;)await Promise.all(Array.from(this.isolates(),(e=>e.update()))),await new Promise((e=>setTimeout(e,Si)))}}var ki;(ki||(ki={})).MemoryChanged="MemoryChanged";const Si=2e3;class wi{#N;modelsInternal;#il;#ol;constructor(e){this.#N=e,this.modelsInternal=new Set,this.#il=0;const t=12e4/Si;this.#ol=new Ci(t)}id(){return this.#N}models(){return this.modelsInternal}runtimeModel(){return this.modelsInternal.values().next().value||null}heapProfilerModel(){const e=this.runtimeModel();return e&&e.heapProfilerModel()}async update(){const e=this.runtimeModel(),t=e&&await e.heapUsage();t&&(this.#il=t.usedSize,this.#ol.add(this.#il),yi.instance().dispatchEventToListeners(ki.MemoryChanged,this))}samplesCount(){return this.#ol.count()}usedHeapSize(){return this.#il}usedHeapSizeGrowRate(){return this.#ol.fitSlope()}isMainThread(){const e=this.runtimeModel();return!!e&&"main"===e.target().id()}}class Ci{#al;#ll;#xr;#dl;#cl;#hl;#ul;#gl;#ml;constructor(e){this.#al=0|e,this.reset()}reset(){this.#ll=Date.now(),this.#xr=0,this.#dl=[],this.#cl=[],this.#hl=0,this.#ul=0,this.#gl=0,this.#ml=0}count(){return this.#dl.length}add(e,t){const n="number"==typeof t?t:Date.now()-this.#ll,r=e;if(this.#dl.length===this.#al){const e=this.#dl[this.#xr],t=this.#cl[this.#xr];this.#hl-=e,this.#ul-=t,this.#gl-=e*e,this.#ml-=e*t}this.#hl+=n,this.#ul+=r,this.#gl+=n*n,this.#ml+=n*r,this.#dl[this.#xr]=n,this.#cl[this.#xr]=r,this.#xr=(this.#xr+1)%this.#al}fitSlope(){const e=this.count();return e<2?0:(this.#ml-this.#hl*this.#ul/e)/(this.#gl-this.#hl*this.#hl/e)}}var Ti=Object.freeze({__proto__:null,IsolateManager:yi,get Events(){return ki},MemoryTrendWindowMs:12e4,Isolate:wi,MemoryTrend:Ci});class Ri extends l{#pl=!1;#ji=!1;constructor(e){super(e),this.ensureEnabled()}async ensureEnabled(){if(this.#ji)return;this.#ji=!0,this.target().registerAuditsDispatcher(this);const e=this.target().auditsAgent();await e.invoke_enable()}issueAdded(e){this.dispatchEventToListeners("IssueAdded",{issuesModel:this,inspectorIssue:e.issue})}dispose(){super.dispose(),this.#pl=!0}getTargetIfNotDisposed(){return this.#pl?null:this.target()}}l.register(Ri,{capabilities:_.Audits,autostart:!0});var Mi,xi=Object.freeze({__proto__:null,IssuesModel:Ri});!function(e){let t;!function(e){e.NonFastScrollable="NonFastScrollable",e.TouchEventHandler="TouchEventHandler",e.WheelEventHandler="WheelEventHandler",e.RepaintsOnScroll="RepaintsOnScroll",e.MainThreadScrollingReason="MainThreadScrollingReason"}(t=e.ScrollRectType||(e.ScrollRectType={}))}(Mi||(Mi={}));var Pi=Object.freeze({__proto__:null,get Layer(){return Mi},StickyPositionConstraint:class{#bl;#fl;#Il;#vl;constructor(e,t){this.#bl=t.stickyBoxRect,this.#fl=t.containingBlockRect,this.#Il=null,e&&t.nearestLayerShiftingStickyBox&&(this.#Il=e.layerById(t.nearestLayerShiftingStickyBox)),this.#vl=null,e&&t.nearestLayerShiftingContainingBlock&&(this.#vl=e.layerById(t.nearestLayerShiftingContainingBlock))}stickyBoxRect(){return this.#bl}containingBlockRect(){return this.#fl}nearestLayerShiftingStickyBox(){return this.#Il}nearestLayerShiftingContainingBlock(){return this.#vl}},LayerTreeBase:class{#e;#cr;layersById;#yl;#kl;#Sl;#wl;constructor(e){this.#e=e,this.#cr=e?e.model(Pn):null,this.layersById=new Map,this.#yl=null,this.#kl=null,this.#Sl=new Map}target(){return this.#e}root(){return this.#yl}setRoot(e){this.#yl=e}contentRoot(){return this.#kl}setContentRoot(e){this.#kl=e}forEachLayer(e,t){return!(!t&&!(t=this.root()))&&(e(t)||t.children().some(this.forEachLayer.bind(this,e)))}layerById(e){return this.layersById.get(e)||null}async resolveBackendNodeIds(e){if(!e.size||!this.#cr)return;const t=await this.#cr.pushNodesByBackendIdsToFrontend(e);if(t)for(const e of t.keys())this.#Sl.set(e,t.get(e)||null)}backendNodeIdToNode(){return this.#Sl}setViewportSize(e){this.#wl=e}viewportSize(){return this.#wl}nodeForId(e){return this.#cr?this.#cr.nodeForId(e):null}}});class Li{id;url;startTime;loadTime;contentLoadTime;mainRequest;constructor(e){this.id=++Li.lastIdentifier,this.url=e.url(),this.startTime=e.startTime,this.mainRequest=e}static forRequest(e){return Ei.get(e)||null}bindRequest(e){Ei.set(e,this)}static lastIdentifier=0}const Ei=new WeakMap;var Ai=Object.freeze({__proto__:null,PageLoad:Li});class Oi extends l{layerTreeAgent;constructor(e){super(e),this.layerTreeAgent=e.layerTreeAgent()}async loadSnapshotFromFragments(e){const{snapshotId:t}=await this.layerTreeAgent.invoke_loadSnapshot({tiles:e});return t?new Ni(this,t):null}loadSnapshot(e){const t={x:0,y:0,picture:e};return this.loadSnapshotFromFragments([t])}async makeSnapshot(e){const{snapshotId:t}=await this.layerTreeAgent.invoke_makeSnapshot({layerId:e});return t?new Ni(this,t):null}}class Ni{#Cl;#Tl;#Rl;constructor(e,t){this.#Cl=e,this.#Tl=t,this.#Rl=1}release(){console.assert(this.#Rl>0,"release is already called on the object"),--this.#Rl||this.#Cl.layerTreeAgent.invoke_releaseSnapshot({snapshotId:this.#Tl})}addReference(){++this.#Rl,console.assert(this.#Rl>0,"Referencing a dead object")}async replay(e,t,n){return(await this.#Cl.layerTreeAgent.invoke_replaySnapshot({snapshotId:this.#Tl,fromStep:t,toStep:n,scale:e||1})).dataURL}async profile(e){return(await this.#Cl.layerTreeAgent.invoke_profileSnapshot({snapshotId:this.#Tl,minRepeatCount:5,minDuration:1,clipRect:e||void 0})).timings}async commandLog(){const e=await this.#Cl.layerTreeAgent.invoke_snapshotCommandLog({snapshotId:this.#Tl});return e.commandLog?e.commandLog.map(((e,t)=>new Fi(e,t))):null}}class Fi{method;params;commandIndex;constructor(e,t){this.method=e.method,this.params=e.params,this.commandIndex=t}}l.register(Oi,{capabilities:_.DOM,autostart:!1});var Di=Object.freeze({__proto__:null,PaintProfilerModel:Oi,PaintProfilerSnapshot:Ni,PaintProfilerLogItem:Fi});class Bi extends l{#os;#Ml;#xl;constructor(e){super(e),this.#os=e.performanceAgent(),this.#Ml=new Map([["TaskDuration","CumulativeTime"],["ScriptDuration","CumulativeTime"],["LayoutDuration","CumulativeTime"],["RecalcStyleDuration","CumulativeTime"],["LayoutCount","CumulativeCount"],["RecalcStyleCount","CumulativeCount"]]),this.#xl=new Map}enable(){return this.#os.invoke_enable({})}disable(){return this.#os.invoke_disable()}async requestMetrics(){const e=await this.#os.invoke_getMetrics()||[],n=new Map,r=performance.now();for(const s of e.metrics){let e,i=this.#xl.get(s.name);switch(i||(i={lastValue:void 0,lastTimestamp:void 0},this.#xl.set(s.name,i)),this.#Ml.get(s.name)){case"CumulativeTime":e=i.lastTimestamp&&i.lastValue?t.NumberUtilities.clamp(1e3*(s.value-i.lastValue)/(r-i.lastTimestamp),0,1):0,i.lastValue=s.value,i.lastTimestamp=r;break;case"CumulativeCount":e=i.lastTimestamp&&i.lastValue?Math.max(0,1e3*(s.value-i.lastValue)/(r-i.lastTimestamp)):0,i.lastValue=s.value,i.lastTimestamp=r;break;default:e=s.value}n.set(s.name,e)}return{metrics:n,timestamp:r}}}l.register(Bi,{capabilities:_.DOM,autostart:!1});var Ui=Object.freeze({__proto__:null,PerformanceMetricsModel:Bi});class Hi extends l{#os;#Pl;#Ll;constructor(e){super(e),this.#os=e.pageAgent(),this.#Pl=null,this.#Ll=null,e.registerPageDispatcher(this)}startScreencast(e,t,n,r,s,i,o){this.#Pl=i,this.#Ll=o,this.#os.invoke_startScreencast({format:e,quality:t,maxWidth:n,maxHeight:r,everyNthFrame:s})}stopScreencast(){this.#Pl=null,this.#Ll=null,this.#os.invoke_stopScreencast()}async captureScreenshot(e,t,n){await vn.muteHighlight();const r=await this.#os.invoke_captureScreenshot({format:e,quality:t,clip:n,fromSurface:!0,captureBeyondViewport:!0});return await vn.unmuteHighlight(),r.data}async fetchLayoutMetrics(){const e=await this.#os.invoke_getLayoutMetrics();return e.getError()?null:{viewportX:e.cssVisualViewport.pageX,viewportY:e.cssVisualViewport.pageY,viewportScale:e.cssVisualViewport.scale,contentWidth:e.cssContentSize.width,contentHeight:e.cssContentSize.height}}screencastFrame({data:e,metadata:t,sessionId:n}){this.#os.invoke_screencastFrameAck({sessionId:n}),this.#Pl&&this.#Pl.call(null,e,t)}screencastVisibilityChanged({visible:e}){this.#Ll&&this.#Ll.call(null,e)}backForwardCacheNotUsed(e){}domContentEventFired(e){}loadEventFired(e){}lifecycleEvent(e){}navigatedWithinDocument(e){}frameAttached(e){}frameNavigated(e){}documentOpened(e){}frameDetached(e){}frameStartedLoading(e){}frameStoppedLoading(e){}frameRequestedNavigation(e){}frameScheduledNavigation(e){}frameClearedScheduledNavigation(e){}frameResized(){}javascriptDialogOpening(e){}javascriptDialogClosed(e){}interstitialShown(){}interstitialHidden(){}windowOpen(e){}fileChooserOpened(e){}compilationCacheProduced(e){}downloadWillBegin(e){}downloadProgress(){}}l.register(Hi,{capabilities:_.ScreenCapture,autostart:!1});var qi=Object.freeze({__proto__:null,ScreenCaptureModel:Hi});const _i={serviceworkercacheagentError:"`ServiceWorkerCacheAgent` error deleting cache entry {PH1} in cache: {PH2}"},zi=r.i18n.registerUIStrings("core/sdk/ServiceWorkerCacheModel.ts",_i),ji=r.i18n.getLocalizedString.bind(void 0,zi);class Wi extends l{cacheAgent;#El;#Vs;#Al=new Map;#Ol=new Set;#Nl=new e.Throttler.Throttler(2e3);#ji=!1;#Fl=!1;constructor(e){super(e),e.registerStorageDispatcher(this),this.cacheAgent=e.cacheStorageAgent(),this.#El=e.storageAgent(),this.#Vs=e.model(Bn)}enable(){if(!this.#ji){this.#Vs.addEventListener(Fn.SecurityOriginAdded,this.securityOriginAdded,this),this.#Vs.addEventListener(Fn.SecurityOriginRemoved,this.securityOriginRemoved,this);for(const e of this.#Vs.securityOrigins())this.addOrigin(e);this.#ji=!0}}clearForOrigin(e){this.removeOrigin(e),this.addOrigin(e)}refreshCacheNames(){for(const e of this.#Al.values())this.cacheRemoved(e);this.#Al.clear();const e=this.#Vs.securityOrigins();for(const t of e)this.loadCacheNames(t)}async deleteCache(e){const t=await this.cacheAgent.invoke_deleteCache({cacheId:e.cacheId});t.getError()?console.error(`ServiceWorkerCacheAgent error deleting cache ${e.toString()}: ${t.getError()}`):(this.#Al.delete(e.cacheId),this.cacheRemoved(e))}async deleteCacheEntry(t,n){const r=await this.cacheAgent.invoke_deleteEntry({cacheId:t.cacheId,request:n});r.getError()&&e.Console.Console.instance().error(ji(_i.serviceworkercacheagentError,{PH1:t.toString(),PH2:String(r.getError())}))}loadCacheData(e,t,n,r,s){this.requestEntries(e,t,n,r,s)}loadAllCacheData(e,t,n){this.requestAllEntries(e,t,n)}caches(){const e=new Array;for(const t of this.#Al.values())e.push(t);return e}dispose(){for(const e of this.#Al.values())this.cacheRemoved(e);this.#Al.clear(),this.#ji&&(this.#Vs.removeEventListener(Fn.SecurityOriginAdded,this.securityOriginAdded,this),this.#Vs.removeEventListener(Fn.SecurityOriginRemoved,this.securityOriginRemoved,this))}addOrigin(e){this.loadCacheNames(e),this.isValidSecurityOrigin(e)&&this.#El.invoke_trackCacheStorageForOrigin({origin:e})}removeOrigin(e){for(const[t,n]of this.#Al.entries())n.securityOrigin===e&&(this.#Al.delete(t),this.cacheRemoved(n));this.isValidSecurityOrigin(e)&&this.#El.invoke_untrackCacheStorageForOrigin({origin:e})}isValidSecurityOrigin(t){const n=e.ParsedURL.ParsedURL.fromString(t);return null!==n&&n.scheme.startsWith("http")}async loadCacheNames(e){const t=await this.cacheAgent.invoke_requestCacheNames({securityOrigin:e});t.getError()||this.updateCacheNames(e,t.caches)}updateCacheNames(e,t){const n=new Set,r=new Map,s=new Map;for(const e of t){const t=new Gi(this,e.securityOrigin,e.cacheName,e.cacheId);n.add(t.cacheId),this.#Al.has(t.cacheId)||(r.set(t.cacheId,t),this.#Al.set(t.cacheId,t))}this.#Al.forEach((function(t){t.securityOrigin!==e||n.has(t.cacheId)||(s.set(t.cacheId,t),this.#Al.delete(t.cacheId))}),this),r.forEach(this.cacheAdded,this),s.forEach(this.cacheRemoved,this)}securityOriginAdded(e){this.addOrigin(e.data)}securityOriginRemoved(e){this.removeOrigin(e.data)}cacheAdded(e){this.dispatchEventToListeners(Vi.CacheAdded,{model:this,cache:e})}cacheRemoved(e){this.dispatchEventToListeners(Vi.CacheRemoved,{model:this,cache:e})}async requestEntries(e,t,n,r,s){const i=await this.cacheAgent.invoke_requestEntries({cacheId:e.cacheId,skipCount:t,pageSize:n,pathFilter:r});i.getError()?console.error("ServiceWorkerCacheAgent error while requesting entries: ",i.getError()):s(i.cacheDataEntries,i.returnCount)}async requestAllEntries(e,t,n){const r=await this.cacheAgent.invoke_requestEntries({cacheId:e.cacheId,pathFilter:t});r.getError()?console.error("ServiceWorkerCacheAgent error while requesting entries: ",r.getError()):n(r.cacheDataEntries,r.returnCount)}cacheStorageListUpdated({origin:e}){this.#Ol.add(e),this.#Nl.schedule((()=>{const e=Array.from(this.#Ol,(e=>this.loadCacheNames(e)));return this.#Ol.clear(),Promise.all(e)}),this.#Fl)}cacheStorageContentUpdated({origin:e,cacheName:t}){this.dispatchEventToListeners(Vi.CacheStorageContentUpdated,{origin:e,cacheName:t})}indexedDBListUpdated(e){}indexedDBContentUpdated(e){}setThrottlerSchedulesAsSoonAsPossibleForTest(){this.#Fl=!0}}var Vi;!function(e){e.CacheAdded="CacheAdded",e.CacheRemoved="CacheRemoved",e.CacheStorageContentUpdated="CacheStorageContentUpdated"}(Vi||(Vi={}));class Gi{#Pr;securityOrigin;cacheName;cacheId;constructor(e,t,n,r){this.#Pr=e,this.securityOrigin=t,this.cacheName=n,this.cacheId=r}equals(e){return this.cacheId===e.cacheId}toString(){return this.securityOrigin+this.cacheName}async requestCachedResponse(e,t){const n=await this.#Pr.cacheAgent.invoke_requestCachedResponse({cacheId:this.cacheId,requestURL:e,requestHeaders:t});return n.getError()?null:n.response}}l.register(Wi,{capabilities:_.Storage,autostart:!1});var Qi=Object.freeze({__proto__:null,ServiceWorkerCacheModel:Wi,get Events(){return Vi},Cache:Gi});const $i={running:"running",starting:"starting",stopped:"stopped",stopping:"stopping",activated:"activated",activating:"activating",installed:"installed",installing:"installing",new:"new",redundant:"redundant",sSS:"{PH1} #{PH2} ({PH3})"},Xi=r.i18n.registerUIStrings("core/sdk/ServiceWorkerManager.ts",$i),Ki=r.i18n.getLocalizedString.bind(void 0,Xi),Ji=r.i18n.getLazilyComputedLocalizedString.bind(void 0,Xi);class Yi extends l{#Dl;#os;#Bl;#ji;#Ul;serviceWorkerNetworkRequestsPanelStatus;constructor(t){super(t),t.registerServiceWorkerDispatcher(new eo(this)),this.#Dl=0,this.#os=t.serviceWorkerAgent(),this.#Bl=new Map,this.#ji=!1,this.enable(),this.#Ul=e.Settings.Settings.instance().createSetting("serviceWorkerUpdateOnReload",!1),this.#Ul.get()&&this.forceUpdateSettingChanged(),this.#Ul.addChangeListener(this.forceUpdateSettingChanged,this),new so(t,this),this.serviceWorkerNetworkRequestsPanelStatus={isOpen:!1,openedAt:0}}async enable(){this.#ji||(this.#ji=!0,await this.#os.invoke_enable())}async disable(){this.#ji&&(this.#ji=!1,this.#Bl.clear(),await this.#os.invoke_enable())}registrations(){return this.#Bl}hasRegistrationForURLs(e){for(const t of this.#Bl.values())if(e.filter((e=>e&&e.startsWith(t.scopeURL))).length===e.length)return!0;return!1}findVersion(e){for(const t of this.registrations().values()){const n=t.versions.get(e);if(n)return n}return null}deleteRegistration(e){const t=this.#Bl.get(e);if(t){if(t.isRedundant())return this.#Bl.delete(e),void this.dispatchEventToListeners(Zi.RegistrationDeleted,t);t.deleting=!0;for(const e of t.versions.values())this.stopWorker(e.id);this.unregister(t.scopeURL)}}async updateRegistration(e){const t=this.#Bl.get(e);t&&await this.#os.invoke_updateRegistration({scopeURL:t.scopeURL})}async deliverPushMessage(t,n){const r=this.#Bl.get(t);if(!r)return;const s=e.ParsedURL.ParsedURL.extractOrigin(r.scopeURL);await this.#os.invoke_deliverPushMessage({origin:s,registrationId:t,data:n})}async dispatchSyncEvent(t,n,r){const s=this.#Bl.get(t);if(!s)return;const i=e.ParsedURL.ParsedURL.extractOrigin(s.scopeURL);await this.#os.invoke_dispatchSyncEvent({origin:i,registrationId:t,tag:n,lastChance:r})}async dispatchPeriodicSyncEvent(t,n){const r=this.#Bl.get(t);if(!r)return;const s=e.ParsedURL.ParsedURL.extractOrigin(r.scopeURL);await this.#os.invoke_dispatchPeriodicSyncEvent({origin:s,registrationId:t,tag:n})}async unregister(e){await this.#os.invoke_unregister({scopeURL:e})}async startWorker(e){await this.#os.invoke_startWorker({scopeURL:e})}async skipWaiting(e){await this.#os.invoke_skipWaiting({scopeURL:e})}async stopWorker(e){await this.#os.invoke_stopWorker({versionId:e})}async inspectWorker(e){await this.#os.invoke_inspectWorker({versionId:e})}workerRegistrationUpdated(e){for(const t of e){let e=this.#Bl.get(t.registrationId);e?(e.update(t),e.shouldBeRemoved()?(this.#Bl.delete(e.id),this.dispatchEventToListeners(Zi.RegistrationDeleted,e)):this.dispatchEventToListeners(Zi.RegistrationUpdated,e)):(e=new ro(t),this.#Bl.set(t.registrationId,e),this.dispatchEventToListeners(Zi.RegistrationUpdated,e))}}workerVersionUpdated(e){const t=new Set;for(const n of e){const e=this.#Bl.get(n.registrationId);e&&(e.updateVersion(n),t.add(e))}for(const e of t)e.shouldBeRemoved()?(this.#Bl.delete(e.id),this.dispatchEventToListeners(Zi.RegistrationDeleted,e)):this.dispatchEventToListeners(Zi.RegistrationUpdated,e)}workerErrorReported(e){const t=this.#Bl.get(e.registrationId);t&&(t.errors.push(e),this.dispatchEventToListeners(Zi.RegistrationErrorAdded,{registration:t,error:e}))}forceUpdateOnReloadSetting(){return this.#Ul}forceUpdateSettingChanged(){const e=this.#Ul.get();this.#os.invoke_setForceUpdateOnPageLoad({forceUpdateOnPageLoad:e})}}var Zi;!function(e){e.RegistrationUpdated="RegistrationUpdated",e.RegistrationErrorAdded="RegistrationErrorAdded",e.RegistrationDeleted="RegistrationDeleted"}(Zi||(Zi={}));class eo{#G;constructor(e){this.#G=e}workerRegistrationUpdated({registrations:e}){this.#G.workerRegistrationUpdated(e)}workerVersionUpdated({versions:e}){this.#G.workerVersionUpdated(e)}workerErrorReported({errorMessage:e}){this.#G.workerErrorReported(e)}}class to{runningStatus;status;last_updated_timestamp;previousState;constructor(e,t,n,r){this.runningStatus=e,this.status=t,this.last_updated_timestamp=r,this.previousState=n}}class no{id;scriptURL;parsedURL;securityOrigin;scriptLastModified;scriptResponseTime;controlledClients;targetId;currentState;registration;constructor(e,t){this.registration=e,this.update(t)}update(t){this.id=t.versionId,this.scriptURL=t.scriptURL;const n=new e.ParsedURL.ParsedURL(t.scriptURL);this.securityOrigin=n.securityOrigin(),this.currentState=new to(t.runningStatus,t.status,this.currentState,Date.now()),this.scriptLastModified=t.scriptLastModified,this.scriptResponseTime=t.scriptResponseTime,t.controlledClients?this.controlledClients=t.controlledClients.slice():this.controlledClients=[],this.targetId=t.targetId||null}isStartable(){return!this.registration.isDeleted&&this.isActivated()&&this.isStopped()}isStoppedAndRedundant(){return"stopped"===this.runningStatus&&"redundant"===this.status}isStopped(){return"stopped"===this.runningStatus}isStarting(){return"starting"===this.runningStatus}isRunning(){return"running"===this.runningStatus}isStopping(){return"stopping"===this.runningStatus}isNew(){return"new"===this.status}isInstalling(){return"installing"===this.status}isInstalled(){return"installed"===this.status}isActivating(){return"activating"===this.status}isActivated(){return"activated"===this.status}isRedundant(){return"redundant"===this.status}get status(){return this.currentState.status}get runningStatus(){return this.currentState.runningStatus}mode(){return this.isNew()||this.isInstalling()?no.Modes.Installing:this.isInstalled()?no.Modes.Waiting:this.isActivating()||this.isActivated()?no.Modes.Active:no.Modes.Redundant}}!function(e){let t;e.RunningStatus={running:Ji($i.running),starting:Ji($i.starting),stopped:Ji($i.stopped),stopping:Ji($i.stopping)},e.Status={activated:Ji($i.activated),activating:Ji($i.activating),installed:Ji($i.installed),installing:Ji($i.installing),new:Ji($i.new),redundant:Ji($i.redundant)},function(e){e.Installing="installing",e.Waiting="waiting",e.Active="active",e.Redundant="redundant"}(t=e.Modes||(e.Modes={}))}(no||(no={}));class ro{#Hl;id;scopeURL;securityOrigin;isDeleted;versions;deleting;errors;constructor(e){this.update(e),this.versions=new Map,this.deleting=!1,this.errors=[]}update(t){this.#Hl=Symbol("fingerprint"),this.id=t.registrationId,this.scopeURL=t.scopeURL;const n=new e.ParsedURL.ParsedURL(t.scopeURL);this.securityOrigin=n.securityOrigin(),this.isDeleted=t.isDeleted}fingerprint(){return this.#Hl}versionsByMode(){const e=new Map;for(const t of this.versions.values())e.set(t.mode(),t);return e}updateVersion(e){this.#Hl=Symbol("fingerprint");let t=this.versions.get(e.versionId);return t?(t.update(e),t):(t=new no(this,e),this.versions.set(e.versionId,t),t)}isRedundant(){for(const e of this.versions.values())if(!e.isStoppedAndRedundant())return!1;return!0}shouldBeRemoved(){return this.isRedundant()&&(!this.errors.length||this.deleting)}canBeRemoved(){return this.isDeleted||this.deleting}clearErrors(){this.#Hl=Symbol("fingerprint"),this.errors=[]}}class so{#nr;#ql;#_l;constructor(e,t){this.#nr=e,this.#ql=t,this.#_l=new Map,t.addEventListener(Zi.RegistrationUpdated,this.registrationsUpdated,this),t.addEventListener(Zi.RegistrationDeleted,this.registrationsUpdated,this),G.instance().addModelListener(yr,Sr.ExecutionContextCreated,this.executionContextCreated,this)}registrationsUpdated(){this.#_l.clear();const e=this.#ql.registrations().values();for(const t of e)for(const e of t.versions.values())e.targetId&&this.#_l.set(e.targetId,e);this.updateAllContextLabels()}executionContextCreated(e){const t=e.data,n=this.serviceWorkerTargetId(t.target());n&&this.updateContextLabel(t,this.#_l.get(n)||null)}serviceWorkerTargetId(e){return e.parentTarget()!==this.#nr||e.type()!==q.ServiceWorker?null:e.id()}updateAllContextLabels(){for(const e of G.instance().targets()){const t=this.serviceWorkerTargetId(e);if(!t)continue;const n=this.#_l.get(t)||null,r=e.model(yr),s=r?r.executionContexts():[];for(const e of s)this.updateContextLabel(e,n)}}updateContextLabel(t,n){if(!n)return void t.setLabel("");const r=e.ParsedURL.ParsedURL.fromString(t.origin),s=r?r.lastPathComponentWithFragment():t.name,i=no.Status[n.status];t.setLabel(Ki($i.sSS,{PH1:s,PH2:n.id,PH3:i()}))}}l.register(Yi,{capabilities:_.ServiceWorker,autostart:!0});var io=Object.freeze({__proto__:null,ServiceWorkerManager:Yi,get Events(){return Zi},ServiceWorkerVersionState:to,get ServiceWorkerVersion(){return no},ServiceWorkerRegistration:ro});class oo extends l{#zl;#jl;#Wl;#Vl;#Gl;constructor(e){super(e),this.#zl=e.tracingAgent(),e.registerTracingDispatcher(new ao(this)),this.#jl=null,this.#Wl=0,this.#Vl=0}bufferUsage(e,t,n){this.#Wl=void 0===t?null:t,this.#jl&&this.#jl.tracingBufferUsage(e||n||0)}eventsCollected(e){this.#jl&&(this.#jl.traceEventsCollected(e),this.#Vl+=e.length,this.#Wl?(this.#Vl>this.#Wl&&(this.#Vl=this.#Wl),this.#jl.eventsRetrievalProgress(this.#Vl/this.#Wl)):this.#jl.eventsRetrievalProgress(0))}tracingComplete(){this.#Wl=0,this.#Vl=0,this.#jl&&(this.#jl.tracingComplete(),this.#jl=null),this.#Gl=!1}async start(e,t,n){if(this.#jl)throw new Error("Tracing is already started");this.#jl=e;const r={bufferUsageReportingInterval:500,categories:t,options:n,transferMode:"ReportEvents"},s=await this.#zl.invoke_start(r);return s.getError()&&(this.#jl=null),s}stop(){if(!this.#jl)throw new Error("Tracing is not started");if(this.#Gl)throw new Error("Tracing is already being stopped");this.#Gl=!0,this.#zl.invoke_end()}}class ao{#Ql;constructor(e){this.#Ql=e}bufferUsage({value:e,eventCount:t,percentFull:n}){this.#Ql.bufferUsage(e,t,n)}dataCollected({value:e}){this.#Ql.eventsCollected(e)}tracingComplete(){this.#Ql.tracingComplete()}}l.register(oo,{capabilities:_.Tracing,autostart:!1});var lo=Object.freeze({__proto__:null,TracingManager:oo});class co extends l{#os;constructor(e){super(e),this.#os=e.webAuthnAgent()}setVirtualAuthEnvEnabled(e){return e?this.#os.invoke_enable():this.#os.invoke_disable()}async addAuthenticator(e){return(await this.#os.invoke_addVirtualAuthenticator({options:e})).authenticatorId}async removeAuthenticator(e){await this.#os.invoke_removeVirtualAuthenticator({authenticatorId:e})}async setAutomaticPresenceSimulation(e,t){await this.#os.invoke_setAutomaticPresenceSimulation({authenticatorId:e,enabled:t})}async getCredentials(e){return(await this.#os.invoke_getCredentials({authenticatorId:e})).credentials}async removeCredential(e,t){await this.#os.invoke_removeCredential({authenticatorId:e,credentialId:t})}}l.register(co,{capabilities:_.WebAuthn,autostart:!1});var ho=Object.freeze({__proto__:null,WebAuthnModel:co});export{Lr as AccessibilityModel,fs as CPUProfileDataModel,Yr as CPUProfilerModel,Rs as CPUThrottlingManager,Qe as CSSContainerQuery,qe as CSSFontFace,gt as CSSMatchedStyles,Je as CSSMedia,L as CSSMetadata,hn as CSSModel,et as CSSProperty,Os as CSSPropertyParser,ze as CSSQuery,dt as CSSRule,nt as CSSStyleDeclaration,It as CSSStyleSheetHeader,Ar as CategorizedBreakpoint,Vr as ChildTargetManager,Bt as CompilerSourceMappingContentProvider,_r as Connections,cs as ConsoleModel,B as Cookie,us as CookieModel,z as CookieParser,Gs as DOMDebuggerModel,On as DOMModel,br as DebuggerModel,ks as EmulationModel,ti as EventBreakpointsModel,Ii as FilmStripModel,St as FrameManager,vr as HeapProfilerModel,Ct as IOModel,Ti as IsolateManager,xi as IssuesModel,Pi as LayerTreeBase,es as LogModel,ge as NetworkManager,Me as NetworkRequest,gn as OverlayColorGenerator,Cn as OverlayModel,pn as OverlayPersistentHighlighter,Ai as PageLoad,At as PageResourceLoader,Di as PaintProfiler,Ui as PerformanceMetricsModel,O as ProfileTreeModel,Ue as RemoteObject,Dn as Resource,jn as ResourceTreeModel,Mr as RuntimeModel,d as SDKModel,qi as ScreenCaptureModel,Kn as Script,Hn as SecurityOriginManager,Ie as ServerTiming,Qi as ServiceWorkerCacheModel,io as ServiceWorkerManager,Gt as SourceMap,Zt as SourceMapManager,W as Target,$ as TargetManager,lo as TracingManager,mi as TracingModel,ho as WebAuthnModel}; diff --git a/chii/device_mode_emulation_frame.html b/chii/device_mode_emulation_frame.html new file mode 100644 index 00000000..1fe5f720 --- /dev/null +++ b/chii/device_mode_emulation_frame.html @@ -0,0 +1,19 @@ + + + + +DevTools + + + + diff --git a/chii/devtools_app.html b/chii/devtools_app.html new file mode 100644 index 00000000..f41b5576 --- /dev/null +++ b/chii/devtools_app.html @@ -0,0 +1,19 @@ + + + + +DevTools + + + + diff --git a/chii/devtools_compatibility.js b/chii/devtools_compatibility.js new file mode 100644 index 00000000..fd65e133 --- /dev/null +++ b/chii/devtools_compatibility.js @@ -0,0 +1,1560 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +/* eslint-disable indent */ +(function(window) { + + // DevToolsAPI ---------------------------------------------------------------- + + const DevToolsAPIImpl = class { + constructor() { + /** + * @type {number} + */ + this._lastCallId = 0; + + /** + * @type {!Object.} + */ + this._callbacks = {}; + + /** + * @type {!Array.} + */ + this._pendingExtensionDescriptors = []; + + /** + * @type {?function(!ExtensionDescriptor)} + */ + this._addExtensionCallback = null; + + /** + * @type {!Promise} + */ + this._initialTargetIdPromise = new Promise(resolve => { + this._setInitialTargetId = resolve; + }); + } + + /** + * @param {number} id + * @param {?Object} arg + */ + embedderMessageAck(id, arg) { + const callback = this._callbacks[id]; + delete this._callbacks[id]; + if (callback) { + callback(arg); + } + } + + /** + * @param {string} method + * @param {!Array.<*>} args + * @param {?function(?Object)} callback + */ + sendMessageToEmbedder(method, args, callback) { + const callId = ++this._lastCallId; + if (callback) { + this._callbacks[callId] = callback; + } + const message = {'id': callId, 'method': method}; + if (args.length) { + message.params = args; + } + DevToolsHost.sendMessageToEmbedder(JSON.stringify(message)); + } + + /** + * @param {string} method + * @param {!Array<*>} args + */ + _dispatchOnInspectorFrontendAPI(method, args) { + const inspectorFrontendAPI = /** @type {!Object} */ (window['InspectorFrontendAPI']); + inspectorFrontendAPI[method].apply(inspectorFrontendAPI, args); + } + + // API methods below this line -------------------------------------------- + + /** + * @param {!Array.} extensions + */ + addExtensions(extensions) { + // Support for legacy front-ends (} devices + */ + devicesUpdated(devices) { + this._dispatchOnInspectorFrontendAPI('devicesUpdated', [devices]); + } + + /** + * @param {string} message + */ + dispatchMessage(message) { + this._dispatchOnInspectorFrontendAPI('dispatchMessage', [message]); + } + + /** + * @param {string} messageChunk + * @param {number} messageSize + */ + dispatchMessageChunk(messageChunk, messageSize) { + this._dispatchOnInspectorFrontendAPI('dispatchMessageChunk', [messageChunk, messageSize]); + } + + enterInspectElementMode() { + this._dispatchOnInspectorFrontendAPI('enterInspectElementMode', []); + } + + /** + * @param {!{r: number, g: number, b: number, a: number}} color + */ + eyeDropperPickedColor(color) { + this._dispatchOnInspectorFrontendAPI('eyeDropperPickedColor', [color]); + } + + /** + * @param {!Array.} fileSystems + */ + fileSystemsLoaded(fileSystems) { + this._dispatchOnInspectorFrontendAPI('fileSystemsLoaded', [fileSystems]); + } + + /** + * @param {string} fileSystemPath + */ + fileSystemRemoved(fileSystemPath) { + this._dispatchOnInspectorFrontendAPI('fileSystemRemoved', [fileSystemPath]); + } + + /** + * @param {?string} error + * @param {?{type: string, fileSystemName: string, rootURL: string, fileSystemPath: string}} fileSystem + */ + fileSystemAdded(error, fileSystem) { + this._dispatchOnInspectorFrontendAPI('fileSystemAdded', [error, fileSystem]); + } + + /** + * @param {!Array} changedPaths + * @param {!Array} addedPaths + * @param {!Array} removedPaths + */ + fileSystemFilesChangedAddedRemoved(changedPaths, addedPaths, removedPaths) { + // Support for legacy front-ends (} files + */ + searchCompleted(requestId, fileSystemPath, files) { + this._dispatchOnInspectorFrontendAPI('searchCompleted', [requestId, fileSystemPath, files]); + } + + /** + * @param {string} tabId + */ + setInspectedTabId(tabId) { + this._inspectedTabIdValue = tabId; + + // Support for legacy front-ends ()} callback + */ + getPreferences(callback) { + DevToolsAPI.sendMessageToEmbedder('getPreferences', [], /** @type {function(?Object)} */ (callback)); + } + + /** + * @override + * @param {string} name + * @param {string} value + */ + setPreference(name, value) { + DevToolsAPI.sendMessageToEmbedder('setPreference', [name, value], null); + } + + /** + * @override + * @param {string} name + */ + removePreference(name) { + DevToolsAPI.sendMessageToEmbedder('removePreference', [name], null); + } + + /** + * @override + */ + clearPreferences() { + DevToolsAPI.sendMessageToEmbedder('clearPreferences', [], null); + } + + /** + * @override + * @param {!function(!InspectorFrontendHostAPI.SyncInformation):void} callback + */ + getSyncInformation(callback) { + DevToolsAPI.sendMessageToEmbedder('getSyncInformation', [], callback); + } + + /** + * @override + * @param {string} origin + * @param {string} script + */ + setInjectedScriptForOrigin(origin, script) { + DevToolsAPI.sendMessageToEmbedder('registerExtensionsAPI', [origin, script], null); + } + + /** + * @override + * @param {string} url + */ + inspectedURLChanged(url) { + DevToolsAPI.sendMessageToEmbedder('inspectedURLChanged', [url], null); + } + + /** + * @override + * @param {string} text + */ + copyText(text) { + DevToolsHost.copyText(text); + } + + /** + * @override + * @param {string} url + */ + openInNewTab(url) { + DevToolsAPI.sendMessageToEmbedder('openInNewTab', [url], null); + } + + /** + * @override + * @param {string} fileSystemPath + */ + showItemInFolder(fileSystemPath) { + DevToolsAPI.sendMessageToEmbedder('showItemInFolder', [fileSystemPath], null); + } + + /** + * @override + * @param {string} url + * @param {string} content + * @param {boolean} forceSaveAs + */ + save(url, content, forceSaveAs) { + DevToolsAPI.sendMessageToEmbedder('save', [url, content, forceSaveAs], null); + } + + /** + * @override + * @param {string} url + * @param {string} content + */ + append(url, content) { + DevToolsAPI.sendMessageToEmbedder('append', [url, content], null); + } + + /** + * @override + * @param {string} url + */ + close(url) { + } + + /** + * @override + * @param {string} message + */ + sendMessageToBackend(message) { + DevToolsAPI.sendMessageToEmbedder('dispatchProtocolMessage', [message], null); + } + + /** + * @override + * @param {!InspectorFrontendHostAPI.EnumeratedHistogram} actionName + * @param {number} actionCode + * @param {number} bucketSize + */ + recordEnumeratedHistogram(actionName, actionCode, bucketSize) { + if (!Object.values(EnumeratedHistogram).includes(actionName)) { + return; + } + DevToolsAPI.sendMessageToEmbedder('recordEnumeratedHistogram', [actionName, actionCode, bucketSize], null); + } + + /** + * @override + * @param {string} histogramName + * @param {number} duration + */ + recordPerformanceHistogram(histogramName, duration) { + DevToolsAPI.sendMessageToEmbedder('recordPerformanceHistogram', [histogramName, duration], null); + } + + /** + * @override + * @param {string} umaName + */ + recordUserMetricsAction(umaName) { + DevToolsAPI.sendMessageToEmbedder('recordUserMetricsAction', [umaName], null); + } + + /** + * @override + */ + requestFileSystems() { + DevToolsAPI.sendMessageToEmbedder('requestFileSystems', [], null); + } + + /** + * @override + * @param {string=} type + */ + addFileSystem(type) { + DevToolsAPI.sendMessageToEmbedder('addFileSystem', [type || ''], null); + } + + /** + * @override + * @param {string} fileSystemPath + */ + removeFileSystem(fileSystemPath) { + DevToolsAPI.sendMessageToEmbedder('removeFileSystem', [fileSystemPath], null); + } + + /** + * @override + * @param {string} fileSystemId + * @param {string} registeredName + * @return {?FileSystem} + */ + isolatedFileSystem(fileSystemId, registeredName) { + return DevToolsHost.isolatedFileSystem(fileSystemId, registeredName); + } + + /** + * @override + * @param {!FileSystem} fileSystem + */ + upgradeDraggedFileSystemPermissions(fileSystem) { + DevToolsHost.upgradeDraggedFileSystemPermissions(fileSystem); + } + + /** + * @override + * @param {number} requestId + * @param {string} fileSystemPath + * @param {string} excludedFolders + */ + indexPath(requestId, fileSystemPath, excludedFolders) { + // |excludedFolders| added in M67. For backward compatibility, + // pass empty array. + excludedFolders = excludedFolders || '[]'; + DevToolsAPI.sendMessageToEmbedder('indexPath', [requestId, fileSystemPath, excludedFolders], null); + } + + /** + * @override + * @param {number} requestId + */ + stopIndexing(requestId) { + DevToolsAPI.sendMessageToEmbedder('stopIndexing', [requestId], null); + } + + /** + * @override + * @param {number} requestId + * @param {string} fileSystemPath + * @param {string} query + */ + searchInPath(requestId, fileSystemPath, query) { + DevToolsAPI.sendMessageToEmbedder('searchInPath', [requestId, fileSystemPath, query], null); + } + + /** + * @override + * @return {number} + */ + zoomFactor() { + return DevToolsHost.zoomFactor(); + } + + /** + * @override + */ + zoomIn() { + DevToolsAPI.sendMessageToEmbedder('zoomIn', [], null); + } + + /** + * @override + */ + zoomOut() { + DevToolsAPI.sendMessageToEmbedder('zoomOut', [], null); + } + + /** + * @override + */ + resetZoom() { + DevToolsAPI.sendMessageToEmbedder('resetZoom', [], null); + } + + /** + * @override + * @param {string} shortcuts + */ + setWhitelistedShortcuts(shortcuts) { + DevToolsAPI.sendMessageToEmbedder('setWhitelistedShortcuts', [shortcuts], null); + } + + /** + * @override + * @param {boolean} active + */ + setEyeDropperActive(active) { + DevToolsAPI.sendMessageToEmbedder('setEyeDropperActive', [active], null); + } + + /** + * @override + * @param {!Array} certChain + */ + showCertificateViewer(certChain) { + DevToolsAPI.sendMessageToEmbedder('showCertificateViewer', [JSON.stringify(certChain)], null); + } + + /** + * Only needed to run Lighthouse on old devtools. + * @override + * @param {function()} callback + */ + reattach(callback) { + DevToolsAPI.sendMessageToEmbedder('reattach', [], callback); + } + + /** + * @override + */ + readyForTest() { + DevToolsAPI.sendMessageToEmbedder('readyForTest', [], null); + } + + /** + * @override + */ + connectionReady() { + DevToolsAPI.sendMessageToEmbedder('connectionReady', [], null); + } + + /** + * @override + * @param {boolean} value + */ + setOpenNewWindowForPopups(value) { + DevToolsAPI.sendMessageToEmbedder('setOpenNewWindowForPopups', [value], null); + } + + /** + * @override + * @param {!Adb.Config} config + */ + setDevicesDiscoveryConfig(config) { + DevToolsAPI.sendMessageToEmbedder( + 'setDevicesDiscoveryConfig', + [ + config.discoverUsbDevices, config.portForwardingEnabled, JSON.stringify(config.portForwardingConfig), + config.networkDiscoveryEnabled, JSON.stringify(config.networkDiscoveryConfig) + ], + null); + } + + /** + * @override + * @param {boolean} enabled + */ + setDevicesUpdatesEnabled(enabled) { + DevToolsAPI.sendMessageToEmbedder('setDevicesUpdatesEnabled', [enabled], null); + } + + /** + * @override + * @param {string} pageId + * @param {string} action + */ + performActionOnRemotePage(pageId, action) { + DevToolsAPI.sendMessageToEmbedder('performActionOnRemotePage', [pageId, action], null); + } + + /** + * @override + * @param {string} browserId + * @param {string} url + */ + openRemotePage(browserId, url) { + DevToolsAPI.sendMessageToEmbedder('openRemotePage', [browserId, url], null); + } + + /** + * @override + */ + openNodeFrontend() { + DevToolsAPI.sendMessageToEmbedder('openNodeFrontend', [], null); + } + + /** + * @override + * @param {number} x + * @param {number} y + * @param {!Array.} items + * @param {!Document} document + */ + showContextMenuAtPoint(x, y, items, document) { + DevToolsHost.showContextMenuAtPoint(x, y, items, document); + } + + /** + * @override + * @return {boolean} + */ + isHostedMode() { + return DevToolsHost.isHostedMode(); + } + + /** + * @override + * @param {function(!ExtensionDescriptor)} callback + */ + setAddExtensionCallback(callback) { + DevToolsAPI.setAddExtensionCallback(callback); + } + + // Backward-compatible methods below this line -------------------------------------------- + + /** + * Support for legacy front-ends (} + */ + initialTargetId() { + return DevToolsAPI._initialTargetIdPromise; + } + }; + + window.InspectorFrontendHost = new InspectorFrontendHostImpl(); + + // DevToolsApp --------------------------------------------------------------- + + function installObjectObserve() { + /** @type {!Array} */ + const properties = [ + 'advancedSearchConfig', + 'auditsPanelSplitViewState', + 'auditsSidebarWidth', + 'blockedURLs', + 'breakpoints', + 'cacheDisabled', + 'colorFormat', + 'consoleHistory', + 'consoleTimestampsEnabled', + 'cpuProfilerView', + 'cssSourceMapsEnabled', + 'currentDockState', + 'customColorPalette', + 'customDevicePresets', + 'customEmulatedDeviceList', + 'customFormatters', + 'customUserAgent', + 'databaseTableViewVisibleColumns', + 'dataGrid-cookiesTable', + 'dataGrid-DOMStorageItemsView', + 'debuggerSidebarHidden', + 'disablePausedStateOverlay', + 'domBreakpoints', + 'domWordWrap', + 'elementsPanelSplitViewState', + 'elementsSidebarWidth', + 'emulation.deviceHeight', + 'emulation.deviceModeValue', + 'emulation.deviceOrientationOverride', + 'emulation.deviceScale', + 'emulation.deviceScaleFactor', + 'emulation.deviceUA', + 'emulation.deviceWidth', + 'emulation.locationOverride', + 'emulation.showDeviceMode', + 'emulation.showRulers', + 'enableAsyncStackTraces', + 'eventListenerBreakpoints', + 'fileMappingEntries', + 'fileSystemMapping', + 'FileSystemViewSidebarWidth', + 'fileSystemViewSplitViewState', + 'filterBar-consoleView', + 'filterBar-networkPanel', + 'filterBar-promisePane', + 'filterBar-timelinePanel', + 'frameViewerHideChromeWindow', + 'heapSnapshotRetainersViewSize', + 'heapSnapshotSplitViewState', + 'hideCollectedPromises', + 'hideNetworkMessages', + 'highlightNodeOnHoverInOverlay', + 'inlineVariableValues', + 'Inspector.drawerSplitView', + 'Inspector.drawerSplitViewState', + 'InspectorView.panelOrder', + 'InspectorView.screencastSplitView', + 'InspectorView.screencastSplitViewState', + 'InspectorView.splitView', + 'InspectorView.splitViewState', + 'javaScriptDisabled', + 'jsSourceMapsEnabled', + 'lastActivePanel', + 'lastDockState', + 'lastSelectedSourcesSidebarPaneTab', + 'lastSnippetEvaluationIndex', + 'layerDetailsSplitView', + 'layerDetailsSplitViewState', + 'layersPanelSplitViewState', + 'layersShowInternalLayers', + 'layersSidebarWidth', + 'messageLevelFilters', + 'messageURLFilters', + 'monitoringXHREnabled', + 'navigatorGroupByFolder', + 'navigatorHidden', + 'networkColorCodeResourceTypes', + 'networkConditions', + 'networkConditionsCustomProfiles', + 'networkHideDataURL', + 'networkLogColumnsVisibility', + 'networkLogLargeRows', + 'networkLogShowOverview', + 'networkPanelSplitViewState', + 'networkRecordFilmStripSetting', + 'networkResourceTypeFilters', + 'networkShowPrimaryLoadWaterfall', + 'networkSidebarWidth', + 'openLinkHandler', + 'pauseOnCaughtException', + 'pauseOnExceptionEnabled', + 'preserveConsoleLog', + 'prettyPrintInfobarDisabled', + 'previouslyViewedFiles', + 'profilesPanelSplitViewState', + 'profilesSidebarWidth', + 'promiseStatusFilters', + 'recordAllocationStacks', + 'requestHeaderFilterSetting', + 'request-info-formData-category-expanded', + 'request-info-general-category-expanded', + 'request-info-queryString-category-expanded', + 'request-info-requestHeaders-category-expanded', + 'request-info-requestPayload-category-expanded', + 'request-info-responseHeaders-category-expanded', + 'resources', + 'resourcesLastSelectedItem', + 'resourcesPanelSplitViewState', + 'resourcesSidebarWidth', + 'resourceViewTab', + 'savedURLs', + 'screencastEnabled', + 'scriptsPanelNavigatorSidebarWidth', + 'searchInContentScripts', + 'selectedAuditCategories', + 'selectedColorPalette', + 'selectedProfileType', + 'shortcutPanelSwitch', + 'showAdvancedHeapSnapshotProperties', + 'showEventListenersForAncestors', + 'showFrameowkrListeners', + 'showHeaSnapshotObjectsHiddenProperties', + 'showInheritedComputedStyleProperties', + 'showMediaQueryInspector', + 'showNativeFunctionsInJSProfile', + 'showUAShadowDOM', + 'showWhitespacesInEditor', + 'sidebarPosition', + 'skipContentScripts', + 'skipStackFramesPattern', + 'sourceMapInfobarDisabled', + 'sourcesPanelDebuggerSidebarSplitViewState', + 'sourcesPanelNavigatorSplitViewState', + 'sourcesPanelSplitSidebarRatio', + 'sourcesPanelSplitViewState', + 'sourcesSidebarWidth', + 'standardEmulatedDeviceList', + 'StylesPaneSplitRatio', + 'stylesPaneSplitViewState', + 'textEditorAutocompletion', + 'textEditorAutoDetectIndent', + 'textEditorBracketMatching', + 'textEditorIndent', + 'textEditorTabMovesFocus', + 'timelineCaptureFilmStrip', + 'timelineCaptureLayersAndPictures', + 'timelineCaptureMemory', + 'timelineCaptureNetwork', + 'timeline-details', + 'timelineEnableJSSampling', + 'timelineOverviewMode', + 'timelinePanelDetailsSplitViewState', + 'timelinePanelRecorsSplitViewState', + 'timelinePanelTimelineStackSplitViewState', + 'timelinePerspective', + 'timeline-split', + 'timelineTreeGroupBy', + 'timeline-view', + 'timelineViewMode', + 'uiTheme', + 'watchExpressions', + 'WebInspector.Drawer.lastSelectedView', + 'WebInspector.Drawer.showOnLoad', + 'workspaceExcludedFolders', + 'workspaceFolderExcludePattern', + 'workspaceInfobarDisabled', + 'workspaceMappingInfobarDisabled', + 'xhrBreakpoints' + ]; + + /** + * @this {!{_storage: Object, _name: string}} + */ + function settingRemove() { + this._storage[this._name] = undefined; + } + + /** + * @param {!Object} object + * @param {function(!Array)} observer + */ + function objectObserve(object, observer) { + if (window['WebInspector']) { + const settingPrototype = /** @type {!Object} */ (window['WebInspector']['Setting']['prototype']); + if (typeof settingPrototype['remove'] === 'function') { + settingPrototype['remove'] = settingRemove; + } + } + /** @type {!Set} */ + const changedProperties = new Set(); + let scheduled = false; + + function scheduleObserver() { + if (scheduled) { + return; + } + scheduled = true; + queueMicrotask(callObserver); + } + + function callObserver() { + scheduled = false; + const changes = /** @type {!Array} */ ([]); + changedProperties.forEach(function(name) { + changes.push({name: name}); + }); + changedProperties.clear(); + observer.call(null, changes); + } + + /** @type {!Map} */ + const storage = new Map(); + + /** + * @param {string} property + */ + function defineProperty(property) { + if (property in object) { + storage.set(property, object[property]); + delete object[property]; + } + + Object.defineProperty(object, property, { + /** + * @return {*} + */ + get: function() { + return storage.get(property); + }, + + /** + * @param {*} value + */ + set: function(value) { + storage.set(property, value); + changedProperties.add(property); + scheduleObserver(); + } + }); + } + + for (let i = 0; i < properties.length; ++i) { + defineProperty(properties[i]); + } + } + + window.Object.observe = objectObserve; + } + + /** @type {!Map} */ + const staticKeyIdentifiers = new Map([ + [0x12, 'Alt'], + [0x11, 'Control'], + [0x10, 'Shift'], + [0x14, 'CapsLock'], + [0x5b, 'Win'], + [0x5c, 'Win'], + [0x0c, 'Clear'], + [0x28, 'Down'], + [0x23, 'End'], + [0x0a, 'Enter'], + [0x0d, 'Enter'], + [0x2b, 'Execute'], + [0x70, 'F1'], + [0x71, 'F2'], + [0x72, 'F3'], + [0x73, 'F4'], + [0x74, 'F5'], + [0x75, 'F6'], + [0x76, 'F7'], + [0x77, 'F8'], + [0x78, 'F9'], + [0x79, 'F10'], + [0x7a, 'F11'], + [0x7b, 'F12'], + [0x7c, 'F13'], + [0x7d, 'F14'], + [0x7e, 'F15'], + [0x7f, 'F16'], + [0x80, 'F17'], + [0x81, 'F18'], + [0x82, 'F19'], + [0x83, 'F20'], + [0x84, 'F21'], + [0x85, 'F22'], + [0x86, 'F23'], + [0x87, 'F24'], + [0x2f, 'Help'], + [0x24, 'Home'], + [0x2d, 'Insert'], + [0x25, 'Left'], + [0x22, 'PageDown'], + [0x21, 'PageUp'], + [0x13, 'Pause'], + [0x2c, 'PrintScreen'], + [0x27, 'Right'], + [0x91, 'Scroll'], + [0x29, 'Select'], + [0x26, 'Up'], + [0x2e, 'U+007F'], // Standard says that DEL becomes U+007F. + [0xb0, 'MediaNextTrack'], + [0xb1, 'MediaPreviousTrack'], + [0xb2, 'MediaStop'], + [0xb3, 'MediaPlayPause'], + [0xad, 'VolumeMute'], + [0xae, 'VolumeDown'], + [0xaf, 'VolumeUp'], + ]); + + /** + * @param {number} keyCode + * @return {string} + */ + function keyCodeToKeyIdentifier(keyCode) { + let result = staticKeyIdentifiers.get(keyCode); + if (result !== undefined) { + return result; + } + result = 'U+'; + const hexString = keyCode.toString(16).toUpperCase(); + for (let i = hexString.length; i < 4; ++i) { + result += '0'; + } + result += hexString; + return result; + } + + function installBackwardsCompatibility() { + const majorVersion = getRemoteMajorVersion(); + if (!majorVersion) { + return; + } + + /** @type {!Array} */ + const styleRules = []; + // Shadow DOM V0 polyfill + if (majorVersion <= 73 && !Element.prototype.createShadowRoot) { + Element.prototype.createShadowRoot = function() { + try { + return this.attachShadow({mode: 'open'}); + } catch (e) { + // some elements we use to add shadow roots can no + // longer have shadow roots. + const fakeShadowHost = document.createElement('span'); + this.appendChild(fakeShadowHost); + fakeShadowHost.className = 'fake-shadow-host'; + return fakeShadowHost.createShadowRoot(); + } + }; + + const origAdd = DOMTokenList.prototype.add; + DOMTokenList.prototype.add = function(...tokens) { + if (tokens[0].startsWith('insertion-point') || tokens[0].startsWith('tabbed-pane-header')) { + this._myElement.slot = '.' + tokens[0]; + } + return origAdd.apply(this, tokens); + }; + + const origCreateElement = Document.prototype.createElement; + Document.prototype.createElement = function(tagName, ...rest) { + if (tagName === 'content') { + tagName = 'slot'; + } + const element = origCreateElement.call(this, tagName, ...rest); + element.classList._myElement = element; + return element; + }; + + Object.defineProperty(HTMLSlotElement.prototype, 'select', { + set(selector) { + this.name = selector; + } + }); + } + + // Custom Elements V0 polyfill + if (majorVersion <= 73 && !Document.prototype.hasOwnProperty('registerElement')) { + const fakeRegistry = new Map(); + Document.prototype.registerElement = function(typeExtension, options) { + const {prototype, extends: localName} = options; + const document = this; + const callback = function() { + const element = document.createElement(localName || typeExtension); + const skip = new Set(['constructor', '__proto__']); + for (const key of Object.keys(Object.getOwnPropertyDescriptors(prototype.__proto__ || {}))) { + if (skip.has(key)) { + continue; + } + element[key] = prototype[key]; + } + element.setAttribute('is', typeExtension); + if (element['createdCallback']) { + element['createdCallback'](); + } + return element; + }; + fakeRegistry.set(typeExtension, callback); + return callback; + }; + + const origCreateElement = Document.prototype.createElement; + Document.prototype.createElement = function(tagName, fakeCustomElementType) { + const fakeConstructor = fakeRegistry.get(fakeCustomElementType); + if (fakeConstructor) { + return fakeConstructor(); + } + return origCreateElement.call(this, tagName, fakeCustomElementType); + }; + + // DevTools front-ends mistakenly assume that + // classList.toggle('a', undefined) works as + // classList.toggle('a', false) rather than as + // classList.toggle('a'); + const originalDOMTokenListToggle = DOMTokenList.prototype.toggle; + DOMTokenList.prototype.toggle = function(token, force) { + if (arguments.length === 1) { + force = !this.contains(token); + } + return originalDOMTokenListToggle.call(this, token, Boolean(force)); + }; + } + + if (majorVersion <= 66) { + /** @type {(!function(number, number):Element|undefined)} */ + ShadowRoot.prototype.__originalShadowRootElementFromPoint; + + if (!ShadowRoot.prototype.__originalShadowRootElementFromPoint) { + ShadowRoot.prototype.__originalShadowRootElementFromPoint = ShadowRoot.prototype.elementFromPoint; + /** + * @param {number} x + * @param {number} y + * @return {Element} + */ + ShadowRoot.prototype.elementFromPoint = function(x, y) { + const originalResult = ShadowRoot.prototype.__originalShadowRootElementFromPoint.apply(this, arguments); + if (this.host && originalResult === this.host) { + return null; + } + return originalResult; + }; + } + } + + if (majorVersion <= 53) { + Object.defineProperty(window.KeyboardEvent.prototype, 'keyIdentifier', { + /** + * @return {string} + * @this {KeyboardEvent} + */ + get: function() { + return keyCodeToKeyIdentifier(this.keyCode); + } + }); + } + + if (majorVersion <= 50) { + installObjectObserve(); + } + + if (majorVersion <= 45) { + /** + * @param {string} property + * @return {!CSSValue|null} + * @this {CSSStyleDeclaration} + */ + function getValue(property) { + // Note that |property| comes from another context, so we can't use === here. + // eslint-disable-next-line eqeqeq + if (property == 'padding-left') { + return /** @type {!CSSValue} */ ({ + /** + * @return {number} + * @this {!{__paddingLeft: number}} + */ + getFloatValue: function() { + return this.__paddingLeft; + }, + __paddingLeft: parseFloat(this.paddingLeft) + }); + } + throw new Error('getPropertyCSSValue is undefined'); + } + + window.CSSStyleDeclaration.prototype.getPropertyCSSValue = getValue; + + function CSSPrimitiveValue() { + } + CSSPrimitiveValue.CSS_PX = 5; + window.CSSPrimitiveValue = CSSPrimitiveValue; + } + + if (majorVersion <= 45) { + styleRules.push('* { min-width: 0; min-height: 0; }'); + } + + if (majorVersion <= 71) { + styleRules.push( + '.coverage-toolbar-container, .animation-timeline-toolbar-container, .computed-properties { flex-basis: auto; }'); + } + + if (majorVersion <= 50) { + Event.prototype.deepPath = undefined; + } + + if (majorVersion <= 54) { + window.FileError = /** @type {!function (new: FileError) : ?} */ ({ + NOT_FOUND_ERR: DOMException.NOT_FOUND_ERR, + ABORT_ERR: DOMException.ABORT_ERR, + INVALID_MODIFICATION_ERR: DOMException.INVALID_MODIFICATION_ERR, + NOT_READABLE_ERR: 0 // No matching DOMException, so code will be 0. + }); + } + + installExtraStyleRules(styleRules); + } + + /** + * @return {?number} + */ + function getRemoteMajorVersion() { + try { + const remoteVersion = new URLSearchParams(window.location.search).get('remoteVersion'); + if (!remoteVersion) { + return null; + } + const majorVersion = parseInt(remoteVersion.split('.')[0], 10); + return majorVersion; + } catch (e) { + return null; + } + } + + /** + * @param {!Array} styleRules + */ + function installExtraStyleRules(styleRules) { + if (!styleRules.length) { + return; + } + const styleText = styleRules.join('\n'); + document.head.appendChild(createStyleElement(styleText)); + + const origCreateShadowRoot = HTMLElement.prototype.createShadowRoot; + HTMLElement.prototype.createShadowRoot = function(...args) { + const shadowRoot = origCreateShadowRoot.call(this, ...args); + shadowRoot.appendChild(createStyleElement(styleText)); + return shadowRoot; + }; + } + + /** + * @param {string} styleText + * @return {!Element} + */ + function createStyleElement(styleText) { + const style = document.createElement('style'); + style.textContent = styleText; + return style; + } + + installBackwardsCompatibility(); + +})(window); diff --git a/chii/emulated_devices/optimized/MotoG4-landscape.avif b/chii/emulated_devices/optimized/MotoG4-landscape.avif new file mode 100644 index 00000000..79d18472 Binary files /dev/null and b/chii/emulated_devices/optimized/MotoG4-landscape.avif differ diff --git a/chii/emulated_devices/optimized/MotoG4-portrait.avif b/chii/emulated_devices/optimized/MotoG4-portrait.avif new file mode 100644 index 00000000..1f0f3f64 Binary files /dev/null and b/chii/emulated_devices/optimized/MotoG4-portrait.avif differ diff --git a/chii/emulated_devices/optimized/Nexus5X-landscape.avif b/chii/emulated_devices/optimized/Nexus5X-landscape.avif new file mode 100644 index 00000000..c4908722 Binary files /dev/null and b/chii/emulated_devices/optimized/Nexus5X-landscape.avif differ diff --git a/chii/emulated_devices/optimized/Nexus5X-portrait.avif b/chii/emulated_devices/optimized/Nexus5X-portrait.avif new file mode 100644 index 00000000..86ab35cf Binary files /dev/null and b/chii/emulated_devices/optimized/Nexus5X-portrait.avif differ diff --git a/chii/emulated_devices/optimized/Nexus6P-landscape.avif b/chii/emulated_devices/optimized/Nexus6P-landscape.avif new file mode 100644 index 00000000..531b0ee0 Binary files /dev/null and b/chii/emulated_devices/optimized/Nexus6P-landscape.avif differ diff --git a/chii/emulated_devices/optimized/Nexus6P-portrait.avif b/chii/emulated_devices/optimized/Nexus6P-portrait.avif new file mode 100644 index 00000000..f2abf6ce Binary files /dev/null and b/chii/emulated_devices/optimized/Nexus6P-portrait.avif differ diff --git a/chii/emulated_devices/optimized/google-nest-hub-horizontal.avif b/chii/emulated_devices/optimized/google-nest-hub-horizontal.avif new file mode 100644 index 00000000..9ec462c7 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nest-hub-horizontal.avif differ diff --git a/chii/emulated_devices/optimized/google-nest-hub-max-horizontal.avif b/chii/emulated_devices/optimized/google-nest-hub-max-horizontal.avif new file mode 100644 index 00000000..e755f5e2 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nest-hub-max-horizontal.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif b/chii/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif new file mode 100644 index 00000000..da2715da Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif b/chii/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif new file mode 100644 index 00000000..99e5d86f Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif b/chii/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif new file mode 100644 index 00000000..74caee35 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif b/chii/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif new file mode 100644 index 00000000..f4a6b130 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif b/chii/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif new file mode 100644 index 00000000..19da3aa6 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif b/chii/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif new file mode 100644 index 00000000..fe282977 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif b/chii/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif new file mode 100644 index 00000000..ddaf02d3 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif b/chii/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif new file mode 100644 index 00000000..c92254f6 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif b/chii/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif new file mode 100644 index 00000000..d3ca640e Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif b/chii/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif new file mode 100644 index 00000000..d16bb443 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif b/chii/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif new file mode 100644 index 00000000..038e3cde Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif b/chii/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif new file mode 100644 index 00000000..faf72a29 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif new file mode 100644 index 00000000..4d6e8918 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif new file mode 100644 index 00000000..c24a15b2 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif new file mode 100644 index 00000000..33ecd906 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif new file mode 100644 index 00000000..b6258a6c Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif new file mode 100644 index 00000000..ba57f9e9 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif new file mode 100644 index 00000000..b9ec520e Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif b/chii/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif new file mode 100644 index 00000000..ea2fee73 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif b/chii/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif new file mode 100644 index 00000000..beeba6f1 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif b/chii/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif new file mode 100644 index 00000000..51571633 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif b/chii/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif new file mode 100644 index 00000000..c0afab11 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif b/chii/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif new file mode 100644 index 00000000..9ee82e56 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif differ diff --git a/chii/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif b/chii/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif new file mode 100644 index 00000000..ae663552 Binary files /dev/null and b/chii/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif differ diff --git a/chii/emulated_devices/optimized/iPad-landscape.avif b/chii/emulated_devices/optimized/iPad-landscape.avif new file mode 100644 index 00000000..6948cb9d Binary files /dev/null and b/chii/emulated_devices/optimized/iPad-landscape.avif differ diff --git a/chii/emulated_devices/optimized/iPad-portrait.avif b/chii/emulated_devices/optimized/iPad-portrait.avif new file mode 100644 index 00000000..d587af69 Binary files /dev/null and b/chii/emulated_devices/optimized/iPad-portrait.avif differ diff --git a/chii/emulated_devices/optimized/iPhone5-landscape.avif b/chii/emulated_devices/optimized/iPhone5-landscape.avif new file mode 100644 index 00000000..1ea9b323 Binary files /dev/null and b/chii/emulated_devices/optimized/iPhone5-landscape.avif differ diff --git a/chii/emulated_devices/optimized/iPhone5-portrait.avif b/chii/emulated_devices/optimized/iPhone5-portrait.avif new file mode 100644 index 00000000..327395c2 Binary files /dev/null and b/chii/emulated_devices/optimized/iPhone5-portrait.avif differ diff --git a/chii/emulated_devices/optimized/iPhone6-landscape.avif b/chii/emulated_devices/optimized/iPhone6-landscape.avif new file mode 100644 index 00000000..57964e53 Binary files /dev/null and b/chii/emulated_devices/optimized/iPhone6-landscape.avif differ diff --git a/chii/emulated_devices/optimized/iPhone6-portrait.avif b/chii/emulated_devices/optimized/iPhone6-portrait.avif new file mode 100644 index 00000000..b8f7a1b6 Binary files /dev/null and b/chii/emulated_devices/optimized/iPhone6-portrait.avif differ diff --git a/chii/emulated_devices/optimized/iPhone6Plus-landscape.avif b/chii/emulated_devices/optimized/iPhone6Plus-landscape.avif new file mode 100644 index 00000000..cf57770e Binary files /dev/null and b/chii/emulated_devices/optimized/iPhone6Plus-landscape.avif differ diff --git a/chii/emulated_devices/optimized/iPhone6Plus-portrait.avif b/chii/emulated_devices/optimized/iPhone6Plus-portrait.avif new file mode 100644 index 00000000..a293b5e3 Binary files /dev/null and b/chii/emulated_devices/optimized/iPhone6Plus-portrait.avif differ diff --git a/chii/entrypoints/chii_app/chii_app-meta-files.js b/chii/entrypoints/chii_app/chii_app-meta-files.js new file mode 100644 index 00000000..594bd898 --- /dev/null +++ b/chii/entrypoints/chii_app/chii_app-meta-files.js @@ -0,0 +1,4251 @@ +import '../../Images/Images.js' +import '../startup/startup.js' +import * as e from '../../core/root/root.js' +import '../../core/platform/platform.js' +import '../../core/dom_extension/dom_extension.js' +import * as t from '../../core/common/common.js' +import * as i from '../../core/i18n/i18n.js' +import * as o from '../../core/sdk/sdk.js' +import * as n from '../../models/workspace/workspace.js' +import * as a from '../../ui/legacy/components/object_ui/object_ui.js' +import * as s from '../../ui/legacy/components/quick_open/quick_open.js' +import * as r from '../../ui/legacy/legacy.js' +import * as l from '../../ui/legacy/components/utils/utils.js' +import '../main/main.js' +import * as c from '../../panels/network/forward/forward.js' +import * as g from '../../models/issues_manager/issues_manager.js' +;(self.Root = self.Root || {}), + (Root = Root || {}), + (Root.Runtime = e.Runtime.Runtime), + (Root.Runtime.experiments = e.Runtime.experiments), + (Root.Runtime.queryParam = e.Runtime.Runtime.queryParam), + Root.runtime, + (Root.Runtime.loadResourcePromise = e.Runtime.loadResourcePromise), + (Root.Runtime.Extension = e.Runtime.Extension), + (Root.Runtime.Module = e.Runtime.Module) +const d = { + showSources: 'Show Sources', + sources: 'Sources', + showFilesystem: 'Show Filesystem', + filesystem: 'Filesystem', + showSnippets: 'Show Snippets', + snippets: 'Snippets', + showSearch: 'Show Search', + search: 'Search', + showQuickSource: 'Show Quick source', + quickSource: 'Quick source', + showThreads: 'Show Threads', + threads: 'Threads', + showScope: 'Show Scope', + scope: 'Scope', + showWatch: 'Show Watch', + watch: 'Watch', + showBreakpoints: 'Show Breakpoints', + breakpoints: 'Breakpoints', + pauseScriptExecution: 'Pause script execution', + resumeScriptExecution: 'Resume script execution', + stepOverNextFunctionCall: 'Step over next function call', + stepIntoNextFunctionCall: 'Step into next function call', + step: 'Step', + stepOutOfCurrentFunction: 'Step out of current function', + runSnippet: 'Run snippet', + deactivateBreakpoints: 'Deactivate breakpoints', + activateBreakpoints: 'Activate breakpoints', + addSelectedTextToWatches: 'Add selected text to watches', + evaluateSelectedTextInConsole: 'Evaluate selected text in console', + switchFile: 'Switch file', + rename: 'Rename', + closeAll: 'Close All', + jumpToPreviousEditingLocation: 'Jump to previous editing location', + jumpToNextEditingLocation: 'Jump to next editing location', + closeTheActiveTab: 'Close the active tab', + goToLine: 'Go to line', + goToAFunctionDeclarationruleSet: 'Go to a function declaration/rule set', + toggleBreakpoint: 'Toggle breakpoint', + toggleBreakpointEnabled: 'Toggle breakpoint enabled', + toggleBreakpointInputWindow: 'Toggle breakpoint input window', + save: 'Save', + saveAll: 'Save all', + createNewSnippet: 'Create new snippet', + addFolderToWorkspace: 'Add folder to workspace', + previousCallFrame: 'Previous call frame', + nextCallFrame: 'Next call frame', + incrementCssUnitBy: 'Increment CSS unit by {PH1}', + decrementCssUnitBy: 'Decrement CSS unit by {PH1}', + searchInAnonymousAndContent: 'Search in anonymous and content scripts', + doNotSearchInAnonymousAndContent: + 'Do not search in anonymous and content scripts', + automaticallyRevealFilesIn: 'Automatically reveal files in sidebar', + doNotAutomaticallyRevealFilesIn: + 'Do not automatically reveal files in sidebar', + enableJavascriptSourceMaps: 'Enable JavaScript source maps', + disableJavascriptSourceMaps: 'Disable JavaScript source maps', + enableTabMovesFocus: 'Enable tab moves focus', + disableTabMovesFocus: 'Disable tab moves focus', + detectIndentation: 'Detect indentation', + doNotDetectIndentation: 'Do not detect indentation', + autocompletion: 'Autocompletion', + enableAutocompletion: 'Enable autocompletion', + disableAutocompletion: 'Disable autocompletion', + bracketMatching: 'Bracket matching', + enableBracketMatching: 'Enable bracket matching', + disableBracketMatching: 'Disable bracket matching', + codeFolding: 'Code folding', + enableCodeFolding: 'Enable code folding', + disableCodeFolding: 'Disable code folding', + showWhitespaceCharacters: 'Show whitespace characters:', + doNotShowWhitespaceCharacters: 'Do not show whitespace characters', + none: 'None', + showAllWhitespaceCharacters: 'Show all whitespace characters', + all: 'All', + showTrailingWhitespaceCharacters: 'Show trailing whitespace characters', + trailing: 'Trailing', + displayVariableValuesInlineWhile: + 'Display variable values inline while debugging', + doNotDisplayVariableValuesInline: + 'Do not display variable values inline while debugging', + enableCssSourceMaps: 'Enable CSS source maps', + disableCssSourceMaps: 'Disable CSS source maps', + allowScrollingPastEndOfFile: 'Allow scrolling past end of file', + disallowScrollingPastEndOfFile: 'Disallow scrolling past end of file', + goTo: 'Go to', + line: 'Line', + symbol: 'Symbol', + open: 'Open', + file: 'File', + disableAutoFocusOnDebuggerPaused: + 'Do not focus Sources panel when triggering a breakpoint', + enableAutoFocusOnDebuggerPaused: + 'Focus Sources panel when triggering a breakpoint', + }, + u = i.i18n.registerUIStrings('panels/sources/sources-meta.ts', d), + p = i.i18n.getLazilyComputedLocalizedString.bind(void 0, u) +let S +async function m() { + return S || (S = await import('../../panels/sources/sources.js')), S +} +function y(e) { + return void 0 === S ? [] : e(S) +} +r.ViewManager.registerViewExtension({ + location: 'panel', + id: 'sources', + commandPrompt: p(d.showSources), + title: p(d.sources), + order: 30, + loadView: async () => (await m()).SourcesPanel.SourcesPanel.instance(), +}), + globalThis.chii || + r.ViewManager.registerViewExtension({ + location: 'navigator-view', + id: 'navigator-files', + commandPrompt: p(d.showFilesystem), + title: p(d.filesystem), + order: 3, + persistence: 'permanent', + loadView: async () => + (await m()).SourcesNavigator.FilesNavigatorView.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'navigator-view', + id: 'navigator-snippets', + commandPrompt: p(d.showSnippets), + title: p(d.snippets), + order: 6, + persistence: 'permanent', + loadView: async () => + (await m()).SourcesNavigator.SnippetsNavigatorView.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'sources.search-sources-tab', + commandPrompt: p(d.showSearch), + title: p(d.search), + order: 7, + persistence: 'closeable', + loadView: async () => + (await m()).SearchSourcesView.SearchSourcesView.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'sources.quick', + commandPrompt: p(d.showQuickSource), + title: p(d.quickSource), + persistence: 'closeable', + order: 1e3, + loadView: async () => (await m()).SourcesPanel.WrapperView.instance(), + }), + r.ViewManager.registerViewExtension({ + id: 'sources.threads', + commandPrompt: p(d.showThreads), + title: p(d.threads), + persistence: 'permanent', + condition: e.Runtime.ConditionName.NOT_SOURCES_HIDE_ADD_FOLDER, + loadView: async () => + (await m()).ThreadsSidebarPane.ThreadsSidebarPane.instance(), + }), + r.ViewManager.registerViewExtension({ + id: 'sources.scopeChain', + commandPrompt: p(d.showScope), + title: p(d.scope), + persistence: 'permanent', + loadView: async () => + (await m()).ScopeChainSidebarPane.ScopeChainSidebarPane.instance(), + }), + r.ViewManager.registerViewExtension({ + id: 'sources.watch', + commandPrompt: p(d.showWatch), + title: p(d.watch), + persistence: 'permanent', + loadView: async () => + ( + await m() + ).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(), + hasToolbar: !0, + }), + r.ViewManager.registerViewExtension({ + id: 'sources.jsBreakpoints', + commandPrompt: p(d.showBreakpoints), + title: p(d.breakpoints), + persistence: 'permanent', + loadView: async () => + ( + await m() + ).JavaScriptBreakpointsSidebarPane.JavaScriptBreakpointsSidebarPane.instance(), + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.toggle-pause', + iconClass: 'largeicon-pause', + toggleable: !0, + toggledIconClass: 'largeicon-resume', + loadActionDelegate: async () => + (await m()).SourcesPanel.RevealingActionDelegate.instance(), + contextTypes: () => + y((e) => [ + e.SourcesView.SourcesView, + r.ShortcutRegistry.ForwardedShortcut, + ]), + options: [ + { value: !0, title: p(d.pauseScriptExecution) }, + { value: !1, title: p(d.resumeScriptExecution) }, + ], + bindings: [ + { shortcut: 'F8', keybindSets: ['devToolsDefault'] }, + { platform: 'windows,linux', shortcut: 'Ctrl+\\' }, + { shortcut: 'F5', keybindSets: ['vsCode'] }, + { shortcut: 'Shift+F5', keybindSets: ['vsCode'] }, + { platform: 'mac', shortcut: 'Meta+\\' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.step-over', + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + title: p(d.stepOverNextFunctionCall), + iconClass: 'largeicon-step-over', + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + bindings: [ + { shortcut: 'F10', keybindSets: ['devToolsDefault', 'vsCode'] }, + { platform: 'windows,linux', shortcut: "Ctrl+'" }, + { platform: 'mac', shortcut: "Meta+'" }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.step-into', + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + title: p(d.stepIntoNextFunctionCall), + iconClass: 'largeicon-step-into', + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + bindings: [ + { shortcut: 'F11', keybindSets: ['devToolsDefault', 'vsCode'] }, + { platform: 'windows,linux', shortcut: 'Ctrl+;' }, + { platform: 'mac', shortcut: 'Meta+;' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.step', + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + title: p(d.step), + iconClass: 'largeicon-step', + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + bindings: [{ shortcut: 'F9', keybindSets: ['devToolsDefault'] }], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.step-out', + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + title: p(d.stepOutOfCurrentFunction), + iconClass: 'largeicon-step-out', + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + bindings: [ + { shortcut: 'Shift+F11', keybindSets: ['devToolsDefault', 'vsCode'] }, + { platform: 'windows,linux', shortcut: 'Shift+Ctrl+;' }, + { platform: 'mac', shortcut: 'Shift+Meta+;' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'debugger.run-snippet', + category: r.ActionRegistration.ActionCategory.DEBUGGER, + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + title: p(d.runSnippet), + iconClass: 'largeicon-play', + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Enter' }, + { platform: 'mac', shortcut: 'Meta+Enter' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.toggle-breakpoints-active', + iconClass: 'largeicon-deactivate-breakpoints', + toggleable: !0, + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + options: [ + { value: !0, title: p(d.deactivateBreakpoints) }, + { value: !1, title: p(d.activateBreakpoints) }, + ], + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+F8' }, + { platform: 'mac', shortcut: 'Meta+F8' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.add-to-watch', + loadActionDelegate: async () => + ( + await m() + ).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(), + category: r.ActionRegistration.ActionCategory.DEBUGGER, + title: p(d.addSelectedTextToWatches), + contextTypes: () => y((e) => [e.UISourceCodeFrame.UISourceCodeFrame]), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+A' }, + { platform: 'mac', shortcut: 'Meta+Shift+A' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'debugger.evaluate-selection', + category: r.ActionRegistration.ActionCategory.DEBUGGER, + loadActionDelegate: async () => + (await m()).SourcesPanel.DebuggingActionDelegate.instance(), + title: p(d.evaluateSelectedTextInConsole), + contextTypes: () => y((e) => [e.UISourceCodeFrame.UISourceCodeFrame]), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+E' }, + { platform: 'mac', shortcut: 'Meta+Shift+E' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.switch-file', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.switchFile), + loadActionDelegate: async () => + (await m()).SourcesView.SwitchFileActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [{ shortcut: 'Alt+O' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.rename', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.rename), + bindings: [ + { platform: 'windows,linux', shortcut: 'F2' }, + { platform: 'mac', shortcut: 'Enter' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.SOURCES, + actionId: 'sources.close-all', + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + title: p(d.closeAll), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.jump-to-previous-location', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.jumpToPreviousEditingLocation), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [{ shortcut: 'Alt+Minus' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.jump-to-next-location', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.jumpToNextEditingLocation), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [{ shortcut: 'Alt+Plus' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.close-editor-tab', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.closeTheActiveTab), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [ + { shortcut: 'Alt+w' }, + { shortcut: 'Ctrl+W', keybindSets: ['vsCode'] }, + { platform: 'windows', shortcut: 'Ctrl+F4', keybindSets: ['vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.go-to-line', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.goToLine), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [ + { shortcut: 'Ctrl+g', keybindSets: ['devToolsDefault', 'vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.go-to-member', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.goToAFunctionDeclarationruleSet), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+Shift+o', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'mac', + shortcut: 'Meta+Shift+o', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+T', keybindSets: ['vsCode'] }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+T', + keybindSets: ['vsCode'], + }, + { shortcut: 'F12', keybindSets: ['vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'debugger.toggle-breakpoint', + category: r.ActionRegistration.ActionCategory.DEBUGGER, + title: p(d.toggleBreakpoint), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+b' }, + { platform: 'mac', shortcut: 'Meta+b' }, + { shortcut: 'F9', keybindSets: ['vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'debugger.toggle-breakpoint-enabled', + category: r.ActionRegistration.ActionCategory.DEBUGGER, + title: p(d.toggleBreakpointEnabled), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+b' }, + { platform: 'mac', shortcut: 'Meta+Shift+b' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'debugger.breakpoint-input-window', + category: r.ActionRegistration.ActionCategory.DEBUGGER, + title: p(d.toggleBreakpointInputWindow), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Alt+b' }, + { platform: 'mac', shortcut: 'Meta+Alt+b' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.save', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.save), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+s', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'mac', + shortcut: 'Meta+s', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.save-all', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.saveAll), + loadActionDelegate: async () => + (await m()).SourcesView.ActionDelegate.instance(), + contextTypes: () => y((e) => [e.SourcesView.SourcesView]), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+s' }, + { platform: 'mac', shortcut: 'Meta+Alt+s' }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+K S', + keybindSets: ['vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+Alt+S', keybindSets: ['vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.SOURCES, + actionId: 'sources.create-snippet', + loadActionDelegate: async () => + (await m()).SourcesNavigator.ActionDelegate.instance(), + title: p(d.createNewSnippet), + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.SOURCES, + actionId: 'sources.add-folder-to-workspace', + loadActionDelegate: async () => + (await m()).SourcesNavigator.ActionDelegate.instance(), + iconClass: 'largeicon-add', + title: p(d.addFolderToWorkspace), + condition: e.Runtime.ConditionName.NOT_SOURCES_HIDE_ADD_FOLDER, + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.previous-call-frame', + loadActionDelegate: async () => + (await m()).CallStackSidebarPane.ActionDelegate.instance(), + title: p(d.previousCallFrame), + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + bindings: [{ shortcut: 'Ctrl+,' }], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DEBUGGER, + actionId: 'debugger.next-call-frame', + loadActionDelegate: async () => + (await m()).CallStackSidebarPane.ActionDelegate.instance(), + title: p(d.nextCallFrame), + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + bindings: [{ shortcut: 'Ctrl+.' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.search', + title: p(d.search), + loadActionDelegate: async () => + (await m()).SearchSourcesView.ActionDelegate.instance(), + category: r.ActionRegistration.ActionCategory.SOURCES, + bindings: [ + { + platform: 'mac', + shortcut: 'Meta+Alt+F', + keybindSets: ['devToolsDefault'], + }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+Shift+F', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+Shift+J', + keybindSets: ['vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+Shift+F', keybindSets: ['vsCode'] }, + { platform: 'mac', shortcut: 'Meta+Shift+J', keybindSets: ['vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.increment-css', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.incrementCssUnitBy, { PH1: 1 }), + bindings: [{ shortcut: 'Alt+Up' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.increment-css-by-ten', + title: p(d.incrementCssUnitBy, { PH1: 10 }), + category: r.ActionRegistration.ActionCategory.SOURCES, + bindings: [{ shortcut: 'Alt+PageUp' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.decrement-css', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.decrementCssUnitBy, { PH1: 1 }), + bindings: [{ shortcut: 'Alt+Down' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'sources.decrement-css-by-ten', + category: r.ActionRegistration.ActionCategory.SOURCES, + title: p(d.decrementCssUnitBy, { PH1: 10 }), + bindings: [{ shortcut: 'Alt+PageDown' }], + }), + t.Settings.registerSettingExtension({ + settingName: 'navigatorGroupByFolder', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.searchInAnonymousAndContent), + settingName: 'searchInAnonymousAndContentScripts', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: p(d.searchInAnonymousAndContent) }, + { value: !1, title: p(d.doNotSearchInAnonymousAndContent) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.automaticallyRevealFilesIn), + settingName: 'autoRevealInNavigator', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: p(d.automaticallyRevealFilesIn) }, + { value: !1, title: p(d.doNotAutomaticallyRevealFilesIn) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.enableJavascriptSourceMaps), + settingName: 'jsSourceMapsEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.enableJavascriptSourceMaps) }, + { value: !1, title: p(d.disableJavascriptSourceMaps) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.enableTabMovesFocus), + settingName: 'textEditorTabMovesFocus', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: p(d.enableTabMovesFocus) }, + { value: !1, title: p(d.disableTabMovesFocus) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.detectIndentation), + settingName: 'textEditorAutoDetectIndent', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.detectIndentation) }, + { value: !1, title: p(d.doNotDetectIndentation) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.autocompletion), + settingName: 'textEditorAutocompletion', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.enableAutocompletion) }, + { value: !1, title: p(d.disableAutocompletion) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + title: p(d.bracketMatching), + settingName: 'textEditorBracketMatching', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.enableBracketMatching) }, + { value: !1, title: p(d.disableBracketMatching) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.codeFolding), + settingName: 'textEditorCodeFolding', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: p(d.enableCodeFolding) }, + { value: !1, title: p(d.disableCodeFolding) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.showWhitespaceCharacters), + settingName: 'showWhitespacesInEditor', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'original', + options: [ + { + title: p(d.doNotShowWhitespaceCharacters), + text: p(d.none), + value: 'none', + }, + { title: p(d.showAllWhitespaceCharacters), text: p(d.all), value: 'all' }, + { + title: p(d.showTrailingWhitespaceCharacters), + text: p(d.trailing), + value: 'trailing', + }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.displayVariableValuesInlineWhile), + settingName: 'inlineVariableValues', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.displayVariableValuesInlineWhile) }, + { value: !1, title: p(d.doNotDisplayVariableValuesInline) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.enableAutoFocusOnDebuggerPaused), + settingName: 'autoFocusOnDebuggerPausedEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.enableAutoFocusOnDebuggerPaused) }, + { value: !1, title: p(d.disableAutoFocusOnDebuggerPaused) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.enableCssSourceMaps), + settingName: 'cssSourceMapsEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.enableCssSourceMaps) }, + { value: !1, title: p(d.disableCssSourceMaps) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: p(d.allowScrollingPastEndOfFile), + settingName: 'allowScrollPastEof', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: p(d.allowScrollingPastEndOfFile) }, + { value: !1, title: p(d.disallowScrollingPastEndOfFile) }, + ], + }), + r.ViewManager.registerLocationResolver({ + name: 'navigator-view', + category: r.ViewManager.ViewLocationCategoryValues.SOURCES, + loadResolver: async () => (await m()).SourcesPanel.SourcesPanel.instance(), + }), + r.ViewManager.registerLocationResolver({ + name: 'sources.sidebar-top', + category: r.ViewManager.ViewLocationCategoryValues.SOURCES, + loadResolver: async () => (await m()).SourcesPanel.SourcesPanel.instance(), + }), + r.ViewManager.registerLocationResolver({ + name: 'sources.sidebar-bottom', + category: r.ViewManager.ViewLocationCategoryValues.SOURCES, + loadResolver: async () => (await m()).SourcesPanel.SourcesPanel.instance(), + }), + r.ViewManager.registerLocationResolver({ + name: 'sources.sidebar-tabs', + category: r.ViewManager.ViewLocationCategoryValues.SOURCES, + loadResolver: async () => (await m()).SourcesPanel.SourcesPanel.instance(), + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [ + n.UISourceCode.UISourceCode, + n.UISourceCode.UILocation, + o.RemoteObject.RemoteObject, + o.NetworkRequest.NetworkRequest, + ...y((e) => [e.UISourceCodeFrame.UISourceCodeFrame]), + ], + loadProvider: async () => (await m()).SourcesPanel.SourcesPanel.instance(), + experiment: void 0, + }), + r.ContextMenu.registerProvider({ + loadProvider: async () => + ( + await m() + ).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(), + contextTypes: () => [a.ObjectPropertiesSection.ObjectPropertyTreeElement], + experiment: void 0, + }), + r.ContextMenu.registerProvider({ + contextTypes: () => y((e) => [e.UISourceCodeFrame.UISourceCodeFrame]), + loadProvider: async () => + ( + await m() + ).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(), + experiment: void 0, + }), + r.ContextMenu.registerProvider({ + loadProvider: async () => + (await m()).ScopeChainSidebarPane.OpenLinearMemoryInspector.instance(), + experiment: void 0, + contextTypes: () => [a.ObjectPropertiesSection.ObjectPropertyTreeElement], + }), + t.Revealer.registerRevealer({ + contextTypes: () => [n.UISourceCode.UILocation], + destination: t.Revealer.RevealerDestination.SOURCES_PANEL, + loadRevealer: async () => + (await m()).SourcesPanel.UILocationRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.DebuggerModel.Location], + destination: t.Revealer.RevealerDestination.SOURCES_PANEL, + loadRevealer: async () => + (await m()).SourcesPanel.DebuggerLocationRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [n.UISourceCode.UISourceCode], + destination: t.Revealer.RevealerDestination.SOURCES_PANEL, + loadRevealer: async () => + (await m()).SourcesPanel.UISourceCodeRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + destination: t.Revealer.RevealerDestination.SOURCES_PANEL, + loadRevealer: async () => + (await m()).SourcesPanel.DebuggerPausedDetailsRevealer.instance(), + }), + r.Toolbar.registerToolbarItem({ + actionId: 'sources.add-folder-to-workspace', + location: r.Toolbar.ToolbarItemLocation.FILES_NAVIGATION_TOOLBAR, + showLabel: !0, + condition: e.Runtime.ConditionName.NOT_SOURCES_HIDE_ADD_FOLDER, + loadItem: void 0, + order: void 0, + separator: void 0, + }), + r.Context.registerListener({ + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + loadListener: async () => + ( + await m() + ).JavaScriptBreakpointsSidebarPane.JavaScriptBreakpointsSidebarPane.instance(), + }), + r.Context.registerListener({ + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + loadListener: async () => + ( + await m() + ).JavaScriptBreakpointsSidebarPane.JavaScriptBreakpointsSidebarPane.instance(), + }), + r.Context.registerListener({ + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + loadListener: async () => + (await m()).CallStackSidebarPane.CallStackSidebarPane.instance(), + }), + r.Context.registerListener({ + contextTypes: () => [o.DebuggerModel.CallFrame], + loadListener: async () => + (await m()).ScopeChainSidebarPane.ScopeChainSidebarPane.instance(), + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.NAVIGATOR_MENU_DEFAULT, + actionId: 'quickOpen.show', + order: void 0, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_DEFAULT, + actionId: 'sources.search', + order: void 0, + }), + s.FilteredListWidget.registerProvider({ + prefix: '@', + iconName: 'ic_command_go_to_symbol', + provider: async () => + (await m()).OutlineQuickOpen.OutlineQuickOpen.instance(), + titlePrefix: p(d.goTo), + titleSuggestion: p(d.symbol), + }), + s.FilteredListWidget.registerProvider({ + prefix: ':', + iconName: 'ic_command_go_to_line', + provider: async () => + (await m()).GoToLineQuickOpen.GoToLineQuickOpen.instance(), + titlePrefix: p(d.goTo), + titleSuggestion: p(d.line), + }), + s.FilteredListWidget.registerProvider({ + prefix: '', + iconName: 'ic_command_open_file', + provider: async () => + (await m()).OpenFileQuickOpen.OpenFileQuickOpen.instance(), + titlePrefix: p(d.open), + titleSuggestion: p(d.file), + }) +const w = { + console: 'Console', + showConsole: 'Show Console', + clearConsole: 'Clear console', + clearConsoleHistory: 'Clear console history', + createLiveExpression: 'Create live expression', + hideNetworkMessages: 'Hide network messages', + showNetworkMessages: 'Show network messages', + selectedContextOnly: 'Selected context only', + onlyShowMessagesFromTheCurrent: + 'Only show messages from the current context (`top`, `iframe`, `worker`, extension)', + showMessagesFromAllContexts: 'Show messages from all contexts', + logXmlhttprequests: 'Log XMLHttpRequests', + showTimestamps: 'Show timestamps', + hideTimestamps: 'Hide timestamps', + autocompleteFromHistory: 'Autocomplete from history', + doNotAutocompleteFromHistory: 'Do not autocomplete from history', + groupSimilarMessagesInConsole: 'Group similar messages in console', + doNotGroupSimilarMessagesIn: 'Do not group similar messages in console', + showCorsErrorsInConsole: 'Show `CORS` errors in console', + doNotShowCorsErrorsIn: 'Do not show `CORS` errors in console', + eagerEvaluation: 'Eager evaluation', + eagerlyEvaluateConsolePromptText: 'Eagerly evaluate console prompt text', + doNotEagerlyEvaluateConsole: 'Do not eagerly evaluate console prompt text', + evaluateTriggersUserActivation: 'Evaluate triggers user activation', + treatEvaluationAsUserActivation: 'Treat evaluation as user activation', + doNotTreatEvaluationAsUser: 'Do not treat evaluation as user activation', + }, + h = i.i18n.registerUIStrings('panels/console/console-meta.ts', w), + A = i.i18n.getLazilyComputedLocalizedString.bind(void 0, h) +let E +async function v() { + return E || (E = await import('../../panels/console/console.js')), E +} +r.ViewManager.registerViewExtension({ + location: 'panel', + id: 'console', + title: A(w.console), + commandPrompt: A(w.showConsole), + order: 20, + loadView: async () => (await v()).ConsolePanel.ConsolePanel.instance(), +}), + r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'console-view', + title: A(w.console), + commandPrompt: A(w.showConsole), + persistence: 'permanent', + order: 0, + loadView: async () => (await v()).ConsolePanel.WrapperView.instance(), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'console.show', + category: r.ActionRegistration.ActionCategory.CONSOLE, + title: A(w.showConsole), + loadActionDelegate: async () => + (await v()).ConsoleView.ActionDelegate.instance(), + bindings: [ + { shortcut: 'Ctrl+`', keybindSets: ['devToolsDefault', 'vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'console.clear', + category: r.ActionRegistration.ActionCategory.CONSOLE, + title: A(w.clearConsole), + iconClass: 'largeicon-clear', + loadActionDelegate: async () => + (await v()).ConsoleView.ActionDelegate.instance(), + contextTypes: () => + void 0 === E ? [] : ((e) => [e.ConsoleView.ConsoleView])(E), + bindings: [{ shortcut: 'Ctrl+L' }, { shortcut: 'Meta+K', platform: 'mac' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'console.clear.history', + category: r.ActionRegistration.ActionCategory.CONSOLE, + title: A(w.clearConsoleHistory), + loadActionDelegate: async () => + (await v()).ConsoleView.ActionDelegate.instance(), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'console.create-pin', + category: r.ActionRegistration.ActionCategory.CONSOLE, + title: A(w.createLiveExpression), + iconClass: 'largeicon-visibility', + loadActionDelegate: async () => + (await v()).ConsoleView.ActionDelegate.instance(), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.hideNetworkMessages), + settingName: 'hideNetworkMessages', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: A(w.hideNetworkMessages) }, + { value: !1, title: A(w.showNetworkMessages) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.selectedContextOnly), + settingName: 'selectedContextFilterEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: A(w.onlyShowMessagesFromTheCurrent) }, + { value: !1, title: A(w.showMessagesFromAllContexts) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.logXmlhttprequests), + settingName: 'monitoringXHREnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.showTimestamps), + settingName: 'consoleTimestampsEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: A(w.showTimestamps) }, + { value: !1, title: A(w.hideTimestamps) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + title: A(w.autocompleteFromHistory), + settingName: 'consoleHistoryAutocomplete', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: A(w.autocompleteFromHistory) }, + { value: !1, title: A(w.doNotAutocompleteFromHistory) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.groupSimilarMessagesInConsole), + settingName: 'consoleGroupSimilar', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: A(w.groupSimilarMessagesInConsole) }, + { value: !1, title: A(w.doNotGroupSimilarMessagesIn) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + title: A(w.showCorsErrorsInConsole), + settingName: 'consoleShowsCorsErrors', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: A(w.showCorsErrorsInConsole) }, + { value: !1, title: A(w.doNotShowCorsErrorsIn) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.eagerEvaluation), + settingName: 'consoleEagerEval', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: A(w.eagerlyEvaluateConsolePromptText) }, + { value: !1, title: A(w.doNotEagerlyEvaluateConsole) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: A(w.evaluateTriggersUserActivation), + settingName: 'consoleUserActivationEval', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: A(w.treatEvaluationAsUserActivation) }, + { value: !1, title: A(w.doNotTreatEvaluationAsUser) }, + ], + }), + t.Revealer.registerRevealer({ + contextTypes: () => [t.Console.Console], + loadRevealer: async () => + (await v()).ConsolePanel.ConsoleRevealer.instance(), + destination: void 0, + }) +const T = { + inputs: 'Inputs', + pause: 'Pause', + resume: 'Resume', + showInputs: 'Show Inputs', + startRecording: 'Start recording', + startReplaying: 'Start replaying', + stopRecording: 'Stop recording', + }, + C = i.i18n.registerUIStrings('panels/input//input-meta.ts', T), + b = i.i18n.getLazilyComputedLocalizedString.bind(void 0, C) +let R +async function N() { + return R || (R = await import('../../panels/input/input.js')), R +} +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'Inputs', + title: b(T.inputs), + commandPrompt: b(T.showInputs), + persistence: 'closeable', + order: 7, + loadView: async () => (await N()).InputTimeline.InputTimeline.instance(), + experiment: e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT, +}), + r.ActionRegistration.registerActionExtension({ + actionId: 'input.toggle-recording', + iconClass: 'largeicon-start-recording', + toggleable: !0, + toggledIconClass: 'largeicon-stop-recording', + toggleWithRedColor: !0, + loadActionDelegate: async () => + (await N()).InputTimeline.ActionDelegate.instance(), + category: r.ActionRegistration.ActionCategory.INPUTS, + experiment: e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT, + options: [ + { value: !0, title: b(T.startRecording) }, + { value: !1, title: b(T.stopRecording) }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'input.start-replaying', + iconClass: 'largeicon-play', + toggleable: !1, + loadActionDelegate: async () => + (await N()).InputTimeline.ActionDelegate.instance(), + category: r.ActionRegistration.ActionCategory.INPUTS, + experiment: e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT, + options: [{ value: !0, title: b(T.startReplaying) }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'input.toggle-pause', + iconClass: 'largeicon-pause', + toggleable: !0, + toggledIconClass: 'largeicon-resume', + loadActionDelegate: async () => + (await N()).InputTimeline.ActionDelegate.instance(), + category: r.ActionRegistration.ActionCategory.INPUTS, + experiment: e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT, + options: [ + { value: !0, title: b(T.pause) }, + { value: !1, title: b(T.resume) }, + ], + }) +const x = { devices: 'Devices', showDevices: 'Show Devices' }, + f = i.i18n.registerUIStrings( + 'panels/settings/emulation/emulation-meta.ts', + x + ), + D = i.i18n.getLazilyComputedLocalizedString.bind(void 0, f) +let L +r.ViewManager.registerViewExtension({ + location: 'settings-view', + commandPrompt: D(x.showDevices), + title: D(x.devices), + order: 30, + loadView: async () => + ( + await (async function () { + return ( + L || + (L = await import('../../panels/settings/emulation/emulation.js')), + L + ) + })() + ).DevicesSettingsTab.DevicesSettingsTab.instance(), + id: 'devices', + settings: ['standardEmulatedDeviceList', 'customEmulatedDeviceList'], +}) +const P = { + shortcuts: 'Shortcuts', + preferences: 'Preferences', + experiments: 'Experiments', + ignoreList: 'Ignore List', + showShortcuts: 'Show Shortcuts', + showPreferences: 'Show Preferences', + showExperiments: 'Show Experiments', + showIgnoreList: 'Show Ignore List', + settings: 'Settings', + documentation: 'Documentation', + }, + I = i.i18n.registerUIStrings('panels/settings/settings-meta.ts', P), + k = i.i18n.getLazilyComputedLocalizedString.bind(void 0, I) +let O +async function M() { + return O || (O = await import('../../panels/settings/settings.js')), O +} +r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'preferences', + title: k(P.preferences), + commandPrompt: k(P.showPreferences), + order: 0, + loadView: async () => + (await M()).SettingsScreen.GenericSettingsTab.instance(), +}), + r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'experiments', + title: k(P.experiments), + commandPrompt: k(P.showExperiments), + order: 3, + experiment: e.Runtime.ExperimentName.ALL, + loadView: async () => + (await M()).SettingsScreen.ExperimentsSettingsTab.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'blackbox', + title: k(P.ignoreList), + commandPrompt: k(P.showIgnoreList), + order: 4, + loadView: async () => + ( + await M() + ).FrameworkIgnoreListSettingsTab.FrameworkIgnoreListSettingsTab.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'keybinds', + title: k(P.shortcuts), + commandPrompt: k(P.showShortcuts), + order: 100, + loadView: async () => + (await M()).KeybindsSettingsTab.KeybindsSettingsTab.instance(), + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.SETTINGS, + actionId: 'settings.show', + title: k(P.settings), + loadActionDelegate: async () => + (await M()).SettingsScreen.ActionDelegate.instance(), + iconClass: 'largeicon-settings-gear', + bindings: [ + { shortcut: 'F1', keybindSets: ['devToolsDefault'] }, + { shortcut: 'Shift+?' }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+,', + keybindSets: ['vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+,', keybindSets: ['vsCode'] }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.SETTINGS, + actionId: 'settings.documentation', + title: k(P.documentation), + loadActionDelegate: async () => + (await M()).SettingsScreen.ActionDelegate.instance(), + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.SETTINGS, + actionId: 'settings.shortcuts', + title: k(P.shortcuts), + loadActionDelegate: async () => + (await M()).SettingsScreen.ActionDelegate.instance(), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+K Ctrl+S', + keybindSets: ['vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+K Meta+S', keybindSets: ['vsCode'] }, + ], + }), + r.ViewManager.registerLocationResolver({ + name: 'settings-view', + category: r.ViewManager.ViewLocationCategoryValues.SETTINGS, + loadResolver: async () => + (await M()).SettingsScreen.SettingsScreen.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [t.Settings.Setting], + loadRevealer: async () => (await M()).SettingsScreen.Revealer.instance(), + destination: void 0, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_FOOTER, + actionId: 'settings.shortcuts', + order: void 0, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT, + actionId: 'settings.documentation', + order: void 0, + }) +const V = { + protocolMonitor: 'Protocol monitor', + showProtocolMonitor: 'Show Protocol monitor', + }, + B = i.i18n.registerUIStrings( + 'panels/protocol_monitor/protocol_monitor-meta.ts', + V + ), + F = i.i18n.getLazilyComputedLocalizedString.bind(void 0, B) +let U +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'protocol-monitor', + title: F(V.protocolMonitor), + commandPrompt: F(V.showProtocolMonitor), + order: 100, + persistence: 'closeable', + loadView: async () => + ( + await (async function () { + return ( + U || + (U = await import( + '../../panels/protocol_monitor/protocol_monitor.js' + )), + U + ) + })() + ).ProtocolMonitor.ProtocolMonitorImpl.instance(), + experiment: e.Runtime.ExperimentName.PROTOCOL_MONITOR, +}) +const _ = { + workspace: 'Workspace', + showWorkspace: 'Show Workspace', + enableLocalOverrides: 'Enable Local Overrides', + interception: 'interception', + override: 'override', + network: 'network', + rewrite: 'rewrite', + request: 'request', + enableOverrideNetworkRequests: 'Enable override network requests', + disableOverrideNetworkRequests: 'Disable override network requests', + }, + G = i.i18n.registerUIStrings('models/persistence/persistence-meta.ts', _), + W = i.i18n.getLazilyComputedLocalizedString.bind(void 0, G) +let H +async function z() { + return H || (H = await import('../../models/persistence/persistence.js')), H +} +r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'workspace', + title: W(_.workspace), + commandPrompt: W(_.showWorkspace), + order: 1, + loadView: async () => + (await z()).WorkspaceSettingsTab.WorkspaceSettingsTab.instance(), +}), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.PERSISTENCE, + title: W(_.enableLocalOverrides), + settingName: 'persistenceNetworkOverridesEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + tags: [ + W(_.interception), + W(_.override), + W(_.network), + W(_.rewrite), + W(_.request), + ], + options: [ + { value: !0, title: W(_.enableOverrideNetworkRequests) }, + { value: !1, title: W(_.disableOverrideNetworkRequests) }, + ], + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [ + n.UISourceCode.UISourceCode, + o.Resource.Resource, + o.NetworkRequest.NetworkRequest, + ], + loadProvider: async () => + (await z()).PersistenceActions.ContextMenuProvider.instance(), + experiment: void 0, + }) +const q = { + preserveLog: 'Preserve log', + preserve: 'preserve', + clear: 'clear', + reset: 'reset', + preserveLogOnPageReload: 'Preserve log on page reload / navigation', + doNotPreserveLogOnPageReload: + 'Do not preserve log on page reload / navigation', + recordNetworkLog: 'Record network log', + }, + j = i.i18n.registerUIStrings('models/logs/logs-meta.ts', q), + K = i.i18n.getLazilyComputedLocalizedString.bind(void 0, j) +t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + title: K(q.preserveLog), + settingName: 'network_log.preserve-log', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + tags: [K(q.preserve), K(q.clear), K(q.reset)], + options: [ + { value: !0, title: K(q.preserveLogOnPageReload) }, + { value: !1, title: K(q.doNotPreserveLogOnPageReload) }, + ], +}), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + title: K(q.recordNetworkLog), + settingName: 'network_log.record-log', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + storageType: t.Settings.SettingStorageType.Session, + }) +const J = { + focusDebuggee: 'Focus debuggee', + toggleDrawer: 'Toggle drawer', + nextPanel: 'Next panel', + previousPanel: 'Previous panel', + reloadDevtools: 'Reload DevTools', + restoreLastDockPosition: 'Restore last dock position', + zoomIn: 'Zoom in', + zoomOut: 'Zoom out', + resetZoomLevel: 'Reset zoom level', + searchInPanel: 'Search in panel', + cancelSearch: 'Cancel search', + findNextResult: 'Find next result', + findPreviousResult: 'Find previous result', + theme: 'Theme:', + switchToSystemPreferredColor: 'Switch to system preferred color theme', + systemPreference: 'System preference', + switchToLightTheme: 'Switch to light theme', + lightCapital: 'Light', + switchToDarkTheme: 'Switch to dark theme', + darkCapital: 'Dark', + darkLower: 'dark', + lightLower: 'light', + panelLayout: 'Panel layout:', + useHorizontalPanelLayout: 'Use horizontal panel layout', + horizontal: 'horizontal', + useVerticalPanelLayout: 'Use vertical panel layout', + vertical: 'vertical', + useAutomaticPanelLayout: 'Use automatic panel layout', + auto: 'auto', + colorFormat: 'Color format:', + setColorFormatAsAuthored: 'Set color format as authored', + asAuthored: 'As authored', + setColorFormatToHex: 'Set color format to HEX', + setColorFormatToRgb: 'Set color format to RGB', + setColorFormatToHsl: 'Set color format to HSL', + enableCtrlShortcutToSwitchPanels: + 'Enable Ctrl + 1-9 shortcut to switch panels', + enableShortcutToSwitchPanels: 'Enable ⌘ + 1-9 shortcut to switch panels', + right: 'Right', + dockToRight: 'Dock to right', + bottom: 'Bottom', + dockToBottom: 'Dock to bottom', + left: 'Left', + dockToLeft: 'Dock to left', + undocked: 'Undocked', + undockIntoSeparateWindow: 'Undock into separate window', + devtoolsDefault: 'DevTools (Default)', + language: 'Language:', + browserLanguage: 'Browser UI language', + enableSync: 'Enable settings sync', + }, + Y = i.i18n.registerUIStrings('entrypoints/main/main-meta.ts', J), + X = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Y) +let Q, Z +async function $() { + return Q || (Q = await import('../main/main.js')), Q +} +function ee(e) { + return () => + i.i18n.getLocalizedLanguageRegion( + e, + i.DevToolsLocale.DevToolsLocale.instance() + ) +} +r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DRAWER, + actionId: 'inspector_main.focus-debuggee', + loadActionDelegate: async () => + ( + await (async function () { + return Z || (Z = await import('../inspector_main/inspector_main.js')), Z + })() + ).InspectorMain.FocusDebuggeeActionDelegate.instance(), + order: 100, + title: X(J.focusDebuggee), +}), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.DRAWER, + actionId: 'main.toggle-drawer', + loadActionDelegate: async () => r.InspectorView.ActionDelegate.instance(), + order: 101, + title: X(J.toggleDrawer), + bindings: [{ shortcut: 'Esc' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.next-tab', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.nextPanel), + loadActionDelegate: async () => r.InspectorView.ActionDelegate.instance(), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+]' }, + { platform: 'mac', shortcut: 'Meta+]' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.previous-tab', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.previousPanel), + loadActionDelegate: async () => r.InspectorView.ActionDelegate.instance(), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+[' }, + { platform: 'mac', shortcut: 'Meta+[' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.debug-reload', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.reloadDevtools), + loadActionDelegate: async () => + (await $()).MainImpl.ReloadActionDelegate.instance(), + bindings: [{ shortcut: 'Alt+R' }], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.restoreLastDockPosition), + actionId: 'main.toggle-dock', + loadActionDelegate: async () => + r.DockController.ToggleDockActionDelegate.instance(), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+D' }, + { platform: 'mac', shortcut: 'Meta+Shift+D' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.zoom-in', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.zoomIn), + loadActionDelegate: async () => + (await $()).MainImpl.ZoomActionDelegate.instance(), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+Plus', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+Plus' }, + { platform: 'windows,linux', shortcut: 'Ctrl+NumpadPlus' }, + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+NumpadPlus' }, + { + platform: 'mac', + shortcut: 'Meta+Plus', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+Shift+Plus' }, + { platform: 'mac', shortcut: 'Meta+NumpadPlus' }, + { platform: 'mac', shortcut: 'Meta+Shift+NumpadPlus' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.zoom-out', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.zoomOut), + loadActionDelegate: async () => + (await $()).MainImpl.ZoomActionDelegate.instance(), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+Minus', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+Minus' }, + { platform: 'windows,linux', shortcut: 'Ctrl+NumpadMinus' }, + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+NumpadMinus' }, + { + platform: 'mac', + shortcut: 'Meta+Minus', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'mac', shortcut: 'Meta+Shift+Minus' }, + { platform: 'mac', shortcut: 'Meta+NumpadMinus' }, + { platform: 'mac', shortcut: 'Meta+Shift+NumpadMinus' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.zoom-reset', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.resetZoomLevel), + loadActionDelegate: async () => + (await $()).MainImpl.ZoomActionDelegate.instance(), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+0' }, + { platform: 'windows,linux', shortcut: 'Ctrl+Numpad0' }, + { platform: 'mac', shortcut: 'Meta+Numpad0' }, + { platform: 'mac', shortcut: 'Meta+0' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.search-in-panel.find', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.searchInPanel), + loadActionDelegate: async () => + (await $()).MainImpl.SearchActionDelegate.instance(), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+F', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'mac', + shortcut: 'Meta+F', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'mac', shortcut: 'F3' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.search-in-panel.cancel', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.cancelSearch), + loadActionDelegate: async () => + (await $()).MainImpl.SearchActionDelegate.instance(), + order: 10, + bindings: [{ shortcut: 'Esc' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.search-in-panel.find-next', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.findNextResult), + loadActionDelegate: async () => + (await $()).MainImpl.SearchActionDelegate.instance(), + bindings: [ + { + platform: 'mac', + shortcut: 'Meta+G', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'windows,linux', shortcut: 'Ctrl+G' }, + { + platform: 'windows,linux', + shortcut: 'F3', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'main.search-in-panel.find-previous', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: X(J.findPreviousResult), + loadActionDelegate: async () => + (await $()).MainImpl.SearchActionDelegate.instance(), + bindings: [ + { + platform: 'mac', + shortcut: 'Meta+Shift+G', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+G' }, + { + platform: 'windows,linux', + shortcut: 'Shift+F3', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: X(J.theme), + settingName: 'uiTheme', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'systemPreferred', + reloadRequired: !0, + options: [ + { + title: X(J.switchToSystemPreferredColor), + text: X(J.systemPreference), + value: 'systemPreferred', + }, + { + title: X(J.switchToLightTheme), + text: X(J.lightCapital), + value: 'default', + }, + { title: X(J.switchToDarkTheme), text: X(J.darkCapital), value: 'dark' }, + ], + tags: [X(J.darkLower), X(J.lightLower)], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: X(J.panelLayout), + settingName: 'sidebarPosition', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'auto', + options: [ + { + title: X(J.useHorizontalPanelLayout), + text: X(J.horizontal), + value: 'bottom', + }, + { + title: X(J.useVerticalPanelLayout), + text: X(J.vertical), + value: 'right', + }, + { title: X(J.useAutomaticPanelLayout), text: X(J.auto), value: 'auto' }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: X(J.colorFormat), + settingName: 'colorFormat', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'original', + options: [ + { + title: X(J.setColorFormatAsAuthored), + text: X(J.asAuthored), + value: 'original', + }, + { + title: X(J.setColorFormatToHex), + text: 'HEX: #dac0de', + value: 'hex', + raw: !0, + }, + { + title: X(J.setColorFormatToRgb), + text: 'RGB: rgb(128 255 255)', + value: 'rgb', + raw: !0, + }, + { + title: X(J.setColorFormatToHsl), + text: 'HSL: hsl(300deg 80% 90%)', + value: 'hsl', + raw: !0, + }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: X(J.enableCtrlShortcutToSwitchPanels), + titleMac: X(J.enableShortcutToSwitchPanels), + settingName: 'shortcutPanelSwitch', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.GLOBAL, + settingName: 'currentDockState', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'right', + options: [ + { value: 'right', text: X(J.right), title: X(J.dockToRight) }, + { value: 'bottom', text: X(J.bottom), title: X(J.dockToBottom) }, + { value: 'left', text: X(J.left), title: X(J.dockToLeft) }, + { + value: 'undocked', + text: X(J.undocked), + title: X(J.undockIntoSeparateWindow), + }, + ], + }), + t.Settings.registerSettingExtension({ + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'activeKeybindSet', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'devToolsDefault', + options: [ + { + value: 'devToolsDefault', + title: X(J.devtoolsDefault), + text: X(J.devtoolsDefault), + }, + { + value: 'vsCode', + title: i.i18n.lockedLazyString('Visual Studio Code'), + text: i.i18n.lockedLazyString('Visual Studio Code'), + }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'language', + settingType: t.Settings.SettingType.ENUM, + title: X(J.language), + defaultValue: 'en-US', + options: [ + { + value: 'browserLanguage', + title: X(J.browserLanguage), + text: X(J.browserLanguage), + }, + ...i.i18n + .getAllSupportedDevToolsLocales() + .filter((e) => 'en-XL' !== e) + .map((e) => { + return { value: (t = e), title: ee(t), text: ee(t) } + var t + }), + ], + reloadRequired: !0, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SYNC, + settingName: 'sync_preferences', + settingType: t.Settings.SettingType.BOOLEAN, + title: X(J.enableSync), + defaultValue: !1, + reloadRequired: !0, + experiment: e.Runtime.ExperimentName.SYNC_SETTINGS, + }), + t.Settings.registerSettingExtension({ + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'userShortcuts', + settingType: t.Settings.SettingType.ARRAY, + defaultValue: [], + }), + r.ViewManager.registerLocationResolver({ + name: 'drawer-view', + category: r.ViewManager.ViewLocationCategoryValues.DRAWER, + loadResolver: async () => r.InspectorView.InspectorView.instance(), + }), + r.ViewManager.registerLocationResolver({ + name: 'drawer-sidebar', + category: r.ViewManager.ViewLocationCategoryValues.DRAWER_SIDEBAR, + loadResolver: async () => r.InspectorView.InspectorView.instance(), + }), + r.ViewManager.registerLocationResolver({ + name: 'panel', + category: r.ViewManager.ViewLocationCategoryValues.PANEL, + loadResolver: async () => r.InspectorView.InspectorView.instance(), + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [ + n.UISourceCode.UISourceCode, + o.Resource.Resource, + o.NetworkRequest.NetworkRequest, + ], + loadProvider: async () => + l.Linkifier.ContentProviderContextMenuProvider.instance(), + experiment: void 0, + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [Node], + loadProvider: async () => r.XLink.ContextMenuProvider.instance(), + experiment: void 0, + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [Node], + loadProvider: async () => l.Linkifier.LinkContextMenuProvider.instance(), + experiment: void 0, + }), + r.Toolbar.registerToolbarItem({ + separator: !0, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT, + order: 100, + showLabel: void 0, + actionId: void 0, + condition: void 0, + loadItem: void 0, + }), + r.Toolbar.registerToolbarItem({ + separator: !0, + order: 97, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT, + showLabel: void 0, + actionId: void 0, + condition: void 0, + loadItem: void 0, + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => + (await $()).MainImpl.SettingsButtonProvider.instance(), + order: 98, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => (await $()).MainImpl.MainMenuItem.instance(), + order: 99, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => r.DockController.CloseButtonProvider.instance(), + order: 100, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + t.AppProvider.registerAppProvider({ + loadAppProvider: async () => + (await $()).SimpleApp.SimpleAppProvider.instance(), + order: 10, + condition: void 0, + }) +const te = { + flamechartMouseWheelAction: 'Flamechart mouse wheel action:', + scroll: 'Scroll', + zoom: 'Zoom', + liveMemoryAllocationAnnotations: 'Live memory allocation annotations', + showLiveMemoryAllocation: 'Show live memory allocation annotations', + hideLiveMemoryAllocation: 'Hide live memory allocation annotations', + collectGarbage: 'Collect garbage', + }, + ie = i.i18n.registerUIStrings( + 'ui/legacy/components/perf_ui/perf_ui-meta.ts', + te + ), + oe = i.i18n.getLazilyComputedLocalizedString.bind(void 0, ie) +let ne +r.ActionRegistration.registerActionExtension({ + actionId: 'components.collect-garbage', + category: r.ActionRegistration.ActionCategory.PERFORMANCE, + title: oe(te.collectGarbage), + iconClass: 'largeicon-trash-bin', + loadActionDelegate: async () => + ( + await (async function () { + return ( + ne || + (ne = await import( + '../../ui/legacy/components/perf_ui/perf_ui.js' + )), + ne + ) + })() + ).GCActionDelegate.GCActionDelegate.instance(), +}), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.PERFORMANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: oe(te.flamechartMouseWheelAction), + settingName: 'flamechartMouseWheelAction', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'zoom', + options: [ + { title: oe(te.scroll), text: oe(te.scroll), value: 'scroll' }, + { title: oe(te.zoom), text: oe(te.zoom), value: 'zoom' }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.MEMORY, + experiment: e.Runtime.ExperimentName.LIVE_HEAP_PROFILE, + title: oe(te.liveMemoryAllocationAnnotations), + settingName: 'memoryLiveHeapProfile', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: oe(te.showLiveMemoryAllocation) }, + { value: !1, title: oe(te.hideLiveMemoryAllocation) }, + ], + }) +const ae = { openFile: 'Open file', runCommand: 'Run command' }, + se = i.i18n.registerUIStrings( + 'ui/legacy/components/quick_open/quick_open-meta.ts', + ae + ), + re = i.i18n.getLazilyComputedLocalizedString.bind(void 0, se) +let le +async function ce() { + return ( + le || + (le = await import( + '../../ui/legacy/components/quick_open/quick_open.js' + )), + le + ) +} +r.ActionRegistration.registerActionExtension({ + actionId: 'commandMenu.show', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: re(ae.runCommand), + loadActionDelegate: async () => + (await ce()).CommandMenu.ShowActionDelegate.instance(), + bindings: [ + { + platform: 'windows,linux', + shortcut: 'Ctrl+Shift+P', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'mac', + shortcut: 'Meta+Shift+P', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { shortcut: 'F1', keybindSets: ['vsCode'] }, + ], +}), + r.ActionRegistration.registerActionExtension({ + actionId: 'quickOpen.show', + category: r.ActionRegistration.ActionCategory.GLOBAL, + title: re(ae.openFile), + loadActionDelegate: async () => + (await ce()).QuickOpen.ShowActionDelegate.instance(), + order: 100, + bindings: [ + { + platform: 'mac', + shortcut: 'Meta+P', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'mac', + shortcut: 'Meta+O', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+P', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+O', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + ], + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_DEFAULT, + actionId: 'commandMenu.show', + order: void 0, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_DEFAULT, + actionId: 'quickOpen.show', + order: void 0, + }) +const ge = { + preserveLogUponNavigation: 'Preserve log upon navigation', + doNotPreserveLogUponNavigation: 'Do not preserve log upon navigation', + pauseOnExceptions: 'Pause on exceptions', + doNotPauseOnExceptions: 'Do not pause on exceptions', + disableJavascript: 'Disable JavaScript', + enableJavascript: 'Enable JavaScript', + disableAsyncStackTraces: 'Disable async stack traces', + doNotCaptureAsyncStackTraces: 'Do not capture async stack traces', + captureAsyncStackTraces: 'Capture async stack traces', + showRulersOnHover: 'Show rulers on hover', + doNotShowRulersOnHover: 'Do not show rulers on hover', + showAreaNames: 'Show area names', + showGridNamedAreas: 'Show grid named areas', + doNotShowGridNamedAreas: 'Do not show grid named areas', + showTrackSizes: 'Show track sizes', + showGridTrackSizes: 'Show grid track sizes', + doNotShowGridTrackSizes: 'Do not show grid track sizes', + extendGridLines: 'Extend grid lines', + doNotExtendGridLines: 'Do not extend grid lines', + showLineLabels: 'Show line labels', + hideLineLabels: 'Hide line labels', + showLineNumbers: 'Show line numbers', + showLineNames: 'Show line names', + showPaintFlashingRectangles: 'Show paint flashing rectangles', + hidePaintFlashingRectangles: 'Hide paint flashing rectangles', + showLayoutShiftRegions: 'Show layout shift regions', + hideLayoutShiftRegions: 'Hide layout shift regions', + highlightAdFrames: 'Highlight ad frames', + doNotHighlightAdFrames: 'Do not highlight ad frames', + showLayerBorders: 'Show layer borders', + hideLayerBorders: 'Hide layer borders', + showCoreWebVitalsOverlay: 'Show Core Web Vitals overlay', + hideCoreWebVitalsOverlay: 'Hide Core Web Vitals overlay', + showFramesPerSecondFpsMeter: 'Show frames per second (FPS) meter', + hideFramesPerSecondFpsMeter: 'Hide frames per second (FPS) meter', + showScrollPerformanceBottlenecks: 'Show scroll performance bottlenecks', + hideScrollPerformanceBottlenecks: 'Hide scroll performance bottlenecks', + emulateAFocusedPage: 'Emulate a focused page', + doNotEmulateAFocusedPage: 'Do not emulate a focused page', + doNotEmulateCssMediaType: 'Do not emulate CSS media type', + noEmulation: 'No emulation', + emulateCssPrintMediaType: 'Emulate CSS print media type', + print: 'print', + emulateCssScreenMediaType: 'Emulate CSS screen media type', + screen: 'screen', + query: 'query', + emulateCssMediaType: 'Emulate CSS media type', + doNotEmulateCss: 'Do not emulate CSS {PH1}', + emulateCss: 'Emulate CSS {PH1}', + emulateCssMediaFeature: 'Emulate CSS media feature {PH1}', + doNotEmulateAnyVisionDeficiency: 'Do not emulate any vision deficiency', + emulateBlurredVision: 'Emulate blurred vision', + blurredVision: 'Blurred vision', + emulateProtanopia: 'Emulate protanopia', + protanopia: 'Protanopia', + emulateDeuteranopia: 'Emulate deuteranopia', + deuteranopia: 'Deuteranopia', + emulateTritanopia: 'Emulate tritanopia', + tritanopia: 'Tritanopia', + emulateAchromatopsia: 'Emulate achromatopsia', + achromatopsia: 'Achromatopsia', + emulateVisionDeficiencies: 'Emulate vision deficiencies', + disableLocalFonts: 'Disable local fonts', + enableLocalFonts: 'Enable local fonts', + disableAvifFormat: 'Disable `AVIF` format', + enableAvifFormat: 'Enable `AVIF` format', + disableJpegXlFormat: 'Disable `JPEG XL` format', + enableJpegXlFormat: 'Enable `JPEG XL` format', + disableWebpFormat: 'Disable `WebP` format', + enableWebpFormat: 'Enable `WebP` format', + enableCustomFormatters: 'Enable custom formatters', + enableNetworkRequestBlocking: 'Enable network request blocking', + disableNetworkRequestBlocking: 'Disable network request blocking', + enableCache: 'Enable cache', + disableCache: 'Disable cache (while DevTools is open)', + emulateAutoDarkMode: 'Emulate auto dark mode', + enableEmulateAutoDarkMode: 'Enable auto dark mode', + enabledDarkMode: 'Enable', + disableEmulateAutoDarkMode: 'Disable auto dark mode', + disabledDarkMode: 'Disable', + doNotEmulateDarkMode: 'Do not emulate auto dark mode', + }, + de = i.i18n.registerUIStrings('core/sdk/sdk-meta.ts', ge), + ue = i.i18n.getLazilyComputedLocalizedString.bind(void 0, de) +t.Settings.registerSettingExtension({ + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'skipStackFramesPattern', + settingType: t.Settings.SettingType.REGEX, + defaultValue: '', +}), + t.Settings.registerSettingExtension({ + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'skipContentScripts', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + storageType: t.Settings.SettingStorageType.Synced, + title: ue(ge.preserveLogUponNavigation), + settingName: 'preserveConsoleLog', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: ue(ge.preserveLogUponNavigation) }, + { value: !1, title: ue(ge.doNotPreserveLogUponNavigation) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.DEBUGGER, + settingName: 'pauseOnExceptionEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: ue(ge.pauseOnExceptions) }, + { value: !1, title: ue(ge.doNotPauseOnExceptions) }, + ], + }), + t.Settings.registerSettingExtension({ + settingName: 'pauseOnCaughtException', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.DEBUGGER, + title: ue(ge.disableJavascript), + settingName: 'javaScriptDisabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + order: 1, + defaultValue: !1, + options: [ + { value: !0, title: ue(ge.disableJavascript) }, + { value: !1, title: ue(ge.enableJavascript) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.DEBUGGER, + title: ue(ge.disableAsyncStackTraces), + settingName: 'disableAsyncStackTraces', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + order: 2, + options: [ + { value: !0, title: ue(ge.doNotCaptureAsyncStackTraces) }, + { value: !1, title: ue(ge.captureAsyncStackTraces) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.DEBUGGER, + settingName: 'breakpointsActive', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: !0, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ELEMENTS, + storageType: t.Settings.SettingStorageType.Synced, + title: ue(ge.showRulersOnHover), + settingName: 'showMetricsRulers', + settingType: t.Settings.SettingType.BOOLEAN, + options: [ + { value: !0, title: ue(ge.showRulersOnHover) }, + { value: !1, title: ue(ge.doNotShowRulersOnHover) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.GRID, + storageType: t.Settings.SettingStorageType.Synced, + title: ue(ge.showAreaNames), + settingName: 'showGridAreas', + settingType: t.Settings.SettingType.BOOLEAN, + options: [ + { value: !0, title: ue(ge.showGridNamedAreas) }, + { value: !1, title: ue(ge.doNotShowGridNamedAreas) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.GRID, + storageType: t.Settings.SettingStorageType.Synced, + title: ue(ge.showTrackSizes), + settingName: 'showGridTrackSizes', + settingType: t.Settings.SettingType.BOOLEAN, + options: [ + { value: !0, title: ue(ge.showGridTrackSizes) }, + { value: !1, title: ue(ge.doNotShowGridTrackSizes) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.GRID, + storageType: t.Settings.SettingStorageType.Synced, + title: ue(ge.extendGridLines), + settingName: 'extendGridLines', + settingType: t.Settings.SettingType.BOOLEAN, + options: [ + { value: !0, title: ue(ge.extendGridLines) }, + { value: !1, title: ue(ge.doNotExtendGridLines) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.GRID, + storageType: t.Settings.SettingStorageType.Synced, + title: ue(ge.showLineLabels), + settingName: 'showGridLineLabels', + settingType: t.Settings.SettingType.ENUM, + options: [ + { + title: ue(ge.hideLineLabels), + text: ue(ge.hideLineLabels), + value: 'none', + }, + { + title: ue(ge.showLineNumbers), + text: ue(ge.showLineNumbers), + value: 'lineNumbers', + }, + { + title: ue(ge.showLineNames), + text: ue(ge.showLineNames), + value: 'lineNames', + }, + ], + defaultValue: 'lineNumbers', + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showPaintRects', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.showPaintFlashingRectangles) }, + { value: !1, title: ue(ge.hidePaintFlashingRectangles) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showLayoutShiftRegions', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.showLayoutShiftRegions) }, + { value: !1, title: ue(ge.hideLayoutShiftRegions) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showAdHighlights', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.highlightAdFrames) }, + { value: !1, title: ue(ge.doNotHighlightAdFrames) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showDebugBorders', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.showLayerBorders) }, + { value: !1, title: ue(ge.hideLayerBorders) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showWebVitals', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.showCoreWebVitalsOverlay) }, + { value: !1, title: ue(ge.hideCoreWebVitalsOverlay) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showFPSCounter', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.showFramesPerSecondFpsMeter) }, + { value: !1, title: ue(ge.hideFramesPerSecondFpsMeter) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'showScrollBottleneckRects', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.showScrollPerformanceBottlenecks) }, + { value: !1, title: ue(ge.hideScrollPerformanceBottlenecks) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + title: ue(ge.emulateAFocusedPage), + settingName: 'emulatePageFocus', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: !1, + options: [ + { value: !0, title: ue(ge.emulateAFocusedPage) }, + { value: !1, title: ue(ge.doNotEmulateAFocusedPage) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'emulatedCSSMedia', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCssMediaType), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCssPrintMediaType), + text: ue(ge.print), + value: 'print', + }, + { + title: ue(ge.emulateCssScreenMediaType), + text: ue(ge.screen), + value: 'screen', + }, + ], + tags: [ue(ge.query)], + title: ue(ge.emulateCssMediaType), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'emulatedCSSMediaFeaturePrefersColorScheme', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCss, { PH1: 'prefers-color-scheme' }), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-color-scheme: light' }), + text: i.i18n.lockedLazyString('prefers-color-scheme: light'), + value: 'light', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-color-scheme: dark' }), + text: i.i18n.lockedLazyString('prefers-color-scheme: dark'), + value: 'dark', + }, + ], + tags: [ue(ge.query)], + title: ue(ge.emulateCssMediaFeature, { PH1: 'prefers-color-scheme' }), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'emulatedCSSMediaFeatureForcedColors', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCss, { PH1: 'forced-colors' }), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCss, { PH1: 'forced-colors: active' }), + text: i.i18n.lockedLazyString('forced-colors: active'), + value: 'active', + }, + { + title: ue(ge.emulateCss, { PH1: 'forced-colors: none' }), + text: i.i18n.lockedLazyString('forced-colors: none'), + value: 'none', + }, + ], + tags: [ue(ge.query)], + title: ue(ge.emulateCssMediaFeature, { PH1: 'forced-colors' }), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'emulatedCSSMediaFeaturePrefersReducedMotion', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCss, { PH1: 'prefers-reduced-motion' }), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-reduced-motion: reduce' }), + text: i.i18n.lockedLazyString('prefers-reduced-motion: reduce'), + value: 'reduce', + }, + ], + tags: [ue(ge.query)], + title: ue(ge.emulateCssMediaFeature, { PH1: 'prefers-reduced-motion' }), + }), + t.Settings.registerSettingExtension({ + settingName: 'emulatedCSSMediaFeaturePrefersContrast', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCss, { PH1: 'prefers-contrast' }), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-contrast: more' }), + text: i.i18n.lockedLazyString('prefers-contrast: more'), + value: 'more', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-contrast: less' }), + text: i.i18n.lockedLazyString('prefers-contrast: less'), + value: 'less', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-contrast: custom' }), + text: i.i18n.lockedLazyString('prefers-contrast: custom'), + value: 'custom', + }, + ], + tags: [ue(ge.query)], + title: ue(ge.emulateCssMediaFeature, { PH1: 'prefers-contrast' }), + }), + t.Settings.registerSettingExtension({ + settingName: 'emulatedCSSMediaFeaturePrefersReducedData', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCss, { PH1: 'prefers-reduced-data' }), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCss, { PH1: 'prefers-reduced-data: reduce' }), + text: i.i18n.lockedLazyString('prefers-reduced-data: reduce'), + value: 'reduce', + }, + ], + title: ue(ge.emulateCssMediaFeature, { PH1: 'prefers-reduced-data' }), + }), + t.Settings.registerSettingExtension({ + settingName: 'emulatedCSSMediaFeatureColorGamut', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: '', + options: [ + { + title: ue(ge.doNotEmulateCss, { PH1: 'color-gamut' }), + text: ue(ge.noEmulation), + value: '', + }, + { + title: ue(ge.emulateCss, { PH1: 'color-gamut: srgb' }), + text: i.i18n.lockedLazyString('color-gamut: srgb'), + value: 'srgb', + }, + { + title: ue(ge.emulateCss, { PH1: 'color-gamut: p3' }), + text: i.i18n.lockedLazyString('color-gamut: p3'), + value: 'p3', + }, + { + title: ue(ge.emulateCss, { PH1: 'color-gamut: rec2020' }), + text: i.i18n.lockedLazyString('color-gamut: rec2020'), + value: 'rec2020', + }, + ], + title: ue(ge.emulateCssMediaFeature, { PH1: 'color-gamut' }), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'emulatedVisionDeficiency', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: 'none', + options: [ + { + title: ue(ge.doNotEmulateAnyVisionDeficiency), + text: ue(ge.noEmulation), + value: 'none', + }, + { + title: ue(ge.emulateBlurredVision), + text: ue(ge.blurredVision), + value: 'blurredVision', + }, + { + title: ue(ge.emulateProtanopia), + text: ue(ge.protanopia), + value: 'protanopia', + }, + { + title: ue(ge.emulateDeuteranopia), + text: ue(ge.deuteranopia), + value: 'deuteranopia', + }, + { + title: ue(ge.emulateTritanopia), + text: ue(ge.tritanopia), + value: 'tritanopia', + }, + { + title: ue(ge.emulateAchromatopsia), + text: ue(ge.achromatopsia), + value: 'achromatopsia', + }, + ], + tags: [ue(ge.query)], + title: ue(ge.emulateVisionDeficiencies), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'localFontsDisabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.disableLocalFonts) }, + { value: !1, title: ue(ge.enableLocalFonts) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'avifFormatDisabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.disableAvifFormat) }, + { value: !1, title: ue(ge.enableAvifFormat) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'jpegXlFormatDisabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.disableJpegXlFormat) }, + { value: !1, title: ue(ge.enableJpegXlFormat) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + settingName: 'webpFormatDisabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + options: [ + { value: !0, title: ue(ge.disableWebpFormat) }, + { value: !1, title: ue(ge.enableWebpFormat) }, + ], + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.CONSOLE, + title: ue(ge.enableCustomFormatters), + settingName: 'customFormatters', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + title: ue(ge.enableNetworkRequestBlocking), + settingName: 'requestBlockingEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: !1, + options: [ + { value: !0, title: ue(ge.enableNetworkRequestBlocking) }, + { value: !1, title: ue(ge.disableNetworkRequestBlocking) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + title: ue(ge.disableCache), + settingName: 'cacheDisabled', + settingType: t.Settings.SettingType.BOOLEAN, + order: 0, + defaultValue: !1, + userActionCondition: 'hasOtherClients', + options: [ + { value: !0, title: ue(ge.disableCache) }, + { value: !1, title: ue(ge.enableCache) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.RENDERING, + title: ue(ge.emulateAutoDarkMode), + settingName: 'emulateAutoDarkMode', + settingType: t.Settings.SettingType.ENUM, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: 'default', + options: [ + { + title: ue(ge.doNotEmulateDarkMode), + text: ue(ge.noEmulation), + value: 'default', + }, + { + title: ue(ge.enableEmulateAutoDarkMode), + text: ue(ge.enabledDarkMode), + value: 'enabled', + }, + { + title: ue(ge.disableEmulateAutoDarkMode), + text: ue(ge.disabledDarkMode), + value: 'disabled', + }, + ], + }) +const pe = { + defaultIndentation: 'Default indentation:', + setIndentationToSpaces: 'Set indentation to 2 spaces', + Spaces: '2 spaces', + setIndentationToFSpaces: 'Set indentation to 4 spaces', + fSpaces: '4 spaces', + setIndentationToESpaces: 'Set indentation to 8 spaces', + eSpaces: '8 spaces', + setIndentationToTabCharacter: 'Set indentation to tab character', + tabCharacter: 'Tab character', + }, + Se = i.i18n.registerUIStrings( + 'ui/legacy/components/source_frame/source_frame-meta.ts', + pe + ), + me = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Se) +let ye, we +t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.SOURCES, + storageType: t.Settings.SettingStorageType.Synced, + title: me(pe.defaultIndentation), + settingName: 'textEditorIndent', + settingType: t.Settings.SettingType.ENUM, + defaultValue: ' ', + options: [ + { title: me(pe.setIndentationToSpaces), text: me(pe.Spaces), value: ' ' }, + { + title: me(pe.setIndentationToFSpaces), + text: me(pe.fSpaces), + value: ' ', + }, + { + title: me(pe.setIndentationToESpaces), + text: me(pe.eSpaces), + value: ' ', + }, + { + title: me(pe.setIndentationToTabCharacter), + text: me(pe.tabCharacter), + value: '\t', + }, + ], +}), + r.Toolbar.registerToolbarItem({ + loadItem: async () => + ( + await (async function () { + return ( + ye || + (ye = await import( + '../../panels/console_counters/console_counters.js' + )), + ye + ) + })() + ).WarningErrorCounter.WarningErrorCounter.instance(), + order: 1, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + r.UIUtils.registerRenderer({ + contextTypes: () => [o.RemoteObject.RemoteObject], + loadRenderer: async () => + ( + await (async function () { + return ( + we || + (we = await import( + '../../ui/legacy/components/object_ui/object_ui.js' + )), + we + ) + })() + ).ObjectPropertiesSection.Renderer.instance(), + }) +const he = { + showElements: 'Show Elements', + elements: 'Elements', + showEventListeners: 'Show Event Listeners', + eventListeners: 'Event Listeners', + showProperties: 'Show Properties', + properties: 'Properties', + showStackTrace: 'Show Stack Trace', + stackTrace: 'Stack Trace', + showLayout: 'Show Layout', + layout: 'Layout', + hideElement: 'Hide element', + editAsHtml: 'Edit as HTML', + duplicateElement: 'Duplicate element', + undo: 'Undo', + redo: 'Redo', + captureAreaScreenshot: 'Capture area screenshot', + selectAnElementInThePageTo: 'Select an element in the page to inspect it', + wordWrap: 'Word wrap', + enableDomWordWrap: 'Enable `DOM` word wrap', + disableDomWordWrap: 'Disable `DOM` word wrap', + showHtmlComments: 'Show `HTML` comments', + hideHtmlComments: 'Hide `HTML` comments', + revealDomNodeOnHover: 'Reveal `DOM` node on hover', + showDetailedInspectTooltip: 'Show detailed inspect tooltip', + copyStyles: 'Copy styles', + showUserAgentShadowDOM: 'Show user agent shadow `DOM`', + }, + Ae = i.i18n.registerUIStrings('panels/elements/elements-meta.ts', he), + Ee = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Ae) +let ve +async function Te() { + return ve || (ve = await import('../../panels/elements/elements.js')), ve +} +function Ce(e) { + return void 0 === ve ? [] : e(ve) +} +r.ViewManager.registerViewExtension({ + location: 'panel', + id: 'elements', + commandPrompt: Ee(he.showElements), + title: Ee(he.elements), + order: 10, + persistence: 'permanent', + hasToolbar: !1, + loadView: async () => (await Te()).ElementsPanel.ElementsPanel.instance(), +}), + r.ViewManager.registerViewExtension({ + location: 'elements-sidebar', + id: 'elements.eventListeners', + commandPrompt: Ee(he.showEventListeners), + title: Ee(he.eventListeners), + order: 5, + hasToolbar: !0, + persistence: 'permanent', + loadView: async () => + (await Te()).EventListenersWidget.EventListenersWidget.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'elements-sidebar', + id: 'elements.domProperties', + commandPrompt: Ee(he.showProperties), + title: Ee(he.properties), + order: 7, + persistence: 'permanent', + loadView: async () => + (await Te()).PropertiesWidget.PropertiesWidget.instance(), + }), + r.ViewManager.registerViewExtension({ + experiment: e.Runtime.ExperimentName.CAPTURE_NODE_CREATION_STACKS, + location: 'elements-sidebar', + id: 'elements.domCreation', + commandPrompt: Ee(he.showStackTrace), + title: Ee(he.stackTrace), + order: 10, + persistence: 'permanent', + loadView: async () => + (await Te()).NodeStackTraceWidget.NodeStackTraceWidget.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'elements-sidebar', + id: 'elements.layout', + commandPrompt: Ee(he.showLayout), + title: Ee(he.layout), + order: 4, + persistence: 'permanent', + loadView: async () => + (await Te()).LayoutSidebarPane.LayoutSidebarPane.instance(), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.hide-element', + category: r.ActionRegistration.ActionCategory.ELEMENTS, + title: Ee(he.hideElement), + loadActionDelegate: async () => + (await Te()).ElementsPanel.ElementsActionDelegate.instance(), + contextTypes: () => Ce((e) => [e.ElementsPanel.ElementsPanel]), + bindings: [{ shortcut: 'H' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.edit-as-html', + category: r.ActionRegistration.ActionCategory.ELEMENTS, + title: Ee(he.editAsHtml), + loadActionDelegate: async () => + (await Te()).ElementsPanel.ElementsActionDelegate.instance(), + contextTypes: () => Ce((e) => [e.ElementsPanel.ElementsPanel]), + bindings: [{ shortcut: 'F2' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.duplicate-element', + category: r.ActionRegistration.ActionCategory.ELEMENTS, + title: Ee(he.duplicateElement), + loadActionDelegate: async () => + (await Te()).ElementsPanel.ElementsActionDelegate.instance(), + contextTypes: () => Ce((e) => [e.ElementsPanel.ElementsPanel]), + bindings: [{ shortcut: 'Shift+Alt+Down' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.copy-styles', + category: r.ActionRegistration.ActionCategory.ELEMENTS, + title: Ee(he.copyStyles), + loadActionDelegate: async () => + (await Te()).ElementsPanel.ElementsActionDelegate.instance(), + contextTypes: () => Ce((e) => [e.ElementsPanel.ElementsPanel]), + bindings: [ + { shortcut: 'Ctrl+Alt+C', platform: 'windows,linux' }, + { shortcut: 'Meta+Alt+C', platform: 'mac' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.undo', + category: r.ActionRegistration.ActionCategory.ELEMENTS, + title: Ee(he.undo), + loadActionDelegate: async () => + (await Te()).ElementsPanel.ElementsActionDelegate.instance(), + contextTypes: () => Ce((e) => [e.ElementsPanel.ElementsPanel]), + bindings: [ + { shortcut: 'Ctrl+Z', platform: 'windows,linux' }, + { shortcut: 'Meta+Z', platform: 'mac' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.redo', + category: r.ActionRegistration.ActionCategory.ELEMENTS, + title: Ee(he.redo), + loadActionDelegate: async () => + (await Te()).ElementsPanel.ElementsActionDelegate.instance(), + contextTypes: () => Ce((e) => [e.ElementsPanel.ElementsPanel]), + bindings: [ + { shortcut: 'Ctrl+Y', platform: 'windows,linux' }, + { shortcut: 'Meta+Shift+Z', platform: 'mac' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'elements.capture-area-screenshot', + loadActionDelegate: async () => + ( + await Te() + ).InspectElementModeController.ToggleSearchActionDelegate.instance(), + condition: e.Runtime.ConditionName.CAN_DOCK, + title: Ee(he.captureAreaScreenshot), + category: r.ActionRegistration.ActionCategory.SCREENSHOT, + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.ELEMENTS, + actionId: 'elements.toggle-element-search', + toggleable: !0, + loadActionDelegate: async () => + ( + await Te() + ).InspectElementModeController.ToggleSearchActionDelegate.instance(), + title: Ee(he.selectAnElementInThePageTo), + iconClass: 'largeicon-node-search', + bindings: [ + { shortcut: 'Ctrl+Shift+C', platform: 'windows,linux' }, + { shortcut: 'Meta+Shift+C', platform: 'mac' }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ELEMENTS, + storageType: t.Settings.SettingStorageType.Synced, + order: 1, + title: Ee(he.showUserAgentShadowDOM), + settingName: 'showUAShadowDOM', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ELEMENTS, + storageType: t.Settings.SettingStorageType.Synced, + order: 2, + title: Ee(he.wordWrap), + settingName: 'domWordWrap', + settingType: t.Settings.SettingType.BOOLEAN, + options: [ + { value: !0, title: Ee(he.enableDomWordWrap) }, + { value: !1, title: Ee(he.disableDomWordWrap) }, + ], + defaultValue: !0, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ELEMENTS, + storageType: t.Settings.SettingStorageType.Synced, + order: 3, + title: Ee(he.showHtmlComments), + settingName: 'showHTMLComments', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: Ee(he.showHtmlComments) }, + { value: !1, title: Ee(he.hideHtmlComments) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ELEMENTS, + storageType: t.Settings.SettingStorageType.Synced, + order: 4, + title: Ee(he.revealDomNodeOnHover), + settingName: 'highlightNodeOnHoverInOverlay', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ELEMENTS, + storageType: t.Settings.SettingStorageType.Synced, + order: 5, + title: Ee(he.showDetailedInspectTooltip), + settingName: 'showDetailedInspectTooltip', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + }), + t.Settings.registerSettingExtension({ + settingName: 'showEventListenersForAncestors', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.ADORNER, + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'adornerSettings', + settingType: t.Settings.SettingType.ARRAY, + defaultValue: [], + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [ + o.RemoteObject.RemoteObject, + o.DOMModel.DOMNode, + o.DOMModel.DeferredDOMNode, + ], + loadProvider: async () => + (await Te()).ElementsPanel.ContextMenuProvider.instance(), + experiment: void 0, + }), + r.ViewManager.registerLocationResolver({ + name: 'elements-sidebar', + category: r.ViewManager.ViewLocationCategoryValues.ELEMENTS, + loadResolver: async () => + (await Te()).ElementsPanel.ElementsPanel.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [ + o.DOMModel.DOMNode, + o.DOMModel.DeferredDOMNode, + o.RemoteObject.RemoteObject, + ], + destination: t.Revealer.RevealerDestination.ELEMENTS_PANEL, + loadRevealer: async () => + (await Te()).ElementsPanel.DOMNodeRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.CSSProperty.CSSProperty], + destination: t.Revealer.RevealerDestination.STYLES_SIDEBAR, + loadRevealer: async () => + (await Te()).ElementsPanel.CSSPropertyRevealer.instance(), + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => + (await Te()).ElementStatePaneWidget.ButtonProvider.instance(), + order: 1, + location: r.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => + (await Te()).ClassesPaneWidget.ButtonProvider.instance(), + order: 2, + location: r.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => + (await Te()).StylesSidebarPane.ButtonProvider.instance(), + order: 100, + location: r.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }), + r.Toolbar.registerToolbarItem({ + actionId: 'elements.toggle-element-search', + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT, + order: 0, + showLabel: void 0, + condition: void 0, + separator: void 0, + loadItem: void 0, + }), + r.UIUtils.registerRenderer({ + contextTypes: () => [o.DOMModel.DOMNode, o.DOMModel.DeferredDOMNode], + loadRenderer: async () => + (await Te()).ElementsTreeOutline.Renderer.instance(), + }), + t.Linkifier.registerLinkifier({ + contextTypes: () => [o.DOMModel.DOMNode, o.DOMModel.DeferredDOMNode], + loadLinkifier: async () => (await Te()).DOMLinkifier.Linkifier.instance(), + }) +const be = { + showEventListenerBreakpoints: 'Show Event Listener Breakpoints', + eventListenerBreakpoints: 'Event Listener Breakpoints', + showCspViolationBreakpoints: 'Show CSP Violation Breakpoints', + cspViolationBreakpoints: 'CSP Violation Breakpoints', + showXhrfetchBreakpoints: 'Show XHR/fetch Breakpoints', + xhrfetchBreakpoints: 'XHR/fetch Breakpoints', + showDomBreakpoints: 'Show DOM Breakpoints', + domBreakpoints: 'DOM Breakpoints', + showGlobalListeners: 'Show Global Listeners', + globalListeners: 'Global Listeners', + page: 'Page', + showPage: 'Show Page', + overrides: 'Overrides', + showOverrides: 'Show Overrides', + contentScripts: 'Content scripts', + showContentScripts: 'Show Content scripts', + }, + Re = i.i18n.registerUIStrings( + 'panels/browser_debugger/browser_debugger-meta.ts', + be + ), + Ne = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Re) +let xe, fe +async function De() { + return ( + xe || + (xe = await import('../../panels/browser_debugger/browser_debugger.js')), + xe + ) +} +async function Le() { + return fe || (fe = await import('../../panels/sources/sources.js')), fe +} +r.ViewManager.registerViewExtension({ + loadView: async () => + ( + await De() + ).EventListenerBreakpointsSidebarPane.EventListenerBreakpointsSidebarPane.instance(), + id: 'sources.eventListenerBreakpoints', + location: 'sources.sidebar-bottom', + commandPrompt: Ne(be.showEventListenerBreakpoints), + title: Ne(be.eventListenerBreakpoints), + order: 9, + persistence: 'permanent', +}), + r.ViewManager.registerViewExtension({ + loadView: async () => + ( + await De() + ).CSPViolationBreakpointsSidebarPane.CSPViolationBreakpointsSidebarPane.instance(), + id: 'sources.cspViolationBreakpoints', + location: 'sources.sidebar-bottom', + commandPrompt: Ne(be.showCspViolationBreakpoints), + title: Ne(be.cspViolationBreakpoints), + order: 10, + persistence: 'permanent', + }), + r.ViewManager.registerViewExtension({ + loadView: async () => + ( + await De() + ).XHRBreakpointsSidebarPane.XHRBreakpointsSidebarPane.instance(), + id: 'sources.xhrBreakpoints', + location: 'sources.sidebar-bottom', + commandPrompt: Ne(be.showXhrfetchBreakpoints), + title: Ne(be.xhrfetchBreakpoints), + order: 5, + persistence: 'permanent', + hasToolbar: !0, + }), + r.ViewManager.registerViewExtension({ + loadView: async () => + ( + await De() + ).DOMBreakpointsSidebarPane.DOMBreakpointsSidebarPane.instance(), + id: 'sources.domBreakpoints', + location: 'sources.sidebar-bottom', + commandPrompt: Ne(be.showDomBreakpoints), + title: Ne(be.domBreakpoints), + order: 7, + persistence: 'permanent', + }), + r.ViewManager.registerViewExtension({ + loadView: async () => + ( + await De() + ).ObjectEventListenersSidebarPane.ObjectEventListenersSidebarPane.instance(), + id: 'sources.globalListeners', + location: 'sources.sidebar-bottom', + commandPrompt: Ne(be.showGlobalListeners), + title: Ne(be.globalListeners), + order: 8, + persistence: 'permanent', + hasToolbar: !0, + }), + r.ViewManager.registerViewExtension({ + loadView: async () => + ( + await De() + ).DOMBreakpointsSidebarPane.DOMBreakpointsSidebarPane.instance(), + id: 'elements.domBreakpoints', + location: 'elements-sidebar', + commandPrompt: Ne(be.showDomBreakpoints), + title: Ne(be.domBreakpoints), + order: 6, + persistence: 'permanent', + }), + r.ViewManager.registerViewExtension({ + location: 'navigator-view', + id: 'navigator-network', + title: Ne(be.page), + commandPrompt: Ne(be.showPage), + order: 2, + persistence: 'permanent', + loadView: async () => + (await Le()).SourcesNavigator.NetworkNavigatorView.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'navigator-view', + id: 'navigator-overrides', + title: Ne(be.overrides), + commandPrompt: Ne(be.showOverrides), + order: 4, + persistence: 'permanent', + loadView: async () => + (await Le()).SourcesNavigator.OverridesNavigatorView.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'navigator-view', + id: 'navigator-contentScripts', + title: Ne(be.contentScripts), + commandPrompt: Ne(be.showContentScripts), + order: 5, + persistence: 'permanent', + loadView: async () => + (await Le()).SourcesNavigator.ContentScriptsNavigatorView.instance(), + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [o.DOMModel.DOMNode], + loadProvider: async () => + (await De()).DOMBreakpointsSidebarPane.ContextMenuProvider.instance(), + experiment: void 0, + }), + r.Context.registerListener({ + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + loadListener: async () => + ( + await De() + ).XHRBreakpointsSidebarPane.XHRBreakpointsSidebarPane.instance(), + }), + r.Context.registerListener({ + contextTypes: () => [o.DebuggerModel.DebuggerPausedDetails], + loadListener: async () => + ( + await De() + ).DOMBreakpointsSidebarPane.DOMBreakpointsSidebarPane.instance(), + }) +const Pe = { + showNetwork: 'Show Network', + network: 'Network', + showNetworkRequestBlocking: 'Show Network request blocking', + networkRequestBlocking: 'Network request blocking', + showNetworkConditions: 'Show Network conditions', + networkConditions: 'Network conditions', + diskCache: 'disk cache', + networkThrottling: 'network throttling', + showSearch: 'Show Search', + search: 'Search', + recordNetworkLog: 'Record network log', + stopRecordingNetworkLog: 'Stop recording network log', + hideRequestDetails: 'Hide request details', + colorcodeResourceTypes: 'Color-code resource types', + colorCode: 'color code', + resourceType: 'resource type', + colorCodeByResourceType: 'Color code by resource type', + useDefaultColors: 'Use default colors', + groupNetworkLogByFrame: 'Group network log by frame', + netWork: 'network', + frame: 'frame', + group: 'group', + groupNetworkLogItemsByFrame: 'Group network log items by frame', + dontGroupNetworkLogItemsByFrame: "Don't group network log items by frame", + }, + Ie = i.i18n.registerUIStrings('panels/network/network-meta.ts', Pe), + ke = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Ie) +let Oe +async function Me() { + return Oe || (Oe = await import('../../panels/network/network.js')), Oe +} +function Ve(e) { + return void 0 === Oe ? [] : e(Oe) +} +r.ViewManager.registerViewExtension({ + location: 'panel', + id: 'network', + commandPrompt: ke(Pe.showNetwork), + title: ke(Pe.network), + order: 40, + loadView: async () => (await Me()).NetworkPanel.NetworkPanel.instance(), +}), + globalThis.chii || + (r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'network.blocked-urls', + commandPrompt: ke(Pe.showNetworkRequestBlocking), + title: ke(Pe.networkRequestBlocking), + persistence: 'closeable', + order: 60, + loadView: async () => + (await Me()).BlockedURLsPane.BlockedURLsPane.instance(), + }), + r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'network.config', + commandPrompt: ke(Pe.showNetworkConditions), + title: ke(Pe.networkConditions), + persistence: 'closeable', + order: 40, + tags: [ + ke(Pe.diskCache), + ke(Pe.networkThrottling), + i.i18n.lockedLazyString('useragent'), + i.i18n.lockedLazyString('user agent'), + i.i18n.lockedLazyString('user-agent'), + ], + loadView: async () => + (await Me()).NetworkConfigView.NetworkConfigView.instance(), + })), + r.ViewManager.registerViewExtension({ + location: 'network-sidebar', + id: 'network.search-network-tab', + commandPrompt: ke(Pe.showSearch), + title: ke(Pe.search), + persistence: 'permanent', + loadView: async () => + (await Me()).NetworkPanel.SearchNetworkView.instance(), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'network.toggle-recording', + category: r.ActionRegistration.ActionCategory.NETWORK, + iconClass: 'largeicon-start-recording', + toggleable: !0, + toggledIconClass: 'largeicon-stop-recording', + toggleWithRedColor: !0, + contextTypes: () => Ve((e) => [e.NetworkPanel.NetworkPanel]), + loadActionDelegate: async () => + (await Me()).NetworkPanel.ActionDelegate.instance(), + options: [ + { value: !0, title: ke(Pe.recordNetworkLog) }, + { value: !1, title: ke(Pe.stopRecordingNetworkLog) }, + ], + bindings: [ + { shortcut: 'Ctrl+E', platform: 'windows,linux' }, + { shortcut: 'Meta+E', platform: 'mac' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'network.hide-request-details', + category: r.ActionRegistration.ActionCategory.NETWORK, + title: ke(Pe.hideRequestDetails), + contextTypes: () => Ve((e) => [e.NetworkPanel.NetworkPanel]), + loadActionDelegate: async () => + (await Me()).NetworkPanel.ActionDelegate.instance(), + bindings: [{ shortcut: 'Esc' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'network.search', + category: r.ActionRegistration.ActionCategory.NETWORK, + title: ke(Pe.search), + contextTypes: () => Ve((e) => [e.NetworkPanel.NetworkPanel]), + loadActionDelegate: async () => + (await Me()).NetworkPanel.ActionDelegate.instance(), + bindings: [ + { + platform: 'mac', + shortcut: 'Meta+F', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + { + platform: 'windows,linux', + shortcut: 'Ctrl+F', + keybindSets: ['devToolsDefault', 'vsCode'], + }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + storageType: t.Settings.SettingStorageType.Synced, + title: ke(Pe.colorcodeResourceTypes), + settingName: 'networkColorCodeResourceTypes', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + tags: [ke(Pe.colorCode), ke(Pe.resourceType)], + options: [ + { value: !0, title: ke(Pe.colorCodeByResourceType) }, + { value: !1, title: ke(Pe.useDefaultColors) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + storageType: t.Settings.SettingStorageType.Synced, + title: ke(Pe.groupNetworkLogByFrame), + settingName: 'network.group-by-frame', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + tags: [ke(Pe.netWork), ke(Pe.frame), ke(Pe.group)], + options: [ + { value: !0, title: ke(Pe.groupNetworkLogItemsByFrame) }, + { value: !1, title: ke(Pe.dontGroupNetworkLogItemsByFrame) }, + ], + }), + r.ViewManager.registerLocationResolver({ + name: 'network-sidebar', + category: r.ViewManager.ViewLocationCategoryValues.NETWORK, + loadResolver: async () => (await Me()).NetworkPanel.NetworkPanel.instance(), + }), + r.ContextMenu.registerProvider({ + contextTypes: () => [ + o.NetworkRequest.NetworkRequest, + o.Resource.Resource, + n.UISourceCode.UISourceCode, + ], + loadProvider: async () => + (await Me()).NetworkPanel.ContextMenuProvider.instance(), + experiment: void 0, + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.NetworkRequest.NetworkRequest], + destination: t.Revealer.RevealerDestination.NETWORK_PANEL, + loadRevealer: async () => + (await Me()).NetworkPanel.RequestRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [c.UIRequestLocation.UIRequestLocation], + loadRevealer: async () => + (await Me()).NetworkPanel.RequestLocationRevealer.instance(), + destination: void 0, + }), + t.Revealer.registerRevealer({ + contextTypes: () => [c.NetworkRequestId.NetworkRequestId], + destination: t.Revealer.RevealerDestination.NETWORK_PANEL, + loadRevealer: async () => + (await Me()).NetworkPanel.RequestIdRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [c.UIFilter.UIRequestFilter], + destination: t.Revealer.RevealerDestination.NETWORK_PANEL, + loadRevealer: async () => + (await Me()).NetworkPanel.NetworkLogWithFilterRevealer.instance(), + }) +const Be = { + toggleDeviceToolbar: 'Toggle device toolbar', + captureScreenshot: 'Capture screenshot', + captureFullSizeScreenshot: 'Capture full size screenshot', + captureNodeScreenshot: 'Capture node screenshot', + showMediaQueries: 'Show media queries', + device: 'device', + hideMediaQueries: 'Hide media queries', + showRulers: 'Show rulers in the Device Mode toolbar', + hideRulers: 'Hide rulers in the Device Mode toolbar', + showDeviceFrame: 'Show device frame', + hideDeviceFrame: 'Hide device frame', + }, + Fe = i.i18n.registerUIStrings('panels/emulation/emulation-meta.ts', Be), + Ue = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Fe) +let _e +async function Ge() { + return _e || (_e = await import('../../panels/emulation/emulation.js')), _e +} +r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.MOBILE, + actionId: 'emulation.toggle-device-mode', + toggleable: !0, + loadActionDelegate: async () => + (await Ge()).DeviceModeWrapper.ActionDelegate.instance(), + condition: e.Runtime.ConditionName.CAN_DOCK, + title: Ue(Be.toggleDeviceToolbar), + iconClass: 'largeicon-phone', + bindings: [ + { platform: 'windows,linux', shortcut: 'Shift+Ctrl+M' }, + { platform: 'mac', shortcut: 'Shift+Meta+M' }, + ], +}), + r.ActionRegistration.registerActionExtension({ + actionId: 'emulation.capture-screenshot', + category: r.ActionRegistration.ActionCategory.SCREENSHOT, + loadActionDelegate: async () => + (await Ge()).DeviceModeWrapper.ActionDelegate.instance(), + condition: e.Runtime.ConditionName.CAN_DOCK, + title: Ue(Be.captureScreenshot), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'emulation.capture-full-height-screenshot', + category: r.ActionRegistration.ActionCategory.SCREENSHOT, + loadActionDelegate: async () => + (await Ge()).DeviceModeWrapper.ActionDelegate.instance(), + condition: e.Runtime.ConditionName.CAN_DOCK, + title: Ue(Be.captureFullSizeScreenshot), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'emulation.capture-node-screenshot', + category: r.ActionRegistration.ActionCategory.SCREENSHOT, + loadActionDelegate: async () => + (await Ge()).DeviceModeWrapper.ActionDelegate.instance(), + condition: e.Runtime.ConditionName.CAN_DOCK, + title: Ue(Be.captureNodeScreenshot), + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.MOBILE, + settingName: 'showMediaQueryInspector', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: Ue(Be.showMediaQueries) }, + { value: !1, title: Ue(Be.hideMediaQueries) }, + ], + tags: [Ue(Be.device)], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.MOBILE, + settingName: 'emulation.showRulers', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: Ue(Be.showRulers) }, + { value: !1, title: Ue(Be.hideRulers) }, + ], + tags: [Ue(Be.device)], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.MOBILE, + settingName: 'emulation.showDeviceOutline', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + options: [ + { value: !0, title: Ue(Be.showDeviceFrame) }, + { value: !1, title: Ue(Be.hideDeviceFrame) }, + ], + tags: [Ue(Be.device)], + }), + r.Toolbar.registerToolbarItem({ + actionId: 'emulation.toggle-device-mode', + condition: e.Runtime.ConditionName.CAN_DOCK, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT, + order: 1, + showLabel: void 0, + loadItem: void 0, + separator: void 0, + }), + t.AppProvider.registerAppProvider({ + loadAppProvider: async () => + (await Ge()).AdvancedApp.AdvancedAppProvider.instance(), + condition: e.Runtime.ConditionName.CAN_DOCK, + order: 0, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE, + order: 12, + actionId: 'emulation.capture-screenshot', + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE, + order: 13, + actionId: 'emulation.capture-full-height-screenshot', + }) +const We = { + sensors: 'Sensors', + geolocation: 'geolocation', + timezones: 'timezones', + locale: 'locale', + locales: 'locales', + accelerometer: 'accelerometer', + deviceOrientation: 'device orientation', + locations: 'Locations', + touch: 'Touch', + devicebased: 'Device-based', + forceEnabled: 'Force enabled', + emulateIdleDetectorState: 'Emulate Idle Detector state', + noIdleEmulation: 'No idle emulation', + userActiveScreenUnlocked: 'User active, screen unlocked', + userActiveScreenLocked: 'User active, screen locked', + userIdleScreenUnlocked: 'User idle, screen unlocked', + userIdleScreenLocked: 'User idle, screen locked', + showSensors: 'Show Sensors', + showLocations: 'Show Locations', + }, + He = i.i18n.registerUIStrings('panels/sensors/sensors-meta.ts', We), + ze = i.i18n.getLazilyComputedLocalizedString.bind(void 0, He) +let qe, je +async function Ke() { + return qe || (qe = await import('../../panels/sensors/sensors.js')), qe +} +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + commandPrompt: ze(We.showSensors), + title: ze(We.sensors), + id: 'sensors', + persistence: 'closeable', + order: 100, + loadView: async () => (await Ke()).SensorsView.SensorsView.instance(), + tags: [ + ze(We.geolocation), + ze(We.timezones), + ze(We.locale), + ze(We.locales), + ze(We.accelerometer), + ze(We.deviceOrientation), + ], +}), + r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'emulation-locations', + commandPrompt: ze(We.showLocations), + title: ze(We.locations), + order: 40, + loadView: async () => + (await Ke()).LocationsSettingsTab.LocationsSettingsTab.instance(), + settings: ['emulation.locations'], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'emulation.show-sensors', + category: r.ActionRegistration.ActionCategory.SENSORS, + loadActionDelegate: async () => + (await Ke()).SensorsView.ShowActionDelegate.instance(), + title: ze(We.sensors), + }), + t.Settings.registerSettingExtension({ + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'emulation.locations', + settingType: t.Settings.SettingType.ARRAY, + defaultValue: [ + { + title: 'Berlin', + lat: 52.520007, + long: 13.404954, + timezoneId: 'Europe/Berlin', + locale: 'de-DE', + }, + { + title: 'London', + lat: 51.507351, + long: -0.127758, + timezoneId: 'Europe/London', + locale: 'en-GB', + }, + { + title: 'Moscow', + lat: 55.755826, + long: 37.6173, + timezoneId: 'Europe/Moscow', + locale: 'ru-RU', + }, + { + title: 'Mountain View', + lat: 37.386052, + long: -122.083851, + timezoneId: 'US/Pacific', + locale: 'en-US', + }, + { + title: 'Mumbai', + lat: 19.075984, + long: 72.877656, + timezoneId: 'Asia/Kolkata', + locale: 'mr-IN', + }, + { + title: 'San Francisco', + lat: 37.774929, + long: -122.419416, + timezoneId: 'US/Pacific', + locale: 'en-US', + }, + { + title: 'Shanghai', + lat: 31.230416, + long: 121.473701, + timezoneId: 'Asia/Shanghai', + locale: 'zh-Hans-CN', + }, + { + title: 'São Paulo', + lat: -23.55052, + long: -46.633309, + timezoneId: 'America/Sao_Paulo', + locale: 'pt-BR', + }, + { + title: 'Tokyo', + lat: 35.689487, + long: 139.691706, + timezoneId: 'Asia/Tokyo', + locale: 'ja-JP', + }, + ], + }), + t.Settings.registerSettingExtension({ + title: ze(We.touch), + reloadRequired: !0, + settingName: 'emulation.touch', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'none', + options: [ + { value: 'none', title: ze(We.devicebased), text: ze(We.devicebased) }, + { value: 'force', title: ze(We.forceEnabled), text: ze(We.forceEnabled) }, + ], + }), + t.Settings.registerSettingExtension({ + title: ze(We.emulateIdleDetectorState), + settingName: 'emulation.idleDetection', + settingType: t.Settings.SettingType.ENUM, + defaultValue: 'none', + options: [ + { + value: 'none', + title: ze(We.noIdleEmulation), + text: ze(We.noIdleEmulation), + }, + { + value: '{"isUserActive":true,"isScreenUnlocked":true}', + title: ze(We.userActiveScreenUnlocked), + text: ze(We.userActiveScreenUnlocked), + }, + { + value: '{"isUserActive":true,"isScreenUnlocked":false}', + title: ze(We.userActiveScreenLocked), + text: ze(We.userActiveScreenLocked), + }, + { + value: '{"isUserActive":false,"isScreenUnlocked":true}', + title: ze(We.userIdleScreenUnlocked), + text: ze(We.userIdleScreenUnlocked), + }, + { + value: '{"isUserActive":false,"isScreenUnlocked":false}', + title: ze(We.userIdleScreenLocked), + text: ze(We.userIdleScreenLocked), + }, + ], + }) +const Je = { + accessibility: 'Accessibility', + shoAccessibility: 'Show Accessibility', + }, + Ye = i.i18n.registerUIStrings( + 'panels/accessibility/accessibility-meta.ts', + Je + ), + Xe = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Ye) +r.ViewManager.registerViewExtension({ + location: 'elements-sidebar', + id: 'accessibility.view', + title: Xe(Je.accessibility), + commandPrompt: Xe(Je.shoAccessibility), + order: 10, + persistence: 'permanent', + loadView: async () => + ( + await (async function () { + return ( + je || + (je = await import('../../panels/accessibility/accessibility.js')), + je + ) + })() + ).AccessibilitySidebarView.AccessibilitySidebarView.instance(), +}) +const Qe = { + developerResources: 'Developer Resources', + showDeveloperResources: 'Show Developer Resources', + }, + Ze = i.i18n.registerUIStrings( + 'panels/developer_resources/developer_resources-meta.ts', + Qe + ), + $e = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Ze) +let et +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'resource-loading-pane', + title: $e(Qe.developerResources), + commandPrompt: $e(Qe.showDeveloperResources), + order: 100, + persistence: 'closeable', + experiment: e.Runtime.ExperimentName.DEVELOPER_RESOURCES_VIEW, + loadView: async () => + ( + await (async function () { + return ( + et || + (et = await import( + '../../panels/developer_resources/developer_resources.js' + )), + et + ) + })() + ).DeveloperResourcesView.DeveloperResourcesView.instance(), +}) +const tt = { + rendering: 'Rendering', + showRendering: 'Show Rendering', + paint: 'paint', + layout: 'layout', + fps: 'fps', + cssMediaType: 'CSS media type', + cssMediaFeature: 'CSS media feature', + visionDeficiency: 'vision deficiency', + colorVisionDeficiency: 'color vision deficiency', + reloadPage: 'Reload page', + hardReloadPage: 'Hard reload page', + forceAdBlocking: 'Force ad blocking on this site', + blockAds: 'Block ads on this site', + showAds: 'Show ads on this site, if allowed', + autoOpenDevTools: 'Auto-open DevTools for popups', + doNotAutoOpen: 'Do not auto-open DevTools for popups', + disablePaused: 'Disable paused state overlay', + }, + it = i.i18n.registerUIStrings( + 'entrypoints/inspector_main/inspector_main-meta.ts', + tt + ), + ot = i.i18n.getLazilyComputedLocalizedString.bind(void 0, it) +let nt +async function at() { + return nt || (nt = await import('../inspector_main/inspector_main.js')), nt +} +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'rendering', + title: ot(tt.rendering), + commandPrompt: ot(tt.showRendering), + persistence: 'closeable', + order: 50, + loadView: async () => + (await at()).RenderingOptions.RenderingOptionsView.instance(), + tags: [ + ot(tt.paint), + ot(tt.layout), + ot(tt.fps), + ot(tt.cssMediaType), + ot(tt.cssMediaFeature), + ot(tt.visionDeficiency), + ot(tt.colorVisionDeficiency), + ], +}), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.NAVIGATION, + actionId: 'inspector_main.reload', + loadActionDelegate: async () => + (await at()).InspectorMain.ReloadActionDelegate.instance(), + iconClass: 'largeicon-refresh', + title: ot(tt.reloadPage), + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+R' }, + { platform: 'windows,linux', shortcut: 'F5' }, + { platform: 'mac', shortcut: 'Meta+R' }, + ], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.NAVIGATION, + actionId: 'inspector_main.hard-reload', + loadActionDelegate: async () => + (await at()).InspectorMain.ReloadActionDelegate.instance(), + title: ot(tt.hardReloadPage), + bindings: [ + { platform: 'windows,linux', shortcut: 'Shift+Ctrl+R' }, + { platform: 'windows,linux', shortcut: 'Shift+F5' }, + { platform: 'windows,linux', shortcut: 'Ctrl+F5' }, + { platform: 'windows,linux', shortcut: 'Ctrl+Shift+F5' }, + { platform: 'mac', shortcut: 'Shift+Meta+R' }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.NETWORK, + title: ot(tt.forceAdBlocking), + settingName: 'network.adBlockingEnabled', + settingType: t.Settings.SettingType.BOOLEAN, + storageType: t.Settings.SettingStorageType.Session, + defaultValue: !1, + options: [ + { value: !0, title: ot(tt.blockAds) }, + { value: !1, title: ot(tt.showAds) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.GLOBAL, + storageType: t.Settings.SettingStorageType.Synced, + title: ot(tt.autoOpenDevTools), + settingName: 'autoAttachToCreatedPages', + settingType: t.Settings.SettingType.BOOLEAN, + order: 2, + defaultValue: !1, + options: [ + { value: !0, title: ot(tt.autoOpenDevTools) }, + { value: !1, title: ot(tt.doNotAutoOpen) }, + ], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: ot(tt.disablePaused), + settingName: 'disablePausedStateOverlay', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !1, + }), + r.Toolbar.registerToolbarItem({ + loadItem: async () => (await at()).InspectorMain.NodeIndicator.instance(), + order: 2, + location: r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT, + showLabel: void 0, + condition: void 0, + separator: void 0, + actionId: void 0, + }) +const st = { + application: 'Application', + showApplication: 'Show Application', + pwa: 'pwa', + clearSiteData: 'Clear site data', + clearSiteDataIncludingThirdparty: + 'Clear site data (including third-party cookies)', + startRecordingEvents: 'Start recording events', + stopRecordingEvents: 'Stop recording events', + }, + rt = i.i18n.registerUIStrings('panels/application/application-meta.ts', st), + lt = i.i18n.getLazilyComputedLocalizedString.bind(void 0, rt) +let ct +async function gt() { + return ( + ct || (ct = await import('../../panels/application/application.js')), ct + ) +} +r.ViewManager.registerViewExtension({ + location: 'panel', + id: 'resources', + title: lt(st.application), + commandPrompt: lt(st.showApplication), + order: 70, + loadView: async () => (await gt()).ResourcesPanel.ResourcesPanel.instance(), + tags: [lt(st.pwa)], +}), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.RESOURCES, + actionId: 'resources.clear', + title: lt(st.clearSiteData), + loadActionDelegate: async () => + (await gt()).StorageView.ActionDelegate.instance(), + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.RESOURCES, + actionId: 'resources.clear-incl-third-party-cookies', + title: lt(st.clearSiteDataIncludingThirdparty), + loadActionDelegate: async () => + (await gt()).StorageView.ActionDelegate.instance(), + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'background-service.toggle-recording', + iconClass: 'largeicon-start-recording', + toggleable: !0, + toggledIconClass: 'largeicon-stop-recording', + toggleWithRedColor: !0, + contextTypes: () => + void 0 === ct + ? [] + : ((e) => [e.BackgroundServiceView.BackgroundServiceView])(ct), + loadActionDelegate: async () => + (await gt()).BackgroundServiceView.ActionDelegate.instance(), + category: r.ActionRegistration.ActionCategory.BACKGROUND_SERVICES, + options: [ + { value: !0, title: lt(st.startRecordingEvents) }, + { value: !1, title: lt(st.stopRecordingEvents) }, + ], + bindings: [ + { platform: 'windows,linux', shortcut: 'Ctrl+E' }, + { platform: 'mac', shortcut: 'Meta+E' }, + ], + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.Resource.Resource], + destination: t.Revealer.RevealerDestination.APPLICATION_PANEL, + loadRevealer: async () => + (await gt()).ResourcesPanel.ResourceRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.Cookie.CookieReference], + destination: t.Revealer.RevealerDestination.APPLICATION_PANEL, + loadRevealer: async () => + (await gt()).ResourcesPanel.CookieReferenceRevealer.instance(), + }), + t.Revealer.registerRevealer({ + contextTypes: () => [o.ResourceTreeModel.ResourceTreeFrame], + destination: t.Revealer.RevealerDestination.APPLICATION_PANEL, + loadRevealer: async () => + (await gt()).ResourcesPanel.FrameDetailsRevealer.instance(), + }) +const dt = { + issues: 'Issues', + showIssues: 'Show Issues', + cspViolations: 'CSP Violations', + showCspViolations: 'Show CSP Violations', + }, + ut = i.i18n.registerUIStrings('panels/issues/issues-meta.ts', dt), + pt = i.i18n.getLazilyComputedLocalizedString.bind(void 0, ut) +let St +async function mt() { + return St || (St = await import('../../panels/issues/issues.js')), St +} +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'issues-pane', + title: pt(dt.issues), + commandPrompt: pt(dt.showIssues), + order: 100, + persistence: 'closeable', + loadView: async () => (await mt()).IssuesPane.IssuesPane.instance(), +}), + r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'csp-violations-pane', + title: pt(dt.cspViolations), + commandPrompt: pt(dt.showCspViolations), + order: 100, + persistence: 'closeable', + loadView: async () => + (await mt()).CSPViolationsView.CSPViolationsView.instance(), + experiment: e.Runtime.ExperimentName.CSP_VIOLATIONS_VIEW, + }), + t.Revealer.registerRevealer({ + contextTypes: () => [g.Issue.Issue], + destination: t.Revealer.RevealerDestination.ISSUES_VIEW, + loadRevealer: async () => + (await mt()).IssueRevealer.IssueRevealer.instance(), + }) +const yt = { + whatsNew: "What's New", + showWhatsNew: "Show What's New", + releaseNotes: 'Release notes', + reportADevtoolsIssue: 'Report a DevTools issue', + reportTranslationIssue: 'Report a translation issue', + bug: 'bug', + showWhatsNewAfterEachUpdate: "Show What's New after each update", + doNotShowWhatsNewAfterEachUpdate: + "Do not show What's New after each update", + }, + wt = i.i18n.registerUIStrings('panels/help/help-meta.ts', yt), + ht = i.i18n.getLazilyComputedLocalizedString.bind(void 0, wt) +let At +async function Et() { + return At || (At = await import('../../panels/help/help.js')), At +} +r.ViewManager.registerViewExtension({ + location: 'drawer-view', + id: 'release-note', + title: ht(yt.whatsNew), + commandPrompt: ht(yt.showWhatsNew), + persistence: 'closeable', + order: 1, + loadView: async () => (await Et()).ReleaseNoteView.ReleaseNoteView.instance(), +}), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.HELP, + actionId: 'help.release-notes', + title: ht(yt.releaseNotes), + loadActionDelegate: async () => + (await Et()).Help.ReleaseNotesActionDelegate.instance(), + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.HELP, + actionId: 'help.report-issue', + title: ht(yt.reportADevtoolsIssue), + loadActionDelegate: async () => + (await Et()).Help.ReportIssueActionDelegate.instance(), + tags: [ht(yt.bug)], + }), + r.ActionRegistration.registerActionExtension({ + category: r.ActionRegistration.ActionCategory.HELP, + actionId: 'help.report-translation-issue', + title: ht(yt.reportTranslationIssue), + loadActionDelegate: async () => + (await Et()).Help.ReportTranslationIssueActionDelegate.instance(), + tags: [ht(yt.bug)], + }), + t.Settings.registerSettingExtension({ + category: t.Settings.SettingCategory.APPEARANCE, + storageType: t.Settings.SettingStorageType.Synced, + title: ht(yt.showWhatsNewAfterEachUpdate), + settingName: 'help.show-release-note', + settingType: t.Settings.SettingType.BOOLEAN, + defaultValue: !0, + options: [ + { value: !0, title: ht(yt.showWhatsNewAfterEachUpdate) }, + { value: !1, title: ht(yt.doNotShowWhatsNewAfterEachUpdate) }, + ], + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT, + actionId: 'help.release-notes', + order: 10, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT, + actionId: 'help.report-issue', + order: 11, + }), + r.ContextMenu.registerItem({ + location: r.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT, + actionId: 'help.report-translation-issue', + order: 12, + }), + t.Runnable.registerLateInitializationRunnable({ + id: 'whats-new', + loadRunnable: async () => + (await Et()).Help.HelpLateInitialization.instance(), + }) +const vt = { + throttling: 'Throttling', + showThrottling: 'Show Throttling', + goOffline: 'Go offline', + device: 'device', + throttlingTag: 'throttling', + enableSlowGThrottling: 'Enable slow `3G` throttling', + enableFastGThrottling: 'Enable fast `3G` throttling', + goOnline: 'Go online', + }, + Tt = i.i18n.registerUIStrings( + 'panels/mobile_throttling/mobile_throttling-meta.ts', + vt + ), + Ct = i.i18n.getLazilyComputedLocalizedString.bind(void 0, Tt) +let bt +async function Rt() { + return ( + bt || + (bt = await import( + '../../panels/mobile_throttling/mobile_throttling.js' + )), + bt + ) +} +r.ViewManager.registerViewExtension({ + location: 'settings-view', + id: 'throttling-conditions', + title: Ct(vt.throttling), + commandPrompt: Ct(vt.showThrottling), + order: 35, + loadView: async () => + (await Rt()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(), + settings: ['customNetworkConditions'], +}), + r.ActionRegistration.registerActionExtension({ + actionId: 'network-conditions.network-offline', + category: r.ActionRegistration.ActionCategory.NETWORK, + title: Ct(vt.goOffline), + loadActionDelegate: async () => + (await Rt()).ThrottlingManager.ActionDelegate.instance(), + tags: [Ct(vt.device), Ct(vt.throttlingTag)], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'network-conditions.network-low-end-mobile', + category: r.ActionRegistration.ActionCategory.NETWORK, + title: Ct(vt.enableSlowGThrottling), + loadActionDelegate: async () => + (await Rt()).ThrottlingManager.ActionDelegate.instance(), + tags: [Ct(vt.device), Ct(vt.throttlingTag)], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'network-conditions.network-mid-tier-mobile', + category: r.ActionRegistration.ActionCategory.NETWORK, + title: Ct(vt.enableFastGThrottling), + loadActionDelegate: async () => + (await Rt()).ThrottlingManager.ActionDelegate.instance(), + tags: [Ct(vt.device), Ct(vt.throttlingTag)], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'network-conditions.network-online', + category: r.ActionRegistration.ActionCategory.NETWORK, + title: Ct(vt.goOnline), + loadActionDelegate: async () => + (await Rt()).ThrottlingManager.ActionDelegate.instance(), + tags: [Ct(vt.device), Ct(vt.throttlingTag)], + }), + t.Settings.registerSettingExtension({ + storageType: t.Settings.SettingStorageType.Synced, + settingName: 'customNetworkConditions', + settingType: t.Settings.SettingType.ARRAY, + defaultValue: [], + }) +const Nt = { + resetView: 'Reset view', + switchToPanMode: 'Switch to pan mode', + switchToRotateMode: 'Switch to rotate mode', + zoomIn: 'Zoom in', + zoomOut: 'Zoom out', + panOrRotateUp: 'Pan or rotate up', + panOrRotateDown: 'Pan or rotate down', + panOrRotateLeft: 'Pan or rotate left', + panOrRotateRight: 'Pan or rotate right', + }, + xt = i.i18n.registerUIStrings('panels/layer_viewer/layer_viewer-meta.ts', Nt), + ft = i.i18n.getLazilyComputedLocalizedString.bind(void 0, xt) +r.ActionRegistration.registerActionExtension({ + actionId: 'layers.reset-view', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.resetView), + bindings: [{ shortcut: '0' }], +}), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.pan-mode', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.switchToPanMode), + bindings: [{ shortcut: 'x' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.rotate-mode', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.switchToRotateMode), + bindings: [{ shortcut: 'v' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.zoom-in', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.zoomIn), + bindings: [{ shortcut: 'Shift+Plus' }, { shortcut: 'NumpadPlus' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.zoom-out', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.zoomOut), + bindings: [{ shortcut: 'Shift+Minus' }, { shortcut: 'NumpadMinus' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.up', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.panOrRotateUp), + bindings: [{ shortcut: 'Up' }, { shortcut: 'w' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.down', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.panOrRotateDown), + bindings: [{ shortcut: 'Down' }, { shortcut: 's' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.left', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.panOrRotateLeft), + bindings: [{ shortcut: 'Left' }, { shortcut: 'a' }], + }), + r.ActionRegistration.registerActionExtension({ + actionId: 'layers.right', + category: r.ActionRegistration.ActionCategory.LAYERS, + title: ft(Nt.panOrRotateRight), + bindings: [{ shortcut: 'Right' }, { shortcut: 'd' }], + }) diff --git a/chii/entrypoints/chii_app/chii_app.js b/chii/entrypoints/chii_app/chii_app.js new file mode 100644 index 00000000..c6f7d997 --- /dev/null +++ b/chii/entrypoints/chii_app/chii_app.js @@ -0,0 +1 @@ +Root.allDescriptors.push(...[]);Root.applicationDescriptor={"modules":[]};import*as RootModule from'../../core/root/root.js';import'./main.js';import'./chii_app-meta-files.js';import*as Main from'../main/main.js';import*as Startup from'../startup/startup.js';import'../../panels/screencast/screencast-meta.js';new Main.MainImpl.MainImpl();Startup.RuntimeInstantiator.startApplication('devtools_app'); \ No newline at end of file diff --git a/chii/entrypoints/chii_app/main.js b/chii/entrypoints/chii_app/main.js new file mode 100644 index 00000000..880786ab --- /dev/null +++ b/chii/entrypoints/chii_app/main.js @@ -0,0 +1 @@ +globalThis.chii=!0; diff --git a/chii/entrypoints/device_mode_emulation_frame/device_mode_emulation_frame.js b/chii/entrypoints/device_mode_emulation_frame/device_mode_emulation_frame.js new file mode 100644 index 00000000..7a20460f --- /dev/null +++ b/chii/entrypoints/device_mode_emulation_frame/device_mode_emulation_frame.js @@ -0,0 +1 @@ +import"../../core/dom_extension/dom_extension.js";import"../../Images/Images.js";import*as o from"../../core/platform/platform.js";o.runOnWindowLoad((()=>{if(!window.opener)return;window.opener.Emulation.AdvancedApp.instance().deviceModeEmulationFrameLoaded(document)})); diff --git a/chii/entrypoints/devtools_app/devtools_app-meta-files.js b/chii/entrypoints/devtools_app/devtools_app-meta-files.js new file mode 100644 index 00000000..721b7633 --- /dev/null +++ b/chii/entrypoints/devtools_app/devtools_app-meta-files.js @@ -0,0 +1 @@ +import*as e from"../../core/i18n/i18n.js";import*as t from"../../ui/legacy/legacy.js";import*as i from"../../core/common/common.js";import*as o from"../../core/root/root.js";import*as n from"../../core/sdk/sdk.js";import*as a from"../../models/workspace/workspace.js";import*as r from"../../panels/network/forward/forward.js";import*as s from"../../models/issues_manager/issues_manager.js";const l={cssOverview:"CSS Overview",showCssOverview:"Show CSS Overview"},c=e.i18n.registerUIStrings("panels/css_overview/css_overview-meta.ts",l),g=e.i18n.getLazilyComputedLocalizedString.bind(void 0,c);let d;t.ViewManager.registerViewExtension({location:"panel",id:"cssoverview",commandPrompt:g(l.showCssOverview),title:g(l.cssOverview),order:95,persistence:"closeable",loadView:async()=>(await async function(){return d||(d=await import("../../panels/css_overview/css_overview.js")),d}()).CSSOverviewPanel.CSSOverviewPanel.instance(),isPreviewFeature:!0});const p={showElements:"Show Elements",elements:"Elements",showEventListeners:"Show Event Listeners",eventListeners:"Event Listeners",showProperties:"Show Properties",properties:"Properties",showStackTrace:"Show Stack Trace",stackTrace:"Stack Trace",showLayout:"Show Layout",layout:"Layout",hideElement:"Hide element",editAsHtml:"Edit as HTML",duplicateElement:"Duplicate element",undo:"Undo",redo:"Redo",captureAreaScreenshot:"Capture area screenshot",selectAnElementInThePageTo:"Select an element in the page to inspect it",wordWrap:"Word wrap",enableDomWordWrap:"Enable `DOM` word wrap",disableDomWordWrap:"Disable `DOM` word wrap",showHtmlComments:"Show `HTML` comments",hideHtmlComments:"Hide `HTML` comments",revealDomNodeOnHover:"Reveal `DOM` node on hover",showDetailedInspectTooltip:"Show detailed inspect tooltip",copyStyles:"Copy styles",showUserAgentShadowDOM:"Show user agent shadow `DOM`"},m=e.i18n.registerUIStrings("panels/elements/elements-meta.ts",p),w=e.i18n.getLazilyComputedLocalizedString.bind(void 0,m);let u;async function y(){return u||(u=await import("../../panels/elements/elements.js")),u}function S(e){return void 0===u?[]:e(u)}t.ViewManager.registerViewExtension({location:"panel",id:"elements",commandPrompt:w(p.showElements),title:w(p.elements),order:10,persistence:"permanent",hasToolbar:!1,loadView:async()=>(await y()).ElementsPanel.ElementsPanel.instance()}),t.ViewManager.registerViewExtension({location:"elements-sidebar",id:"elements.eventListeners",commandPrompt:w(p.showEventListeners),title:w(p.eventListeners),order:5,hasToolbar:!0,persistence:"permanent",loadView:async()=>(await y()).EventListenersWidget.EventListenersWidget.instance()}),t.ViewManager.registerViewExtension({location:"elements-sidebar",id:"elements.domProperties",commandPrompt:w(p.showProperties),title:w(p.properties),order:7,persistence:"permanent",loadView:async()=>(await y()).PropertiesWidget.PropertiesWidget.instance()}),t.ViewManager.registerViewExtension({experiment:o.Runtime.ExperimentName.CAPTURE_NODE_CREATION_STACKS,location:"elements-sidebar",id:"elements.domCreation",commandPrompt:w(p.showStackTrace),title:w(p.stackTrace),order:10,persistence:"permanent",loadView:async()=>(await y()).NodeStackTraceWidget.NodeStackTraceWidget.instance()}),t.ViewManager.registerViewExtension({location:"elements-sidebar",id:"elements.layout",commandPrompt:w(p.showLayout),title:w(p.layout),order:4,persistence:"permanent",loadView:async()=>(await y()).LayoutSidebarPane.LayoutSidebarPane.instance()}),t.ActionRegistration.registerActionExtension({actionId:"elements.hide-element",category:t.ActionRegistration.ActionCategory.ELEMENTS,title:w(p.hideElement),loadActionDelegate:async()=>(await y()).ElementsPanel.ElementsActionDelegate.instance(),contextTypes:()=>S((e=>[e.ElementsPanel.ElementsPanel])),bindings:[{shortcut:"H"}]}),t.ActionRegistration.registerActionExtension({actionId:"elements.edit-as-html",category:t.ActionRegistration.ActionCategory.ELEMENTS,title:w(p.editAsHtml),loadActionDelegate:async()=>(await y()).ElementsPanel.ElementsActionDelegate.instance(),contextTypes:()=>S((e=>[e.ElementsPanel.ElementsPanel])),bindings:[{shortcut:"F2"}]}),t.ActionRegistration.registerActionExtension({actionId:"elements.duplicate-element",category:t.ActionRegistration.ActionCategory.ELEMENTS,title:w(p.duplicateElement),loadActionDelegate:async()=>(await y()).ElementsPanel.ElementsActionDelegate.instance(),contextTypes:()=>S((e=>[e.ElementsPanel.ElementsPanel])),bindings:[{shortcut:"Shift+Alt+Down"}]}),t.ActionRegistration.registerActionExtension({actionId:"elements.copy-styles",category:t.ActionRegistration.ActionCategory.ELEMENTS,title:w(p.copyStyles),loadActionDelegate:async()=>(await y()).ElementsPanel.ElementsActionDelegate.instance(),contextTypes:()=>S((e=>[e.ElementsPanel.ElementsPanel])),bindings:[{shortcut:"Ctrl+Alt+C",platform:"windows,linux"},{shortcut:"Meta+Alt+C",platform:"mac"}]}),t.ActionRegistration.registerActionExtension({actionId:"elements.undo",category:t.ActionRegistration.ActionCategory.ELEMENTS,title:w(p.undo),loadActionDelegate:async()=>(await y()).ElementsPanel.ElementsActionDelegate.instance(),contextTypes:()=>S((e=>[e.ElementsPanel.ElementsPanel])),bindings:[{shortcut:"Ctrl+Z",platform:"windows,linux"},{shortcut:"Meta+Z",platform:"mac"}]}),t.ActionRegistration.registerActionExtension({actionId:"elements.redo",category:t.ActionRegistration.ActionCategory.ELEMENTS,title:w(p.redo),loadActionDelegate:async()=>(await y()).ElementsPanel.ElementsActionDelegate.instance(),contextTypes:()=>S((e=>[e.ElementsPanel.ElementsPanel])),bindings:[{shortcut:"Ctrl+Y",platform:"windows,linux"},{shortcut:"Meta+Shift+Z",platform:"mac"}]}),t.ActionRegistration.registerActionExtension({actionId:"elements.capture-area-screenshot",loadActionDelegate:async()=>(await y()).InspectElementModeController.ToggleSearchActionDelegate.instance(),condition:o.Runtime.ConditionName.CAN_DOCK,title:w(p.captureAreaScreenshot),category:t.ActionRegistration.ActionCategory.SCREENSHOT}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.ELEMENTS,actionId:"elements.toggle-element-search",toggleable:!0,loadActionDelegate:async()=>(await y()).InspectElementModeController.ToggleSearchActionDelegate.instance(),title:w(p.selectAnElementInThePageTo),iconClass:"largeicon-node-search",bindings:[{shortcut:"Ctrl+Shift+C",platform:"windows,linux"},{shortcut:"Meta+Shift+C",platform:"mac"}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.ELEMENTS,storageType:i.Settings.SettingStorageType.Synced,order:1,title:w(p.showUserAgentShadowDOM),settingName:"showUAShadowDOM",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.ELEMENTS,storageType:i.Settings.SettingStorageType.Synced,order:2,title:w(p.wordWrap),settingName:"domWordWrap",settingType:i.Settings.SettingType.BOOLEAN,options:[{value:!0,title:w(p.enableDomWordWrap)},{value:!1,title:w(p.disableDomWordWrap)}],defaultValue:!0}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.ELEMENTS,storageType:i.Settings.SettingStorageType.Synced,order:3,title:w(p.showHtmlComments),settingName:"showHTMLComments",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:w(p.showHtmlComments)},{value:!1,title:w(p.hideHtmlComments)}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.ELEMENTS,storageType:i.Settings.SettingStorageType.Synced,order:4,title:w(p.revealDomNodeOnHover),settingName:"highlightNodeOnHoverInOverlay",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!0}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.ELEMENTS,storageType:i.Settings.SettingStorageType.Synced,order:5,title:w(p.showDetailedInspectTooltip),settingName:"showDetailedInspectTooltip",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!0}),i.Settings.registerSettingExtension({settingName:"showEventListenersForAncestors",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!0}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.ADORNER,storageType:i.Settings.SettingStorageType.Synced,settingName:"adornerSettings",settingType:i.Settings.SettingType.ARRAY,defaultValue:[]}),t.ContextMenu.registerProvider({contextTypes:()=>[n.RemoteObject.RemoteObject,n.DOMModel.DOMNode,n.DOMModel.DeferredDOMNode],loadProvider:async()=>(await y()).ElementsPanel.ContextMenuProvider.instance(),experiment:void 0}),t.ViewManager.registerLocationResolver({name:"elements-sidebar",category:t.ViewManager.ViewLocationCategoryValues.ELEMENTS,loadResolver:async()=>(await y()).ElementsPanel.ElementsPanel.instance()}),i.Revealer.registerRevealer({contextTypes:()=>[n.DOMModel.DOMNode,n.DOMModel.DeferredDOMNode,n.RemoteObject.RemoteObject],destination:i.Revealer.RevealerDestination.ELEMENTS_PANEL,loadRevealer:async()=>(await y()).ElementsPanel.DOMNodeRevealer.instance()}),i.Revealer.registerRevealer({contextTypes:()=>[n.CSSProperty.CSSProperty],destination:i.Revealer.RevealerDestination.STYLES_SIDEBAR,loadRevealer:async()=>(await y()).ElementsPanel.CSSPropertyRevealer.instance()}),t.Toolbar.registerToolbarItem({loadItem:async()=>(await y()).ElementStatePaneWidget.ButtonProvider.instance(),order:1,location:t.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),t.Toolbar.registerToolbarItem({loadItem:async()=>(await y()).ClassesPaneWidget.ButtonProvider.instance(),order:2,location:t.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),t.Toolbar.registerToolbarItem({loadItem:async()=>(await y()).StylesSidebarPane.ButtonProvider.instance(),order:100,location:t.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),t.Toolbar.registerToolbarItem({actionId:"elements.toggle-element-search",location:t.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,order:0,showLabel:void 0,condition:void 0,separator:void 0,loadItem:void 0}),t.UIUtils.registerRenderer({contextTypes:()=>[n.DOMModel.DOMNode,n.DOMModel.DeferredDOMNode],loadRenderer:async()=>(await y()).ElementsTreeOutline.Renderer.instance()}),i.Linkifier.registerLinkifier({contextTypes:()=>[n.DOMModel.DOMNode,n.DOMModel.DeferredDOMNode],loadLinkifier:async()=>(await y()).DOMLinkifier.Linkifier.instance()});const h={showEventListenerBreakpoints:"Show Event Listener Breakpoints",eventListenerBreakpoints:"Event Listener Breakpoints",showCspViolationBreakpoints:"Show CSP Violation Breakpoints",cspViolationBreakpoints:"CSP Violation Breakpoints",showXhrfetchBreakpoints:"Show XHR/fetch Breakpoints",xhrfetchBreakpoints:"XHR/fetch Breakpoints",showDomBreakpoints:"Show DOM Breakpoints",domBreakpoints:"DOM Breakpoints",showGlobalListeners:"Show Global Listeners",globalListeners:"Global Listeners",page:"Page",showPage:"Show Page",overrides:"Overrides",showOverrides:"Show Overrides",contentScripts:"Content scripts",showContentScripts:"Show Content scripts"},A=e.i18n.registerUIStrings("panels/browser_debugger/browser_debugger-meta.ts",h),E=e.i18n.getLazilyComputedLocalizedString.bind(void 0,A);let R,v;async function T(){return R||(R=await import("../../panels/browser_debugger/browser_debugger.js")),R}async function P(){return v||(v=await import("../../panels/sources/sources.js")),v}t.ViewManager.registerViewExtension({loadView:async()=>(await T()).EventListenerBreakpointsSidebarPane.EventListenerBreakpointsSidebarPane.instance(),id:"sources.eventListenerBreakpoints",location:"sources.sidebar-bottom",commandPrompt:E(h.showEventListenerBreakpoints),title:E(h.eventListenerBreakpoints),order:9,persistence:"permanent"}),t.ViewManager.registerViewExtension({loadView:async()=>(await T()).CSPViolationBreakpointsSidebarPane.CSPViolationBreakpointsSidebarPane.instance(),id:"sources.cspViolationBreakpoints",location:"sources.sidebar-bottom",commandPrompt:E(h.showCspViolationBreakpoints),title:E(h.cspViolationBreakpoints),order:10,persistence:"permanent"}),t.ViewManager.registerViewExtension({loadView:async()=>(await T()).XHRBreakpointsSidebarPane.XHRBreakpointsSidebarPane.instance(),id:"sources.xhrBreakpoints",location:"sources.sidebar-bottom",commandPrompt:E(h.showXhrfetchBreakpoints),title:E(h.xhrfetchBreakpoints),order:5,persistence:"permanent",hasToolbar:!0}),t.ViewManager.registerViewExtension({loadView:async()=>(await T()).DOMBreakpointsSidebarPane.DOMBreakpointsSidebarPane.instance(),id:"sources.domBreakpoints",location:"sources.sidebar-bottom",commandPrompt:E(h.showDomBreakpoints),title:E(h.domBreakpoints),order:7,persistence:"permanent"}),t.ViewManager.registerViewExtension({loadView:async()=>(await T()).ObjectEventListenersSidebarPane.ObjectEventListenersSidebarPane.instance(),id:"sources.globalListeners",location:"sources.sidebar-bottom",commandPrompt:E(h.showGlobalListeners),title:E(h.globalListeners),order:8,persistence:"permanent",hasToolbar:!0}),t.ViewManager.registerViewExtension({loadView:async()=>(await T()).DOMBreakpointsSidebarPane.DOMBreakpointsSidebarPane.instance(),id:"elements.domBreakpoints",location:"elements-sidebar",commandPrompt:E(h.showDomBreakpoints),title:E(h.domBreakpoints),order:6,persistence:"permanent"}),t.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-network",title:E(h.page),commandPrompt:E(h.showPage),order:2,persistence:"permanent",loadView:async()=>(await P()).SourcesNavigator.NetworkNavigatorView.instance()}),t.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-overrides",title:E(h.overrides),commandPrompt:E(h.showOverrides),order:4,persistence:"permanent",loadView:async()=>(await P()).SourcesNavigator.OverridesNavigatorView.instance()}),t.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-contentScripts",title:E(h.contentScripts),commandPrompt:E(h.showContentScripts),order:5,persistence:"permanent",loadView:async()=>(await P()).SourcesNavigator.ContentScriptsNavigatorView.instance()}),t.ContextMenu.registerProvider({contextTypes:()=>[n.DOMModel.DOMNode],loadProvider:async()=>(await T()).DOMBreakpointsSidebarPane.ContextMenuProvider.instance(),experiment:void 0}),t.Context.registerListener({contextTypes:()=>[n.DebuggerModel.DebuggerPausedDetails],loadListener:async()=>(await T()).XHRBreakpointsSidebarPane.XHRBreakpointsSidebarPane.instance()}),t.Context.registerListener({contextTypes:()=>[n.DebuggerModel.DebuggerPausedDetails],loadListener:async()=>(await T()).DOMBreakpointsSidebarPane.DOMBreakpointsSidebarPane.instance()});const b={showNetwork:"Show Network",network:"Network",showNetworkRequestBlocking:"Show Network request blocking",networkRequestBlocking:"Network request blocking",showNetworkConditions:"Show Network conditions",networkConditions:"Network conditions",diskCache:"disk cache",networkThrottling:"network throttling",showSearch:"Show Search",search:"Search",recordNetworkLog:"Record network log",stopRecordingNetworkLog:"Stop recording network log",hideRequestDetails:"Hide request details",colorcodeResourceTypes:"Color-code resource types",colorCode:"color code",resourceType:"resource type",colorCodeByResourceType:"Color code by resource type",useDefaultColors:"Use default colors",groupNetworkLogByFrame:"Group network log by frame",netWork:"network",frame:"frame",group:"group",groupNetworkLogItemsByFrame:"Group network log items by frame",dontGroupNetworkLogItemsByFrame:"Don't group network log items by frame"},C=e.i18n.registerUIStrings("panels/network/network-meta.ts",b),L=e.i18n.getLazilyComputedLocalizedString.bind(void 0,C);let f;async function N(){return f||(f=await import("../../panels/network/network.js")),f}function I(e){return void 0===f?[]:e(f)}t.ViewManager.registerViewExtension({location:"panel",id:"network",commandPrompt:L(b.showNetwork),title:L(b.network),order:40,loadView:async()=>(await N()).NetworkPanel.NetworkPanel.instance()}),globalThis.chii||(t.ViewManager.registerViewExtension({location:"drawer-view",id:"network.blocked-urls",commandPrompt:L(b.showNetworkRequestBlocking),title:L(b.networkRequestBlocking),persistence:"closeable",order:60,loadView:async()=>(await N()).BlockedURLsPane.BlockedURLsPane.instance()}),t.ViewManager.registerViewExtension({location:"drawer-view",id:"network.config",commandPrompt:L(b.showNetworkConditions),title:L(b.networkConditions),persistence:"closeable",order:40,tags:[L(b.diskCache),L(b.networkThrottling),e.i18n.lockedLazyString("useragent"),e.i18n.lockedLazyString("user agent"),e.i18n.lockedLazyString("user-agent")],loadView:async()=>(await N()).NetworkConfigView.NetworkConfigView.instance()})),t.ViewManager.registerViewExtension({location:"network-sidebar",id:"network.search-network-tab",commandPrompt:L(b.showSearch),title:L(b.search),persistence:"permanent",loadView:async()=>(await N()).NetworkPanel.SearchNetworkView.instance()}),t.ActionRegistration.registerActionExtension({actionId:"network.toggle-recording",category:t.ActionRegistration.ActionCategory.NETWORK,iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,contextTypes:()=>I((e=>[e.NetworkPanel.NetworkPanel])),loadActionDelegate:async()=>(await N()).NetworkPanel.ActionDelegate.instance(),options:[{value:!0,title:L(b.recordNetworkLog)},{value:!1,title:L(b.stopRecordingNetworkLog)}],bindings:[{shortcut:"Ctrl+E",platform:"windows,linux"},{shortcut:"Meta+E",platform:"mac"}]}),t.ActionRegistration.registerActionExtension({actionId:"network.hide-request-details",category:t.ActionRegistration.ActionCategory.NETWORK,title:L(b.hideRequestDetails),contextTypes:()=>I((e=>[e.NetworkPanel.NetworkPanel])),loadActionDelegate:async()=>(await N()).NetworkPanel.ActionDelegate.instance(),bindings:[{shortcut:"Esc"}]}),t.ActionRegistration.registerActionExtension({actionId:"network.search",category:t.ActionRegistration.ActionCategory.NETWORK,title:L(b.search),contextTypes:()=>I((e=>[e.NetworkPanel.NetworkPanel])),loadActionDelegate:async()=>(await N()).NetworkPanel.ActionDelegate.instance(),bindings:[{platform:"mac",shortcut:"Meta+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+F",keybindSets:["devToolsDefault","vsCode"]}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.NETWORK,storageType:i.Settings.SettingStorageType.Synced,title:L(b.colorcodeResourceTypes),settingName:"networkColorCodeResourceTypes",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1,tags:[L(b.colorCode),L(b.resourceType)],options:[{value:!0,title:L(b.colorCodeByResourceType)},{value:!1,title:L(b.useDefaultColors)}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.NETWORK,storageType:i.Settings.SettingStorageType.Synced,title:L(b.groupNetworkLogByFrame),settingName:"network.group-by-frame",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1,tags:[L(b.netWork),L(b.frame),L(b.group)],options:[{value:!0,title:L(b.groupNetworkLogItemsByFrame)},{value:!1,title:L(b.dontGroupNetworkLogItemsByFrame)}]}),t.ViewManager.registerLocationResolver({name:"network-sidebar",category:t.ViewManager.ViewLocationCategoryValues.NETWORK,loadResolver:async()=>(await N()).NetworkPanel.NetworkPanel.instance()}),t.ContextMenu.registerProvider({contextTypes:()=>[n.NetworkRequest.NetworkRequest,n.Resource.Resource,a.UISourceCode.UISourceCode],loadProvider:async()=>(await N()).NetworkPanel.ContextMenuProvider.instance(),experiment:void 0}),i.Revealer.registerRevealer({contextTypes:()=>[n.NetworkRequest.NetworkRequest],destination:i.Revealer.RevealerDestination.NETWORK_PANEL,loadRevealer:async()=>(await N()).NetworkPanel.RequestRevealer.instance()}),i.Revealer.registerRevealer({contextTypes:()=>[r.UIRequestLocation.UIRequestLocation],loadRevealer:async()=>(await N()).NetworkPanel.RequestLocationRevealer.instance(),destination:void 0}),i.Revealer.registerRevealer({contextTypes:()=>[r.NetworkRequestId.NetworkRequestId],destination:i.Revealer.RevealerDestination.NETWORK_PANEL,loadRevealer:async()=>(await N()).NetworkPanel.RequestIdRevealer.instance()}),i.Revealer.registerRevealer({contextTypes:()=>[r.UIFilter.UIRequestFilter],destination:i.Revealer.RevealerDestination.NETWORK_PANEL,loadRevealer:async()=>(await N()).NetworkPanel.NetworkLogWithFilterRevealer.instance()});const M={security:"Security",showSecurity:"Show Security"},k=e.i18n.registerUIStrings("panels/security/security-meta.ts",M),D=e.i18n.getLazilyComputedLocalizedString.bind(void 0,k);let x;t.ViewManager.registerViewExtension({location:"panel",id:"security",title:D(M.security),commandPrompt:D(M.showSecurity),order:80,persistence:"closeable",loadView:async()=>(await async function(){return x||(x=await import("../../panels/security/security.js")),x}()).SecurityPanel.SecurityPanel.instance()});const V={toggleDeviceToolbar:"Toggle device toolbar",captureScreenshot:"Capture screenshot",captureFullSizeScreenshot:"Capture full size screenshot",captureNodeScreenshot:"Capture node screenshot",showMediaQueries:"Show media queries",device:"device",hideMediaQueries:"Hide media queries",showRulers:"Show rulers in the Device Mode toolbar",hideRulers:"Hide rulers in the Device Mode toolbar",showDeviceFrame:"Show device frame",hideDeviceFrame:"Hide device frame"},O=e.i18n.registerUIStrings("panels/emulation/emulation-meta.ts",V),B=e.i18n.getLazilyComputedLocalizedString.bind(void 0,O);let _;async function U(){return _||(_=await import("../../panels/emulation/emulation.js")),_}t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.MOBILE,actionId:"emulation.toggle-device-mode",toggleable:!0,loadActionDelegate:async()=>(await U()).DeviceModeWrapper.ActionDelegate.instance(),condition:o.Runtime.ConditionName.CAN_DOCK,title:B(V.toggleDeviceToolbar),iconClass:"largeicon-phone",bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+M"},{platform:"mac",shortcut:"Shift+Meta+M"}]}),t.ActionRegistration.registerActionExtension({actionId:"emulation.capture-screenshot",category:t.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await U()).DeviceModeWrapper.ActionDelegate.instance(),condition:o.Runtime.ConditionName.CAN_DOCK,title:B(V.captureScreenshot)}),t.ActionRegistration.registerActionExtension({actionId:"emulation.capture-full-height-screenshot",category:t.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await U()).DeviceModeWrapper.ActionDelegate.instance(),condition:o.Runtime.ConditionName.CAN_DOCK,title:B(V.captureFullSizeScreenshot)}),t.ActionRegistration.registerActionExtension({actionId:"emulation.capture-node-screenshot",category:t.ActionRegistration.ActionCategory.SCREENSHOT,loadActionDelegate:async()=>(await U()).DeviceModeWrapper.ActionDelegate.instance(),condition:o.Runtime.ConditionName.CAN_DOCK,title:B(V.captureNodeScreenshot)}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.MOBILE,settingName:"showMediaQueryInspector",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:B(V.showMediaQueries)},{value:!1,title:B(V.hideMediaQueries)}],tags:[B(V.device)]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.MOBILE,settingName:"emulation.showRulers",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:B(V.showRulers)},{value:!1,title:B(V.hideRulers)}],tags:[B(V.device)]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.MOBILE,settingName:"emulation.showDeviceOutline",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:B(V.showDeviceFrame)},{value:!1,title:B(V.hideDeviceFrame)}],tags:[B(V.device)]}),t.Toolbar.registerToolbarItem({actionId:"emulation.toggle-device-mode",condition:o.Runtime.ConditionName.CAN_DOCK,location:t.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,order:1,showLabel:void 0,loadItem:void 0,separator:void 0}),i.AppProvider.registerAppProvider({loadAppProvider:async()=>(await U()).AdvancedApp.AdvancedAppProvider.instance(),condition:o.Runtime.ConditionName.CAN_DOCK,order:0}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE,order:12,actionId:"emulation.capture-screenshot"}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.DEVICE_MODE_MENU_SAVE,order:13,actionId:"emulation.capture-full-height-screenshot"});const z={sensors:"Sensors",geolocation:"geolocation",timezones:"timezones",locale:"locale",locales:"locales",accelerometer:"accelerometer",deviceOrientation:"device orientation",locations:"Locations",touch:"Touch",devicebased:"Device-based",forceEnabled:"Force enabled",emulateIdleDetectorState:"Emulate Idle Detector state",noIdleEmulation:"No idle emulation",userActiveScreenUnlocked:"User active, screen unlocked",userActiveScreenLocked:"User active, screen locked",userIdleScreenUnlocked:"User idle, screen unlocked",userIdleScreenLocked:"User idle, screen locked",showSensors:"Show Sensors",showLocations:"Show Locations"},W=e.i18n.registerUIStrings("panels/sensors/sensors-meta.ts",z),F=e.i18n.getLazilyComputedLocalizedString.bind(void 0,W);let H,j;async function q(){return H||(H=await import("../../panels/sensors/sensors.js")),H}t.ViewManager.registerViewExtension({location:"drawer-view",commandPrompt:F(z.showSensors),title:F(z.sensors),id:"sensors",persistence:"closeable",order:100,loadView:async()=>(await q()).SensorsView.SensorsView.instance(),tags:[F(z.geolocation),F(z.timezones),F(z.locale),F(z.locales),F(z.accelerometer),F(z.deviceOrientation)]}),t.ViewManager.registerViewExtension({location:"settings-view",id:"emulation-locations",commandPrompt:F(z.showLocations),title:F(z.locations),order:40,loadView:async()=>(await q()).LocationsSettingsTab.LocationsSettingsTab.instance(),settings:["emulation.locations"]}),t.ActionRegistration.registerActionExtension({actionId:"emulation.show-sensors",category:t.ActionRegistration.ActionCategory.SENSORS,loadActionDelegate:async()=>(await q()).SensorsView.ShowActionDelegate.instance(),title:F(z.sensors)}),i.Settings.registerSettingExtension({storageType:i.Settings.SettingStorageType.Synced,settingName:"emulation.locations",settingType:i.Settings.SettingType.ARRAY,defaultValue:[{title:"Berlin",lat:52.520007,long:13.404954,timezoneId:"Europe/Berlin",locale:"de-DE"},{title:"London",lat:51.507351,long:-.127758,timezoneId:"Europe/London",locale:"en-GB"},{title:"Moscow",lat:55.755826,long:37.6173,timezoneId:"Europe/Moscow",locale:"ru-RU"},{title:"Mountain View",lat:37.386052,long:-122.083851,timezoneId:"US/Pacific",locale:"en-US"},{title:"Mumbai",lat:19.075984,long:72.877656,timezoneId:"Asia/Kolkata",locale:"mr-IN"},{title:"San Francisco",lat:37.774929,long:-122.419416,timezoneId:"US/Pacific",locale:"en-US"},{title:"Shanghai",lat:31.230416,long:121.473701,timezoneId:"Asia/Shanghai",locale:"zh-Hans-CN"},{title:"São Paulo",lat:-23.55052,long:-46.633309,timezoneId:"America/Sao_Paulo",locale:"pt-BR"},{title:"Tokyo",lat:35.689487,long:139.691706,timezoneId:"Asia/Tokyo",locale:"ja-JP"}]}),i.Settings.registerSettingExtension({title:F(z.touch),reloadRequired:!0,settingName:"emulation.touch",settingType:i.Settings.SettingType.ENUM,defaultValue:"none",options:[{value:"none",title:F(z.devicebased),text:F(z.devicebased)},{value:"force",title:F(z.forceEnabled),text:F(z.forceEnabled)}]}),i.Settings.registerSettingExtension({title:F(z.emulateIdleDetectorState),settingName:"emulation.idleDetection",settingType:i.Settings.SettingType.ENUM,defaultValue:"none",options:[{value:"none",title:F(z.noIdleEmulation),text:F(z.noIdleEmulation)},{value:'{"isUserActive":true,"isScreenUnlocked":true}',title:F(z.userActiveScreenUnlocked),text:F(z.userActiveScreenUnlocked)},{value:'{"isUserActive":true,"isScreenUnlocked":false}',title:F(z.userActiveScreenLocked),text:F(z.userActiveScreenLocked)},{value:'{"isUserActive":false,"isScreenUnlocked":true}',title:F(z.userIdleScreenUnlocked),text:F(z.userIdleScreenUnlocked)},{value:'{"isUserActive":false,"isScreenUnlocked":false}',title:F(z.userIdleScreenLocked),text:F(z.userIdleScreenLocked)}]});const K={accessibility:"Accessibility",shoAccessibility:"Show Accessibility"},G=e.i18n.registerUIStrings("panels/accessibility/accessibility-meta.ts",K),Y=e.i18n.getLazilyComputedLocalizedString.bind(void 0,G);let J;t.ViewManager.registerViewExtension({location:"elements-sidebar",id:"accessibility.view",title:Y(K.accessibility),commandPrompt:Y(K.shoAccessibility),order:10,persistence:"permanent",loadView:async()=>(await async function(){return j||(j=await import("../../panels/accessibility/accessibility.js")),j}()).AccessibilitySidebarView.AccessibilitySidebarView.instance()});const X={animations:"Animations",showAnimations:"Show Animations"},Q=e.i18n.registerUIStrings("panels/animation/animation-meta.ts",X),Z=e.i18n.getLazilyComputedLocalizedString.bind(void 0,Q);t.ViewManager.registerViewExtension({location:"drawer-view",id:"animations",title:Z(X.animations),commandPrompt:Z(X.showAnimations),persistence:"closeable",order:0,loadView:async()=>(await async function(){return J||(J=await import("../../panels/animation/animation.js")),J}()).AnimationTimeline.AnimationTimeline.instance()});const $={developerResources:"Developer Resources",showDeveloperResources:"Show Developer Resources"},ee=e.i18n.registerUIStrings("panels/developer_resources/developer_resources-meta.ts",$),te=e.i18n.getLazilyComputedLocalizedString.bind(void 0,ee);let ie;t.ViewManager.registerViewExtension({location:"drawer-view",id:"resource-loading-pane",title:te($.developerResources),commandPrompt:te($.showDeveloperResources),order:100,persistence:"closeable",experiment:o.Runtime.ExperimentName.DEVELOPER_RESOURCES_VIEW,loadView:async()=>(await async function(){return ie||(ie=await import("../../panels/developer_resources/developer_resources.js")),ie}()).DeveloperResourcesView.DeveloperResourcesView.instance()});const oe={rendering:"Rendering",showRendering:"Show Rendering",paint:"paint",layout:"layout",fps:"fps",cssMediaType:"CSS media type",cssMediaFeature:"CSS media feature",visionDeficiency:"vision deficiency",colorVisionDeficiency:"color vision deficiency",reloadPage:"Reload page",hardReloadPage:"Hard reload page",forceAdBlocking:"Force ad blocking on this site",blockAds:"Block ads on this site",showAds:"Show ads on this site, if allowed",autoOpenDevTools:"Auto-open DevTools for popups",doNotAutoOpen:"Do not auto-open DevTools for popups",disablePaused:"Disable paused state overlay"},ne=e.i18n.registerUIStrings("entrypoints/inspector_main/inspector_main-meta.ts",oe),ae=e.i18n.getLazilyComputedLocalizedString.bind(void 0,ne);let re;async function se(){return re||(re=await import("../inspector_main/inspector_main.js")),re}t.ViewManager.registerViewExtension({location:"drawer-view",id:"rendering",title:ae(oe.rendering),commandPrompt:ae(oe.showRendering),persistence:"closeable",order:50,loadView:async()=>(await se()).RenderingOptions.RenderingOptionsView.instance(),tags:[ae(oe.paint),ae(oe.layout),ae(oe.fps),ae(oe.cssMediaType),ae(oe.cssMediaFeature),ae(oe.visionDeficiency),ae(oe.colorVisionDeficiency)]}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.reload",loadActionDelegate:async()=>(await se()).InspectorMain.ReloadActionDelegate.instance(),iconClass:"largeicon-refresh",title:ae(oe.reloadPage),bindings:[{platform:"windows,linux",shortcut:"Ctrl+R"},{platform:"windows,linux",shortcut:"F5"},{platform:"mac",shortcut:"Meta+R"}]}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.hard-reload",loadActionDelegate:async()=>(await se()).InspectorMain.ReloadActionDelegate.instance(),title:ae(oe.hardReloadPage),bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+R"},{platform:"windows,linux",shortcut:"Shift+F5"},{platform:"windows,linux",shortcut:"Ctrl+F5"},{platform:"windows,linux",shortcut:"Ctrl+Shift+F5"},{platform:"mac",shortcut:"Shift+Meta+R"}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.NETWORK,title:ae(oe.forceAdBlocking),settingName:"network.adBlockingEnabled",settingType:i.Settings.SettingType.BOOLEAN,storageType:i.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:ae(oe.blockAds)},{value:!1,title:ae(oe.showAds)}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.GLOBAL,storageType:i.Settings.SettingStorageType.Synced,title:ae(oe.autoOpenDevTools),settingName:"autoAttachToCreatedPages",settingType:i.Settings.SettingType.BOOLEAN,order:2,defaultValue:!1,options:[{value:!0,title:ae(oe.autoOpenDevTools)},{value:!1,title:ae(oe.doNotAutoOpen)}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.APPEARANCE,storageType:i.Settings.SettingStorageType.Synced,title:ae(oe.disablePaused),settingName:"disablePausedStateOverlay",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Toolbar.registerToolbarItem({loadItem:async()=>(await se()).InspectorMain.NodeIndicator.instance(),order:2,location:t.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0});const le={application:"Application",showApplication:"Show Application",pwa:"pwa",clearSiteData:"Clear site data",clearSiteDataIncludingThirdparty:"Clear site data (including third-party cookies)",startRecordingEvents:"Start recording events",stopRecordingEvents:"Stop recording events"},ce=e.i18n.registerUIStrings("panels/application/application-meta.ts",le),ge=e.i18n.getLazilyComputedLocalizedString.bind(void 0,ce);let de;async function pe(){return de||(de=await import("../../panels/application/application.js")),de}t.ViewManager.registerViewExtension({location:"panel",id:"resources",title:ge(le.application),commandPrompt:ge(le.showApplication),order:70,loadView:async()=>(await pe()).ResourcesPanel.ResourcesPanel.instance(),tags:[ge(le.pwa)]}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.RESOURCES,actionId:"resources.clear",title:ge(le.clearSiteData),loadActionDelegate:async()=>(await pe()).StorageView.ActionDelegate.instance()}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.RESOURCES,actionId:"resources.clear-incl-third-party-cookies",title:ge(le.clearSiteDataIncludingThirdparty),loadActionDelegate:async()=>(await pe()).StorageView.ActionDelegate.instance()}),t.ActionRegistration.registerActionExtension({actionId:"background-service.toggle-recording",iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,contextTypes:()=>void 0===de?[]:(e=>[e.BackgroundServiceView.BackgroundServiceView])(de),loadActionDelegate:async()=>(await pe()).BackgroundServiceView.ActionDelegate.instance(),category:t.ActionRegistration.ActionCategory.BACKGROUND_SERVICES,options:[{value:!0,title:ge(le.startRecordingEvents)},{value:!1,title:ge(le.stopRecordingEvents)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.Revealer.registerRevealer({contextTypes:()=>[n.Resource.Resource],destination:i.Revealer.RevealerDestination.APPLICATION_PANEL,loadRevealer:async()=>(await pe()).ResourcesPanel.ResourceRevealer.instance()}),i.Revealer.registerRevealer({contextTypes:()=>[n.Cookie.CookieReference],destination:i.Revealer.RevealerDestination.APPLICATION_PANEL,loadRevealer:async()=>(await pe()).ResourcesPanel.CookieReferenceRevealer.instance()}),i.Revealer.registerRevealer({contextTypes:()=>[n.ResourceTreeModel.ResourceTreeFrame],destination:i.Revealer.RevealerDestination.APPLICATION_PANEL,loadRevealer:async()=>(await pe()).ResourcesPanel.FrameDetailsRevealer.instance()});const me={issues:"Issues",showIssues:"Show Issues",cspViolations:"CSP Violations",showCspViolations:"Show CSP Violations"},we=e.i18n.registerUIStrings("panels/issues/issues-meta.ts",me),ue=e.i18n.getLazilyComputedLocalizedString.bind(void 0,we);let ye;async function Se(){return ye||(ye=await import("../../panels/issues/issues.js")),ye}t.ViewManager.registerViewExtension({location:"drawer-view",id:"issues-pane",title:ue(me.issues),commandPrompt:ue(me.showIssues),order:100,persistence:"closeable",loadView:async()=>(await Se()).IssuesPane.IssuesPane.instance()}),t.ViewManager.registerViewExtension({location:"drawer-view",id:"csp-violations-pane",title:ue(me.cspViolations),commandPrompt:ue(me.showCspViolations),order:100,persistence:"closeable",loadView:async()=>(await Se()).CSPViolationsView.CSPViolationsView.instance(),experiment:o.Runtime.ExperimentName.CSP_VIOLATIONS_VIEW}),i.Revealer.registerRevealer({contextTypes:()=>[s.Issue.Issue],destination:i.Revealer.RevealerDestination.ISSUES_VIEW,loadRevealer:async()=>(await Se()).IssueRevealer.IssueRevealer.instance()});const he={whatsNew:"What's New",showWhatsNew:"Show What's New",releaseNotes:"Release notes",reportADevtoolsIssue:"Report a DevTools issue",reportTranslationIssue:"Report a translation issue",bug:"bug",showWhatsNewAfterEachUpdate:"Show What's New after each update",doNotShowWhatsNewAfterEachUpdate:"Do not show What's New after each update"},Ae=e.i18n.registerUIStrings("panels/help/help-meta.ts",he),Ee=e.i18n.getLazilyComputedLocalizedString.bind(void 0,Ae);let Re;async function ve(){return Re||(Re=await import("../../panels/help/help.js")),Re}t.ViewManager.registerViewExtension({location:"drawer-view",id:"release-note",title:Ee(he.whatsNew),commandPrompt:Ee(he.showWhatsNew),persistence:"closeable",order:1,loadView:async()=>(await ve()).ReleaseNoteView.ReleaseNoteView.instance()}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.HELP,actionId:"help.release-notes",title:Ee(he.releaseNotes),loadActionDelegate:async()=>(await ve()).Help.ReleaseNotesActionDelegate.instance()}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.HELP,actionId:"help.report-issue",title:Ee(he.reportADevtoolsIssue),loadActionDelegate:async()=>(await ve()).Help.ReportIssueActionDelegate.instance(),tags:[Ee(he.bug)]}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.HELP,actionId:"help.report-translation-issue",title:Ee(he.reportTranslationIssue),loadActionDelegate:async()=>(await ve()).Help.ReportTranslationIssueActionDelegate.instance(),tags:[Ee(he.bug)]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.APPEARANCE,storageType:i.Settings.SettingStorageType.Synced,title:Ee(he.showWhatsNewAfterEachUpdate),settingName:"help.show-release-note",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:Ee(he.showWhatsNewAfterEachUpdate)},{value:!1,title:Ee(he.doNotShowWhatsNewAfterEachUpdate)}]}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT,actionId:"help.release-notes",order:10}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT,actionId:"help.report-issue",order:11}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT,actionId:"help.report-translation-issue",order:12}),i.Runnable.registerLateInitializationRunnable({id:"whats-new",loadRunnable:async()=>(await ve()).Help.HelpLateInitialization.instance()});const Te={layers:"Layers",showLayers:"Show Layers"},Pe=e.i18n.registerUIStrings("panels/layers/layers-meta.ts",Te),be=e.i18n.getLazilyComputedLocalizedString.bind(void 0,Pe);let Ce;t.ViewManager.registerViewExtension({location:"panel",id:"layers",title:be(Te.layers),commandPrompt:be(Te.showLayers),order:100,persistence:"closeable",loadView:async()=>(await async function(){return Ce||(Ce=await import("../../panels/layers/layers.js")),Ce}()).LayersPanel.LayersPanel.instance()});const Le={showLighthouse:"Show `Lighthouse`"},fe=e.i18n.registerUIStrings("panels/lighthouse/lighthouse-meta.ts",Le),Ne=e.i18n.getLazilyComputedLocalizedString.bind(void 0,fe);let Ie;t.ViewManager.registerViewExtension({location:"panel",id:"lighthouse",title:e.i18n.lockedLazyString("Lighthouse"),commandPrompt:Ne(Le.showLighthouse),order:90,loadView:async()=>(await async function(){return Ie||(Ie=await import("../../panels/lighthouse/lighthouse.js")),Ie}()).LighthousePanel.LighthousePanel.instance(),tags:[e.i18n.lockedLazyString("lighthouse"),e.i18n.lockedLazyString("pwa")]});const Me={media:"Media",video:"video",showMedia:"Show Media"},ke=e.i18n.registerUIStrings("panels/media/media-meta.ts",Me),De=e.i18n.getLazilyComputedLocalizedString.bind(void 0,ke);let xe;t.ViewManager.registerViewExtension({location:"panel",id:"medias",title:De(Me.media),commandPrompt:De(Me.showMedia),persistence:"closeable",order:100,loadView:async()=>(await async function(){return xe||(xe=await import("../../panels/media/media.js")),xe}()).MainView.MainView.instance(),tags:[De(Me.media),De(Me.video)]});const Ve={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},Oe=e.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",Ve),Be=e.i18n.getLazilyComputedLocalizedString.bind(void 0,Oe);let _e;async function Ue(){return _e||(_e=await import("../../panels/mobile_throttling/mobile_throttling.js")),_e}t.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:Be(Ve.throttling),commandPrompt:Be(Ve.showThrottling),order:35,loadView:async()=>(await Ue()).ThrottlingSettingsTab.ThrottlingSettingsTab.instance(),settings:["customNetworkConditions"]}),t.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:t.ActionRegistration.ActionCategory.NETWORK,title:Be(Ve.goOffline),loadActionDelegate:async()=>(await Ue()).ThrottlingManager.ActionDelegate.instance(),tags:[Be(Ve.device),Be(Ve.throttlingTag)]}),t.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:t.ActionRegistration.ActionCategory.NETWORK,title:Be(Ve.enableSlowGThrottling),loadActionDelegate:async()=>(await Ue()).ThrottlingManager.ActionDelegate.instance(),tags:[Be(Ve.device),Be(Ve.throttlingTag)]}),t.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:t.ActionRegistration.ActionCategory.NETWORK,title:Be(Ve.enableFastGThrottling),loadActionDelegate:async()=>(await Ue()).ThrottlingManager.ActionDelegate.instance(),tags:[Be(Ve.device),Be(Ve.throttlingTag)]}),t.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:t.ActionRegistration.ActionCategory.NETWORK,title:Be(Ve.goOnline),loadActionDelegate:async()=>(await Ue()).ThrottlingManager.ActionDelegate.instance(),tags:[Be(Ve.device),Be(Ve.throttlingTag)]}),i.Settings.registerSettingExtension({storageType:i.Settings.SettingStorageType.Synced,settingName:"customNetworkConditions",settingType:i.Settings.SettingType.ARRAY,defaultValue:[]});const ze={performanceMonitor:"Performance monitor",performance:"performance",systemMonitor:"system monitor",monitor:"monitor",activity:"activity",metrics:"metrics",showPerformanceMonitor:"Show Performance monitor"},We=e.i18n.registerUIStrings("panels/performance_monitor/performance_monitor-meta.ts",ze),Fe=e.i18n.getLazilyComputedLocalizedString.bind(void 0,We);let He;t.ViewManager.registerViewExtension({location:"drawer-view",id:"performance.monitor",title:Fe(ze.performanceMonitor),commandPrompt:Fe(ze.showPerformanceMonitor),persistence:"closeable",order:100,loadView:async()=>(await async function(){return He||(He=await import("../../panels/performance_monitor/performance_monitor.js")),He}()).PerformanceMonitor.PerformanceMonitorImpl.instance(),tags:[Fe(ze.performance),Fe(ze.systemMonitor),Fe(ze.monitor),Fe(ze.activity),Fe(ze.metrics)]});const je={performance:"Performance",showPerformance:"Show Performance",javascriptProfiler:"JavaScript Profiler",showJavascriptProfiler:"Show JavaScript Profiler",record:"Record",stop:"Stop",startProfilingAndReloadPage:"Start profiling and reload page",saveProfile:"Save profile…",loadProfile:"Load profile…",previousFrame:"Previous frame",nextFrame:"Next frame",showRecentTimelineSessions:"Show recent timeline sessions",previousRecording:"Previous recording",nextRecording:"Next recording",hideChromeFrameInLayersView:"Hide `chrome` frame in Layers view",startStopRecording:"Start/stop recording"},qe=e.i18n.registerUIStrings("panels/timeline/timeline-meta.ts",je),Ke=e.i18n.getLazilyComputedLocalizedString.bind(void 0,qe);let Ge,Ye;async function Je(){return Ge||(Ge=await import("../../panels/timeline/timeline.js")),Ge}async function Xe(){return Ye||(Ye=await import("../../panels/profiler/profiler.js")),Ye}function Qe(e){return void 0===Ge?[]:e(Ge)}t.ViewManager.registerViewExtension({location:"panel",id:"timeline",title:Ke(je.performance),commandPrompt:Ke(je.showPerformance),order:50,loadView:async()=>(await Je()).TimelinePanel.TimelinePanel.instance()}),t.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:Ke(je.javascriptProfiler),commandPrompt:Ke(je.showJavascriptProfiler),persistence:"closeable",order:65,loadView:async()=>(await Xe()).ProfilesPanel.JSProfilerPanel.instance()}),t.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:t.ActionRegistration.ActionCategory.PERFORMANCE,iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),options:[{value:!0,title:Ke(je.record)},{value:!1,title:Ke(je.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),t.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"largeicon-refresh",contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),category:t.ActionRegistration.ActionCategory.PERFORMANCE,title:Ke(je.startProfilingAndReloadPage),loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.PERFORMANCE,actionId:"timeline.save-to-file",contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),title:Ke(je.saveProfile),bindings:[{platform:"windows,linux",shortcut:"Ctrl+S"},{platform:"mac",shortcut:"Meta+S"}]}),t.ActionRegistration.registerActionExtension({category:t.ActionRegistration.ActionCategory.PERFORMANCE,actionId:"timeline.load-from-file",contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),title:Ke(je.loadProfile),bindings:[{platform:"windows,linux",shortcut:"Ctrl+O"},{platform:"mac",shortcut:"Meta+O"}]}),t.ActionRegistration.registerActionExtension({actionId:"timeline.jump-to-previous-frame",category:t.ActionRegistration.ActionCategory.PERFORMANCE,title:Ke(je.previousFrame),contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),bindings:[{shortcut:"["}]}),t.ActionRegistration.registerActionExtension({actionId:"timeline.jump-to-next-frame",category:t.ActionRegistration.ActionCategory.PERFORMANCE,title:Ke(je.nextFrame),contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),bindings:[{shortcut:"]"}]}),t.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),category:t.ActionRegistration.ActionCategory.PERFORMANCE,title:Ke(je.showRecentTimelineSessions),contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),t.ActionRegistration.registerActionExtension({actionId:"timeline.previous-recording",category:t.ActionRegistration.ActionCategory.PERFORMANCE,loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),title:Ke(je.previousRecording),contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Alt+Left"},{platform:"mac",shortcut:"Meta+Left"}]}),t.ActionRegistration.registerActionExtension({actionId:"timeline.next-recording",category:t.ActionRegistration.ActionCategory.PERFORMANCE,loadActionDelegate:async()=>(await Je()).TimelinePanel.ActionDelegate.instance(),title:Ke(je.nextRecording),contextTypes:()=>Qe((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Alt+Right"},{platform:"mac",shortcut:"Meta+Right"}]}),t.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:t.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:Ke(je.startStopRecording),iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,contextTypes:()=>void 0===Ye?[]:(e=>[e.ProfilesPanel.JSProfilerPanel])(Ye),loadActionDelegate:async()=>(await Xe()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.Settings.registerSettingExtension({category:i.Settings.SettingCategory.PERFORMANCE,storageType:i.Settings.SettingStorageType.Synced,title:Ke(je.hideChromeFrameInLayersView),settingName:"frameViewerHideChromeWindow",settingType:i.Settings.SettingType.BOOLEAN,defaultValue:!1}),i.Linkifier.registerLinkifier({contextTypes:()=>Qe((e=>[e.CLSLinkifier.CLSRect])),loadLinkifier:async()=>(await Je()).CLSLinkifier.Linkifier.instance()}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.TIMELINE_MENU_OPEN,actionId:"timeline.load-from-file",order:10}),t.ContextMenu.registerItem({location:t.ContextMenu.ItemLocation.TIMELINE_MENU_OPEN,actionId:"timeline.save-to-file",order:15});const Ze={webaudio:"WebAudio",audio:"audio",showWebaudio:"Show WebAudio"},$e=e.i18n.registerUIStrings("panels/web_audio/web_audio-meta.ts",Ze),et=e.i18n.getLazilyComputedLocalizedString.bind(void 0,$e);let tt;t.ViewManager.registerViewExtension({location:"drawer-view",id:"web-audio",title:et(Ze.webaudio),commandPrompt:et(Ze.showWebaudio),persistence:"closeable",order:100,loadView:async()=>(await async function(){return tt||(tt=await import("../../panels/web_audio/web_audio.js")),tt}()).WebAudioView.WebAudioView.instance(),tags:[et(Ze.audio)]});const it={webauthn:"WebAuthn",showWebauthn:"Show WebAuthn"},ot=e.i18n.registerUIStrings("panels/webauthn/webauthn-meta.ts",it),nt=e.i18n.getLazilyComputedLocalizedString.bind(void 0,ot);let at;t.ViewManager.registerViewExtension({location:"drawer-view",id:"webauthn-pane",title:nt(it.webauthn),commandPrompt:nt(it.showWebauthn),order:100,persistence:"closeable",loadView:async()=>(await async function(){return at||(at=await import("../../panels/webauthn/webauthn.js")),at}()).WebauthnPane.WebauthnPaneImpl.instance(),experiment:o.Runtime.ExperimentName.WEBAUTHN_PANE});const rt={resetView:"Reset view",switchToPanMode:"Switch to pan mode",switchToRotateMode:"Switch to rotate mode",zoomIn:"Zoom in",zoomOut:"Zoom out",panOrRotateUp:"Pan or rotate up",panOrRotateDown:"Pan or rotate down",panOrRotateLeft:"Pan or rotate left",panOrRotateRight:"Pan or rotate right"},st=e.i18n.registerUIStrings("panels/layer_viewer/layer_viewer-meta.ts",rt),lt=e.i18n.getLazilyComputedLocalizedString.bind(void 0,st);t.ActionRegistration.registerActionExtension({actionId:"layers.reset-view",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.resetView),bindings:[{shortcut:"0"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.pan-mode",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.switchToPanMode),bindings:[{shortcut:"x"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.rotate-mode",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.switchToRotateMode),bindings:[{shortcut:"v"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.zoom-in",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.zoomIn),bindings:[{shortcut:"Shift+Plus"},{shortcut:"NumpadPlus"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.zoom-out",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.zoomOut),bindings:[{shortcut:"Shift+Minus"},{shortcut:"NumpadMinus"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.up",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.panOrRotateUp),bindings:[{shortcut:"Up"},{shortcut:"w"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.down",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.panOrRotateDown),bindings:[{shortcut:"Down"},{shortcut:"s"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.left",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.panOrRotateLeft),bindings:[{shortcut:"Left"},{shortcut:"a"}]}),t.ActionRegistration.registerActionExtension({actionId:"layers.right",category:t.ActionRegistration.ActionCategory.LAYERS,title:lt(rt.panOrRotateRight),bindings:[{shortcut:"Right"},{shortcut:"d"}]}); diff --git a/chii/entrypoints/devtools_app/devtools_app.js b/chii/entrypoints/devtools_app/devtools_app.js new file mode 100644 index 00000000..173ea613 --- /dev/null +++ b/chii/entrypoints/devtools_app/devtools_app.js @@ -0,0 +1 @@ +Root.allDescriptors.push(...[]);Root.applicationDescriptor={"modules":[]};import*as RootModule from'../../core/root/root.js';import'../shell/shell.js';import'./devtools_app-meta-files.js';import*as Main from'../main/main.js';import*as Startup from'../startup/startup.js';new Main.MainImpl.MainImpl();Startup.RuntimeInstantiator.startApplication('devtools_app'); \ No newline at end of file diff --git a/chii/entrypoints/formatter_worker/FormatterActions.js b/chii/entrypoints/formatter_worker/FormatterActions.js new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/chii/entrypoints/formatter_worker/FormatterActions.js @@ -0,0 +1 @@ + diff --git a/chii/entrypoints/formatter_worker/formatter_worker-entrypoint.js b/chii/entrypoints/formatter_worker/formatter_worker-entrypoint.js new file mode 100644 index 00000000..c02578bd --- /dev/null +++ b/chii/entrypoints/formatter_worker/formatter_worker-entrypoint.js @@ -0,0 +1 @@ +import*as e from"../../core/platform/platform.js";import*as t from"./formatter_worker.js";self.onmessage=function(a){const s=a.data.method,r=a.data.params;if(s)switch(s){case"format":self.postMessage(t.FormatterWorker.format(r.mimeType,r.content,r.indentString));break;case"parseCSS":t.CSSRuleParser.parseCSS(r.content,self.postMessage);break;case"htmlOutline":t.HTMLOutline.htmlOutline(r.content,self.postMessage);break;case"javaScriptOutline":t.JavaScriptOutline.javaScriptOutline(r.content,self.postMessage);break;case"javaScriptIdentifiers":self.postMessage(t.FormatterWorker.javaScriptIdentifiers(r.content));break;case"evaluatableJavaScriptSubstring":self.postMessage(t.FormatterWorker.evaluatableJavaScriptSubstring(r.content));break;case"argumentsList":self.postMessage(t.FormatterWorker.argumentsList(r.content));break;default:e.assertNever(s,`Unsupport method name: ${s}`)}},self.postMessage("workerReady"); diff --git a/chii/entrypoints/formatter_worker/formatter_worker.js b/chii/entrypoints/formatter_worker/formatter_worker.js new file mode 100644 index 00000000..e87d9758 --- /dev/null +++ b/chii/entrypoints/formatter_worker/formatter_worker.js @@ -0,0 +1 @@ +import*as e from"../../core/platform/platform.js";import*as t from"../../core/root/root.js";import*as r from"../../third_party/acorn/acorn.js";import*as n from"../../models/text_utils/text_utils.js";import*as i from"../../third_party/acorn-loose/acorn-loose.js";var a;!function(){function e(e,t,r){for(var n in t||(t={}),e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function t(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var a=n||0,o=i||0;;){var s=e.indexOf("\t",a);if(s<0||s>=t)return o+(t-a);o+=s-a,o+=r-o%r,a=s+1}}function r(){}var n=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};n.prototype.eol=function(){return this.pos>=this.string.length},n.prototype.sol=function(){return this.pos==this.lineStart},n.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},n.prototype.next=function(){if(this.post},n.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},n.prototype.skipToEnd=function(){this.pos=this.string.length},n.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},n.prototype.backUp=function(e){this.pos-=e},n.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},n.prototype.current=function(){return this.string.slice(this.start,this.pos)},n.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},n.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},n.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var i={},a={};function o(t){if("string"==typeof t&&a.hasOwnProperty(t))t=a[t];else if(t&&"string"==typeof t.name&&a.hasOwnProperty(t.name)){var n=a[t.name];"string"==typeof n&&(n={name:n}),i=n,s=t,Object.create?l=Object.create(i):(r.prototype=i,l=new r),s&&e(s,l),(t=l).name=n.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return o("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return o("application/json")}var i,s,l;return"string"==typeof t?{name:t}:t||{name:"null"}}var s={};var l,c={__proto__:null,modes:i,mimeModes:a,defineMode:function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),i[e]=t},defineMIME:function(e,t){a[e]=t},resolveMode:o,getMode:function e(t,r){r=o(r);var n=i[r.name];if(!n)return e(t,"text/plain");var a=n(t,r);if(s.hasOwnProperty(r.name)){var l=s[r.name];for(var c in l)l.hasOwnProperty(c)&&(a.hasOwnProperty(c)&&(a["_"+c]=a[c]),a[c]=l[c])}if(a.name=r.name,r.helperType&&(a.helperType=r.helperType),r.modeProps)for(var u in r.modeProps)a[u]=r.modeProps[u];return a},modeExtensions:s,extendMode:function(t,r){e(r,s.hasOwnProperty(t)?s[t]:s[t]={})},copyState:function(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r},innerMode:function(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}},startState:function(e,t,r){return!e.startState||e.startState(t,r)}},u="undefined"!=typeof globalThis?globalThis:window;for(var d in u.CodeMirror={},CodeMirror.StringStream=n,c)CodeMirror[d]=c[d];CodeMirror.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),CodeMirror.defineMIME("text/plain","null"),CodeMirror.registerHelper=CodeMirror.registerGlobalHelper=Math.min,CodeMirror.splitLines=function(e){return e.split(/\r?\n|\r/)},CodeMirror.countColumn=t,CodeMirror.defaults={indentUnit:2},l=function(e){e.runMode=function(t,r,n,i){var a=e.getMode(e.defaults,r),o=i&&i.tabSize||e.defaults.tabSize;if(n.appendChild){var s=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<9),l=n,c=0;l.innerHTML="",n=function(e,t){if("\n"==e)return l.appendChild(document.createTextNode(s?"\r":e)),void(c=0);for(var r="",n=0;;){var i=e.indexOf("\t",n);if(-1==i){r+=e.slice(n),c+=e.length-n;break}c+=i-n,r+=e.slice(n,i);var a=o-c%o;c+=a;for(var u=0;u*\/]/.test(r)?x(null,"select-op"):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?x("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(r)?x(null,r):e.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(e.current())&&(t.tokenize=C),x("variable callee","variable")):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),x("property","word")):x(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),x("number","unit")):e.match(/^-[\w\\\-]*/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?x("variable-2","variable-definition"):x("variable-2","variable")):e.match(/^\w+-/)?x("meta","meta"):void 0}function T(e){return function(t,r){for(var n,i=!1;null!=(n=t.next());){if(n==e&&!i){")"==e&&t.backUp(1);break}i=!i&&"\\"==n}return(n==e||!i&&")"!=e)&&(r.tokenize=null),x("string","string")}}function C(e,t){return e.next(),e.match(/^\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=T(")"),x(null,"(")}function E(e,t,r){this.type=e,this.indent=t,this.prev=r}function O(e,t,r,n){return e.context=new E(r,t.indentation()+(!1===n?0:o),e.context),r}function L(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function z(e,t,r){return N[r.context.type](e,t,r)}function M(e,t,r,n){for(var i=n||1;i>0;i--)r.context=r.context.prev;return z(e,t,r)}function I(e){var t=e.current().toLowerCase();a=b.hasOwnProperty(t)?"atom":g.hasOwnProperty(t)?"keyword":"variable"}var N={top:function(e,t,r){if("{"==e)return O(r,t,"block");if("}"==e&&r.context.prev)return L(r);if(w&&/@component/i.test(e))return O(r,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return O(r,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return O(r,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return O(r,t,"at");if("hash"==e)a="builtin";else if("word"==e)a="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return O(r,t,"interpolation");if(":"==e)return"pseudo";if(y&&"("==e)return O(r,t,"parens")}return r.context.type},block:function(e,t,r){if("word"==e){var n=t.current().toLowerCase();return p.hasOwnProperty(n)?(a="property","maybeprop"):f.hasOwnProperty(n)?(a=v?"string-2":"property","maybeprop"):y?(a=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(a+=" error","maybeprop")}return"meta"==e?"block":y||"hash"!=e&&"qualifier"!=e?N.top(e,t,r):(a="error","block")},maybeprop:function(e,t,r){return":"==e?O(r,t,"prop"):z(e,t,r)},prop:function(e,t,r){if(";"==e)return L(r);if("{"==e&&y)return O(r,t,"propBlock");if("}"==e||"{"==e)return M(e,t,r);if("("==e)return O(r,t,"parens");if("hash"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if("word"==e)I(t);else if("interpolation"==e)return O(r,t,"interpolation")}else a+=" error";return"prop"},propBlock:function(e,t,r){return"}"==e?L(r):"word"==e?(a="property","maybeprop"):r.context.type},parens:function(e,t,r){return"{"==e||"}"==e?M(e,t,r):")"==e?L(r):"("==e?O(r,t,"parens"):"interpolation"==e?O(r,t,"interpolation"):("word"==e&&I(t),"parens")},pseudo:function(e,t,r){return"meta"==e?"pseudo":"word"==e?(a="variable-3",r.context.type):z(e,t,r)},documentTypes:function(e,t,r){return"word"==e&&l.hasOwnProperty(t.current())?(a="tag",r.context.type):N.atBlock(e,t,r)},atBlock:function(e,t,r){if("("==e)return O(r,t,"atBlock_parens");if("}"==e||";"==e)return M(e,t,r);if("{"==e)return L(r)&&O(r,t,y?"block":"top");if("interpolation"==e)return O(r,t,"interpolation");if("word"==e){var n=t.current().toLowerCase();a="only"==n||"not"==n||"and"==n||"or"==n?"keyword":c.hasOwnProperty(n)?"attribute":u.hasOwnProperty(n)?"property":d.hasOwnProperty(n)?"keyword":p.hasOwnProperty(n)?"property":f.hasOwnProperty(n)?v?"string-2":"property":b.hasOwnProperty(n)?"atom":g.hasOwnProperty(n)?"keyword":"error"}return r.context.type},atComponentBlock:function(e,t,r){return"}"==e?M(e,t,r):"{"==e?L(r)&&O(r,t,y?"block":"top",!1):("word"==e&&(a="error"),r.context.type)},atBlock_parens:function(e,t,r){return")"==e?L(r):"{"==e||"}"==e?M(e,t,r,2):N.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,r){return"{"==e?O(r,t,"restricted_atBlock"):"word"==e&&"@counter-style"==r.stateArg?(a="variable","restricted_atBlock_before"):z(e,t,r)},restricted_atBlock:function(e,t,r){return"}"==e?(r.stateArg=null,L(r)):"word"==e?(a="@font-face"==r.stateArg&&!m.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==r.stateArg&&!h.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(e,t,r){return"word"==e?(a="variable","keyframes"):"{"==e?O(r,t,"top"):z(e,t,r)},at:function(e,t,r){return";"==e?L(r):"{"==e||"}"==e?M(e,t,r):("word"==e?a="tag":"hash"==e&&(a="builtin"),"at")},interpolation:function(e,t,r){return"}"==e?L(r):"{"==e||";"==e?M(e,t,r):("word"==e?a="variable":"variable"!=e&&"("!=e&&")"!=e&&(a="error"),"interpolation")}};return{startState:function(e){return{tokenize:null,state:n?"block":"top",stateArg:null,context:new E(n?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||S)(e,t);return r&&"object"==typeof r&&(i=r[1],r=r[0]),a=r,"comment"!=i&&(t.state=N[t.state](i,e,t)),a},indent:function(e,t){var r=e.context,n=t&&t.charAt(0),i=r.indent;return"prop"!=r.type||"}"!=n&&")"!=n||(r=r.prev),r.prev&&("}"!=n||"block"!=r.type&&"top"!=r.type&&"interpolation"!=r.type&&"restricted_atBlock"!=r.type?(")"!=n||"parens"!=r.type&&"atBlock_parens"!=r.type)&&("{"!=n||"at"!=r.type&&"atBlock"!=r.type)||(i=Math.max(0,r.indent-o)):i=(r=r.prev).indent),i},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:k,fold:"brace"}}));var r=["domain","regexp","url","url-prefix"],n=t(r),i=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],a=t(i),o=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover","prefers-color-scheme"],s=t(o),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive","dark","light"],c=t(l),u=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","all","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","binding","bleed","block-size","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-height-step","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotate","rotation","rotation-point","row-gap","ruby-align","ruby-overhang","ruby-position","ruby-span","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-type","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-orientation","text-outline","text-overflow","text-rendering","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","touch-action","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","paint-order","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],d=t(u),p=["border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","margin-block","margin-block-end","margin-block-start","margin-inline","margin-inline-end","margin-inline-start","padding-block","padding-block-end","padding-block-start","padding-inline","padding-inline-end","padding-inline-start","scroll-snap-stop","scrollbar-3d-light-color","scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-track-color","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","shape-inside","zoom"],f=t(p),m=t(["font-display","font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),h=t(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),g=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],b=t(g),y=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","manipulation","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiple_mask_images","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],k=t(y),w=r.concat(i).concat(o).concat(l).concat(u).concat(p).concat(g).concat(y);function v(e,t){for(var r,n=!1;null!=(r=e.next());){if(n&&"/"==r){t.tokenize=null;break}n="*"==r}return["comment","comment"]}e.registerHelper("hintWords","css",w),e.defineMIME("text/css",{documentTypes:n,mediaTypes:a,mediaFeatures:s,mediaValueKeywords:c,propertyKeywords:d,nonStandardPropertyKeywords:f,fontProperties:m,counterDescriptors:h,colorKeywords:b,valueKeywords:k,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=v,v(e,t))}},name:"css"}),e.defineMIME("text/x-scss",{mediaTypes:a,mediaFeatures:s,mediaValueKeywords:c,propertyKeywords:d,nonStandardPropertyKeywords:f,colorKeywords:b,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=v,v(e,t)):["operator","operator"]},":":function(e){return!!e.match(/^\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),e.defineMIME("text/x-less",{mediaTypes:a,mediaFeatures:s,mediaValueKeywords:c,propertyKeywords:d,nonStandardPropertyKeywords:f,colorKeywords:b,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=v,v(e,t)):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),e.defineMIME("text/x-gss",{documentTypes:n,mediaTypes:a,mediaFeatures:s,propertyKeywords:d,nonStandardPropertyKeywords:f,fontProperties:m,counterDescriptors:h,colorKeywords:b,valueKeywords:k,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=v,v(e,t))}},name:"css",helperType:"gss"})},"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}((function(e){var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},r={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode("xml",(function(n,i){var a,o,s=n.indentUnit,l={},c=i.htmlMode?t:r;for(var u in c)l[u]=c[u];for(var u in i)l[u]=i[u];function d(e,t){function r(r){return t.tokenize=r,r(e,t)}var n=e.next();return"<"==n?e.eat("!")?e.eat("[")?e.match("CDATA[")?r(f("atom","]]>")):null:e.match("--")?r(f("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),r(m(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=f("meta","?>"),"meta"):(a=e.eat("/")?"closeTag":"openTag",t.tokenize=p,"tag bracket"):"&"==n?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function p(e,t){var r,n,i=e.next();if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=d,a=">"==i?"endTag":"selfcloseTag","tag bracket";if("="==i)return a="equals",null;if("<"==i){t.tokenize=d,t.state=y,t.tagName=t.tagStart=null;var o=t.tokenize(e,t);return o?o+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(r=i,n=function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=p;break}return"string"},n.isInAttribute=!0,n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(e,t){return function(r,n){for(;!r.eol();){if(r.match(t)){n.tokenize=d;break}r.next()}return e}}function m(e){return function(t,r){for(var n;null!=(n=t.next());){if("<"==n)return r.tokenize=m(e+1),r.tokenize(t,r);if(">"==n){if(1==e){r.tokenize=d;break}return r.tokenize=m(e-1),r.tokenize(t,r)}}return"meta"}}function h(e,t,r){this.prev=e.context,this.tagName=t||"",this.indent=e.indented,this.startOfLine=r,(l.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function g(e){e.context&&(e.context=e.context.prev)}function b(e,t){for(var r;;){if(!e.context)return;if(r=e.context.tagName,!l.contextGrabbers.hasOwnProperty(r)||!l.contextGrabbers[r].hasOwnProperty(t))return;g(e)}}function y(e,t,r){return"openTag"==e?(r.tagStart=t.column(),k):"closeTag"==e?w:y}function k(e,t,r){return"word"==e?(r.tagName=t.current(),o="tag",S):l.allowMissingTagName&&"endTag"==e?(o="tag bracket",S(e,t,r)):(o="error",k)}function w(e,t,r){if("word"==e){var n=t.current();return r.context&&r.context.tagName!=n&&l.implicitlyClosed.hasOwnProperty(r.context.tagName)&&g(r),r.context&&r.context.tagName==n||!1===l.matchClosing?(o="tag",v):(o="tag error",x)}return l.allowMissingTagName&&"endTag"==e?(o="tag bracket",v(e,t,r)):(o="error",x)}function v(e,t,r){return"endTag"!=e?(o="error",v):(g(r),y)}function x(e,t,r){return o="error",v(e,0,r)}function S(e,t,r){if("word"==e)return o="attribute",T;if("endTag"==e||"selfcloseTag"==e){var n=r.tagName,i=r.tagStart;return r.tagName=r.tagStart=null,"selfcloseTag"==e||l.autoSelfClosers.hasOwnProperty(n)?b(r,n):(b(r,n),r.context=new h(r,n,i==r.indented)),y}return o="error",S}function T(e,t,r){return"equals"==e?C:(l.allowMissing||(o="error"),S(e,0,r))}function C(e,t,r){return"string"==e?E:"word"==e&&l.allowUnquoted?(o="string",S):(o="error",S(e,0,r))}function E(e,t,r){return"string"==e?E:S(e,0,r)}return d.isInText=!0,{startState:function(e){var t={tokenize:d,state:y,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var r=t.tokenize(e,t);return(r||a)&&"comment"!=r&&(o=null,t.state=t.state(a||r,e,t),o&&(r="error"==o?r+" error":o)),r},indent:function(t,r,n){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+s;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=p&&t.tokenize!=d)return n?n.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==l.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+s*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(e){e.state==C&&(e.state=S)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],r=e.context;r;r=r.prev)t.push(r.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}((function(e){e.defineMode("javascript",(function(t,r){var n,i,a=t.indentUnit,o=r.statementIndent,s=r.jsonld,l=r.json||s,c=!1!==r.trackScope,u=r.typescript,d=r.wordCharacters||/[\w$\xa1-\uffff]/,p=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),i=e("keyword d"),a=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:i,break:i,continue:i,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:a,typeof:a,instanceof:a,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),f=/[+\-*&%=<>!?|~^@]/,m=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function h(e,t,r){return n=e,i=r,t}function g(e,t){var r,n=e.next();if('"'==n||"'"==n)return t.tokenize=(r=n,function(e,t){var n,i=!1;if(s&&"@"==e.peek()&&e.match(m))return t.tokenize=g,h("jsonld-keyword","meta");for(;null!=(n=e.next())&&(n!=r||i);)i=!i&&"\\"==n;return i||(t.tokenize=g),h("string","string")}),t.tokenize(e,t);if("."==n&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return h("number","number");if("."==n&&e.match(".."))return h("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return h(n);if("="==n&&e.eat(">"))return h("=>","operator");if("0"==n&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return h("number","number");if(/\d/.test(n))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),h("number","number");if("/"==n)return e.eat("*")?(t.tokenize=b,b(e,t)):e.eat("/")?(e.skipToEnd(),h("comment","comment")):Ge(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),h("regexp","string-2")):(e.eat("="),h("operator","operator",e.current()));if("`"==n)return t.tokenize=y,y(e,t);if("#"==n&&"!"==e.peek())return e.skipToEnd(),h("meta","meta");if("#"==n&&e.eatWhile(d))return h("variable","property");if("<"==n&&e.match("!--")||"-"==n&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),h("comment","comment");if(f.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-|&?]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),"?"==n&&e.eat(".")?h("."):h("operator","operator",e.current());if(d.test(n)){e.eatWhile(d);var i=e.current();if("."!=t.lastType){if(p.propertyIsEnumerable(i)){var a=p[i];return h(a.type,a.style,i)}if("async"==i&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return h("async","keyword",i)}return h("variable","variable",i)}}function b(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=g;break}n="*"==r}return h("comment","comment")}function y(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=g;break}n=!n&&"\\"==r}return h("quasi","string-2",e.current())}function k(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(u){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var i=0,a=!1,o=r-1;o>=0;--o){var s=e.string.charAt(o),l="([{}])".indexOf(s);if(l>=0&&l<3){if(!i){++o;break}if(0==--i){"("==s&&(a=!0);break}}else if(l>=3&&l<6)++i;else if(d.test(s))a=!0;else if(/["'\/`]/.test(s))for(;;--o){if(0==o)return;if(e.string.charAt(o-1)==s&&"\\"!=e.string.charAt(o-2)){o--;break}}else if(a&&!i){++o;break}}a&&!i&&(t.fatArrowAt=o)}}var w={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function v(e,t,r,n,i,a){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=a,null!=n&&(this.align=n)}function x(e,t){if(!c)return!1;for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var S={state:null,column:null,marked:null,cc:null};function T(){for(var e=arguments.length-1;e>=0;e--)S.cc.push(arguments[e])}function C(){return T.apply(null,arguments),!0}function E(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function O(e){var t=S.state;if(S.marked="def",c){if(t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var n=L(e,t.context);if(null!=n)return void(t.context=n)}else if(!E(e,t.localVars))return void(t.localVars=new I(e,t.localVars));r.globalVars&&!E(e,t.globalVars)&&(t.globalVars=new I(e,t.globalVars))}}function L(e,t){if(t){if(t.block){var r=L(e,t.prev);return r?r==t.prev?t:new M(r,t.vars,!0):null}return E(e,t.vars)?t:new M(t.prev,new I(e,t.vars),!1)}return null}function z(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function M(e,t,r){this.prev=e,this.vars=t,this.block=r}function I(e,t){this.name=e,this.next=t}var N=new I("this",new I("arguments",null));function j(){S.state.context=new M(S.state.context,S.state.localVars,!1),S.state.localVars=N}function P(){S.state.context=new M(S.state.context,S.state.localVars,!0),S.state.localVars=null}function A(){S.state.localVars=S.state.context.vars,S.state.context=S.state.context.prev}function _(e,t){var r=function(){var r=S.state,n=r.indented;if("stat"==r.lexical.type)n=r.lexical.indented;else for(var i=r.lexical;i&&")"==i.type&&i.align;i=i.prev)n=i.indented;r.lexical=new v(n,S.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function V(){var e=S.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function F(e){return function t(r){return r==e?C():";"==e||"}"==r||")"==r||"]"==r?T():C(t)}}function B(e,t){return"var"==e?C(_("vardef",t),ve,F(";"),V):"keyword a"==e?C(_("form"),R,B,V):"keyword b"==e?C(_("form"),B,V):"keyword d"==e?S.stream.match(/^\s*$/,!1)?C():C(_("stat"),K,F(";"),V):"debugger"==e?C(F(";")):"{"==e?C(_("}"),P,se,V,A):";"==e?C():"if"==e?("else"==S.state.lexical.info&&S.state.cc[S.state.cc.length-1]==V&&S.state.cc.pop()(),C(_("form"),R,B,V,Oe)):"function"==e?C(Ie):"for"==e?C(_("form"),P,Le,B,A,V):"class"==e||u&&"interface"==t?(S.marked="keyword",C(_("form","class"==e?e:t),_e,V)):"variable"==e?u&&"declare"==t?(S.marked="keyword",C(B)):u&&("module"==t||"enum"==t||"type"==t)&&S.stream.match(/^\s*\w/,!1)?(S.marked="keyword","enum"==t?C(Je):"type"==t?C(je,F("operator"),pe,F(";")):C(_("form"),xe,F("{"),_("}"),se,V,V)):u&&"namespace"==t?(S.marked="keyword",C(_("form"),W,B,V)):u&&"abstract"==t?(S.marked="keyword",C(B)):C(_("stat"),ee):"switch"==e?C(_("form"),R,F("{"),_("}","switch"),P,se,V,V,A):"case"==e?C(W,F(":")):"default"==e?C(F(":")):"catch"==e?C(_("form"),j,q,B,V,A):"export"==e?C(_("stat"),qe,V):"import"==e?C(_("stat"),De,V):"async"==e?C(B):"@"==t?C(W,B):T(_("stat"),W,F(";"),V)}function q(e){if("("==e)return C(Pe,F(")"))}function W(e,t){return $(e,t,!1)}function D(e,t){return $(e,t,!0)}function R(e){return"("!=e?T():C(_(")"),K,F(")"),V)}function $(e,t,r){if(S.state.fatArrowAt==S.stream.start){var n=r?X:G;if("("==e)return C(j,_(")"),ae(Pe,")"),V,F("=>"),n,A);if("variable"==e)return T(j,xe,F("=>"),n,A)}var i=r?H:U;return w.hasOwnProperty(e)?C(i):"function"==e?C(Ie,i):"class"==e||u&&"interface"==t?(S.marked="keyword",C(_("form"),Ae,V)):"keyword c"==e||"async"==e?C(r?D:W):"("==e?C(_(")"),K,F(")"),V,i):"operator"==e||"spread"==e?C(r?D:W):"["==e?C(_("]"),He,V,i):"{"==e?oe(re,"}",null,i):"quasi"==e?T(J,i):"new"==e?C(function(e){return function(t){return"."==t?C(e?Q:Z):"variable"==t&&u?C(ye,e?H:U):T(e?D:W)}}(r)):C()}function K(e){return e.match(/[;\}\)\],]/)?T():T(W)}function U(e,t){return","==e?C(K):H(e,t,!1)}function H(e,t,r){var n=0==r?U:H,i=0==r?W:D;return"=>"==e?C(j,r?X:G,A):"operator"==e?/\+\+|--/.test(t)||u&&"!"==t?C(n):u&&"<"==t&&S.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?C(_(">"),ae(pe,">"),V,n):"?"==t?C(W,F(":"),i):C(i):"quasi"==e?T(J,n):";"!=e?"("==e?oe(D,")","call",n):"."==e?C(te,n):"["==e?C(_("]"),K,F("]"),V,n):u&&"as"==t?(S.marked="keyword",C(pe,n)):"regexp"==e?(S.state.lastType=S.marked="operator",S.stream.backUp(S.stream.pos-S.stream.start-1),C(i)):void 0:void 0}function J(e,t){return"quasi"!=e?T():"${"!=t.slice(t.length-2)?C(J):C(W,Y)}function Y(e){if("}"==e)return S.marked="string-2",S.state.tokenize=y,C(J)}function G(e){return k(S.stream,S.state),T("{"==e?B:W)}function X(e){return k(S.stream,S.state),T("{"==e?B:D)}function Z(e,t){if("target"==t)return S.marked="keyword",C(U)}function Q(e,t){if("target"==t)return S.marked="keyword",C(H)}function ee(e){return":"==e?C(V,B):T(U,F(";"),V)}function te(e){if("variable"==e)return S.marked="property",C()}function re(e,t){return"async"==e?(S.marked="property",C(re)):"variable"==e||"keyword"==S.style?(S.marked="property","get"==t||"set"==t?C(ne):(u&&S.state.fatArrowAt==S.stream.start&&(r=S.stream.match(/^\s*:\s*/,!1))&&(S.state.fatArrowAt=S.stream.pos+r[0].length),C(ie))):"number"==e||"string"==e?(S.marked=s?"property":S.style+" property",C(ie)):"jsonld-keyword"==e?C(ie):u&&z(t)?(S.marked="keyword",C(re)):"["==e?C(W,le,F("]"),ie):"spread"==e?C(D,ie):"*"==t?(S.marked="keyword",C(re)):":"==e?T(ie):void 0;var r}function ne(e){return"variable"!=e?T(ie):(S.marked="property",C(Ie))}function ie(e){return":"==e?C(D):"("==e?T(Ie):void 0}function ae(e,t,r){function n(i,a){if(r?r.indexOf(i)>-1:","==i){var o=S.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),C((function(r,n){return r==t||n==t?T():T(e)}),n)}return i==t||a==t?C():r&&r.indexOf(";")>-1?T(e):C(F(t))}return function(r,i){return r==t||i==t?C():T(e,n)}}function oe(e,t,r){for(var n=3;n"),pe):void 0}function fe(e){if("=>"==e)return C(pe)}function me(e){return e.match(/[\}\)\]]/)?C():","==e||";"==e?C(me):T(he,me)}function he(e,t){return"variable"==e||"keyword"==S.style?(S.marked="property",C(he)):"?"==t||"number"==e||"string"==e?C(he):":"==e?C(pe):"["==e?C(F("variable"),ce,F("]"),he):"("==e?T(Ne,he):e.match(/[;\}\)\],]/)?void 0:C()}function ge(e,t){return"variable"==e&&S.stream.match(/^\s*[?:]/,!1)||"?"==t?C(ge):":"==e?C(pe):"spread"==e?C(ge):T(pe)}function be(e,t){return"<"==t?C(_(">"),ae(pe,">"),V,be):"|"==t||"."==e||"&"==t?C(pe):"["==e?C(pe,F("]"),be):"extends"==t||"implements"==t?(S.marked="keyword",C(pe)):"?"==t?C(pe,F(":"),pe):void 0}function ye(e,t){if("<"==t)return C(_(">"),ae(pe,">"),V,be)}function ke(){return T(pe,we)}function we(e,t){if("="==t)return C(pe)}function ve(e,t){return"enum"==t?(S.marked="keyword",C(Je)):T(xe,le,Ce,Ee)}function xe(e,t){return u&&z(t)?(S.marked="keyword",C(xe)):"variable"==e?(O(t),C()):"spread"==e?C(xe):"["==e?oe(Te,"]"):"{"==e?oe(Se,"}"):void 0}function Se(e,t){return"variable"!=e||S.stream.match(/^\s*:/,!1)?("variable"==e&&(S.marked="property"),"spread"==e?C(xe):"}"==e?T():"["==e?C(W,F("]"),F(":"),Se):C(F(":"),xe,Ce)):(O(t),C(Ce))}function Te(){return T(xe,Ce)}function Ce(e,t){if("="==t)return C(D)}function Ee(e){if(","==e)return C(ve)}function Oe(e,t){if("keyword b"==e&&"else"==t)return C(_("form","else"),B,V)}function Le(e,t){return"await"==t?C(Le):"("==e?C(_(")"),ze,V):void 0}function ze(e){return"var"==e?C(ve,Me):"variable"==e?C(Me):T(Me)}function Me(e,t){return")"==e?C():";"==e?C(Me):"in"==t||"of"==t?(S.marked="keyword",C(W,Me)):T(W,Me)}function Ie(e,t){return"*"==t?(S.marked="keyword",C(Ie)):"variable"==e?(O(t),C(Ie)):"("==e?C(j,_(")"),ae(Pe,")"),V,ue,B,A):u&&"<"==t?C(_(">"),ae(ke,">"),V,Ie):void 0}function Ne(e,t){return"*"==t?(S.marked="keyword",C(Ne)):"variable"==e?(O(t),C(Ne)):"("==e?C(j,_(")"),ae(Pe,")"),V,ue,A):u&&"<"==t?C(_(">"),ae(ke,">"),V,Ne):void 0}function je(e,t){return"keyword"==e||"variable"==e?(S.marked="type",C(je)):"<"==t?C(_(">"),ae(ke,">"),V):void 0}function Pe(e,t){return"@"==t&&C(W,Pe),"spread"==e?C(Pe):u&&z(t)?(S.marked="keyword",C(Pe)):u&&"this"==e?C(le,Ce):T(xe,le,Ce)}function Ae(e,t){return"variable"==e?_e(e,t):Ve(e,t)}function _e(e,t){if("variable"==e)return O(t),C(Ve)}function Ve(e,t){return"<"==t?C(_(">"),ae(ke,">"),V,Ve):"extends"==t||"implements"==t||u&&","==e?("implements"==t&&(S.marked="keyword"),C(u?pe:W,Ve)):"{"==e?C(_("}"),Fe,V):void 0}function Fe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||u&&z(t))&&S.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(S.marked="keyword",C(Fe)):"variable"==e||"keyword"==S.style?(S.marked="property",C(Be,Fe)):"number"==e||"string"==e?C(Be,Fe):"["==e?C(W,le,F("]"),Be,Fe):"*"==t?(S.marked="keyword",C(Fe)):u&&"("==e?T(Ne,Fe):";"==e||","==e?C(Fe):"}"==e?C():"@"==t?C(W,Fe):void 0}function Be(e,t){if("?"==t)return C(Be);if(":"==e)return C(pe,Ce);if("="==t)return C(D);var r=S.state.lexical.prev;return T(r&&"interface"==r.info?Ne:Ie)}function qe(e,t){return"*"==t?(S.marked="keyword",C(Ue,F(";"))):"default"==t?(S.marked="keyword",C(W,F(";"))):"{"==e?C(ae(We,"}"),Ue,F(";")):T(B)}function We(e,t){return"as"==t?(S.marked="keyword",C(F("variable"))):"variable"==e?T(D,We):void 0}function De(e){return"string"==e?C():"("==e?T(W):"."==e?T(U):T(Re,$e,Ue)}function Re(e,t){return"{"==e?oe(Re,"}"):("variable"==e&&O(t),"*"==t&&(S.marked="keyword"),C(Ke))}function $e(e){if(","==e)return C(Re,$e)}function Ke(e,t){if("as"==t)return S.marked="keyword",C(Re)}function Ue(e,t){if("from"==t)return S.marked="keyword",C(W)}function He(e){return"]"==e?C():T(ae(D,"]"))}function Je(){return T(_("form"),xe,F("{"),_("}"),ae(Ye,"}"),V,V)}function Ye(){return T(xe,Ce)}function Ge(e,t,r){return t.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return A.lex=!0,V.lex=!0,{startState:function(e){var t={tokenize:g,lastType:"sof",cc:[],lexical:new v((e||0)-a,0,"block",!1),localVars:r.localVars,context:r.localVars&&new M(null,null,!1),indented:e||0};return r.globalVars&&"object"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),k(e,t)),t.tokenize!=b&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==n?r:(t.lastType="operator"!=n||"++"!=i&&"--"!=i?n:"incdec",function(e,t,r,n,i){var a=e.cc;for(S.state=e,S.stream=i,S.marked=null,S.cc=a,S.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((a.length?a.pop():l?W:B)(r,n)){for(;a.length&&a[a.length-1].lex;)a.pop()();return S.marked?S.marked:"variable"==r&&x(e,n)?"variable-2":t}}(t,r,n,i,e))},indent:function(t,n){if(t.tokenize==b||t.tokenize==y)return e.Pass;if(t.tokenize!=g)return 0;var i,s=n&&n.charAt(0),l=t.lexical;if(!/^\s*else\b/.test(n))for(var c=t.cc.length-1;c>=0;--c){var u=t.cc[c];if(u==V)l=l.prev;else if(u!=Oe&&u!=A)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(i=t.cc[t.cc.length-1])&&(i==U||i==H)&&!/^[,\.=+\-*:?[\(]/.test(n));)l=l.prev;o&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var d=l.type,p=s==d;return"vardef"==d?l.indented+("operator"==t.lastType||","==t.lastType?l.info.length+1:0):"form"==d&&"{"==s?l.indented:"form"==d?l.indented+a:"stat"==d?l.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||f.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,n)?o||a:0):"switch"!=l.info||p||0==r.doubleIndentSwitch?l.align?l.column+(p?0:1):l.indented+(p?0:a):l.indented+(/^(?:case|default)\b/.test(n)?a:2*a)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:s,jsonMode:l,expressionAllowed:Ge,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=W&&t!=D||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/manifest+json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}));class o{content;comments;tokenizer;textCursor;tokenLineStartInternal;tokenLineEndInternal;tokenColumnStartInternal;bufferedToken;constructor(t){this.content=t,this.comments=[],this.tokenizer=r.tokenizer(this.content,{onComment:this.comments,ecmaVersion:s,allowHashBang:!0});const i=e.StringUtilities.findLineEndingIndexes(this.content);this.textCursor=new n.TextCursor.TextCursor(i),this.tokenLineStartInternal=0,this.tokenLineEndInternal=0,this.tokenColumnStartInternal=0,0===this.comments.length&&this.nextTokenInternal()}static punctuator(e,t){return e.type!==r.tokTypes.num&&e.type!==r.tokTypes.regexp&&e.type!==r.tokTypes.string&&e.type!==r.tokTypes.name&&!e.type.keyword&&(!t||1===e.type.label.length&&-1!==t.indexOf(e.type.label))}static keyword(e,t){return Boolean(e.type.keyword)&&e.type!==r.tokTypes._true&&e.type!==r.tokTypes._false&&e.type!==r.tokTypes._null&&(!t||e.type.keyword===t)}static identifier(e,t){return e.type===r.tokTypes.name&&(!t||e.value===t)}static lineComment(e){return"Line"===e.type}static blockComment(e){return"Block"===e.type}nextTokenInternal(){if(this.comments.length){const e=this.comments.shift();return this.bufferedToken||0!==this.comments.length||(this.bufferedToken=this.tokenizer.getToken()),e}const e=this.bufferedToken;return this.bufferedToken=this.tokenizer.getToken(),e}nextToken(){const e=this.nextTokenInternal();return e&&e.type!==r.tokTypes.eof?(this.textCursor.advance(e.start),this.tokenLineStartInternal=this.textCursor.lineNumber(),this.tokenColumnStartInternal=this.textCursor.columnNumber(),this.textCursor.advance(e.end),this.tokenLineEndInternal=this.textCursor.lineNumber(),e):null}peekToken(){return this.comments.length?this.comments[0]:this.bufferedToken&&this.bufferedToken.type!==r.tokTypes.eof?this.bufferedToken:null}tokenLineStart(){return this.tokenLineStartInternal}tokenLineEnd(){return this.tokenLineEndInternal}tokenColumnStart(){return this.tokenColumnStartInternal}}const s=2022,l={};class c{beforeVisit;afterVisit;walkNulls;constructor(e,t){this.beforeVisit=e,this.afterVisit=t||function(){},this.walkNulls=!1}static get SkipSubtree(){return l}setWalkNulls(e){this.walkNulls=e}walk(e){this.innerWalk(e,null)}innerWalk(e,t){if(!e&&t&&this.walkNulls){const t={raw:"null",value:null,parent:null,type:"Literal"};e=t}if(!e)return;if(e.parent=t,this.beforeVisit.call(null,e)===c.SkipSubtree)return void this.afterVisit.call(null,e);const r=u[e.type];if(r){if("TemplateLiteral"===e.type){const t=e,r=t.expressions.length;for(let e=0;e0&&(this.nestingLevel-=1)}content(){return this.formattedContent.join("")+(this.newLines?"\n":"")}appendFormatting(){if(this.newLines){for(let e=0;e"===t[r]?this.builder.increaseNestingLevel():"<"===t[r]?this.builder.decreaseNestingLevel():"t"===t[r]&&(this.tokenizer.tokenLineStart()-this.lastLineNumber>1&&this.builder.addNewLine(!0),this.lastLineNumber=this.tokenizer.tokenLineEnd(),e&&this.builder.addToken(this.content.substring(e.start,e.end),this.fromOffset+e.start))}beforeVisit(e){if(!e.parent)return;let t;for(;(t=this.tokenizer.peekToken())&&t.start"}else if("SwitchStatement"===e.type){if(r.punctuator(n,"{"))return"tn>";if(r.punctuator(n,"}"))return"n"}else if("VariableDeclaration"===e.type){if(r.punctuator(n,",")){let t=!0;const r=e.declarations;for(let e=0;e":"t";if(r.punctuator(n,"}"))return e.body.length?"n";if(r.punctuator(n,"}"))return"n";if(r.keyword(n,"else")){const t=e.consequent&&"BlockStatement"===e.consequent.type?"st":"n"}else if("WhileStatement"===e.type){if(r.punctuator(n,")"))return e.body&&"BlockStatement"===e.body.type?"ts":"tn>"}else if("DoWhileStatement"===e.type){const t=e.body&&"BlockStatement"===e.body.type;if(r.keyword(n,"do"))return t?"ts":"tn>";if(r.keyword(n,"while"))return t?"sts":"n":r.punctuator(n,"}")?"=e.length);){const t=this.stack[this.stack.length-1];if(!t)break;if(r=n.indexOf("1;){const t=this.stack[this.stack.length-1];if(!t)break;this.popElement(new v(t.name,e.length,e.length,new Map,!1,!1))}function i(e,t,n,i,a){i+=e,r=a+=e;const o=n?new Set(n.split(" ")):new Set,s=new w(t,o,i,a);this.tokens.push(s),this.updateDOM(s);const l=this.stack[this.stack.length-1];if(l&&("script"===l.name||"style"===l.name)&&l.openTag&&l.openTag.endOffset===r)return L}}updateDOM(e){const t=e.value,r=e.type;switch(this.state){case"Initial":return void(!g(r,"bracket")||"<"!==t&&""!==t&&"/>"!==t||(this.onEndTag(e),this.state="Initial"));case"AttributeName":return void(r.size||"="!==t?!g(r,"bracket")||">"!==t&&"/>"!==t||(this.onEndTag(e),this.state="Initial"):this.state="AttributeValue");case"AttributeValue":return void(g(r,"string")?(this.attributes.set(this.attributeName,t),this.state="Tag"):!g(r,"bracket")||">"!==t&&"/>"!==t||(this.onEndTag(e),this.state="Initial"))}}onStartTag(e){this.tagName="",this.tagStartOffset=e.startOffset,this.tagEndOffset=null,this.attributes=new Map,this.attributeName="",this.isOpenTag="<"===e.value}onEndTag(e){this.tagEndOffset=e.endOffset;const t="/>"===e.value||y.has(this.tagName),r=new v(this.tagName,this.tagStartOffset||0,this.tagEndOffset,this.attributes,this.isOpenTag,t);this.onTagComplete(r)}onTagComplete(e){if(e.isOpenTag){const t=this.stack[this.stack.length-1];if(t){const n=k.get(t.name);t!==this.documentInternal&&t.openTag&&t.openTag.selfClosingTag?this.popElement(r(t,t.openTag.endOffset)):n&&n.has(e.name)&&this.popElement(r(t,e.startOffset)),this.pushElement(e)}return}let t=this.stack[this.stack.length-1];for(;this.stack.length>1&&t&&t.name!==e.name;)this.popElement(r(t,e.startOffset)),t=this.stack[this.stack.length-1];function r(e,t){return new v(e.name,t,t,new Map,!1,!1)}1!==this.stack.length&&this.popElement(e)}popElement(e){const t=this.stack.pop();t&&(t.closeTag=e)}pushElement(e){const t=this.stack[this.stack.length-1],r=new x(e.name);t&&(r.parent=t,t.children.push(r)),r.openTag=e,this.stack.push(r)}peekToken(){return this.tokenIndex{const i=new CodeMirror.StringStream(e);for(;!i.eol();){const e=t.token(i,r),a=i.current();if(n(a,e,i.start,i.start+a.length)===L)return;i.start=i.pos}}}const L={};t.Runtime.Runtime.queryParam("test")&&(console.error=()=>{});var z=Object.freeze({__proto__:null,createTokenizer:O,AbortTokenization:L,evaluatableJavaScriptSubstring:function(e){const t=r.tokenizer(e,{ecmaVersion:s});let n="";try{let i=t.getToken();for(;i.type!==r.tokTypes.eof&&o.punctuator(i);)i=t.getToken();const a=i.start;let s=i.end,l=0;for(;i.type!==r.tokTypes.eof;){const e=o.identifier(i),n=o.keyword(i,"this"),a=i.type===r.tokTypes.string;if(!n&&!e&&!a)break;for(s=i.end,i=t.getToken();o.punctuator(i,".[]");)o.punctuator(i,"[")&&l++,o.punctuator(i,"]")&&(s=l>0?i.end:s,l--),i=t.getToken()}n=e.substring(a,s)}catch(e){console.error(e)}return n},javaScriptIdentifiers:function(e){let t=null;try{t=r.parse(e,{ecmaVersion:s,ranges:!1})}catch(e){}const n=[],i=new c((function(e){if(a(e))return e.id&&n.push(e.id),c.SkipSubtree;if("Identifier"!==e.type)return;if(e.parent&&"MemberExpression"===e.parent.type){const t=e.parent;if(t.property===e&&!t.computed)return}return void n.push(e)}));function a(e){return"FunctionDeclaration"===e.type||"FunctionExpression"===e.type||"ArrowFunctionExpression"===e.type}if(!t||"Program"!==t.type||1!==t.body.length||!a(t.body[0]))return[];const o=t.body[0];for(const e of o.params)i.walk(e);return i.walk(o.body),n.map((e=>({name:"name"in e&&e.name||void 0,offset:e.start})))},format:function(t,r,n){let i;const a=new d(n=n||" "),o=e.StringUtilities.findLineEndingIndexes(r);try{switch(t){case"text/html":new h(a).format(r,o);break;case"text/x-scss":case"text/css":new M(a).format(r,o,0,r.length);break;case"text/javascript":case"application/javascript":new f(a).format(r,o,0,r.length);break;case"application/json":new C(a).format(r,o,0,r.length);break;default:new T(a).format(r,o,0,r.length)}i={mapping:a.mapping,content:a.content()}}catch(e){console.error(e),i={mapping:{original:[0],formatted:[0]},content:r}}return i},argumentsList:function(e){if(e.length>1e4)return[];let t=null;try{t=r.parse(`(${e})`,{ecmaVersion:s})}catch(e){}if(!t)try{t=r.parse(`({${e}})`,{ecmaVersion:s})}catch(e){}if(!(t&&"body"in t&&Array.isArray(t.body)&&t.body[0]&&"expression"in t.body[0]))return[];const n=t.body[0].expression;let i=null;switch(n.type){case"ClassExpression":{if(!n.body.body)break;const e=n.body.body.find((e=>"MethodDefinition"===e.type&&"constructor"===e.kind));e&&(i=e.value.params);break}case"ObjectExpression":if(!n.properties[0]||!("value"in n.properties[0])||!("params"in n.properties[0].value))break;i=n.properties[0].value.params;break;case"FunctionExpression":case"ArrowFunctionExpression":i=n.params}return i?i.map((function e(t){switch(t.type){case"Identifier":return t.name;case"AssignmentPattern":return"?"+e(t.left);case"ObjectPattern":return"obj";case"ArrayPattern":return"arr";case"RestElement":return"..."+e(t.argument)}return"?"})):[]}});class M{builder;toOffset;fromOffset;lineEndings;lastLine;state;constructor(e){this.builder=e,this.lastLine=-1,this.state={eatWhitespace:void 0,seenProperty:void 0,inPropertyValue:void 0,afterClosingBrace:void 0}}format(e,t,r,n){this.lineEndings=t,this.fromOffset=r,this.toOffset=n,this.state={eatWhitespace:void 0,seenProperty:void 0,inPropertyValue:void 0,afterClosingBrace:void 0},this.lastLine=-1;const i=O("text/css"),a=this.builder.setEnforceSpaceBetweenWords(!1);i(e.substring(this.fromOffset,this.toOffset),this.tokenCallback.bind(this)),this.builder.setEnforceSpaceBetweenWords(a)}tokenCallback(t,r,n){n+=this.fromOffset;const i=e.ArrayUtilities.lowerBound(this.lineEndings,n,e.ArrayUtilities.DEFAULT_COMPARATOR);i!==this.lastLine&&(this.state.eatWhitespace=!0),r&&(/^property/.test(r)||/^variable-2/.test(r))&&!this.state.inPropertyValue&&(this.state.seenProperty=!0),this.lastLine=i;if(/^(?:\r?\n|[\t\f\r ])+$/.test(t))this.state.eatWhitespace||this.builder.addSoftSpace();else if(this.state.eatWhitespace=!1,"\n"!==t){if("}"!==t&&(this.state.afterClosingBrace&&this.builder.addNewLine(!0),this.state.afterClosingBrace=!1),"}"===t)this.state.inPropertyValue&&this.builder.addNewLine(),this.builder.decreaseNestingLevel(),this.state.afterClosingBrace=!0,this.state.inPropertyValue=!1;else{if(":"===t&&!this.state.inPropertyValue&&this.state.seenProperty)return this.builder.addToken(t,n),this.builder.addSoftSpace(),this.state.eatWhitespace=!0,this.state.inPropertyValue=!0,void(this.state.seenProperty=!1);if("{"===t)return this.builder.addSoftSpace(),this.builder.addToken(t,n),this.builder.addNewLine(),void this.builder.increaseNestingLevel()}this.builder.addToken(t.replace(/(?:\r?\n|[\t\f\r ])+$/g,""),n),"comment"!==r||this.state.inPropertyValue||this.state.seenProperty||this.builder.addNewLine(),";"===t&&this.state.inPropertyValue?(this.state.inPropertyValue=!1,this.builder.addNewLine()):"}"===t&&this.builder.addNewLine()}}}var I=Object.freeze({__proto__:null,CSSFormatter:M});const N={Initial:"Initial",Selector:"Selector",Style:"Style",PropertyName:"PropertyName",PropertyValue:"PropertyValue",AtRule:"AtRule"};var j=Object.freeze({__proto__:null,CSSParserStates:N,parseCSS:function e(t,r){const n=t.split("\n");let i,a,o=[],s=0,l=N.Initial;const c=new Set;let u=[];function d(e){u=u.concat(e.chunk)}function p(e){return e.replace(/^(?:\r?\n|[\t\f\r ])+|(?:\r?\n|[\t\f\r ])+$/g,"")}function f(t,n,f,m){const b=n?new Set(n.split(" ")):c;switch(l){case N.Initial:b.has("qualifier")||b.has("builtin")||b.has("tag")?(i={selectorText:t,lineNumber:h,columnNumber:f,properties:[]},l=N.Selector):b.has("def")&&(i={atRule:t,lineNumber:h,columnNumber:f},l=N.AtRule);break;case N.Selector:"{"===t&&b===c?(i.selectorText=p(i.selectorText),i.styleRange=g(h,m),l=N.Style):i.selectorText+=t;break;case N.AtRule:";"!==t&&"{"!==t||b!==c?i.atRule+=t:(i.atRule=p(i.atRule),o.push(i),l=N.Initial);break;case N.Style:if(b.has("meta")||b.has("property"))a={name:t,value:"",range:g(h,f),nameRange:g(h,f)},l=N.PropertyName;else if("}"===t&&b===c)i.styleRange.endLine=h,i.styleRange.endColumn=f,o.push(i),l=N.Initial;else if(b.has("comment")){if("/*"!==t.substring(0,2)||"*/"!==t.substring(t.length-2))break;const r=t.substring(2,t.length-2);if(u=[],e("a{\n"+r+"}",d),1===u.length&&1===u[0].properties.length){const e=u[0].properties[0];e.disabled=!0,e.range=g(h,f),e.range.endColumn=m;const t=h-1,r=f+2;e.nameRange.startLine+=t,e.nameRange.startColumn+=r,e.nameRange.endLine+=t,e.nameRange.endColumn+=r,e.valueRange.startLine+=t,e.valueRange.startColumn+=r,e.valueRange.endLine+=t,e.valueRange.endColumn+=r,i.properties.push(e)}}break;case N.PropertyName:":"===t&&b===c?(a.name=a.name,a.nameRange.endLine=h,a.nameRange.endColumn=f,a.valueRange=g(h,m),l=N.PropertyValue):b.has("property")&&(a.name+=t);break;case N.PropertyValue:";"!==t&&"}"!==t||b!==c?b.has("comment")||(a.value+=t):(a.value=a.value,a.valueRange.endLine=h,a.valueRange.endColumn=f,a.range.endLine=h,a.range.endColumn=";"===t?m:f,i.properties.push(a),"}"===t?(i.styleRange.endLine=h,i.styleRange.endColumn=f,o.push(i),l=N.Initial):l=N.Style);break;default:console.assert(!1,"Unknown CSS parser state.")}s+=m-f,s>1e5&&(r({chunk:o,isLastChunk:!1}),o=[],s=0)}const m=O("text/css");let h;for(h=0;h=1e5&&(a({chunk:l,isLastChunk:!1}),l=[],u=p.offset())}new c((function(e){if("ClassDeclaration"===e.type)f(e.id);else if("VariableDeclarator"===e.type&&e.init&&b(e.init))f(e.id);else if("AssignmentExpression"===e.type&&h(e.left)&&b(e.right))f(e.left);else if("Property"===e.type&&h(e.key)&&b(e.value))f(e.key);else if("FunctionDeclaration"===e.type)m(e.id,e);else if("VariableDeclarator"===e.type&&e.init&&g(e.init))m(e.id,e.init);else if("AssignmentExpression"===e.type&&h(e.left)&&g(e.right))m(e.left,e.right);else if(("MethodDefinition"===e.type||"Property"===e.type)&&h(e.key)&&g(e.value)){const t=[];"get"!==e.kind&&"set"!==e.kind||t.push(e.kind),"static"in e&&e.static&&t.push("static"),m(e.key,e.value,t.join(" "))}return})).walk(o),a({chunk:l,isLastChunk:!0})}var A=Object.freeze({__proto__:null,javaScriptOutline:P});var _=Object.freeze({__proto__:null,htmlOutline:function(t,r){const i=/]*>/im,a=/<\/script\s*>/im,o=new n.TextCursor.TextCursor(e.StringUtilities.findLineEndingIndexes(t));for(;;){const e=i.exec(t.substring(o.offset()));if(!e)break;const n=o.offset()+e.index+e[0].length;o.advance(n);const s=o.lineNumber(),l=o.columnNumber(),c=a.exec(t.substring(o.offset()));if(!c)break;const u=o.offset()+c.index;o.advance(u+c[0].length);P(t.substring(n,u),(({chunk:e})=>{e.forEach((e=>{0===e.line&&(e.column+=l),e.line+=s})),r({chunk:e,isLastChunk:!1})}))}r({chunk:[],isLastChunk:!0})}});export{I as CSSFormatter,j as CSSRuleParser,p as FormattedContentBuilder,z as FormatterWorker,S as HTMLFormatter,_ as HTMLOutline,E as JSONFormatter,m as JavaScriptFormatter,A as JavaScriptOutline}; diff --git a/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js b/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js new file mode 100644 index 00000000..40b034a4 --- /dev/null +++ b/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js @@ -0,0 +1 @@ +import*as e from"./heap_snapshot_worker.js";const s=self,a=new e.HeapSnapshotWorkerDispatcher.HeapSnapshotWorkerDispatcher(s,(e=>self.postMessage(e)));var r;r=a.dispatchMessage.bind(a),s.addEventListener("message",r,!1),self.postMessage("workerReady"); diff --git a/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker-legacy.js b/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker-legacy.js new file mode 100644 index 00000000..4c4474de --- /dev/null +++ b/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker-legacy.js @@ -0,0 +1 @@ +import*as e from"../../models/heap_snapshot_model/heap_snapshot_model.js";import*as a from"./heap_snapshot_worker.js";self.HeapSnapshotModel=self.HeapSnapshotModel||{},HeapSnapshotModel=HeapSnapshotModel||{},HeapSnapshotModel.HeapSnapshotProgressEvent=e.HeapSnapshotModel.HeapSnapshotProgressEvent,HeapSnapshotModel.baseSystemDistance=e.HeapSnapshotModel.baseSystemDistance,HeapSnapshotModel.AllocationNodeCallers=e.HeapSnapshotModel.AllocationNodeCallers,HeapSnapshotModel.SerializedAllocationNode=e.HeapSnapshotModel.SerializedAllocationNode,HeapSnapshotModel.AllocationStackFrame=e.HeapSnapshotModel.AllocationStackFrame,HeapSnapshotModel.Node=e.HeapSnapshotModel.Node,HeapSnapshotModel.Edge=e.HeapSnapshotModel.Edge,HeapSnapshotModel.Aggregate=e.HeapSnapshotModel.Aggregate,HeapSnapshotModel.AggregateForDiff=e.HeapSnapshotModel.AggregateForDiff,HeapSnapshotModel.Diff=e.HeapSnapshotModel.Diff,HeapSnapshotModel.DiffForClass=e.HeapSnapshotModel.DiffForClass,HeapSnapshotModel.ComparatorConfig=e.HeapSnapshotModel.ComparatorConfig,HeapSnapshotModel.WorkerCommand=e.HeapSnapshotModel.WorkerCommand,HeapSnapshotModel.ItemsRange=e.HeapSnapshotModel.ItemsRange,HeapSnapshotModel.StaticData=e.HeapSnapshotModel.StaticData,HeapSnapshotModel.Statistics=e.HeapSnapshotModel.Statistics,HeapSnapshotModel.NodeFilter=e.HeapSnapshotModel.NodeFilter,HeapSnapshotModel.SearchConfig=e.HeapSnapshotModel.SearchConfig,HeapSnapshotModel.Samples=e.HeapSnapshotModel.Samples,HeapSnapshotModel.Location=e.HeapSnapshotModel.Location;const o=self,p=new a.HeapSnapshotWorkerDispatcher.HeapSnapshotWorkerDispatcher(o,(e=>self.postMessage(e)));var t;t=p.dispatchMessage.bind(p),o.addEventListener("message",t,!1),self.postMessage("workerReady"),self.HeapSnapshotWorker=self.HeapSnapshotWorker||{},HeapSnapshotWorker=HeapSnapshotWorker||{},HeapSnapshotWorker.AllocationProfile=a.AllocationProfile.AllocationProfile,HeapSnapshotWorker.TopDownAllocationNode=a.AllocationProfile.TopDownAllocationNode,HeapSnapshotWorker.BottomUpAllocationNode=a.AllocationProfile.BottomUpAllocationNode,HeapSnapshotWorker.FunctionAllocationInfo=a.AllocationProfile.FunctionAllocationInfo,HeapSnapshotWorker.HeapSnapshotItem=a.HeapSnapshot.HeapSnapshotItem,HeapSnapshotWorker.HeapSnapshotEdge=a.HeapSnapshot.HeapSnapshotEdge,HeapSnapshotWorker.HeapSnapshotItemIterator=a.HeapSnapshot.HeapSnapshotItemIterator,HeapSnapshotWorker.HeapSnapshotItemIndexProvider=a.HeapSnapshot.HeapSnapshotItemIndexProvider,HeapSnapshotWorker.HeapSnapshotNodeIndexProvider=a.HeapSnapshot.HeapSnapshotNodeIndexProvider,HeapSnapshotWorker.HeapSnapshotEdgeIndexProvider=a.HeapSnapshot.HeapSnapshotEdgeIndexProvider,HeapSnapshotWorker.HeapSnapshotRetainerEdgeIndexProvider=a.HeapSnapshot.HeapSnapshotRetainerEdgeIndexProvider,HeapSnapshotWorker.HeapSnapshotEdgeIterator=a.HeapSnapshot.HeapSnapshotEdgeIterator,HeapSnapshotWorker.HeapSnapshotRetainerEdge=a.HeapSnapshot.HeapSnapshotRetainerEdge,HeapSnapshotWorker.HeapSnapshotRetainerEdgeIterator=a.HeapSnapshot.HeapSnapshotRetainerEdgeIterator,HeapSnapshotWorker.HeapSnapshotNode=a.HeapSnapshot.HeapSnapshotNode,HeapSnapshotWorker.HeapSnapshotNodeIterator=a.HeapSnapshot.HeapSnapshotNodeIterator,HeapSnapshotWorker.HeapSnapshotIndexRangeIterator=a.HeapSnapshot.HeapSnapshotIndexRangeIterator,HeapSnapshotWorker.HeapSnapshotFilteredIterator=a.HeapSnapshot.HeapSnapshotFilteredIterator,HeapSnapshotWorker.HeapSnapshotProgress=a.HeapSnapshot.HeapSnapshotProgress,HeapSnapshotWorker.HeapSnapshotProblemReport=a.HeapSnapshot.HeapSnapshotProblemReport,HeapSnapshotWorker.HeapSnapshot=a.HeapSnapshot.HeapSnapshot,HeapSnapshotWorker.HeapSnapshotHeader=a.HeapSnapshot.HeapSnapshotHeader,HeapSnapshotWorker.HeapSnapshotItemProvider=a.HeapSnapshot.HeapSnapshotItemProvider,HeapSnapshotWorker.HeapSnapshotEdgesProvider=a.HeapSnapshot.HeapSnapshotEdgesProvider,HeapSnapshotWorker.HeapSnapshotNodesProvider=a.HeapSnapshot.HeapSnapshotNodesProvider,HeapSnapshotWorker.JSHeapSnapshot=a.HeapSnapshot.JSHeapSnapshot,HeapSnapshotWorker.JSHeapSnapshotNode=a.HeapSnapshot.JSHeapSnapshotNode,HeapSnapshotWorker.JSHeapSnapshotEdge=a.HeapSnapshot.JSHeapSnapshotEdge,HeapSnapshotWorker.JSHeapSnapshotRetainerEdge=a.HeapSnapshot.JSHeapSnapshotRetainerEdge,HeapSnapshotWorker.HeapSnapshotLoader=a.HeapSnapshotLoader.HeapSnapshotLoader,HeapSnapshotWorker.HeapSnapshotWorkerDispatcher=a.HeapSnapshotWorkerDispatcher.HeapSnapshotWorkerDispatcher; diff --git a/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker.js b/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker.js new file mode 100644 index 00000000..88e1b3b4 --- /dev/null +++ b/chii/entrypoints/heap_snapshot_worker/heap_snapshot_worker.js @@ -0,0 +1 @@ +import*as e from"../../models/heap_snapshot_model/heap_snapshot_model.js";import*as t from"../../core/i18n/i18n.js";import*as s from"../../core/platform/platform.js";import*as n from"../../models/text_utils/text_utils.js";class i{strings;liveObjectStats;nextNodeId;functionInfos;idToNode;idToTopDownNode;collapsedTopNodeIdToFunctionInfo;traceTops;traceTree;constructor(e,t){this.strings=e.strings,this.liveObjectStats=t,this.nextNodeId=1,this.functionInfos=[],this.idToNode={},this.idToTopDownNode={},this.collapsedTopNodeIdToFunctionInfo={},this.traceTops=null,this.buildFunctionAllocationInfos(e),this.traceTree=this.buildAllocationTree(e,t)}buildFunctionAllocationInfos(e){const t=this.strings,s=e.snapshot.meta.trace_function_info_fields,n=s.indexOf("name"),i=s.indexOf("script_name"),o=s.indexOf("script_id"),r=s.indexOf("line"),d=s.indexOf("column"),h=s.length,l=e.trace_function_infos,c=l.length,p=this.functionInfos=new Array(c/h);let u=0;for(let e=0;e0}}class a{functionName;scriptName;scriptId;line;column;totalCount;totalSize;totalLiveCount;totalLiveSize;traceTops;bottomUpTree;constructor(e,t,s,n,i){this.functionName=e,this.scriptName=t,this.scriptId=s,this.line=n,this.column=i,this.totalCount=0,this.totalSize=0,this.totalLiveCount=0,this.totalLiveSize=0,this.traceTops=[]}addTraceTopNode(e){0!==e.allocationCount&&(this.traceTops.push(e),this.totalCount+=e.allocationCount,this.totalSize+=e.allocationSize,this.totalLiveCount+=e.liveCount,this.totalLiveSize+=e.liveSize)}bottomUpRoot(){return this.traceTops.length?(this.bottomUpTree||this.buildAllocationTraceTree(),this.bottomUpTree):null}buildAllocationTraceTree(){this.bottomUpTree=new r(this);for(let e=0;e100||this.errors.push(e)}toString(){return this.errors.join("\n ")}}class T{nodes;containmentEdges;metaNode;rawSamples;samples;strings;locations;progress;noDistance;rootNodeIndexInternal;snapshotDiffs;aggregatesForDiffInternal;aggregates;aggregatesSortedFlags;profile;nodeTypeOffset;nodeNameOffset;nodeIdOffset;nodeSelfSizeOffset;nodeEdgeCountOffset;nodeTraceNodeIdOffset;nodeFieldCount;nodeTypes;nodeArrayType;nodeHiddenType;nodeObjectType;nodeNativeType;nodeConsStringType;nodeSlicedStringType;nodeCodeType;nodeSyntheticType;edgeFieldsCount;edgeTypeOffset;edgeNameOffset;edgeToNodeOffset;edgeTypes;edgeElementType;edgeHiddenType;edgeInternalType;edgeShortcutType;edgeWeakType;edgeInvisibleType;locationIndexOffset;locationScriptIdOffset;locationLineOffset;locationColumnOffset;locationFieldCount;nodeCount;edgeCount;retainedSizes;firstEdgeIndexes;retainingNodes;retainingEdges;firstRetainerIndex;nodeDistances;firstDominatedNodeIndex;dominatedNodes;dominatorsTree;allocationProfile;nodeDetachednessOffset;locationMap;lazyStringCache;constructor(e,t){this.nodes=e.nodes,this.containmentEdges=e.edges,this.metaNode=e.snapshot.meta,this.rawSamples=e.samples,this.samples=null,this.strings=e.strings,this.locations=e.locations,this.progress=t,this.noDistance=-5,this.rootNodeIndexInternal=0,e.snapshot.root_index&&(this.rootNodeIndexInternal=e.snapshot.root_index),this.snapshotDiffs={},this.aggregates={},this.aggregatesSortedFlags={},this.profile=e}initialize(){const e=this.metaNode;this.nodeTypeOffset=e.node_fields.indexOf("type"),this.nodeNameOffset=e.node_fields.indexOf("name"),this.nodeIdOffset=e.node_fields.indexOf("id"),this.nodeSelfSizeOffset=e.node_fields.indexOf("self_size"),this.nodeEdgeCountOffset=e.node_fields.indexOf("edge_count"),this.nodeTraceNodeIdOffset=e.node_fields.indexOf("trace_node_id"),this.nodeDetachednessOffset=e.node_fields.indexOf("detachedness"),this.nodeFieldCount=e.node_fields.length,this.nodeTypes=e.node_types[this.nodeTypeOffset],this.nodeArrayType=this.nodeTypes.indexOf("array"),this.nodeHiddenType=this.nodeTypes.indexOf("hidden"),this.nodeObjectType=this.nodeTypes.indexOf("object"),this.nodeNativeType=this.nodeTypes.indexOf("native"),this.nodeConsStringType=this.nodeTypes.indexOf("concatenated string"),this.nodeSlicedStringType=this.nodeTypes.indexOf("sliced string"),this.nodeCodeType=this.nodeTypes.indexOf("code"),this.nodeSyntheticType=this.nodeTypes.indexOf("synthetic"),this.edgeFieldsCount=e.edge_fields.length,this.edgeTypeOffset=e.edge_fields.indexOf("type"),this.edgeNameOffset=e.edge_fields.indexOf("name_or_index"),this.edgeToNodeOffset=e.edge_fields.indexOf("to_node"),this.edgeTypes=e.edge_types[this.edgeTypeOffset],this.edgeTypes.push("invisible"),this.edgeElementType=this.edgeTypes.indexOf("element"),this.edgeHiddenType=this.edgeTypes.indexOf("hidden"),this.edgeInternalType=this.edgeTypes.indexOf("internal"),this.edgeShortcutType=this.edgeTypes.indexOf("shortcut"),this.edgeWeakType=this.edgeTypes.indexOf("weak"),this.edgeInvisibleType=this.edgeTypes.indexOf("invisible");const t=e.location_fields||[];this.locationIndexOffset=t.indexOf("object_index"),this.locationScriptIdOffset=t.indexOf("script_id"),this.locationLineOffset=t.indexOf("line"),this.locationColumnOffset=t.indexOf("column"),this.locationFieldCount=t.length,this.nodeCount=this.nodes.length/this.nodeFieldCount,this.edgeCount=this.containmentEdges.length/this.edgeFieldsCount,this.retainedSizes=new Float64Array(this.nodeCount),this.firstEdgeIndexes=new Uint32Array(this.nodeCount+1),this.retainingNodes=new Uint32Array(this.edgeCount),this.retainingEdges=new Uint32Array(this.edgeCount),this.firstRetainerIndex=new Uint32Array(this.nodeCount+1),this.nodeDistances=new Int32Array(this.nodeCount),this.firstDominatedNodeIndex=new Uint32Array(this.nodeCount+1),this.dominatedNodes=new Uint32Array(this.nodeCount-1),this.progress.updateStatus("Building edge indexes…"),this.buildEdgeIndexes(),this.progress.updateStatus("Building retainers…"),this.buildRetainers(),this.progress.updateStatus("Propagating DOM state…"),this.propagateDOMState(),this.progress.updateStatus("Calculating node flags…"),this.calculateFlags(),this.progress.updateStatus("Calculating distances…"),this.calculateDistances(),this.progress.updateStatus("Building postorder index…");const s=this.buildPostOrderIndex();if(this.progress.updateStatus("Building dominator tree…"),this.dominatorsTree=this.buildDominatorTree(s.postOrderIndex2NodeOrdinal,s.nodeOrdinal2PostOrderIndex),this.progress.updateStatus("Calculating retained sizes…"),this.calculateRetainedSizes(s.postOrderIndex2NodeOrdinal),this.progress.updateStatus("Building dominated nodes…"),this.buildDominatedNodes(),this.progress.updateStatus("Calculating statistics…"),this.calculateStatistics(),this.progress.updateStatus("Calculating samples…"),this.buildSamples(),this.progress.updateStatus("Building locations…"),this.buildLocationMap(),this.progress.updateStatus("Finished processing."),this.profile.snapshot.trace_function_count){this.progress.updateStatus("Building allocation statistics…");const e=this.nodes.length,t=this.nodeFieldCount,s=this.rootNode(),n={};for(let i=0;ie&&n<=t}}createAllocationStackFilter(e){if(!this.allocationProfile)throw new Error("No Allocation Profile provided");const t=this.allocationProfile.traceIds(e);if(!t.length)return;const s={};for(let e=0;e0?e.HeapSnapshotModel.baseSystemDistance:0,o[0]=this.rootNode().nodeIndex,r=1,this.bfs(o,r,n,t)}bfs(e,t,s,n){const i=this.edgeFieldsCount,o=this.nodeFieldCount,r=this.containmentEdges,a=this.firstEdgeIndexes,d=this.edgeToNodeOffset,h=this.edgeTypeOffset,l=this.nodeCount,c=this.edgeWeakType,p=this.noDistance;let u=0;const f=this.createEdge(0),g=this.createNode(0);for(;ul)throw new Error("BFS failed. Nodes to visit ("+t+") is more than nodes count ("+l+")")}buildAggregates(e){const t={},s={},n=[],i=this.nodes,o=i.length,r=this.nodeNativeType,a=this.nodeFieldCount,d=this.nodeSelfSizeOffset,h=this.nodeTypeOffset,l=this.rootNode(),c=this.nodeDistances;for(let p=0;p(t.nodeIndex=e,s.nodeIndex=n,t.id()=0;){const t=c[m],d=p[m];if(d1)break;const d=new y(`Heap snapshot: ${t-I} nodes are unreachable from the root. Following nodes have only weak retainers:`),N=this.rootNode();--I,m=0,c[0]=s,p[0]=r[s+1];for(let s=0;s=0;--p){if(0===N[p])continue;if(N[p]=0,x[p]===I)continue;S=e[p];const g=!u||u[S]&f;let T=m;const O=n[S],w=n[S+1];let C=!0;for(let e=O;e![e.edgeHiddenType,e.edgeInvisibleType,e.edgeWeakType].includes(t)),(t=>i(e,t,s)))};for(let e=0;ep.id()?(c.addedIndexes.push(r[d]),c.addedCount++,c.addedSize+=p.selfSize(),p.nodeIndex=r[++d]):(++a,p.nodeIndex=r[++d])}for(;as)throw new Error("Start position > end position: "+t+" > "+s);if(!this.iterationOrder)throw new Error("Iteration order undefined");if(s>this.iterationOrder.length&&(s=this.iterationOrder.length),this.sortedPrefixLength=this.iterationOrder.length-this.sortedSuffixLength&&(this.sortedSuffixLength=this.iterationOrder.length-t)}let n=t;const i=s-t,o=new Array(i);for(let e=0;ec.name()?1:0:l.hasStringName()?-1:1;return e?n:-n}function g(e,t,s,n){l.edgeIndex=s,p.nodeIndex=l.nodeIndex();const i=p[e]();c.edgeIndex=n,u.nodeIndex=c.nodeIndex();const o=u[e](),r=io?1:0;return t?r:-r}if(!this.iterationOrder)throw new Error("Iteration order not defined");"!edgeName"===r?s.ArrayUtilities.sortRange(this.iterationOrder,(function(e,t){let s=f(d,e,t);return 0===s&&(s=g(a,h,e,t)),0===s?e-t:s}),t,n,i,o):"!edgeName"===a?s.ArrayUtilities.sortRange(this.iterationOrder,(function(e,t){let s=g(r,d,e,t);return 0===s&&(s=f(h,e,t)),0===s?e-t:s}),t,n,i,o):s.ArrayUtilities.sortRange(this.iterationOrder,(function(e,t){let s=g(r,d,e,t);return 0===s&&(s=g(a,h,e,t)),0===s?e-t:s}),t,n,i,o)}}class E extends w{snapshot;constructor(e,t){const s=new l(e);super(new x(s,t),s),this.snapshot=e}nodePosition(e){this.createIterationOrder();const t=this.snapshot.createNode();let s=0;if(!this.iterationOrder)throw new Error("Iteration order not defined");for(;so?n:0}return function(e,d){t.nodeIndex=e,s.nodeIndex=d;let h=a(n,o);return 0===h&&(h=a(i,r)),h||e-d}}sort(e,t,n,i,o){if(!this.iterationOrder)throw new Error("Iteration order not defined");s.ArrayUtilities.sortRange(this.iterationOrder,this.buildCompareFunction(e),t,n,i,o)}}class b extends T{nodeFlags;lazyStringCache;flags;statistics;constructor(e,t){super(e,t),this.nodeFlags={canBeQueried:1,detachedDOMTreeNode:2,pageObject:4},this.lazyStringCache={},this.initialize()}createNode(e){return new F(this,void 0===e?-1:e)}createEdge(e){return new z(this,e)}createRetainingEdge(e){return new _(this,e)}containmentEdgesFilter(){return e=>!e.isInvisible()}retainingEdgesFilter(){const e=this.containmentEdgesFilter();return function(t){return e(t)&&!t.node().isRoot()&&!t.isWeak()}}calculateFlags(){this.flags=new Uint32Array(this.nodeCount),this.markDetachedDOMTreeNodes(),this.markQueriableHeapObjects(),this.markPageOwnedNodes()}calculateDistances(){super.calculateDistances((function(e,t){if(e.isHidden())return"sloppy_function_map"!==t.name()||"system / NativeContext"!==e.rawName();if(e.isArray()){if("(map descriptors)"!==e.rawName())return!0;const s=parseInt(t.name(),10);return s<2||s%3!=1}return!0}))}isUserRoot(e){return e.isUserRoot()||e.isDocumentDOMTreesRoot()}userObjectsMapAndFlag(){return{map:this.flags,flag:this.nodeFlags.pageObject}}flagsOfNode(e){return this.flags[e.nodeIndex/this.nodeFieldCount]}markDetachedDOMTreeNodes(){const e=this.nodes,t=e.length,s=this.nodeFieldCount,n=this.nodeNativeType,i=this.nodeTypeOffset,o=this.nodeFlags.detachedDOMTreeNode,r=this.rootNode();for(let a=0,d=0;a=e.HeapSnapshotModel.baseSystemDistance){g+=n;continue}const x=s[m+i];I.nodeIndex=m,x===r?c+=n:x===a?p+=n:x===d||x===h||"string"===I.type()?u+=n:"Array"===I.name()&&(f+=this.calculateArraySize(I))}this.statistics=new e.HeapSnapshotModel.Statistics,this.statistics.total=this.totalSize,this.statistics.v8heap=this.totalSize-c,this.statistics.native=c,this.statistics.code=p,this.statistics.jsArrays=f,this.statistics.strings=u,this.statistics.system=g}calculateArraySize(e){let t=e.selfSize();const s=e.edgeIndexesStart(),n=e.edgeIndexesEnd(),i=this.containmentEdges,o=this.strings,r=this.edgeToNodeOffset,a=this.edgeTypeOffset,d=this.edgeNameOffset,h=this.edgeFieldsCount,l=this.edgeInternalType;for(let c=s;c"+e;case"element":return"["+e+"]";case"weak":return"[["+e+"]]";case"property":return-1===e.indexOf(" ")?"."+e:'["'+e+'"]';case"shortcut":return"string"==typeof e?-1===e.indexOf(" ")?"."+e:'["'+e+'"]':"["+e+"]";case"internal":case"hidden":case"invisible":return"{"+e+"}"}return"?"+e+"?"}hasStringNameInternal(){const e=this.rawType(),t=this.snapshot;return e!==t.edgeElementType&&e!==t.edgeHiddenType}nameInternal(){return this.hasStringNameInternal()?this.snapshot.strings[this.nameOrIndex()]:this.nameOrIndex()}nameOrIndex(){return this.edges[this.edgeIndex+this.snapshot.edgeNameOffset]}rawType(){return this.edges[this.edgeIndex+this.snapshot.edgeTypeOffset]}}class _ extends f{constructor(e,t){super(e,t)}clone(){const e=this.snapshot;return new _(e,this.retainerIndex())}isHidden(){return this.edge().isHidden()}isInternal(){return this.edge().isInternal()}isInvisible(){return this.edge().isInvisible()}isShortcut(){return this.edge().isShortcut()}isWeak(){return this.edge().isWeak()}}var v=Object.freeze({__proto__:null,HeapSnapshotEdge:h,HeapSnapshotNodeIndexProvider:l,HeapSnapshotEdgeIndexProvider:c,HeapSnapshotRetainerEdgeIndexProvider:p,HeapSnapshotEdgeIterator:u,HeapSnapshotRetainerEdge:f,HeapSnapshotRetainerEdgeIterator:g,HeapSnapshotNode:I,HeapSnapshotNodeIterator:m,HeapSnapshotIndexRangeIterator:x,HeapSnapshotFilteredIterator:N,HeapSnapshotProgress:S,HeapSnapshotProblemReport:y,HeapSnapshot:T,HeapSnapshotHeader:class{title;meta;node_count;edge_count;trace_function_count;root_index;constructor(){this.title="",this.meta=new O,this.node_count=0,this.edge_count=0,this.trace_function_count=0,this.root_index=0}},HeapSnapshotItemProvider:w,HeapSnapshotEdgesProvider:C,HeapSnapshotNodesProvider:E,JSHeapSnapshot:b,JSHeapSnapshotNode:F,JSHeapSnapshotEdge:z,JSHeapSnapshotRetainerEdge:_});var A=Object.freeze({__proto__:null,HeapSnapshotLoader:class{progress;buffer;dataCallback;done;snapshot;array;arrayIndex;json;jsonTokenizer;constructor(e){this.reset(),this.progress=new S(e),this.buffer="",this.dataCallback=null,this.done=!1,this.parseInput()}dispose(){this.reset()}reset(){this.json="",this.snapshot=void 0}close(){this.done=!0,this.dataCallback&&this.dataCallback("")}buildSnapshot(){this.snapshot=this.snapshot||{},this.progress.updateStatus("Processing snapshot…");const e=new b(this.snapshot,this.progress);return this.reset(),e}parseUintArray(){let e=0;const t="0".charCodeAt(0),s="9".charCodeAt(0),n="]".charCodeAt(0),i=this.json.length;for(;;){for(;en||n>s)break;o*=10,o+=n-t,++e}if(e===i)return this.json=this.json.slice(r),!0;if(!this.array)throw new Error("Array not instantiated");this.array[this.arrayIndex++]=o}}parseStringsArray(){this.progress.updateStatus("Parsing strings…");const e=this.json.lastIndexOf("]");if(-1===e)throw new Error("Incomplete JSON");if(this.json=this.json.slice(0,e+1),!this.snapshot)throw new Error("No snapshot in parseStringsArray");this.snapshot.strings=JSON.parse(this.json)}write(e){this.buffer+=e,this.dataCallback&&(this.dataCallback(this.buffer),this.dataCallback=null,this.buffer="")}fetchChunk(){return this.done?Promise.resolve(this.buffer):new Promise((e=>{this.dataCallback=e}))}async findToken(e,t){for(;;){const s=this.json.indexOf(e,t||0);if(-1!==s)return s;t=this.json.length-e.length+1,this.json+=await this.fetchChunk()}}async parseArray(e,t,s){const n=await this.findToken(e),i=await this.findToken("[",n);for(this.json=this.json.slice(i+1),this.array=s?new Uint32Array(s):[],this.arrayIndex=0;this.parseUintArray();)s?this.progress.updateProgress(t,this.arrayIndex,this.array.length):this.progress.updateStatus(t),this.json+=await this.fetchChunk();const o=this.array;return this.array=null,o}async parseInput(){const e='"snapshot"',t=await this.findToken(e);if(-1===t)throw new Error("Snapshot token not found");this.progress.updateStatus("Loading snapshot info…");const s=this.json.slice(t+e.length+1);for(this.jsonTokenizer=new n.TextUtils.BalancedJSONTokenizer((e=>{this.json=this.jsonTokenizer.remainder(),this.jsonTokenizer=null,this.snapshot=this.snapshot||{},this.snapshot.snapshot=JSON.parse(e)})),this.jsonTokenizer.write(s);this.jsonTokenizer;)this.jsonTokenizer.write(await this.fetchChunk());this.snapshot=this.snapshot||{};const i=await this.parseArray('"nodes"',"Loading nodes… {PH1}%",this.snapshot.snapshot.meta.node_fields.length*this.snapshot.snapshot.node_count);this.snapshot.nodes=i;const o=await this.parseArray('"edges"',"Loading edges… {PH1}%",this.snapshot.snapshot.meta.edge_fields.length*this.snapshot.snapshot.edge_count);if(this.snapshot.edges=o,this.snapshot.snapshot.trace_function_count){const e=await this.parseArray('"trace_function_infos"',"Loading allocation traces… {PH1}%",this.snapshot.snapshot.meta.trace_function_info_fields.length*this.snapshot.snapshot.trace_function_count);this.snapshot.trace_function_infos=e;const t=await this.findToken(":"),s=await this.findToken('"',t),n=this.json.indexOf("["),i=this.json.lastIndexOf("]",s);this.snapshot.trace_tree=JSON.parse(this.json.substring(n,i+1)),this.json=this.json.slice(i+1)}if(this.snapshot.snapshot.meta.sample_fields){const e=await this.parseArray('"samples"',"Loading samples…");this.snapshot.samples=e}if(this.snapshot.snapshot.meta.location_fields){const e=await this.parseArray('"locations"',"Loading locations…");this.snapshot.locations=e}else this.snapshot.locations=[];this.progress.updateStatus("Loading strings…");const r=await this.findToken('"strings"'),a=await this.findToken("[",r);for(this.json=this.json.slice(a);!this.done;)this.json+=await this.fetchChunk();this.parseStringsArray()}}});var D=Object.freeze({__proto__:null,HeapSnapshotWorkerDispatcher:class{objects;global;postMessage;constructor(e,t){this.objects=[],this.global=e,this.postMessage=t}findFunction(e){const t=e.split(".");let s=this.global;for(let e=0;e(await r()).RenderingOptions.RenderingOptionsView.instance(),tags:[a(o.paint),a(o.layout),a(o.fps),a(o.cssMediaType),a(o.cssMediaFeature),a(o.visionDeficiency),a(o.colorVisionDeficiency)]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.reload",loadActionDelegate:async()=>(await r()).InspectorMain.ReloadActionDelegate.instance(),iconClass:"largeicon-refresh",title:a(o.reloadPage),bindings:[{platform:"windows,linux",shortcut:"Ctrl+R"},{platform:"windows,linux",shortcut:"F5"},{platform:"mac",shortcut:"Meta+R"}]}),i.ActionRegistration.registerActionExtension({category:i.ActionRegistration.ActionCategory.NAVIGATION,actionId:"inspector_main.hard-reload",loadActionDelegate:async()=>(await r()).InspectorMain.ReloadActionDelegate.instance(),title:a(o.hardReloadPage),bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+R"},{platform:"windows,linux",shortcut:"Shift+F5"},{platform:"windows,linux",shortcut:"Ctrl+F5"},{platform:"windows,linux",shortcut:"Ctrl+Shift+F5"},{platform:"mac",shortcut:"Shift+Meta+R"}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.NETWORK,title:a(o.forceAdBlocking),settingName:"network.adBlockingEnabled",settingType:e.Settings.SettingType.BOOLEAN,storageType:e.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:a(o.blockAds)},{value:!1,title:a(o.showAds)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.GLOBAL,storageType:e.Settings.SettingStorageType.Synced,title:a(o.autoOpenDevTools),settingName:"autoAttachToCreatedPages",settingType:e.Settings.SettingType.BOOLEAN,order:2,defaultValue:!1,options:[{value:!0,title:a(o.autoOpenDevTools)},{value:!1,title:a(o.doNotAutoOpen)}]}),e.Settings.registerSettingExtension({category:e.Settings.SettingCategory.APPEARANCE,storageType:e.Settings.SettingStorageType.Synced,title:a(o.disablePaused),settingName:"disablePausedStateOverlay",settingType:e.Settings.SettingType.BOOLEAN,defaultValue:!1}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await r()).InspectorMain.NodeIndicator.instance(),order:2,location:i.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}); diff --git a/chii/entrypoints/inspector_main/inspector_main.js b/chii/entrypoints/inspector_main/inspector_main.js new file mode 100644 index 00000000..748ff613 --- /dev/null +++ b/chii/entrypoints/inspector_main/inspector_main.js @@ -0,0 +1 @@ +import*as e from"../../core/common/common.js";import*as t from"../../core/i18n/i18n.js";import*as a from"../../ui/legacy/legacy.js";import*as n from"../../core/host/host.js";import*as s from"../../core/root/root.js";import*as o from"../../core/sdk/sdk.js";import*as i from"../../panels/mobile_throttling/mobile_throttling.js";import*as r from"../../ui/legacy/components/utils/utils.js";const c=new CSSStyleSheet;c.replaceSync(":host{padding:12px}[is=dt-checkbox]{margin:0 0 10px;flex:none}.panel-section-separator{height:1px;margin-bottom:10px;background:var(--color-details-hairline);flex:none}.panel-section-separator:last-child{background:0 0}.chrome-select-label{margin-bottom:16px}\n/*# sourceURL=renderingOptions.css */\n");const l={paintFlashing:"Paint flashing",highlightsAreasOfThePageGreen:"Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy.",layoutShiftRegions:"Layout Shift Regions",highlightsAreasOfThePageBlueThat:"Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy.",layerBorders:"Layer borders",showsLayerBordersOrangeoliveAnd:"Shows layer borders (orange/olive) and tiles (cyan).",frameRenderingStats:"Frame Rendering Stats",plotsFrameThroughputDropped:"Plots frame throughput, dropped frames distribution, and GPU memory.",scrollingPerformanceIssues:"Scrolling performance issues",highlightsElementsTealThatCan:"Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations.",highlightAdFrames:"Highlight ad frames",highlightsFramesRedDetectedToBe:"Highlights frames (red) detected to be ads.",coreWebVitals:"Core Web Vitals",showsAnOverlayWithCoreWebVitals:"Shows an overlay with Core Web Vitals.",disableLocalFonts:"Disable local fonts",disablesLocalSourcesInFontface:"Disables `local()` sources in `@font-face` rules. Requires a page reload to apply.",emulateAFocusedPage:"Emulate a focused page",emulatesAFocusedPage:"Emulates a focused page.",emulatesAutoDarkMode:"Enables automatic dark mode for the inspected page.",forcesMediaTypeForTestingPrint:"Forces media type for testing print and screen styles",forcesCssPreferscolorschemeMedia:"Forces CSS `prefers-color-scheme` media feature",forcesCssPrefersreducedmotion:"Forces CSS `prefers-reduced-motion` media feature",forcesCssPreferscontrastMedia:"Forces CSS `prefers-contrast` media feature",forcesCssPrefersreduceddataMedia:"Forces CSS `prefers-reduced-data` media feature",forcesCssColorgamutMediaFeature:"Forces CSS `color-gamut` media feature",forcesVisionDeficiencyEmulation:"Forces vision deficiency emulation",disableAvifImageFormat:"Disable `AVIF` image format",disableJpegXlImageFormat:"Disable `JPEG XL` image format",requiresAPageReloadToApplyAnd:"Requires a page reload to apply and disables caching for image requests.",disableWebpImageFormat:"Disable `WebP` image format",forcesCssForcedColors:"Forces CSS forced-colors media feature"},d=t.i18n.registerUIStrings("entrypoints/inspector_main/RenderingOptions.ts",l),g=t.i18n.getLocalizedString.bind(void 0,d);let u;class h extends a.Widget.VBox{constructor(){super(!0),this.appendCheckbox(g(l.paintFlashing),g(l.highlightsAreasOfThePageGreen),e.Settings.Settings.instance().moduleSetting("showPaintRects")),this.appendCheckbox(g(l.layoutShiftRegions),g(l.highlightsAreasOfThePageBlueThat),e.Settings.Settings.instance().moduleSetting("showLayoutShiftRegions")),this.appendCheckbox(g(l.layerBorders),g(l.showsLayerBordersOrangeoliveAnd),e.Settings.Settings.instance().moduleSetting("showDebugBorders")),this.appendCheckbox(g(l.frameRenderingStats),g(l.plotsFrameThroughputDropped),e.Settings.Settings.instance().moduleSetting("showFPSCounter")),this.appendCheckbox(g(l.scrollingPerformanceIssues),g(l.highlightsElementsTealThatCan),e.Settings.Settings.instance().moduleSetting("showScrollBottleneckRects")),this.appendCheckbox(g(l.highlightAdFrames),g(l.highlightsFramesRedDetectedToBe),e.Settings.Settings.instance().moduleSetting("showAdHighlights")),this.appendCheckbox(g(l.coreWebVitals),g(l.showsAnOverlayWithCoreWebVitals),e.Settings.Settings.instance().moduleSetting("showWebVitals")),this.appendCheckbox(g(l.disableLocalFonts),g(l.disablesLocalSourcesInFontface),e.Settings.Settings.instance().moduleSetting("localFontsDisabled")),this.appendCheckbox(g(l.emulateAFocusedPage),g(l.emulatesAFocusedPage),e.Settings.Settings.instance().moduleSetting("emulatePageFocus")),this.contentElement.createChild("div").classList.add("panel-section-separator"),this.appendSelect(g(l.forcesMediaTypeForTestingPrint),e.Settings.Settings.instance().moduleSetting("emulatedCSSMedia")),this.appendSelect(g(l.forcesCssPreferscolorschemeMedia),e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersColorScheme")),this.appendSelect(g(l.forcesCssForcedColors),e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeatureForcedColors")),(()=>{const e="(prefers-contrast)";return window.matchMedia(e).media===e})()&&this.appendSelect(g(l.forcesCssPreferscontrastMedia),e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersContrast")),this.appendSelect(g(l.forcesCssPrefersreducedmotion),e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedMotion")),(()=>{const e="(prefers-reduced-data)";return window.matchMedia(e).media===e})()&&this.appendSelect(g(l.forcesCssPrefersreduceddataMedia),e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedData")),this.appendSelect(g(l.forcesCssColorgamutMediaFeature),e.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeatureColorGamut")),this.contentElement.createChild("div").classList.add("panel-section-separator"),this.appendSelect(g(l.forcesVisionDeficiencyEmulation),e.Settings.Settings.instance().moduleSetting("emulatedVisionDeficiency")),this.contentElement.createChild("div").classList.add("panel-section-separator"),this.appendSelect(g(l.emulatesAutoDarkMode),e.Settings.Settings.instance().moduleSetting("emulateAutoDarkMode")),this.contentElement.createChild("div").classList.add("panel-section-separator"),this.appendCheckbox(g(l.disableAvifImageFormat),g(l.requiresAPageReloadToApplyAnd),e.Settings.Settings.instance().moduleSetting("avifFormatDisabled"));const t=this.appendCheckbox(g(l.disableWebpImageFormat),g(l.requiresAPageReloadToApplyAnd),e.Settings.Settings.instance().moduleSetting("webpFormatDisabled"));this.contentElement.createChild("div").classList.add("panel-section-separator"),(async()=>new Promise((e=>{const t=document.createElement("img");t.onload=()=>e(!0),t.onerror=()=>e(!1),t.src="data:image/jxl;base64,/wr/BwiDBAwASyAY"})))().then((a=>{a&&t.before(this.createCheckbox(g(l.disableJpegXlImageFormat),g(l.requiresAPageReloadToApplyAnd),e.Settings.Settings.instance().moduleSetting("jpegXlFormatDisabled")))}))}static instance(e={forceNew:null}){const{forceNew:t}=e;return u&&!t||(u=new h),u}createCheckbox(e,t,n){const s=a.UIUtils.CheckboxLabel.create(e,!1,t);return a.SettingsUI.bindCheckbox(s.checkboxElement,n),s}appendCheckbox(e,t,a){const n=this.createCheckbox(e,t,a);return this.contentElement.appendChild(n),n}appendSelect(e,t){const n=a.SettingsUI.createControlForSetting(t,e);n&&this.contentElement.appendChild(n)}wasShown(){super.wasShown(),this.registerCSSFiles([c])}}var p=Object.freeze({__proto__:null,RenderingOptionsView:h});const m=new CSSStyleSheet;m.replaceSync(".node-icon{width:28px;height:26px;background-image:var(--image-file-nodeIcon);background-size:17px 17px;background-repeat:no-repeat;background-position:center;opacity:80%;cursor:auto}.node-icon:hover{opacity:100%}.node-icon.inactive{filter:grayscale(100%)}\n/*# sourceURL=nodeIcon.css */\n");const S={main:"Main",javascriptIsDisabled:"JavaScript is disabled",openDedicatedTools:"Open dedicated DevTools for `Node.js`"},b=t.i18n.registerUIStrings("entrypoints/inspector_main/InspectorMain.ts",S),f=t.i18n.getLocalizedString.bind(void 0,b);let C,F,T,w;class y{static instance(e={forceNew:null}){const{forceNew:t}=e;return C&&!t||(C=new y),C}async run(){let e=!0;await o.Connections.initMainConnection((async()=>{const t=s.Runtime.Runtime.queryParam("v8only")?o.Target.Type.Node:o.Target.Type.Frame,a=t===o.Target.Type.Frame&&"sources"===s.Runtime.Runtime.queryParam("panel"),n=o.TargetManager.TargetManager.instance().createTarget("main",f(S.main),t,null,void 0,a);if(e){if(e=!1,a){const e=n.model(o.DebuggerModel.DebuggerModel);e&&(e.isReadyToPause()||await e.once(o.DebuggerModel.Events.DebuggerIsReadyToPause),e.pause())}n.runtimeAgent().invoke_runIfWaitingForDebugger()}}),r.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost),new M,new k,new i.NetworkPanelIndicator.NetworkPanelIndicator,n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.ReloadInspectedPage,(({data:e})=>{o.ResourceTreeModel.ResourceTreeModel.reloadAllPages(e)}))}}e.Runnable.registerEarlyInitializationRunnable(y.instance);class A{static instance(e={forceNew:null}){const{forceNew:t}=e;return F&&!t||(F=new A),F}handleAction(e,t){switch(t){case"inspector_main.reload":return o.ResourceTreeModel.ResourceTreeModel.reloadAllPages(!1),!0;case"inspector_main.hard-reload":return o.ResourceTreeModel.ResourceTreeModel.reloadAllPages(!0),!0}return!1}}class P{static instance(e={forceNew:null}){const{forceNew:t}=e;return T&&!t||(T=new P),T}handleAction(e,t){const a=o.TargetManager.TargetManager.instance().mainTarget();return!!a&&(a.pageAgent().invoke_bringToFront(),!0)}}class v{element;button;constructor(){const e=document.createElement("div"),t=a.Utils.createShadowRootWithCoreStyles(e,{cssFile:[m],delegatesFocus:void 0});this.element=t.createChild("div","node-icon"),e.addEventListener("click",(()=>n.InspectorFrontendHost.InspectorFrontendHostInstance.openNodeFrontend()),!1),this.button=new a.Toolbar.ToolbarItem(e),this.button.setTitle(f(S.openDedicatedTools)),o.TargetManager.TargetManager.instance().addEventListener(o.TargetManager.Events.AvailableTargetsChanged,(e=>this.update(e.data))),this.button.setVisible(!1),this.update([])}static instance(e={forceNew:null}){const{forceNew:t}=e;return w&&!t||(w=new v),w}update(e){const t=Boolean(e.find((e=>"node"===e.type&&!e.attached)));this.element.classList.toggle("inactive",!t),t&&this.button.setVisible(!0)}item(){return this.button}}class M{constructor(){function t(){let t=null;e.Settings.Settings.instance().moduleSetting("javaScriptDisabled").get()&&(t=a.Icon.Icon.create("smallicon-warning"),a.Tooltip.Tooltip.install(t,f(S.javascriptIsDisabled))),a.InspectorView.InspectorView.instance().setPanelIcon("sources",t)}e.Settings.Settings.instance().moduleSetting("javaScriptDisabled").addChangeListener(t),t()}}class k{autoAttachSetting;adBlockEnabledSetting;emulatePageFocusSetting;constructor(){this.autoAttachSetting=e.Settings.Settings.instance().moduleSetting("autoAttachToCreatedPages"),this.autoAttachSetting.addChangeListener(this.updateAutoAttach,this),this.updateAutoAttach(),this.adBlockEnabledSetting=e.Settings.Settings.instance().moduleSetting("network.adBlockingEnabled"),this.adBlockEnabledSetting.addChangeListener(this.update,this),this.emulatePageFocusSetting=e.Settings.Settings.instance().moduleSetting("emulatePageFocus"),this.emulatePageFocusSetting.addChangeListener(this.update,this),o.TargetManager.TargetManager.instance().observeTargets(this)}updateTarget(e){e.type()!==o.Target.Type.Frame||e.parentTarget()||(e.pageAgent().invoke_setAdBlockingEnabled({enabled:this.adBlockEnabledSetting.get()}),e.emulationAgent().invoke_setFocusEmulationEnabled({enabled:this.emulatePageFocusSetting.get()}))}updateAutoAttach(){n.InspectorFrontendHost.InspectorFrontendHostInstance.setOpenNewWindowForPopups(this.autoAttachSetting.get())}update(){for(const e of o.TargetManager.TargetManager.instance().targets())this.updateTarget(e)}targetAdded(e){this.updateTarget(e)}targetRemoved(e){}}o.ChildTargetManager.ChildTargetManager.install();var I=Object.freeze({__proto__:null,InspectorMainImpl:y,ReloadActionDelegate:A,FocusDebuggeeActionDelegate:P,NodeIndicator:v,SourcesPanelIndicator:M,BackendSettingsSync:k});export{I as InspectorMain,p as RenderingOptions}; diff --git a/chii/entrypoints/js_app/JsMain.js b/chii/entrypoints/js_app/JsMain.js new file mode 100644 index 00000000..c515fcb8 --- /dev/null +++ b/chii/entrypoints/js_app/JsMain.js @@ -0,0 +1 @@ +import*as n from"../../core/common/common.js";import*as e from"../../core/host/host.js";import*as t from"../../core/i18n/i18n.js";import*as i from"../../core/sdk/sdk.js";import*as o from"../../ui/legacy/components/utils/utils.js";const r={main:"Main"},a=t.i18n.registerUIStrings("entrypoints/js_app/JsMain.ts",r),s=t.i18n.getLocalizedString.bind(void 0,a);let c;class g{static instance(n={forceNew:null}){const{forceNew:e}=n;return c&&!e||(c=new g),c}async run(){e.userMetrics.actionTaken(e.UserMetrics.Action.ConnectToNodeJSDirectly),i.Connections.initMainConnection((async()=>{i.TargetManager.TargetManager.instance().createTarget("main",s(r.main),i.Target.Type.Node,null).runtimeAgent().invoke_runIfWaitingForDebugger()}),o.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost)}}n.Runnable.registerEarlyInitializationRunnable(g.instance);export{g as JsMainImpl}; diff --git a/chii/entrypoints/js_app/js_app.js b/chii/entrypoints/js_app/js_app.js new file mode 100644 index 00000000..9629cc03 --- /dev/null +++ b/chii/entrypoints/js_app/js_app.js @@ -0,0 +1 @@ +Root.allDescriptors.push(...[]);Root.applicationDescriptor={"modules":[]};import*as RootModule from'../../core/root/root.js';import'../shell/shell.js';import'../../panels/js_profiler/js_profiler-meta.js';import'./JsMain.js';import*as Main from'../main/main.js';import*as Startup from'../startup/startup.js';new Main.MainImpl.MainImpl();Startup.RuntimeInstantiator.startApplication('js_app'); \ No newline at end of file diff --git a/chii/entrypoints/lighthouse_worker/lighthouse_worker.js b/chii/entrypoints/lighthouse_worker/lighthouse_worker.js new file mode 100644 index 00000000..90255157 --- /dev/null +++ b/chii/entrypoints/lighthouse_worker/lighthouse_worker.js @@ -0,0 +1 @@ +import*as e from"../../core/root/root.js";import"../../third_party/lighthouse/lighthouse-dt-bundle.js";const s=new class{onMessage;onClose;on(e,s){"message"===e?this.onMessage=s:"close"===e&&(this.onClose=s)}send(e){t("sendProtocolMessage",{message:e})}close(){}};async function o(o){e.Runtime.Runtime.queryParam("isUnderTest")&&(console.log=()=>{},o.flags.maxWaitForLoad=2e3),self.listenForStatus((e=>{t("statusUpdate",{message:e[1]})}));try{const t=await async function(s){const o=self.lookupLocale(s);if("en-US"===o||"en"===o)return;try{let s;const t=e.Runtime.getRemoteBase();if(t&&t.base){const a=`${t.base}third_party/lighthouse/locales/${o}.json`;s=e.Runtime.loadResourcePromise(a)}else{const t=new URL(`../../third_party/lighthouse/locales/${o}.json`,import.meta.url);s=e.Runtime.loadResourcePromise(t.toString())}const a=new Promise(((e,s)=>setTimeout((()=>s(new Error("timed out fetching locale"))),5e3))),l=await Promise.race([a,s]),n=JSON.parse(l);return self.registerLocaleData(o,n),o}catch(e){console.error(e)}return}(o.locales),a=o.flags;a.logLevel=a.logLevel||"info",a.channel="devtools",a.locale=t;const l=self.setUpWorkerConnection(s),n=self.createConfig(o.categoryIDs,a.emulatedFormFactor),r=o.url;return await self.runLighthouse(r,a,n,l)}catch(e){return{fatal:!0,message:e.message,stack:e.stack}}}function t(e,s){self.postMessage(JSON.stringify({method:e,params:s}))}self.onmessage=async e=>{const t=JSON.parse(e.data);if("start"===t.method){const e=await o(t.params);self.postMessage(JSON.stringify({id:t.id,result:e}))}else{if("dispatchProtocolMessage"!==t.method)throw new Error(`Unknown event: ${e.data}`);s.onMessage&&s.onMessage(t.params.message)}},globalThis.global=self,globalThis.global.isVinn=!0,globalThis.global.document={},globalThis.global.document.documentElement={},globalThis.global.document.documentElement.style={WebkitAppearance:"WebkitAppearance"},self.postMessage("workerReady"); diff --git a/chii/entrypoints/main/main-legacy.js b/chii/entrypoints/main/main-legacy.js new file mode 100644 index 00000000..66d00482 --- /dev/null +++ b/chii/entrypoints/main/main-legacy.js @@ -0,0 +1 @@ +import*as e from"./main.js";self.Main=self.Main||{},Main=Main||{},Main.ExecutionContextSelector=e.ExecutionContextSelector.ExecutionContextSelector,Main.Main=e.MainImpl.MainImpl,Main.Main.ZoomActionDelegate=e.MainImpl.ZoomActionDelegate,Main.Main.SearchActionDelegate=e.MainImpl.SearchActionDelegate,Main.Main.MainMenuItem=e.MainImpl.MainMenuItem,Main.Main.SettingsButtonProvider=e.MainImpl.SettingsButtonProvider,Main.ReloadActionDelegate=e.MainImpl.ReloadActionDelegate,Main.SimpleApp=e.SimpleApp.SimpleApp,Main.SimpleAppProvider=e.SimpleApp.SimpleAppProvider; diff --git a/chii/entrypoints/main/main-meta.js b/chii/entrypoints/main/main-meta.js new file mode 100644 index 00000000..12e8159b --- /dev/null +++ b/chii/entrypoints/main/main-meta.js @@ -0,0 +1 @@ +import*as t from"../../core/common/common.js";import*as e from"../../core/root/root.js";import*as o from"../../core/sdk/sdk.js";import*as i from"../../models/workspace/workspace.js";import*as a from"../../ui/legacy/components/utils/utils.js";import*as n from"../../ui/legacy/legacy.js";import*as r from"../../core/i18n/i18n.js";const s={focusDebuggee:"Focus debuggee",toggleDrawer:"Toggle drawer",nextPanel:"Next panel",previousPanel:"Previous panel",reloadDevtools:"Reload DevTools",restoreLastDockPosition:"Restore last dock position",zoomIn:"Zoom in",zoomOut:"Zoom out",resetZoomLevel:"Reset zoom level",searchInPanel:"Search in panel",cancelSearch:"Cancel search",findNextResult:"Find next result",findPreviousResult:"Find previous result",theme:"Theme:",switchToSystemPreferredColor:"Switch to system preferred color theme",systemPreference:"System preference",switchToLightTheme:"Switch to light theme",lightCapital:"Light",switchToDarkTheme:"Switch to dark theme",darkCapital:"Dark",darkLower:"dark",lightLower:"light",panelLayout:"Panel layout:",useHorizontalPanelLayout:"Use horizontal panel layout",horizontal:"horizontal",useVerticalPanelLayout:"Use vertical panel layout",vertical:"vertical",useAutomaticPanelLayout:"Use automatic panel layout",auto:"auto",colorFormat:"Color format:",setColorFormatAsAuthored:"Set color format as authored",asAuthored:"As authored",setColorFormatToHex:"Set color format to HEX",setColorFormatToRgb:"Set color format to RGB",setColorFormatToHsl:"Set color format to HSL",enableCtrlShortcutToSwitchPanels:"Enable Ctrl + 1-9 shortcut to switch panels",enableShortcutToSwitchPanels:"Enable ⌘ + 1-9 shortcut to switch panels",right:"Right",dockToRight:"Dock to right",bottom:"Bottom",dockToBottom:"Dock to bottom",left:"Left",dockToLeft:"Dock to left",undocked:"Undocked",undockIntoSeparateWindow:"Undock into separate window",devtoolsDefault:"DevTools (Default)",language:"Language:",browserLanguage:"Browser UI language",enableSync:"Enable settings sync"},l=r.i18n.registerUIStrings("entrypoints/main/main-meta.ts",s),c=r.i18n.getLazilyComputedLocalizedString.bind(void 0,l);let g,d;async function u(){return g||(g=await import("./main.js")),g}function m(t){return()=>r.i18n.getLocalizedLanguageRegion(t,r.DevToolsLocale.DevToolsLocale.instance())}n.ActionRegistration.registerActionExtension({category:n.ActionRegistration.ActionCategory.DRAWER,actionId:"inspector_main.focus-debuggee",loadActionDelegate:async()=>(await async function(){return d||(d=await import("../inspector_main/inspector_main.js")),d}()).InspectorMain.FocusDebuggeeActionDelegate.instance(),order:100,title:c(s.focusDebuggee)}),n.ActionRegistration.registerActionExtension({category:n.ActionRegistration.ActionCategory.DRAWER,actionId:"main.toggle-drawer",loadActionDelegate:async()=>n.InspectorView.ActionDelegate.instance(),order:101,title:c(s.toggleDrawer),bindings:[{shortcut:"Esc"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.next-tab",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.nextPanel),loadActionDelegate:async()=>n.InspectorView.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+]"},{platform:"mac",shortcut:"Meta+]"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.previous-tab",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.previousPanel),loadActionDelegate:async()=>n.InspectorView.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+["},{platform:"mac",shortcut:"Meta+["}]}),n.ActionRegistration.registerActionExtension({actionId:"main.debug-reload",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.reloadDevtools),loadActionDelegate:async()=>(await u()).MainImpl.ReloadActionDelegate.instance(),bindings:[{shortcut:"Alt+R"}]}),n.ActionRegistration.registerActionExtension({category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.restoreLastDockPosition),actionId:"main.toggle-dock",loadActionDelegate:async()=>n.DockController.ToggleDockActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+D"},{platform:"mac",shortcut:"Meta+Shift+D"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.zoom-in",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.zoomIn),loadActionDelegate:async()=>(await u()).MainImpl.ZoomActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Plus",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+Plus"},{platform:"windows,linux",shortcut:"Ctrl+NumpadPlus"},{platform:"windows,linux",shortcut:"Ctrl+Shift+NumpadPlus"},{platform:"mac",shortcut:"Meta+Plus",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+Shift+Plus"},{platform:"mac",shortcut:"Meta+NumpadPlus"},{platform:"mac",shortcut:"Meta+Shift+NumpadPlus"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.zoom-out",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.zoomOut),loadActionDelegate:async()=>(await u()).MainImpl.ZoomActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Minus",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+Minus"},{platform:"windows,linux",shortcut:"Ctrl+NumpadMinus"},{platform:"windows,linux",shortcut:"Ctrl+Shift+NumpadMinus"},{platform:"mac",shortcut:"Meta+Minus",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+Shift+Minus"},{platform:"mac",shortcut:"Meta+NumpadMinus"},{platform:"mac",shortcut:"Meta+Shift+NumpadMinus"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.zoom-reset",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.resetZoomLevel),loadActionDelegate:async()=>(await u()).MainImpl.ZoomActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+0"},{platform:"windows,linux",shortcut:"Ctrl+Numpad0"},{platform:"mac",shortcut:"Meta+Numpad0"},{platform:"mac",shortcut:"Meta+0"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.find",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.searchInPanel),loadActionDelegate:async()=>(await u()).MainImpl.SearchActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"F3"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.cancel",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.cancelSearch),loadActionDelegate:async()=>(await u()).MainImpl.SearchActionDelegate.instance(),order:10,bindings:[{shortcut:"Esc"}]}),n.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.find-next",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.findNextResult),loadActionDelegate:async()=>(await u()).MainImpl.SearchActionDelegate.instance(),bindings:[{platform:"mac",shortcut:"Meta+G",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+G"},{platform:"windows,linux",shortcut:"F3",keybindSets:["devToolsDefault","vsCode"]}]}),n.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.find-previous",category:n.ActionRegistration.ActionCategory.GLOBAL,title:c(s.findPreviousResult),loadActionDelegate:async()=>(await u()).MainImpl.SearchActionDelegate.instance(),bindings:[{platform:"mac",shortcut:"Meta+Shift+G",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+G"},{platform:"windows,linux",shortcut:"Shift+F3",keybindSets:["devToolsDefault","vsCode"]}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:c(s.theme),settingName:"uiTheme",settingType:t.Settings.SettingType.ENUM,defaultValue:"systemPreferred",reloadRequired:!0,options:[{title:c(s.switchToSystemPreferredColor),text:c(s.systemPreference),value:"systemPreferred"},{title:c(s.switchToLightTheme),text:c(s.lightCapital),value:"default"},{title:c(s.switchToDarkTheme),text:c(s.darkCapital),value:"dark"}],tags:[c(s.darkLower),c(s.lightLower)]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:c(s.panelLayout),settingName:"sidebarPosition",settingType:t.Settings.SettingType.ENUM,defaultValue:"auto",options:[{title:c(s.useHorizontalPanelLayout),text:c(s.horizontal),value:"bottom"},{title:c(s.useVerticalPanelLayout),text:c(s.vertical),value:"right"},{title:c(s.useAutomaticPanelLayout),text:c(s.auto),value:"auto"}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:c(s.colorFormat),settingName:"colorFormat",settingType:t.Settings.SettingType.ENUM,defaultValue:"original",options:[{title:c(s.setColorFormatAsAuthored),text:c(s.asAuthored),value:"original"},{title:c(s.setColorFormatToHex),text:"HEX: #dac0de",value:"hex",raw:!0},{title:c(s.setColorFormatToRgb),text:"RGB: rgb(128 255 255)",value:"rgb",raw:!0},{title:c(s.setColorFormatToHsl),text:"HSL: hsl(300deg 80% 90%)",value:"hsl",raw:!0}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:c(s.enableCtrlShortcutToSwitchPanels),titleMac:c(s.enableShortcutToSwitchPanels),settingName:"shortcutPanelSwitch",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.GLOBAL,settingName:"currentDockState",settingType:t.Settings.SettingType.ENUM,defaultValue:"right",options:[{value:"right",text:c(s.right),title:c(s.dockToRight)},{value:"bottom",text:c(s.bottom),title:c(s.dockToBottom)},{value:"left",text:c(s.left),title:c(s.dockToLeft)},{value:"undocked",text:c(s.undocked),title:c(s.undockIntoSeparateWindow)}]}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"activeKeybindSet",settingType:t.Settings.SettingType.ENUM,defaultValue:"devToolsDefault",options:[{value:"devToolsDefault",title:c(s.devtoolsDefault),text:c(s.devtoolsDefault)},{value:"vsCode",title:r.i18n.lockedLazyString("Visual Studio Code"),text:r.i18n.lockedLazyString("Visual Studio Code")}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,settingName:"language",settingType:t.Settings.SettingType.ENUM,title:c(s.language),defaultValue:"en-US",options:[{value:"browserLanguage",title:c(s.browserLanguage),text:c(s.browserLanguage)},...r.i18n.getAllSupportedDevToolsLocales().filter((t=>"en-XL"!==t)).map((t=>{return{value:e=t,title:m(e),text:m(e)};var e}))],reloadRequired:!0}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SYNC,settingName:"sync_preferences",settingType:t.Settings.SettingType.BOOLEAN,title:c(s.enableSync),defaultValue:!1,reloadRequired:!0,experiment:e.Runtime.ExperimentName.SYNC_SETTINGS}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"userShortcuts",settingType:t.Settings.SettingType.ARRAY,defaultValue:[]}),n.ViewManager.registerLocationResolver({name:"drawer-view",category:n.ViewManager.ViewLocationCategoryValues.DRAWER,loadResolver:async()=>n.InspectorView.InspectorView.instance()}),n.ViewManager.registerLocationResolver({name:"drawer-sidebar",category:n.ViewManager.ViewLocationCategoryValues.DRAWER_SIDEBAR,loadResolver:async()=>n.InspectorView.InspectorView.instance()}),n.ViewManager.registerLocationResolver({name:"panel",category:n.ViewManager.ViewLocationCategoryValues.PANEL,loadResolver:async()=>n.InspectorView.InspectorView.instance()}),n.ContextMenu.registerProvider({contextTypes:()=>[i.UISourceCode.UISourceCode,o.Resource.Resource,o.NetworkRequest.NetworkRequest],loadProvider:async()=>a.Linkifier.ContentProviderContextMenuProvider.instance(),experiment:void 0}),n.ContextMenu.registerProvider({contextTypes:()=>[Node],loadProvider:async()=>n.XLink.ContextMenuProvider.instance(),experiment:void 0}),n.ContextMenu.registerProvider({contextTypes:()=>[Node],loadProvider:async()=>a.Linkifier.LinkContextMenuProvider.instance(),experiment:void 0}),n.Toolbar.registerToolbarItem({separator:!0,location:n.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,order:100,showLabel:void 0,actionId:void 0,condition:void 0,loadItem:void 0}),n.Toolbar.registerToolbarItem({separator:!0,order:97,location:n.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,actionId:void 0,condition:void 0,loadItem:void 0}),n.Toolbar.registerToolbarItem({loadItem:async()=>(await u()).MainImpl.SettingsButtonProvider.instance(),order:98,location:n.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),n.Toolbar.registerToolbarItem({loadItem:async()=>(await u()).MainImpl.MainMenuItem.instance(),order:99,location:n.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),n.Toolbar.registerToolbarItem({loadItem:async()=>n.DockController.CloseButtonProvider.instance(),order:100,location:n.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),t.AppProvider.registerAppProvider({loadAppProvider:async()=>(await u()).SimpleApp.SimpleAppProvider.instance(),order:10,condition:void 0}); diff --git a/chii/entrypoints/main/main.js b/chii/entrypoints/main/main.js new file mode 100644 index 00000000..b2e55052 --- /dev/null +++ b/chii/entrypoints/main/main.js @@ -0,0 +1 @@ +import*as e from"../../core/sdk/sdk.js";import*as t from"../../core/common/common.js";import*as n from"../../core/host/host.js";import*as o from"../../core/i18n/i18n.js";import*as s from"../../core/platform/platform.js";import*as r from"../../core/protocol_client/protocol_client.js";import*as i from"../../core/root/root.js";import*as a from"../../models/bindings/bindings.js";import*as c from"../../models/extensions/extensions.js";import*as l from"../../models/issues_manager/issues_manager.js";import*as d from"../../models/logs/logs.js";import*as g from"../../models/persistence/persistence.js";import*as u from"../../models/workspace/workspace.js";import*as m from"../../panels/snippets/snippets.js";import*as p from"../../panels/timeline/timeline.js";import*as h from"../../ui/components/icon_button/icon_button.js";import*as f from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as w from"../../ui/legacy/components/utils/utils.js";import*as v from"../../ui/legacy/legacy.js";class S{targetManager;context;lastSelectedContextId;ignoreContextChanged;constructor(t,n){n.addFlavorChangeListener(e.RuntimeModel.ExecutionContext,this.executionContextChanged,this),n.addFlavorChangeListener(e.Target.Target,this.targetChanged,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextCreated,this.onExecutionContextCreated,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextDestroyed,this.onExecutionContextDestroyed,this),t.addModelListener(e.RuntimeModel.RuntimeModel,e.RuntimeModel.Events.ExecutionContextOrderChanged,this.onExecutionContextOrderChanged,this),this.targetManager=t,this.context=n,t.observeModels(e.RuntimeModel.RuntimeModel,this)}modelAdded(t){queueMicrotask(function(){this.context.flavor(e.Target.Target)||this.context.setFlavor(e.Target.Target,t.target())}.bind(this))}modelRemoved(t){const n=this.context.flavor(e.RuntimeModel.ExecutionContext);n&&n.runtimeModel===t&&this.currentExecutionContextGone();const o=this.targetManager.models(e.RuntimeModel.RuntimeModel);this.context.flavor(e.Target.Target)===t.target()&&o.length&&this.context.setFlavor(e.Target.Target,o[0].target())}executionContextChanged({data:t}){t&&(this.context.setFlavor(e.Target.Target,t.target()),this.ignoreContextChanged||(this.lastSelectedContextId=this.contextPersistentId(t)))}contextPersistentId(e){return e.isDefault?e.target().name()+":"+e.frameId:""}targetChanged({data:t}){const n=this.context.flavor(e.RuntimeModel.ExecutionContext);if(!t||n&&n.target()===t)return;const o=t.model(e.RuntimeModel.RuntimeModel),s=o?o.executionContexts():[];if(!s.length)return;let r=null;for(let e=0;e{this.loaded()}))}static time(e){n.InspectorFrontendHost.isUnderTest()||console.time(e)}static timeEnd(e){n.InspectorFrontendHost.isUnderTest()||console.timeEnd(e)}async loaded(){console.timeStamp("Main._loaded"),await i.Runtime.appStarted,i.Runtime.Runtime.setPlatform(n.Platform.platform());const e=await new Promise((e=>{n.InspectorFrontendHost.InspectorFrontendHostInstance.getPreferences(e)}));console.timeStamp("Main._gotPreferences"),this.initializeGlobalsForLayoutTests(),this.createSettings(e),await this.requestAndRegisterLocaleData(),i.Runtime.experiments.isEnabled(i.Runtime.ExperimentName.SYNC_SETTINGS)&&n.userMetrics.syncSetting(t.Settings.Settings.instance().moduleSetting("sync_preferences").get()),this.createAppUI()}initializeGlobalsForLayoutTests(){self.Common=self.Common||{},self.UI=self.UI||{},self.UI.panels=self.UI.panels||{},self.SDK=self.SDK||{},self.Bindings=self.Bindings||{},self.Persistence=self.Persistence||{},self.Workspace=self.Workspace||{},self.Extensions=self.Extensions||{},self.Host=self.Host||{},self.Host.userMetrics=self.Host.userMetrics||n.userMetrics,self.Host.UserMetrics=self.Host.UserMetrics||n.UserMetrics}async requestAndRegisterLocaleData(){const e=t.Settings.Settings.instance().moduleSetting("language").get(),s=o.DevToolsLocale.DevToolsLocale.instance({create:!0,data:{navigatorLanguage:navigator.language,settingLanguage:e,lookupClosestDevToolsLocale:o.i18n.lookupClosestSupportedDevToolsLocale}});n.userMetrics.language(s.locale),"en-US"!==s.locale&&await o.i18n.fetchAndRegisterLocaleData("en-US");try{await o.i18n.fetchAndRegisterLocaleData(s.locale)}catch(e){console.error(e),s.forceFallbackLocale()}}createSettings(e){this.initializeExperiments();let o,s="";if(n.Platform.isCustomDevtoolsFrontend()?s="__custom__":i.Runtime.Runtime.queryParam("can_dock")||!Boolean(i.Runtime.Runtime.queryParam("debugFrontend"))||n.InspectorFrontendHost.isUnderTest()||(s="__bundled__"),!n.InspectorFrontendHost.isUnderTest()&&window.localStorage){const e={...t.Settings.NOOP_STORAGE,clear:()=>window.localStorage.clear()};o=new t.Settings.SettingsStorage(window.localStorage,e,s)}else o=new t.Settings.SettingsStorage({},t.Settings.NOOP_STORAGE,s);const r={register:e=>n.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(e,{synced:!1}),set:n.InspectorFrontendHost.InspectorFrontendHostInstance.setPreference,remove:n.InspectorFrontendHost.InspectorFrontendHostInstance.removePreference,clear:n.InspectorFrontendHost.InspectorFrontendHostInstance.clearPreferences},a={...r,register:e=>n.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(e,{synced:!0})},c=new t.Settings.SettingsStorage(e,a,s),l=new t.Settings.SettingsStorage(e,r,s);t.Settings.Settings.instance({forceNew:!0,syncedStorage:c,globalStorage:l,localStorage:o}),self.Common.settings=t.Settings.Settings.instance(),n.InspectorFrontendHost.isUnderTest()||(new t.Settings.VersionController).updateVersion()}initializeExperiments(){i.Runtime.experiments.register("applyCustomStylesheet","Allow extensions to load custom stylesheets"),i.Runtime.experiments.register("captureNodeCreationStacks","Capture node creation stacks"),i.Runtime.experiments.register("sourcesPrettyPrint","Automatically pretty print in the Sources Panel"),i.Runtime.experiments.register("backgroundServices","Background web platform feature events",!0),i.Runtime.experiments.register("backgroundServicesNotifications","Background services section for Notifications"),i.Runtime.experiments.register("backgroundServicesPaymentHandler","Background services section for Payment Handler"),i.Runtime.experiments.register("backgroundServicesPushMessaging","Background services section for Push Messaging"),i.Runtime.experiments.register("ignoreListJSFramesOnTimeline","Ignore List for JavaScript frames on Timeline",!0),i.Runtime.experiments.register("inputEventsOnTimelineOverview","Input events on Timeline overview",!0),i.Runtime.experiments.register("liveHeapProfile","Live heap profile",!0),i.Runtime.experiments.register("protocolMonitor","Protocol Monitor",void 0,"https://developer.chrome.com/blog/new-in-devtools-92/#protocol-monitor"),i.Runtime.experiments.register("developerResourcesView","Show developer resources view"),i.Runtime.experiments.register("cspViolationsView","Show CSP Violations view",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#csp"),i.Runtime.experiments.register("recordCoverageWithPerformanceTracing","Record coverage while performance tracing"),i.Runtime.experiments.register("samplingHeapProfilerTimeline","Sampling heap profiler timeline",!0),i.Runtime.experiments.register("showOptionToNotTreatGlobalObjectsAsRoots","Show option to take heap snapshot where globals are not treated as root"),i.Runtime.experiments.register("sourceOrderViewer","Source order viewer",void 0,"https://developer.chrome.com/blog/new-in-devtools-92/#source-order"),i.Runtime.experiments.register("webauthnPane","WebAuthn Pane"),i.Runtime.experiments.register("keyboardShortcutEditor","Enable keyboard shortcut editor",!0,"https://developer.chrome.com/blog/new-in-devtools-88/#keyboard-shortcuts"),i.Runtime.experiments.register("timelineEventInitiators","Timeline: event initiators"),i.Runtime.experiments.register("timelineInvalidationTracking","Timeline: invalidation tracking",!0),i.Runtime.experiments.register("timelineShowAllEvents","Timeline: show all events",!0),i.Runtime.experiments.register("timelineV8RuntimeCallStats","Timeline: V8 Runtime Call Stats on Timeline",!0),i.Runtime.experiments.register("timelineWebGL","Timeline: WebGL-based flamechart"),i.Runtime.experiments.register("timelineReplayEvent","Timeline: Replay input events",!0),i.Runtime.experiments.register("wasmDWARFDebugging","WebAssembly Debugging: Enable DWARF support",void 0,"https://developer.chrome.com/blog/wasm-debugging-2020/"),i.Runtime.experiments.register("dualScreenSupport","Emulation: Support dual screen mode",void 0,"https://developer.chrome.com/blog/new-in-devtools-89#dual-screen"),i.Runtime.experiments.setEnabled("dualScreenSupport",!0),i.Runtime.experiments.register("APCA","Enable new Advanced Perceptual Contrast Algorithm (APCA) replacing previous contrast ratio and AA/AAA guidelines",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#apca"),i.Runtime.experiments.register("fullAccessibilityTree","Enable full accessibility tree view in the Elements panel",void 0,"https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree"),i.Runtime.experiments.register("fontEditor","Enable new Font Editor tool within the Styles Pane.",void 0,"https://developer.chrome.com/blog/new-in-devtools-89/#font"),i.Runtime.experiments.register("contrastIssues","Enable automatic contrast issue reporting via the Issues panel",void 0,"https://developer.chrome.com/blog/new-in-devtools-90/#low-contrast"),i.Runtime.experiments.register("experimentalCookieFeatures","Enable experimental cookie features"),i.Runtime.experiments.register("hideIssuesFeature","Enable experimental hide issues menu",void 0,"https://developer.chrome.com/blog/new-in-devtools-94/#hide-issues"),i.Runtime.experiments.register("groupAndHideIssuesByKind","Allow grouping and hiding of issues by IssueKind"),i.Runtime.experiments.register(i.Runtime.ExperimentName.SYNC_SETTINGS,"Sync DevTools settings with Chrome Sync"),i.Runtime.experiments.register("reportingApiDebugging","Enable Reporting API panel in the Application panel"),i.Runtime.experiments.register("cssTypeComponentLength","Enable CSS authoring tool in the Styles pane (https://goo.gle/length-feedback)",void 0,"https://developer.chrome.com/blog/new-in-devtools-96/#length"),i.Runtime.experiments.register("preciseChanges","Display more precise changes in the Changes tab"),i.Runtime.experiments.enableExperimentsByDefault(["sourceOrderViewer","hideIssuesFeature","cssTypeComponentLength","preciseChanges",i.Runtime.ExperimentName.SYNC_SETTINGS]),i.Runtime.experiments.cleanUpStaleExperiments();const e=i.Runtime.Runtime.queryParam("enabledExperiments");if(e&&i.Runtime.experiments.setServerEnabledExperiments(e.split(";")),i.Runtime.experiments.enableExperimentsTransiently(["backgroundServices","backgroundServicesNotifications","backgroundServicesPushMessaging","backgroundServicesPaymentHandler","webauthnPane","developerResourcesView"]),n.InspectorFrontendHost.isUnderTest()){const e=i.Runtime.Runtime.queryParam("test");e&&e.includes("live-line-level-heap-profile.js")&&i.Runtime.experiments.enableForTest("liveHeapProfile")}for(const e of i.Runtime.experiments.enabledExperiments())n.userMetrics.experimentEnabledAtLaunch(e.name)}async createAppUI(){C.time("Main._createAppUI"),self.UI.viewManager=v.ViewManager.ViewManager.instance(),self.Persistence.isolatedFileSystemManager=g.IsolatedFileSystemManager.IsolatedFileSystemManager.instance();const o="systemPreferred",s=t.Settings.Settings.instance().createSetting("uiTheme",o);if(v.UIUtils.initializeUIUtils(document,s),s.get()===o){window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",(()=>{v.InspectorView.InspectorView.instance().displayReloadRequiredWarning(M(I.theSystempreferredColorSchemeHas))}))}v.UIUtils.installComponentRootStyles(document.body),this.addMainEventListeners(document);const r=Boolean(i.Runtime.Runtime.queryParam("can_dock"));self.UI.zoomManager=v.ZoomManager.ZoomManager.instance({forceNew:!0,win:window,frontendHost:n.InspectorFrontendHost.InspectorFrontendHostInstance}),self.UI.inspectorView=v.InspectorView.InspectorView.instance(),v.ContextMenu.ContextMenu.initialize(),v.ContextMenu.ContextMenu.installHandler(document),d.NetworkLog.NetworkLog.instance(),e.FrameManager.FrameManager.instance(),d.LogManager.LogManager.instance(),l.IssuesManager.IssuesManager.instance({forceNew:!0,ensureFirst:!0,showThirdPartyIssuesSetting:l.Issue.getShowThirdPartyIssuesSetting(),hideIssueSetting:l.IssuesManager.getHideIssueByCodeSetting()}),l.ContrastCheckTrigger.ContrastCheckTrigger.instance(),self.SDK.consoleModel=e.ConsoleModel.ConsoleModel.instance(),self.UI.dockController=v.DockController.DockController.instance({forceNew:!0,canDock:r}),self.SDK.multitargetNetworkManager=e.NetworkManager.MultitargetNetworkManager.instance({forceNew:!0}),self.SDK.domDebuggerManager=e.DOMDebuggerModel.DOMDebuggerManager.instance({forceNew:!0}),e.TargetManager.TargetManager.instance().addEventListener(e.TargetManager.Events.SuspendStateChanged,this.onSuspendStateChanged.bind(this)),self.Workspace.fileManager=u.FileManager.FileManager.instance({forceNew:!0}),self.Workspace.workspace=u.Workspace.WorkspaceImpl.instance(),self.Bindings.networkProjectManager=a.NetworkProject.NetworkProjectManager.instance(),self.Bindings.resourceMapping=a.ResourceMapping.ResourceMapping.instance({forceNew:!0,targetManager:e.TargetManager.TargetManager.instance(),workspace:u.Workspace.WorkspaceImpl.instance()}),new a.PresentationConsoleMessageHelper.PresentationConsoleMessageManager,self.Bindings.cssWorkspaceBinding=a.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({forceNew:!0,targetManager:e.TargetManager.TargetManager.instance(),workspace:u.Workspace.WorkspaceImpl.instance()}),self.Bindings.debuggerWorkspaceBinding=a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({forceNew:!0,targetManager:e.TargetManager.TargetManager.instance(),workspace:u.Workspace.WorkspaceImpl.instance()}),self.Bindings.breakpointManager=a.BreakpointManager.BreakpointManager.instance({forceNew:!0,workspace:u.Workspace.WorkspaceImpl.instance(),targetManager:e.TargetManager.TargetManager.instance(),debuggerWorkspaceBinding:a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()}),self.Extensions.extensionServer=c.ExtensionServer.ExtensionServer.instance({forceNew:!0}),new g.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding(g.IsolatedFileSystemManager.IsolatedFileSystemManager.instance(),u.Workspace.WorkspaceImpl.instance()),g.IsolatedFileSystemManager.IsolatedFileSystemManager.instance().addPlatformFileSystem("snippet://",new m.ScriptSnippetFileSystem.SnippetFileSystem),self.Persistence.persistence=g.Persistence.PersistenceImpl.instance({forceNew:!0,workspace:u.Workspace.WorkspaceImpl.instance(),breakpointManager:a.BreakpointManager.BreakpointManager.instance()}),self.Persistence.networkPersistenceManager=g.NetworkPersistenceManager.NetworkPersistenceManager.instance({forceNew:!0,workspace:u.Workspace.WorkspaceImpl.instance()}),new S(e.TargetManager.TargetManager.instance(),v.Context.Context.instance()),self.Bindings.ignoreListManager=a.IgnoreListManager.IgnoreListManager.instance({forceNew:!0,debuggerWorkspaceBinding:a.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()}),new A;const p=v.ActionRegistry.ActionRegistry.instance({forceNew:!0});self.UI.actionRegistry=p,self.UI.shortcutRegistry=v.ShortcutRegistry.ShortcutRegistry.instance({forceNew:!0,actionRegistry:p}),this.registerMessageSinkListener(),C.timeEnd("Main._createAppUI");const h=t.AppProvider.getRegisteredAppProviders()[0];if(!h)throw new Error("Unable to boot DevTools, as the appprovider is missing");await this.showAppUI(await h.loadAppProvider())}async showAppUI(e){C.time("Main._showAppUI");const t=e.createApp();v.DockController.DockController.instance().initialize(),t.presentUI(document);const o=v.ActionRegistry.ActionRegistry.instance().action("elements.toggle-element-search");o&&n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.EnterInspectElementMode,(()=>{o.execute()}),this),n.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(n.InspectorFrontendHostAPI.Events.RevealSourceLine,this.revealSourceLine,this),await v.InspectorView.InspectorView.instance().createToolbars(),n.InspectorFrontendHost.InspectorFrontendHostInstance.loadCompleted();const s=i.Runtime.Runtime.queryParam("loadTimelineFromURL");null!==s&&p.TimelinePanel.LoadTimelineHandler.instance().handleQueryParam(s),v.ARIAUtils.alertElementInstance(),setTimeout(this.initializeTarget.bind(this),0),C.timeEnd("Main._showAppUI")}async initializeTarget(){C.time("Main._initializeTarget");for(const e of t.Runnable.earlyInitializationRunnables())await e().run();n.InspectorFrontendHost.InspectorFrontendHostInstance.readyForTest(),setTimeout(this.lateInitialization.bind(this),100),C.timeEnd("Main._initializeTarget")}lateInitialization(){C.time("Main._lateInitialization"),c.ExtensionServer.ExtensionServer.instance().initializeExtensions();const e=t.Runnable.lateInitializationRunnables().map((async e=>(await e()).run()));if(i.Runtime.experiments.isEnabled("liveHeapProfile")){const n="memoryLiveHeapProfile";if(t.Settings.Settings.instance().moduleSetting(n).get())e.push(f.LiveHeapProfile.LiveHeapProfile.instance().run());else{const e=async o=>{o.data&&(t.Settings.Settings.instance().moduleSetting(n).removeChangeListener(e),f.LiveHeapProfile.LiveHeapProfile.instance().run())};t.Settings.Settings.instance().moduleSetting(n).addChangeListener(e)}}this.lateInitDonePromise=Promise.all(e).then((()=>{})),C.timeEnd("Main._lateInitialization")}lateInitDonePromiseForTest(){return this.lateInitDonePromise}registerMessageSinkListener(){t.Console.Console.instance().addEventListener(t.Console.Events.MessageAdded,(function({data:e}){e.show&&t.Console.Console.instance().show()}))}revealSourceLine(e){const{url:n,lineNumber:o,columnNumber:s}=e.data,r=u.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(n);r?t.Revealer.reveal(r.uiLocation(o,s)):u.Workspace.WorkspaceImpl.instance().addEventListener(u.Workspace.Events.UISourceCodeAdded,(function e(r){const i=r.data;i.url()===n&&(t.Revealer.reveal(i.uiLocation(o,s)),u.Workspace.WorkspaceImpl.instance().removeEventListener(u.Workspace.Events.UISourceCodeAdded,e))}))}postDocumentKeyDown(e){e.handled||v.ShortcutRegistry.ShortcutRegistry.instance().handleShortcut(e)}redispatchClipboardEvent(e){const t=new CustomEvent("clipboard-"+e.type,{bubbles:!0});t.original=e;const n=e.target&&e.target.ownerDocument,o=n?n.deepActiveElement():null;o&&o.dispatchEvent(t),t.handled&&e.preventDefault()}contextMenuEventFired(e){(e.handled||e.target.classList.contains("popup-glasspane"))&&e.preventDefault()}addMainEventListeners(e){e.addEventListener("keydown",this.postDocumentKeyDown.bind(this),!1),e.addEventListener("beforecopy",this.redispatchClipboardEvent.bind(this),!0),e.addEventListener("copy",this.redispatchClipboardEvent.bind(this),!1),e.addEventListener("cut",this.redispatchClipboardEvent.bind(this),!1),e.addEventListener("paste",this.redispatchClipboardEvent.bind(this),!1),e.addEventListener("contextmenu",this.contextMenuEventFired.bind(this),!0)}onSuspendStateChanged(){const t=e.TargetManager.TargetManager.instance().allTargetsSuspended();v.InspectorView.InspectorView.instance().onSuspendStateChanged(t)}static instanceForTest=null}let T,k,R,E,D;globalThis.Main=globalThis.Main||{},globalThis.Main.Main=C;class y{static instance(e={forceNew:null}){const{forceNew:t}=e;return T&&!t||(T=new y),T}handleAction(e,t){if(n.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode())return!1;switch(t){case"main.zoom-in":return n.InspectorFrontendHost.InspectorFrontendHostInstance.zoomIn(),!0;case"main.zoom-out":return n.InspectorFrontendHost.InspectorFrontendHostInstance.zoomOut(),!0;case"main.zoom-reset":return n.InspectorFrontendHost.InspectorFrontendHostInstance.resetZoom(),!0}return!1}}class P{static instance(e={forceNew:null}){const{forceNew:t}=e;return k&&!t||(k=new P),k}handleAction(e,t){let n=v.SearchableView.SearchableView.fromElement(document.deepActiveElement());if(!n){const e=v.InspectorView.InspectorView.instance().currentPanelDeprecated();if(e&&e.searchableView&&(n=e.searchableView()),!n)return!1}switch(t){case"main.search-in-panel.find":return n.handleFindShortcut();case"main.search-in-panel.cancel":return n.handleCancelSearchShortcut();case"main.search-in-panel.find-next":return n.handleFindNextShortcut();case"main.search-in-panel.find-previous":return n.handleFindPreviousShortcut()}return!1}}class F{itemInternal;constructor(){this.itemInternal=new v.Toolbar.ToolbarMenuButton(this.handleContextMenu.bind(this),!0),this.itemInternal.element.classList.add("main-menu"),this.itemInternal.setTitle(M(I.customizeAndControlDevtools))}static instance(e={forceNew:null}){const{forceNew:t}=e;return R&&!t||(R=new F),R}item(){return this.itemInternal}handleContextMenu(t){if(v.DockController.DockController.instance().canDock()){const e=document.createElement("div");e.classList.add("flex-centered"),e.classList.add("flex-auto"),e.tabIndex=-1,v.ARIAUtils.setAccessibleName(e,I.dockSide);const n=e.createChild("span","flex-auto");n.textContent=M(I.dockSide);const o=v.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction("main.toggle-dock");v.Tooltip.Tooltip.install(n,M(I.placementOfDevtoolsRelativeToThe,{PH1:o[0].title()})),e.appendChild(n);const i=new v.Toolbar.Toolbar("",e);i.makeBlueOnHover();const a=new v.Toolbar.ToolbarToggle(M(I.undockIntoSeparateWindow),"largeicon-undock"),c=new v.Toolbar.ToolbarToggle(M(I.dockToBottom),"largeicon-dock-to-bottom"),l=new v.Toolbar.ToolbarToggle(M(I.dockToRight),"largeicon-dock-to-right"),d=new v.Toolbar.ToolbarToggle(M(I.dockToLeft),"largeicon-dock-to-left");a.addEventListener(v.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),c.addEventListener(v.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),l.addEventListener(v.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),d.addEventListener(v.Toolbar.ToolbarButton.Events.MouseDown,(e=>e.data.consume())),a.addEventListener(v.Toolbar.ToolbarButton.Events.Click,r.bind(null,"undocked")),c.addEventListener(v.Toolbar.ToolbarButton.Events.Click,r.bind(null,"bottom")),l.addEventListener(v.Toolbar.ToolbarButton.Events.Click,r.bind(null,"right")),d.addEventListener(v.Toolbar.ToolbarButton.Events.Click,r.bind(null,"left")),a.setToggled("undocked"===v.DockController.DockController.instance().dockSide()),c.setToggled("bottom"===v.DockController.DockController.instance().dockSide()),l.setToggled("right"===v.DockController.DockController.instance().dockSide()),d.setToggled("left"===v.DockController.DockController.instance().dockSide()),i.appendToolbarItem(a),i.appendToolbarItem(d),i.appendToolbarItem(c),i.appendToolbarItem(l),e.addEventListener("keydown",(e=>{let t=0;if("ArrowLeft"===e.key)t=-1;else{if("ArrowRight"!==e.key)return;t=1}const n=[a,d,c,l];let o=n.findIndex((e=>e.element.hasFocus()));o=s.NumberUtilities.clamp(o+t,0,n.length-1),n[o].element.focus(),e.consume(!0)})),t.headerSection().appendCustomItem(e)}const o=this.itemInternal.element;function r(e){v.DockController.DockController.instance().once("AfterDockSideChanged").then((()=>{o.focus()})),v.DockController.DockController.instance().setDockSide(e),t.discard()}if("undocked"===v.DockController.DockController.instance().dockSide()){const n=e.TargetManager.TargetManager.instance().mainTarget();n&&n.type()===e.Target.Type.Frame&&t.defaultSection().appendAction("inspector_main.focus-debuggee",M(I.focusDebuggee))}t.defaultSection().appendAction("main.toggle-drawer",v.InspectorView.InspectorView.instance().drawerVisible()?M(I.hideConsoleDrawer):M(I.showConsoleDrawer)),t.appendItemsAtLocation("mainMenu");const i=t.defaultSection().appendSubMenuItem(M(I.moreTools)),a=v.ViewManager.getRegisteredViewExtensions();a.sort(((e,t)=>{const n=e.title(),o=t.title();return n.localeCompare(o)}));for(const e of a){const t=e.location(),o=e.persistence(),s=e.title(),r=e.viewId();if("issues-pane"!==r){if("closeable"===o&&("drawer-view"===t||"panel"===t))if(e.isPreviewFeature()){const e=new h.Icon.Icon;e.data={iconName:"ic_preview_feature",color:"var(--icon-color)",width:"14px",height:"14px"},i.defaultSection().appendItem(s,(()=>{v.ViewManager.ViewManager.instance().showView(r,!0,!1)}),!1,e)}else i.defaultSection().appendItem(s,(()=>{v.ViewManager.ViewManager.instance().showView(r,!0,!1)}))}else i.defaultSection().appendItem(s,(()=>{n.userMetrics.issuesPanelOpenedFrom(n.UserMetrics.IssueOpener.HamburgerMenu),v.ViewManager.ViewManager.instance().showView("issues-pane",!0)}))}t.footerSection().appendSubMenuItem(M(I.help)).appendItemsAtLocation("mainMenuHelp")}}class L{settingsButton;constructor(){this.settingsButton=v.Toolbar.Toolbar.createActionButtonForId("settings.show",{showLabel:!1,userActionCode:void 0})}static instance(e={forceNew:null}){const{forceNew:t}=e;return E&&!t||(E=new L),E}item(){return this.settingsButton}}class A{constructor(){e.TargetManager.TargetManager.instance().addModelListener(e.DebuggerModel.DebuggerModel,e.DebuggerModel.Events.DebuggerPaused,this.debuggerPaused,this)}debuggerPaused(n){e.TargetManager.TargetManager.instance().removeModelListener(e.DebuggerModel.DebuggerModel,e.DebuggerModel.Events.DebuggerPaused,this.debuggerPaused,this);const o=n.data,s=o.debuggerPausedDetails();v.Context.Context.instance().setFlavor(e.Target.Target,o.target()),t.Revealer.reveal(s)}}class H{static instance(e={forceNew:null}){const{forceNew:t}=e;return D&&!t||(D=new H),D}handleAction(e,t){return"main.debug-reload"===t&&(w.Reload.reload(),!0)}}var N=Object.freeze({__proto__:null,MainImpl:C,ZoomActionDelegate:y,SearchActionDelegate:P,MainMenuItem:F,SettingsButtonProvider:L,PauseListener:A,sendOverProtocol:function(e,t){return new Promise(((n,o)=>{const s=r.InspectorBackend.test.sendRawMessage;if(!s)return o("Unable to send message to test client");s(e,t,((e,...t)=>e?o(e):n(t)))}))},ReloadActionDelegate:H});class B{presentUI(e){const t=new v.RootView.RootView;v.InspectorView.InspectorView.instance().show(t.element),t.attachToDocument(e),t.focus()}}let W;class U{static instance(e={forceNew:null}){const{forceNew:t}=e;return W&&!t||(W=new U),W}createApp(){return new B}}var _=Object.freeze({__proto__:null,SimpleApp:B,SimpleAppProvider:U});export{b as ExecutionContextSelector,N as MainImpl,_ as SimpleApp}; diff --git a/chii/entrypoints/ndb_app/ndb_app.js b/chii/entrypoints/ndb_app/ndb_app.js new file mode 100644 index 00000000..d7b1ce93 --- /dev/null +++ b/chii/entrypoints/ndb_app/ndb_app.js @@ -0,0 +1 @@ +Root.allDescriptors.push(...[]);Root.applicationDescriptor={"modules":[]};import*as RootModule from'../../core/root/root.js';import'../shell/shell.js';import*as Main from'../main/main.js';import*as Startup from'../startup/startup.js';new Main.MainImpl.MainImpl();Startup.RuntimeInstantiator.startApplication('ndb_app'); \ No newline at end of file diff --git a/chii/entrypoints/node_app/node_app.js b/chii/entrypoints/node_app/node_app.js new file mode 100644 index 00000000..3d461b90 --- /dev/null +++ b/chii/entrypoints/node_app/node_app.js @@ -0,0 +1 @@ +import"../shell/shell.js";import*as e from"../../core/i18n/i18n.js";import*as t from"../../ui/legacy/legacy.js";import*as n from"../../core/common/common.js";import*as o from"../../core/root/root.js";import*as s from"../main/main.js";import*as i from"../../core/host/host.js";import*as r from"../../ui/legacy/components/utils/utils.js";import*as a from"../../core/sdk/sdk.js";const c={profiler:"Profiler",showProfiler:"Show Profiler",startStopRecording:"Start/stop recording"},d=e.i18n.registerUIStrings("panels/js_profiler/js_profiler-meta.ts",c),l=e.i18n.getLazilyComputedLocalizedString.bind(void 0,d);let g;async function h(){return g||(g=await import("../../panels/profiler/profiler.js")),g}t.ViewManager.registerViewExtension({location:"panel",id:"js_profiler",title:l(c.profiler),commandPrompt:l(c.showProfiler),order:65,loadView:async()=>(await h()).ProfilesPanel.JSProfilerPanel.instance()}),t.ActionRegistration.registerActionExtension({actionId:"profiler.js-toggle-recording",category:t.ActionRegistration.ActionCategory.JAVASCRIPT_PROFILER,title:l(c.startStopRecording),iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,contextTypes:()=>void 0===g?[]:(e=>[e.ProfilesPanel.JSProfilerPanel])(g),loadActionDelegate:async()=>(await h()).ProfilesPanel.JSProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]});const p={main:"Main",nodejsS:"Node.js: {PH1}"},w=e.i18n.registerUIStrings("entrypoints/node_app/NodeMain.ts",p),v=e.i18n.getLocalizedString.bind(void 0,w);let m;class f{static instance(e={forceNew:null}){const{forceNew:t}=e;return m&&!t||(m=new f),m}async run(){i.userMetrics.actionTaken(i.UserMetrics.Action.ConnectToNodeJSFromFrontend),a.Connections.initMainConnection((async()=>{a.TargetManager.TargetManager.instance().createTarget("main",v(p.main),a.Target.Type.Browser,null).setInspectedURL("Node.js")}),r.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost)}}class u extends a.SDKModel.SDKModel{targetManager;parentTarget;targetAgent;childTargets;childConnections;constructor(e){super(e),this.targetManager=e.targetManager(),this.parentTarget=e,this.targetAgent=e.targetAgent(),this.childTargets=new Map,this.childConnections=new Map,e.registerTargetDispatcher(this),this.targetAgent.invoke_setDiscoverTargets({discover:!0}),i.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(i.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.devicesDiscoveryConfigChanged,this),i.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!1),i.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!0)}devicesDiscoveryConfigChanged({data:e}){const t=[];for(const n of e.networkDiscoveryConfig){const e=n.split(":"),o=parseInt(e[1],10);e[0]&&o&&t.push({host:e[0],port:o})}this.targetAgent.invoke_setRemoteLocations({locations:t})}dispose(){i.InspectorFrontendHost.InspectorFrontendHostInstance.events.removeEventListener(i.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.devicesDiscoveryConfigChanged,this);for(const e of this.childTargets.keys())this.detachedFromTarget({sessionId:e})}targetCreated({targetInfo:e}){"node"!==e.type||e.attached||this.targetAgent.invoke_attachToTarget({targetId:e.targetId,flatten:!1})}targetInfoChanged(e){}targetDestroyed(e){}attachedToTarget({sessionId:e,targetInfo:t}){const n=v(p.nodejsS,{PH1:t.url}),o=new y(this.targetAgent,e);this.childConnections.set(e,o);const s=this.targetManager.createTarget(t.targetId,n,a.Target.Type.Node,this.parentTarget,void 0,void 0,o);this.childTargets.set(e,s),s.runtimeAgent().invoke_runIfWaitingForDebugger()}detachedFromTarget({sessionId:e}){const t=this.childTargets.get(e);t&&t.dispose("target terminated"),this.childTargets.delete(e),this.childConnections.delete(e)}receivedMessageFromTarget({sessionId:e,message:t}){const n=this.childConnections.get(e),o=n?n.onMessage:null;o&&o.call(null,t)}targetCrashed(e){}}class y{targetAgent;sessionId;onMessage;onDisconnect;constructor(e,t){this.targetAgent=e,this.sessionId=t,this.onMessage=null,this.onDisconnect=null}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.onDisconnect=e}sendRawMessage(e){this.targetAgent.invoke_sendMessageToTarget({message:e,sessionId:this.sessionId})}async disconnect(){this.onDisconnect&&this.onDisconnect.call(null,"force disconnect"),this.onDisconnect=null,this.onMessage=null,await this.targetAgent.invoke_detachFromTarget({sessionId:this.sessionId})}}a.SDKModel.SDKModel.register(u,{capabilities:a.Target.Capability.Target,autostart:!0});const C=new CSSStyleSheet;C.replaceSync(".add-network-target-button{margin:10px 25px;align-self:center}.network-discovery-list{flex:none;max-width:600px;max-height:202px;margin:20px 0 5px}.network-discovery-list-empty{flex:auto;height:30px;display:flex;align-items:center;justify-content:center}.network-discovery-list-item{padding:3px 5px;height:30px;display:flex;align-items:center;position:relative;flex:auto 1 1}.network-discovery-value{flex:3 1 0}.list-item .network-discovery-value{white-space:nowrap;text-overflow:ellipsis;user-select:none;color:var(--color-text-primary);overflow:hidden}.network-discovery-edit-row{flex:none;display:flex;flex-direction:row;margin:6px 5px;align-items:center}.network-discovery-edit-row input{width:100%;text-align:inherit}.network-discovery-footer{margin:0;overflow:hidden;max-width:500px}.network-discovery-footer>*{white-space:pre-wrap}.node-panel{align-items:center;justify-content:flex-start;overflow-y:auto}.network-discovery-view{min-width:400px;text-align:left}:host-context(.node-frontend) .network-discovery-list-empty{height:40px}:host-context(.node-frontend) .network-discovery-list-item{padding:3px 15px;height:40px}.node-panel-center{max-width:600px;padding-top:50px;text-align:center}.node-panel-logo{width:400px;margin-bottom:50px}:host-context(.node-frontend) .network-discovery-edit-row input{height:30px;padding-left:5px}:host-context(.node-frontend) .network-discovery-edit-row{margin:6px 9px}\n/*# sourceURL=nodeConnectionsPanel.css */\n");const k={nodejsDebuggingGuide:"Node.js debugging guide",specifyNetworkEndpointAnd:"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more.",noConnectionsSpecified:"No connections specified",addConnection:"Add connection",networkAddressEgLocalhost:"Network address (e.g. localhost:9229)"},I=e.i18n.registerUIStrings("entrypoints/node_app/NodeConnectionsPanel.ts",k),x=e.i18n.getLocalizedString.bind(void 0,I);let D;class S extends t.Panel.Panel{config;networkDiscoveryView;constructor(){super("node-connection"),this.contentElement.classList.add("node-panel");const e=this.contentElement.createChild("div","node-panel-center");e.createChild("img","node-panel-logo").src="https://nodejs.org/static/images/logos/nodejs-new-pantone-black.svg",i.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(i.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this.devicesDiscoveryConfigChanged,this),this.contentElement.tabIndex=0,this.setDefaultFocusedElement(this.contentElement),i.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!1),i.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesUpdatesEnabled(!0),this.networkDiscoveryView=new T((e=>{this.config.networkDiscoveryConfig=e,i.InspectorFrontendHost.InspectorFrontendHostInstance.setDevicesDiscoveryConfig(this.config)})),this.networkDiscoveryView.show(e)}static instance(e={forceNew:null}){const{forceNew:t}=e;return D&&!t||(D=new S),D}devicesDiscoveryConfigChanged({data:e}){this.config=e,this.networkDiscoveryView.discoveryConfigChanged(this.config.networkDiscoveryConfig)}wasShown(){super.wasShown(),this.registerCSSFiles([C])}}class T extends t.Widget.VBox{callback;list;editor;networkDiscoveryConfig;constructor(n){super(),this.callback=n,this.element.classList.add("network-discovery-view");const o=this.element.createChild("div","network-discovery-footer"),s=t.XLink.XLink.create("https://nodejs.org/en/docs/inspector/",x(k.nodejsDebuggingGuide));o.appendChild(e.i18n.getFormatLocalizedString(I,k.specifyNetworkEndpointAnd,{PH1:s})),this.list=new t.ListWidget.ListWidget(this),this.list.element.classList.add("network-discovery-list");const i=document.createElement("div");i.classList.add("network-discovery-list-empty"),i.textContent=x(k.noConnectionsSpecified),this.list.setEmptyPlaceholder(i),this.list.show(this.element),this.editor=null;const r=t.UIUtils.createTextButton(x(k.addConnection),this.addNetworkTargetButtonClicked.bind(this),"add-network-target-button",!0);this.element.appendChild(r),this.networkDiscoveryConfig=[],this.element.classList.add("node-frontend")}update(){const e=this.networkDiscoveryConfig.map((e=>e.address));this.callback.call(null,e)}addNetworkTargetButtonClicked(){this.list.addNewItem(this.networkDiscoveryConfig.length,{address:"",port:""})}discoveryConfigChanged(e){this.networkDiscoveryConfig=[],this.list.clear();for(const t of e){const e={address:t,port:""};this.networkDiscoveryConfig.push(e),this.list.appendItem(e,!0)}}renderItem(e,t){const n=document.createElement("div");return n.classList.add("network-discovery-list-item"),n.createChild("div","network-discovery-value network-discovery-address").textContent=e.address,n}removeItemRequested(e,t){this.networkDiscoveryConfig.splice(t,1),this.list.removeItem(t),this.update()}commitEdit(e,t,n){e.address=t.control("address").value.trim(),n&&this.networkDiscoveryConfig.push(e),this.update()}beginEdit(e){const t=this.createEditor();return t.control("address").value=e.address,t}createEditor(){if(this.editor)return this.editor;const e=new t.ListWidget.Editor;this.editor=e;const n=e.contentElement().createChild("div","network-discovery-edit-row"),o=e.createInput("address","text",x(k.networkAddressEgLocalhost),(function(e,t,n){const o=n.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/);if(!o)return{valid:!1,errorMessage:void 0};return{valid:parseInt(o[2],10)<=65535,errorMessage:void 0}}));return n.createChild("div","network-discovery-value network-discovery-address").appendChild(o),e}wasShown(){super.wasShown(),this.list.registerCSSFiles([C])}}const E={connection:"Connection",node:"node",showConnection:"Show Connection",networkTitle:"Node",showNode:"Node"},M=e.i18n.registerUIStrings("entrypoints/node_app/node_app.ts",E),P=e.i18n.getLazilyComputedLocalizedString.bind(void 0,M);let F;t.ViewManager.registerViewExtension({location:"panel",id:"node-connection",title:P(E.connection),commandPrompt:P(E.showConnection),order:0,loadView:async()=>S.instance(),tags:[P(E.node)]}),t.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-network",title:P(E.networkTitle),commandPrompt:P(E.showNode),order:2,persistence:"permanent",loadView:async()=>(await async function(){return F||(F=await import("../../panels/sources/sources.js")),F}()).SourcesNavigator.NetworkNavigatorView.instance()});const b=o.Runtime.Runtime.instance({forceNew:!0,moduleDescriptors:[]});self.runtime=b,n.Runnable.registerEarlyInitializationRunnable(f.instance),new s.MainImpl.MainImpl,o.Runtime.appStartedPromiseCallback(); diff --git a/chii/entrypoints/shell/shell.js b/chii/entrypoints/shell/shell.js new file mode 100644 index 00000000..3c162933 --- /dev/null +++ b/chii/entrypoints/shell/shell.js @@ -0,0 +1 @@ +import"../../Images/Images.js";import"../startup/startup.js";import*as e from"../../core/root/root.js";import"../../core/platform/platform.js";import"../../core/dom_extension/dom_extension.js";import*as t from"../../core/common/common.js";import*as i from"../../core/i18n/i18n.js";import*as o from"../../core/sdk/sdk.js";import*as n from"../../models/workspace/workspace.js";import*as a from"../../ui/legacy/components/object_ui/object_ui.js";import*as s from"../../ui/legacy/components/quick_open/quick_open.js";import*as r from"../../ui/legacy/legacy.js";import*as l from"../../models/workspace_diff/workspace_diff.js";import*as c from"../../ui/legacy/components/utils/utils.js";import"../main/main.js";self.Root=self.Root||{},Root=Root||{},Root.Runtime=e.Runtime.Runtime,Root.Runtime.experiments=e.Runtime.experiments,Root.Runtime.queryParam=e.Runtime.Runtime.queryParam,Root.runtime,Root.Runtime.loadResourcePromise=e.Runtime.loadResourcePromise,Root.Runtime.Extension=e.Runtime.Extension,Root.Runtime.Module=e.Runtime.Module;const g={showSources:"Show Sources",sources:"Sources",showFilesystem:"Show Filesystem",filesystem:"Filesystem",showSnippets:"Show Snippets",snippets:"Snippets",showSearch:"Show Search",search:"Search",showQuickSource:"Show Quick source",quickSource:"Quick source",showThreads:"Show Threads",threads:"Threads",showScope:"Show Scope",scope:"Scope",showWatch:"Show Watch",watch:"Watch",showBreakpoints:"Show Breakpoints",breakpoints:"Breakpoints",pauseScriptExecution:"Pause script execution",resumeScriptExecution:"Resume script execution",stepOverNextFunctionCall:"Step over next function call",stepIntoNextFunctionCall:"Step into next function call",step:"Step",stepOutOfCurrentFunction:"Step out of current function",runSnippet:"Run snippet",deactivateBreakpoints:"Deactivate breakpoints",activateBreakpoints:"Activate breakpoints",addSelectedTextToWatches:"Add selected text to watches",evaluateSelectedTextInConsole:"Evaluate selected text in console",switchFile:"Switch file",rename:"Rename",closeAll:"Close All",jumpToPreviousEditingLocation:"Jump to previous editing location",jumpToNextEditingLocation:"Jump to next editing location",closeTheActiveTab:"Close the active tab",goToLine:"Go to line",goToAFunctionDeclarationruleSet:"Go to a function declaration/rule set",toggleBreakpoint:"Toggle breakpoint",toggleBreakpointEnabled:"Toggle breakpoint enabled",toggleBreakpointInputWindow:"Toggle breakpoint input window",save:"Save",saveAll:"Save all",createNewSnippet:"Create new snippet",addFolderToWorkspace:"Add folder to workspace",previousCallFrame:"Previous call frame",nextCallFrame:"Next call frame",incrementCssUnitBy:"Increment CSS unit by {PH1}",decrementCssUnitBy:"Decrement CSS unit by {PH1}",searchInAnonymousAndContent:"Search in anonymous and content scripts",doNotSearchInAnonymousAndContent:"Do not search in anonymous and content scripts",automaticallyRevealFilesIn:"Automatically reveal files in sidebar",doNotAutomaticallyRevealFilesIn:"Do not automatically reveal files in sidebar",enableJavascriptSourceMaps:"Enable JavaScript source maps",disableJavascriptSourceMaps:"Disable JavaScript source maps",enableTabMovesFocus:"Enable tab moves focus",disableTabMovesFocus:"Disable tab moves focus",detectIndentation:"Detect indentation",doNotDetectIndentation:"Do not detect indentation",autocompletion:"Autocompletion",enableAutocompletion:"Enable autocompletion",disableAutocompletion:"Disable autocompletion",bracketMatching:"Bracket matching",enableBracketMatching:"Enable bracket matching",disableBracketMatching:"Disable bracket matching",codeFolding:"Code folding",enableCodeFolding:"Enable code folding",disableCodeFolding:"Disable code folding",showWhitespaceCharacters:"Show whitespace characters:",doNotShowWhitespaceCharacters:"Do not show whitespace characters",none:"None",showAllWhitespaceCharacters:"Show all whitespace characters",all:"All",showTrailingWhitespaceCharacters:"Show trailing whitespace characters",trailing:"Trailing",displayVariableValuesInlineWhile:"Display variable values inline while debugging",doNotDisplayVariableValuesInline:"Do not display variable values inline while debugging",enableCssSourceMaps:"Enable CSS source maps",disableCssSourceMaps:"Disable CSS source maps",allowScrollingPastEndOfFile:"Allow scrolling past end of file",disallowScrollingPastEndOfFile:"Disallow scrolling past end of file",goTo:"Go to",line:"Line",symbol:"Symbol",open:"Open",file:"File",disableAutoFocusOnDebuggerPaused:"Do not focus Sources panel when triggering a breakpoint",enableAutoFocusOnDebuggerPaused:"Focus Sources panel when triggering a breakpoint"},d=i.i18n.registerUIStrings("panels/sources/sources-meta.ts",g),u=i.i18n.getLazilyComputedLocalizedString.bind(void 0,d);let S,p;async function m(){return S||(S=await import("../../panels/sources/sources.js")),S}function y(e){return void 0===S?[]:e(S)}r.ViewManager.registerViewExtension({location:"panel",id:"sources",commandPrompt:u(g.showSources),title:u(g.sources),order:30,loadView:async()=>(await m()).SourcesPanel.SourcesPanel.instance()}),globalThis.chii||r.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-files",commandPrompt:u(g.showFilesystem),title:u(g.filesystem),order:3,persistence:"permanent",loadView:async()=>(await m()).SourcesNavigator.FilesNavigatorView.instance()}),r.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-snippets",commandPrompt:u(g.showSnippets),title:u(g.snippets),order:6,persistence:"permanent",loadView:async()=>(await m()).SourcesNavigator.SnippetsNavigatorView.instance()}),r.ViewManager.registerViewExtension({location:"drawer-view",id:"sources.search-sources-tab",commandPrompt:u(g.showSearch),title:u(g.search),order:7,persistence:"closeable",loadView:async()=>(await m()).SearchSourcesView.SearchSourcesView.instance()}),r.ViewManager.registerViewExtension({location:"drawer-view",id:"sources.quick",commandPrompt:u(g.showQuickSource),title:u(g.quickSource),persistence:"closeable",order:1e3,loadView:async()=>(await m()).SourcesPanel.WrapperView.instance()}),r.ViewManager.registerViewExtension({id:"sources.threads",commandPrompt:u(g.showThreads),title:u(g.threads),persistence:"permanent",condition:e.Runtime.ConditionName.NOT_SOURCES_HIDE_ADD_FOLDER,loadView:async()=>(await m()).ThreadsSidebarPane.ThreadsSidebarPane.instance()}),r.ViewManager.registerViewExtension({id:"sources.scopeChain",commandPrompt:u(g.showScope),title:u(g.scope),persistence:"permanent",loadView:async()=>(await m()).ScopeChainSidebarPane.ScopeChainSidebarPane.instance()}),r.ViewManager.registerViewExtension({id:"sources.watch",commandPrompt:u(g.showWatch),title:u(g.watch),persistence:"permanent",loadView:async()=>(await m()).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(),hasToolbar:!0}),r.ViewManager.registerViewExtension({id:"sources.jsBreakpoints",commandPrompt:u(g.showBreakpoints),title:u(g.breakpoints),persistence:"permanent",loadView:async()=>(await m()).JavaScriptBreakpointsSidebarPane.JavaScriptBreakpointsSidebarPane.instance()}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.toggle-pause",iconClass:"largeicon-pause",toggleable:!0,toggledIconClass:"largeicon-resume",loadActionDelegate:async()=>(await m()).SourcesPanel.RevealingActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView,r.ShortcutRegistry.ForwardedShortcut])),options:[{value:!0,title:u(g.pauseScriptExecution)},{value:!1,title:u(g.resumeScriptExecution)}],bindings:[{shortcut:"F8",keybindSets:["devToolsDefault"]},{platform:"windows,linux",shortcut:"Ctrl+\\"},{shortcut:"F5",keybindSets:["vsCode"]},{shortcut:"Shift+F5",keybindSets:["vsCode"]},{platform:"mac",shortcut:"Meta+\\"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.step-over",loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),title:u(g.stepOverNextFunctionCall),iconClass:"largeicon-step-over",contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],bindings:[{shortcut:"F10",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+'"},{platform:"mac",shortcut:"Meta+'"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.step-into",loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),title:u(g.stepIntoNextFunctionCall),iconClass:"largeicon-step-into",contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],bindings:[{shortcut:"F11",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+;"},{platform:"mac",shortcut:"Meta+;"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.step",loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),title:u(g.step),iconClass:"largeicon-step",contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],bindings:[{shortcut:"F9",keybindSets:["devToolsDefault"]}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.step-out",loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),title:u(g.stepOutOfCurrentFunction),iconClass:"largeicon-step-out",contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],bindings:[{shortcut:"Shift+F11",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Shift+Ctrl+;"},{platform:"mac",shortcut:"Shift+Meta+;"}]}),r.ActionRegistration.registerActionExtension({actionId:"debugger.run-snippet",category:r.ActionRegistration.ActionCategory.DEBUGGER,loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),title:u(g.runSnippet),iconClass:"largeicon-play",contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Enter"},{platform:"mac",shortcut:"Meta+Enter"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.toggle-breakpoints-active",iconClass:"largeicon-deactivate-breakpoints",toggleable:!0,loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),options:[{value:!0,title:u(g.deactivateBreakpoints)},{value:!1,title:u(g.activateBreakpoints)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+F8"},{platform:"mac",shortcut:"Meta+F8"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.add-to-watch",loadActionDelegate:async()=>(await m()).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(),category:r.ActionRegistration.ActionCategory.DEBUGGER,title:u(g.addSelectedTextToWatches),contextTypes:()=>y((e=>[e.UISourceCodeFrame.UISourceCodeFrame])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+A"},{platform:"mac",shortcut:"Meta+Shift+A"}]}),r.ActionRegistration.registerActionExtension({actionId:"debugger.evaluate-selection",category:r.ActionRegistration.ActionCategory.DEBUGGER,loadActionDelegate:async()=>(await m()).SourcesPanel.DebuggingActionDelegate.instance(),title:u(g.evaluateSelectedTextInConsole),contextTypes:()=>y((e=>[e.UISourceCodeFrame.UISourceCodeFrame])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.switch-file",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.switchFile),loadActionDelegate:async()=>(await m()).SourcesView.SwitchFileActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{shortcut:"Alt+O"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.rename",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.rename),bindings:[{platform:"windows,linux",shortcut:"F2"},{platform:"mac",shortcut:"Enter"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.SOURCES,actionId:"sources.close-all",loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),title:u(g.closeAll)}),r.ActionRegistration.registerActionExtension({actionId:"sources.jump-to-previous-location",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.jumpToPreviousEditingLocation),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{shortcut:"Alt+Minus"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.jump-to-next-location",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.jumpToNextEditingLocation),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{shortcut:"Alt+Plus"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.close-editor-tab",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.closeTheActiveTab),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{shortcut:"Alt+w"},{shortcut:"Ctrl+W",keybindSets:["vsCode"]},{platform:"windows",shortcut:"Ctrl+F4",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.go-to-line",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.goToLine),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{shortcut:"Ctrl+g",keybindSets:["devToolsDefault","vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.go-to-member",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.goToAFunctionDeclarationruleSet),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+o",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+Shift+o",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+T",keybindSets:["vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+T",keybindSets:["vsCode"]},{shortcut:"F12",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"debugger.toggle-breakpoint",category:r.ActionRegistration.ActionCategory.DEBUGGER,title:u(g.toggleBreakpoint),bindings:[{platform:"windows,linux",shortcut:"Ctrl+b"},{platform:"mac",shortcut:"Meta+b"},{shortcut:"F9",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"debugger.toggle-breakpoint-enabled",category:r.ActionRegistration.ActionCategory.DEBUGGER,title:u(g.toggleBreakpointEnabled),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+b"},{platform:"mac",shortcut:"Meta+Shift+b"}]}),r.ActionRegistration.registerActionExtension({actionId:"debugger.breakpoint-input-window",category:r.ActionRegistration.ActionCategory.DEBUGGER,title:u(g.toggleBreakpointInputWindow),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Alt+b"},{platform:"mac",shortcut:"Meta+Alt+b"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.save",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.save),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+s",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+s",keybindSets:["devToolsDefault","vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.save-all",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.saveAll),loadActionDelegate:async()=>(await m()).SourcesView.ActionDelegate.instance(),contextTypes:()=>y((e=>[e.SourcesView.SourcesView])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+s"},{platform:"mac",shortcut:"Meta+Alt+s"},{platform:"windows,linux",shortcut:"Ctrl+K S",keybindSets:["vsCode"]},{platform:"mac",shortcut:"Meta+Alt+S",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.SOURCES,actionId:"sources.create-snippet",loadActionDelegate:async()=>(await m()).SourcesNavigator.ActionDelegate.instance(),title:u(g.createNewSnippet)}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.SOURCES,actionId:"sources.add-folder-to-workspace",loadActionDelegate:async()=>(await m()).SourcesNavigator.ActionDelegate.instance(),iconClass:"largeicon-add",title:u(g.addFolderToWorkspace),condition:e.Runtime.ConditionName.NOT_SOURCES_HIDE_ADD_FOLDER}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.previous-call-frame",loadActionDelegate:async()=>(await m()).CallStackSidebarPane.ActionDelegate.instance(),title:u(g.previousCallFrame),contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],bindings:[{shortcut:"Ctrl+,"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DEBUGGER,actionId:"debugger.next-call-frame",loadActionDelegate:async()=>(await m()).CallStackSidebarPane.ActionDelegate.instance(),title:u(g.nextCallFrame),contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],bindings:[{shortcut:"Ctrl+."}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.search",title:u(g.search),loadActionDelegate:async()=>(await m()).SearchSourcesView.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.SOURCES,bindings:[{platform:"mac",shortcut:"Meta+Alt+F",keybindSets:["devToolsDefault"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+J",keybindSets:["vsCode"]},{platform:"mac",shortcut:"Meta+Shift+F",keybindSets:["vsCode"]},{platform:"mac",shortcut:"Meta+Shift+J",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.increment-css",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.incrementCssUnitBy,{PH1:1}),bindings:[{shortcut:"Alt+Up"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.increment-css-by-ten",title:u(g.incrementCssUnitBy,{PH1:10}),category:r.ActionRegistration.ActionCategory.SOURCES,bindings:[{shortcut:"Alt+PageUp"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.decrement-css",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.decrementCssUnitBy,{PH1:1}),bindings:[{shortcut:"Alt+Down"}]}),r.ActionRegistration.registerActionExtension({actionId:"sources.decrement-css-by-ten",category:r.ActionRegistration.ActionCategory.SOURCES,title:u(g.decrementCssUnitBy,{PH1:10}),bindings:[{shortcut:"Alt+PageDown"}]}),t.Settings.registerSettingExtension({settingName:"navigatorGroupByFolder",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.searchInAnonymousAndContent),settingName:"searchInAnonymousAndContentScripts",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:u(g.searchInAnonymousAndContent)},{value:!1,title:u(g.doNotSearchInAnonymousAndContent)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.automaticallyRevealFilesIn),settingName:"autoRevealInNavigator",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:u(g.automaticallyRevealFilesIn)},{value:!1,title:u(g.doNotAutomaticallyRevealFilesIn)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.enableJavascriptSourceMaps),settingName:"jsSourceMapsEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.enableJavascriptSourceMaps)},{value:!1,title:u(g.disableJavascriptSourceMaps)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.enableTabMovesFocus),settingName:"textEditorTabMovesFocus",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:u(g.enableTabMovesFocus)},{value:!1,title:u(g.disableTabMovesFocus)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.detectIndentation),settingName:"textEditorAutoDetectIndent",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.detectIndentation)},{value:!1,title:u(g.doNotDetectIndentation)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.autocompletion),settingName:"textEditorAutocompletion",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.enableAutocompletion)},{value:!1,title:u(g.disableAutocompletion)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,title:u(g.bracketMatching),settingName:"textEditorBracketMatching",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.enableBracketMatching)},{value:!1,title:u(g.disableBracketMatching)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.codeFolding),settingName:"textEditorCodeFolding",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:u(g.enableCodeFolding)},{value:!1,title:u(g.disableCodeFolding)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.showWhitespaceCharacters),settingName:"showWhitespacesInEditor",settingType:t.Settings.SettingType.ENUM,defaultValue:"original",options:[{title:u(g.doNotShowWhitespaceCharacters),text:u(g.none),value:"none"},{title:u(g.showAllWhitespaceCharacters),text:u(g.all),value:"all"},{title:u(g.showTrailingWhitespaceCharacters),text:u(g.trailing),value:"trailing"}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.displayVariableValuesInlineWhile),settingName:"inlineVariableValues",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.displayVariableValuesInlineWhile)},{value:!1,title:u(g.doNotDisplayVariableValuesInline)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.enableAutoFocusOnDebuggerPaused),settingName:"autoFocusOnDebuggerPausedEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.enableAutoFocusOnDebuggerPaused)},{value:!1,title:u(g.disableAutoFocusOnDebuggerPaused)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.enableCssSourceMaps),settingName:"cssSourceMapsEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.enableCssSourceMaps)},{value:!1,title:u(g.disableCssSourceMaps)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:u(g.allowScrollingPastEndOfFile),settingName:"allowScrollPastEof",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:u(g.allowScrollingPastEndOfFile)},{value:!1,title:u(g.disallowScrollingPastEndOfFile)}]}),r.ViewManager.registerLocationResolver({name:"navigator-view",category:r.ViewManager.ViewLocationCategoryValues.SOURCES,loadResolver:async()=>(await m()).SourcesPanel.SourcesPanel.instance()}),r.ViewManager.registerLocationResolver({name:"sources.sidebar-top",category:r.ViewManager.ViewLocationCategoryValues.SOURCES,loadResolver:async()=>(await m()).SourcesPanel.SourcesPanel.instance()}),r.ViewManager.registerLocationResolver({name:"sources.sidebar-bottom",category:r.ViewManager.ViewLocationCategoryValues.SOURCES,loadResolver:async()=>(await m()).SourcesPanel.SourcesPanel.instance()}),r.ViewManager.registerLocationResolver({name:"sources.sidebar-tabs",category:r.ViewManager.ViewLocationCategoryValues.SOURCES,loadResolver:async()=>(await m()).SourcesPanel.SourcesPanel.instance()}),r.ContextMenu.registerProvider({contextTypes:()=>[n.UISourceCode.UISourceCode,n.UISourceCode.UILocation,o.RemoteObject.RemoteObject,o.NetworkRequest.NetworkRequest,...y((e=>[e.UISourceCodeFrame.UISourceCodeFrame]))],loadProvider:async()=>(await m()).SourcesPanel.SourcesPanel.instance(),experiment:void 0}),r.ContextMenu.registerProvider({loadProvider:async()=>(await m()).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(),contextTypes:()=>[a.ObjectPropertiesSection.ObjectPropertyTreeElement],experiment:void 0}),r.ContextMenu.registerProvider({contextTypes:()=>y((e=>[e.UISourceCodeFrame.UISourceCodeFrame])),loadProvider:async()=>(await m()).WatchExpressionsSidebarPane.WatchExpressionsSidebarPane.instance(),experiment:void 0}),r.ContextMenu.registerProvider({loadProvider:async()=>(await m()).ScopeChainSidebarPane.OpenLinearMemoryInspector.instance(),experiment:void 0,contextTypes:()=>[a.ObjectPropertiesSection.ObjectPropertyTreeElement]}),t.Revealer.registerRevealer({contextTypes:()=>[n.UISourceCode.UILocation],destination:t.Revealer.RevealerDestination.SOURCES_PANEL,loadRevealer:async()=>(await m()).SourcesPanel.UILocationRevealer.instance()}),t.Revealer.registerRevealer({contextTypes:()=>[o.DebuggerModel.Location],destination:t.Revealer.RevealerDestination.SOURCES_PANEL,loadRevealer:async()=>(await m()).SourcesPanel.DebuggerLocationRevealer.instance()}),t.Revealer.registerRevealer({contextTypes:()=>[n.UISourceCode.UISourceCode],destination:t.Revealer.RevealerDestination.SOURCES_PANEL,loadRevealer:async()=>(await m()).SourcesPanel.UISourceCodeRevealer.instance()}),t.Revealer.registerRevealer({contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],destination:t.Revealer.RevealerDestination.SOURCES_PANEL,loadRevealer:async()=>(await m()).SourcesPanel.DebuggerPausedDetailsRevealer.instance()}),r.Toolbar.registerToolbarItem({actionId:"sources.add-folder-to-workspace",location:r.Toolbar.ToolbarItemLocation.FILES_NAVIGATION_TOOLBAR,showLabel:!0,condition:e.Runtime.ConditionName.NOT_SOURCES_HIDE_ADD_FOLDER,loadItem:void 0,order:void 0,separator:void 0}),r.Context.registerListener({contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],loadListener:async()=>(await m()).JavaScriptBreakpointsSidebarPane.JavaScriptBreakpointsSidebarPane.instance()}),r.Context.registerListener({contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],loadListener:async()=>(await m()).JavaScriptBreakpointsSidebarPane.JavaScriptBreakpointsSidebarPane.instance()}),r.Context.registerListener({contextTypes:()=>[o.DebuggerModel.DebuggerPausedDetails],loadListener:async()=>(await m()).CallStackSidebarPane.CallStackSidebarPane.instance()}),r.Context.registerListener({contextTypes:()=>[o.DebuggerModel.CallFrame],loadListener:async()=>(await m()).ScopeChainSidebarPane.ScopeChainSidebarPane.instance()}),r.ContextMenu.registerItem({location:r.ContextMenu.ItemLocation.NAVIGATOR_MENU_DEFAULT,actionId:"quickOpen.show",order:void 0}),r.ContextMenu.registerItem({location:r.ContextMenu.ItemLocation.MAIN_MENU_DEFAULT,actionId:"sources.search",order:void 0}),s.FilteredListWidget.registerProvider({prefix:"@",iconName:"ic_command_go_to_symbol",provider:async()=>(await m()).OutlineQuickOpen.OutlineQuickOpen.instance(),titlePrefix:u(g.goTo),titleSuggestion:u(g.symbol)}),s.FilteredListWidget.registerProvider({prefix:":",iconName:"ic_command_go_to_line",provider:async()=>(await m()).GoToLineQuickOpen.GoToLineQuickOpen.instance(),titlePrefix:u(g.goTo),titleSuggestion:u(g.line)}),s.FilteredListWidget.registerProvider({prefix:"",iconName:"ic_command_open_file",provider:async()=>(await m()).OpenFileQuickOpen.OpenFileQuickOpen.instance(),titlePrefix:u(g.open),titleSuggestion:u(g.file)});const w={memory:"Memory",liveHeapProfile:"Live Heap Profile",startRecordingHeapAllocations:"Start recording heap allocations",stopRecordingHeapAllocations:"Stop recording heap allocations",startRecordingHeapAllocationsAndReload:"Start recording heap allocations and reload the page",startStopRecording:"Start/stop recording",showNativeFunctions:"Show native functions in JS Profile",showMemory:"Show Memory",showLiveHeapProfile:"Show Live Heap Profile"},v=i.i18n.registerUIStrings("panels/profiler/profiler-meta.ts",w),h=i.i18n.getLazilyComputedLocalizedString.bind(void 0,v);async function A(){return p||(p=await import("../../panels/profiler/profiler.js")),p}r.ViewManager.registerViewExtension({location:"panel",id:"heap_profiler",commandPrompt:h(w.showMemory),title:h(w.memory),order:60,loadView:async()=>(await A()).HeapProfilerPanel.HeapProfilerPanel.instance()}),r.ViewManager.registerViewExtension({location:"drawer-view",id:"live_heap_profile",commandPrompt:h(w.showLiveHeapProfile),title:h(w.liveHeapProfile),persistence:"closeable",order:100,loadView:async()=>(await A()).LiveHeapProfileView.LiveHeapProfileView.instance(),experiment:e.Runtime.ExperimentName.LIVE_HEAP_PROFILE}),r.ActionRegistration.registerActionExtension({actionId:"live-heap-profile.toggle-recording",iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,loadActionDelegate:async()=>(await A()).LiveHeapProfileView.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.MEMORY,experiment:e.Runtime.ExperimentName.LIVE_HEAP_PROFILE,options:[{value:!0,title:h(w.startRecordingHeapAllocations)},{value:!1,title:h(w.stopRecordingHeapAllocations)}]}),r.ActionRegistration.registerActionExtension({actionId:"live-heap-profile.start-with-reload",iconClass:"largeicon-refresh",loadActionDelegate:async()=>(await A()).LiveHeapProfileView.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.MEMORY,experiment:e.Runtime.ExperimentName.LIVE_HEAP_PROFILE,title:h(w.startRecordingHeapAllocationsAndReload)}),r.ActionRegistration.registerActionExtension({actionId:"profiler.heap-toggle-recording",category:r.ActionRegistration.ActionCategory.MEMORY,iconClass:"largeicon-start-recording",title:h(w.startStopRecording),toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,contextTypes:()=>void 0===p?[]:(e=>[e.HeapProfilerPanel.HeapProfilerPanel])(p),loadActionDelegate:async()=>(await A()).HeapProfilerPanel.HeapProfilerPanel.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.PERFORMANCE,storageType:t.Settings.SettingStorageType.Synced,title:h(w.showNativeFunctions),settingName:"showNativeFunctionsInJSProfile",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0}),r.ContextMenu.registerProvider({contextTypes:()=>[o.RemoteObject.RemoteObject],loadProvider:async()=>(await A()).HeapProfilerPanel.HeapProfilerPanel.instance(),experiment:void 0});const E={console:"Console",showConsole:"Show Console",clearConsole:"Clear console",clearConsoleHistory:"Clear console history",createLiveExpression:"Create live expression",hideNetworkMessages:"Hide network messages",showNetworkMessages:"Show network messages",selectedContextOnly:"Selected context only",onlyShowMessagesFromTheCurrent:"Only show messages from the current context (`top`, `iframe`, `worker`, extension)",showMessagesFromAllContexts:"Show messages from all contexts",logXmlhttprequests:"Log XMLHttpRequests",showTimestamps:"Show timestamps",hideTimestamps:"Hide timestamps",autocompleteFromHistory:"Autocomplete from history",doNotAutocompleteFromHistory:"Do not autocomplete from history",groupSimilarMessagesInConsole:"Group similar messages in console",doNotGroupSimilarMessagesIn:"Do not group similar messages in console",showCorsErrorsInConsole:"Show `CORS` errors in console",doNotShowCorsErrorsIn:"Do not show `CORS` errors in console",eagerEvaluation:"Eager evaluation",eagerlyEvaluateConsolePromptText:"Eagerly evaluate console prompt text",doNotEagerlyEvaluateConsole:"Do not eagerly evaluate console prompt text",evaluateTriggersUserActivation:"Evaluate triggers user activation",treatEvaluationAsUserActivation:"Treat evaluation as user activation",doNotTreatEvaluationAsUser:"Do not treat evaluation as user activation"},C=i.i18n.registerUIStrings("panels/console/console-meta.ts",E),T=i.i18n.getLazilyComputedLocalizedString.bind(void 0,C);let b;async function f(){return b||(b=await import("../../panels/console/console.js")),b}r.ViewManager.registerViewExtension({location:"panel",id:"console",title:T(E.console),commandPrompt:T(E.showConsole),order:20,loadView:async()=>(await f()).ConsolePanel.ConsolePanel.instance()}),r.ViewManager.registerViewExtension({location:"drawer-view",id:"console-view",title:T(E.console),commandPrompt:T(E.showConsole),persistence:"permanent",order:0,loadView:async()=>(await f()).ConsolePanel.WrapperView.instance()}),r.ActionRegistration.registerActionExtension({actionId:"console.show",category:r.ActionRegistration.ActionCategory.CONSOLE,title:T(E.showConsole),loadActionDelegate:async()=>(await f()).ConsoleView.ActionDelegate.instance(),bindings:[{shortcut:"Ctrl+`",keybindSets:["devToolsDefault","vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"console.clear",category:r.ActionRegistration.ActionCategory.CONSOLE,title:T(E.clearConsole),iconClass:"largeicon-clear",loadActionDelegate:async()=>(await f()).ConsoleView.ActionDelegate.instance(),contextTypes:()=>void 0===b?[]:(e=>[e.ConsoleView.ConsoleView])(b),bindings:[{shortcut:"Ctrl+L"},{shortcut:"Meta+K",platform:"mac"}]}),r.ActionRegistration.registerActionExtension({actionId:"console.clear.history",category:r.ActionRegistration.ActionCategory.CONSOLE,title:T(E.clearConsoleHistory),loadActionDelegate:async()=>(await f()).ConsoleView.ActionDelegate.instance()}),r.ActionRegistration.registerActionExtension({actionId:"console.create-pin",category:r.ActionRegistration.ActionCategory.CONSOLE,title:T(E.createLiveExpression),iconClass:"largeicon-visibility",loadActionDelegate:async()=>(await f()).ConsoleView.ActionDelegate.instance()}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.hideNetworkMessages),settingName:"hideNetworkMessages",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:T(E.hideNetworkMessages)},{value:!1,title:T(E.showNetworkMessages)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.selectedContextOnly),settingName:"selectedContextFilterEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:T(E.onlyShowMessagesFromTheCurrent)},{value:!1,title:T(E.showMessagesFromAllContexts)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.logXmlhttprequests),settingName:"monitoringXHREnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.showTimestamps),settingName:"consoleTimestampsEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:T(E.showTimestamps)},{value:!1,title:T(E.hideTimestamps)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,title:T(E.autocompleteFromHistory),settingName:"consoleHistoryAutocomplete",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:T(E.autocompleteFromHistory)},{value:!1,title:T(E.doNotAutocompleteFromHistory)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.groupSimilarMessagesInConsole),settingName:"consoleGroupSimilar",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:T(E.groupSimilarMessagesInConsole)},{value:!1,title:T(E.doNotGroupSimilarMessagesIn)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,title:T(E.showCorsErrorsInConsole),settingName:"consoleShowsCorsErrors",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:T(E.showCorsErrorsInConsole)},{value:!1,title:T(E.doNotShowCorsErrorsIn)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.eagerEvaluation),settingName:"consoleEagerEval",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:T(E.eagerlyEvaluateConsolePromptText)},{value:!1,title:T(E.doNotEagerlyEvaluateConsole)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:T(E.evaluateTriggersUserActivation),settingName:"consoleUserActivationEval",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,options:[{value:!0,title:T(E.treatEvaluationAsUserActivation)},{value:!1,title:T(E.doNotTreatEvaluationAsUser)}]}),t.Revealer.registerRevealer({contextTypes:()=>[t.Console.Console],loadRevealer:async()=>(await f()).ConsolePanel.ConsoleRevealer.instance(),destination:void 0});const R={coverage:"Coverage",showCoverage:"Show Coverage",instrumentCoverage:"Instrument coverage",stopInstrumentingCoverageAndShow:"Stop instrumenting coverage and show results",startInstrumentingCoverageAnd:"Start instrumenting coverage and reload page"},x=i.i18n.registerUIStrings("panels/coverage/coverage-meta.ts",R),N=i.i18n.getLazilyComputedLocalizedString.bind(void 0,x);let D,L;async function P(){return D||(D=await import("../../panels/coverage/coverage.js")),D}r.ViewManager.registerViewExtension({location:"drawer-view",id:"coverage",title:N(R.coverage),commandPrompt:N(R.showCoverage),persistence:"closeable",order:100,loadView:async()=>(await P()).CoverageView.CoverageView.instance()}),r.ActionRegistration.registerActionExtension({actionId:"coverage.toggle-recording",iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,loadActionDelegate:async()=>(await P()).CoverageView.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.PERFORMANCE,options:[{value:!0,title:N(R.instrumentCoverage)},{value:!1,title:N(R.stopInstrumentingCoverageAndShow)}]}),r.ActionRegistration.registerActionExtension({actionId:"coverage.start-with-reload",iconClass:"largeicon-refresh",loadActionDelegate:async()=>(await P()).CoverageView.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.PERFORMANCE,title:N(R.startInstrumentingCoverageAnd)});const I={changes:"Changes",showChanges:"Show Changes"},O=i.i18n.registerUIStrings("panels/changes/changes-meta.ts",I),M=i.i18n.getLazilyComputedLocalizedString.bind(void 0,O);async function k(){return L||(L=await import("../../panels/changes/changes.js")),L}r.ViewManager.registerViewExtension({location:"drawer-view",id:"changes.changes",title:M(I.changes),commandPrompt:M(I.showChanges),persistence:"closeable",loadView:async()=>(await k()).ChangesView.ChangesView.instance()}),t.Revealer.registerRevealer({contextTypes:()=>[l.WorkspaceDiff.DiffUILocation],destination:t.Revealer.RevealerDestination.CHANGES_DRAWER,loadRevealer:async()=>(await k()).ChangesView.DiffUILocationRevealer.instance()});const V={inputs:"Inputs",pause:"Pause",resume:"Resume",showInputs:"Show Inputs",startRecording:"Start recording",startReplaying:"Start replaying",stopRecording:"Stop recording"},F=i.i18n.registerUIStrings("panels/input//input-meta.ts",V),U=i.i18n.getLazilyComputedLocalizedString.bind(void 0,F);let B;async function G(){return B||(B=await import("../../panels/input/input.js")),B}r.ViewManager.registerViewExtension({location:"drawer-view",id:"Inputs",title:U(V.inputs),commandPrompt:U(V.showInputs),persistence:"closeable",order:7,loadView:async()=>(await G()).InputTimeline.InputTimeline.instance(),experiment:e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT}),r.ActionRegistration.registerActionExtension({actionId:"input.toggle-recording",iconClass:"largeicon-start-recording",toggleable:!0,toggledIconClass:"largeicon-stop-recording",toggleWithRedColor:!0,loadActionDelegate:async()=>(await G()).InputTimeline.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.INPUTS,experiment:e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT,options:[{value:!0,title:U(V.startRecording)},{value:!1,title:U(V.stopRecording)}]}),r.ActionRegistration.registerActionExtension({actionId:"input.start-replaying",iconClass:"largeicon-play",toggleable:!1,loadActionDelegate:async()=>(await G()).InputTimeline.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.INPUTS,experiment:e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT,options:[{value:!0,title:U(V.startReplaying)}]}),r.ActionRegistration.registerActionExtension({actionId:"input.toggle-pause",iconClass:"largeicon-pause",toggleable:!0,toggledIconClass:"largeicon-resume",loadActionDelegate:async()=>(await G()).InputTimeline.ActionDelegate.instance(),category:r.ActionRegistration.ActionCategory.INPUTS,experiment:e.Runtime.ExperimentName.TIMELINE_REPLAY_EVENT,options:[{value:!0,title:U(V.pause)},{value:!1,title:U(V.resume)}]});const _={memoryInspector:"Memory Inspector",showMemoryInspector:"Show Memory Inspector"},H=i.i18n.registerUIStrings("ui/components/linear_memory_inspector/linear_memory_inspector-meta.ts",_),z=i.i18n.getLazilyComputedLocalizedString.bind(void 0,H);let W;r.ViewManager.registerViewExtension({location:"drawer-view",id:"linear-memory-inspector",title:z(_.memoryInspector),commandPrompt:z(_.showMemoryInspector),order:100,persistence:"closeable",loadView:async()=>(await async function(){return W||(W=await import("../../ui/components/linear_memory_inspector/linear_memory_inspector.js")),W}()).LinearMemoryInspectorPane.Wrapper.instance()});const j={devices:"Devices",showDevices:"Show Devices"},q=i.i18n.registerUIStrings("panels/settings/emulation/emulation-meta.ts",j),J=i.i18n.getLazilyComputedLocalizedString.bind(void 0,q);let X;r.ViewManager.registerViewExtension({location:"settings-view",commandPrompt:J(j.showDevices),title:J(j.devices),order:30,loadView:async()=>(await async function(){return X||(X=await import("../../panels/settings/emulation/emulation.js")),X}()).DevicesSettingsTab.DevicesSettingsTab.instance(),id:"devices",settings:["standardEmulatedDeviceList","customEmulatedDeviceList"]});const K={shortcuts:"Shortcuts",preferences:"Preferences",experiments:"Experiments",ignoreList:"Ignore List",showShortcuts:"Show Shortcuts",showPreferences:"Show Preferences",showExperiments:"Show Experiments",showIgnoreList:"Show Ignore List",settings:"Settings",documentation:"Documentation"},Q=i.i18n.registerUIStrings("panels/settings/settings-meta.ts",K),Y=i.i18n.getLazilyComputedLocalizedString.bind(void 0,Q);let Z;async function $(){return Z||(Z=await import("../../panels/settings/settings.js")),Z}r.ViewManager.registerViewExtension({location:"settings-view",id:"preferences",title:Y(K.preferences),commandPrompt:Y(K.showPreferences),order:0,loadView:async()=>(await $()).SettingsScreen.GenericSettingsTab.instance()}),r.ViewManager.registerViewExtension({location:"settings-view",id:"experiments",title:Y(K.experiments),commandPrompt:Y(K.showExperiments),order:3,experiment:e.Runtime.ExperimentName.ALL,loadView:async()=>(await $()).SettingsScreen.ExperimentsSettingsTab.instance()}),r.ViewManager.registerViewExtension({location:"settings-view",id:"blackbox",title:Y(K.ignoreList),commandPrompt:Y(K.showIgnoreList),order:4,loadView:async()=>(await $()).FrameworkIgnoreListSettingsTab.FrameworkIgnoreListSettingsTab.instance()}),r.ViewManager.registerViewExtension({location:"settings-view",id:"keybinds",title:Y(K.shortcuts),commandPrompt:Y(K.showShortcuts),order:100,loadView:async()=>(await $()).KeybindsSettingsTab.KeybindsSettingsTab.instance()}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.SETTINGS,actionId:"settings.show",title:Y(K.settings),loadActionDelegate:async()=>(await $()).SettingsScreen.ActionDelegate.instance(),iconClass:"largeicon-settings-gear",bindings:[{shortcut:"F1",keybindSets:["devToolsDefault"]},{shortcut:"Shift+?"},{platform:"windows,linux",shortcut:"Ctrl+,",keybindSets:["vsCode"]},{platform:"mac",shortcut:"Meta+,",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.SETTINGS,actionId:"settings.documentation",title:Y(K.documentation),loadActionDelegate:async()=>(await $()).SettingsScreen.ActionDelegate.instance()}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.SETTINGS,actionId:"settings.shortcuts",title:Y(K.shortcuts),loadActionDelegate:async()=>(await $()).SettingsScreen.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+K Ctrl+S",keybindSets:["vsCode"]},{platform:"mac",shortcut:"Meta+K Meta+S",keybindSets:["vsCode"]}]}),r.ViewManager.registerLocationResolver({name:"settings-view",category:r.ViewManager.ViewLocationCategoryValues.SETTINGS,loadResolver:async()=>(await $()).SettingsScreen.SettingsScreen.instance()}),t.Revealer.registerRevealer({contextTypes:()=>[t.Settings.Setting],loadRevealer:async()=>(await $()).SettingsScreen.Revealer.instance(),destination:void 0}),r.ContextMenu.registerItem({location:r.ContextMenu.ItemLocation.MAIN_MENU_FOOTER,actionId:"settings.shortcuts",order:void 0}),r.ContextMenu.registerItem({location:r.ContextMenu.ItemLocation.MAIN_MENU_HELP_DEFAULT,actionId:"settings.documentation",order:void 0});const ee={protocolMonitor:"Protocol monitor",showProtocolMonitor:"Show Protocol monitor"},te=i.i18n.registerUIStrings("panels/protocol_monitor/protocol_monitor-meta.ts",ee),ie=i.i18n.getLazilyComputedLocalizedString.bind(void 0,te);let oe;r.ViewManager.registerViewExtension({location:"drawer-view",id:"protocol-monitor",title:ie(ee.protocolMonitor),commandPrompt:ie(ee.showProtocolMonitor),order:100,persistence:"closeable",loadView:async()=>(await async function(){return oe||(oe=await import("../../panels/protocol_monitor/protocol_monitor.js")),oe}()).ProtocolMonitor.ProtocolMonitorImpl.instance(),experiment:e.Runtime.ExperimentName.PROTOCOL_MONITOR});const ne={workspace:"Workspace",showWorkspace:"Show Workspace",enableLocalOverrides:"Enable Local Overrides",interception:"interception",override:"override",network:"network",rewrite:"rewrite",request:"request",enableOverrideNetworkRequests:"Enable override network requests",disableOverrideNetworkRequests:"Disable override network requests"},ae=i.i18n.registerUIStrings("models/persistence/persistence-meta.ts",ne),se=i.i18n.getLazilyComputedLocalizedString.bind(void 0,ae);let re;async function le(){return re||(re=await import("../../models/persistence/persistence.js")),re}r.ViewManager.registerViewExtension({location:"settings-view",id:"workspace",title:se(ne.workspace),commandPrompt:se(ne.showWorkspace),order:1,loadView:async()=>(await le()).WorkspaceSettingsTab.WorkspaceSettingsTab.instance()}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.PERSISTENCE,title:se(ne.enableLocalOverrides),settingName:"persistenceNetworkOverridesEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,tags:[se(ne.interception),se(ne.override),se(ne.network),se(ne.rewrite),se(ne.request)],options:[{value:!0,title:se(ne.enableOverrideNetworkRequests)},{value:!1,title:se(ne.disableOverrideNetworkRequests)}]}),r.ContextMenu.registerProvider({contextTypes:()=>[n.UISourceCode.UISourceCode,o.Resource.Resource,o.NetworkRequest.NetworkRequest],loadProvider:async()=>(await le()).PersistenceActions.ContextMenuProvider.instance(),experiment:void 0});const ce={preserveLog:"Preserve log",preserve:"preserve",clear:"clear",reset:"reset",preserveLogOnPageReload:"Preserve log on page reload / navigation",doNotPreserveLogOnPageReload:"Do not preserve log on page reload / navigation",recordNetworkLog:"Record network log"},ge=i.i18n.registerUIStrings("models/logs/logs-meta.ts",ce),de=i.i18n.getLazilyComputedLocalizedString.bind(void 0,ge);t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.NETWORK,title:de(ce.preserveLog),settingName:"network_log.preserve-log",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,tags:[de(ce.preserve),de(ce.clear),de(ce.reset)],options:[{value:!0,title:de(ce.preserveLogOnPageReload)},{value:!1,title:de(ce.doNotPreserveLogOnPageReload)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.NETWORK,title:de(ce.recordNetworkLog),settingName:"network_log.record-log",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!0,storageType:t.Settings.SettingStorageType.Session});const ue={focusDebuggee:"Focus debuggee",toggleDrawer:"Toggle drawer",nextPanel:"Next panel",previousPanel:"Previous panel",reloadDevtools:"Reload DevTools",restoreLastDockPosition:"Restore last dock position",zoomIn:"Zoom in",zoomOut:"Zoom out",resetZoomLevel:"Reset zoom level",searchInPanel:"Search in panel",cancelSearch:"Cancel search",findNextResult:"Find next result",findPreviousResult:"Find previous result",theme:"Theme:",switchToSystemPreferredColor:"Switch to system preferred color theme",systemPreference:"System preference",switchToLightTheme:"Switch to light theme",lightCapital:"Light",switchToDarkTheme:"Switch to dark theme",darkCapital:"Dark",darkLower:"dark",lightLower:"light",panelLayout:"Panel layout:",useHorizontalPanelLayout:"Use horizontal panel layout",horizontal:"horizontal",useVerticalPanelLayout:"Use vertical panel layout",vertical:"vertical",useAutomaticPanelLayout:"Use automatic panel layout",auto:"auto",colorFormat:"Color format:",setColorFormatAsAuthored:"Set color format as authored",asAuthored:"As authored",setColorFormatToHex:"Set color format to HEX",setColorFormatToRgb:"Set color format to RGB",setColorFormatToHsl:"Set color format to HSL",enableCtrlShortcutToSwitchPanels:"Enable Ctrl + 1-9 shortcut to switch panels",enableShortcutToSwitchPanels:"Enable ⌘ + 1-9 shortcut to switch panels",right:"Right",dockToRight:"Dock to right",bottom:"Bottom",dockToBottom:"Dock to bottom",left:"Left",dockToLeft:"Dock to left",undocked:"Undocked",undockIntoSeparateWindow:"Undock into separate window",devtoolsDefault:"DevTools (Default)",language:"Language:",browserLanguage:"Browser UI language",enableSync:"Enable settings sync"},Se=i.i18n.registerUIStrings("entrypoints/main/main-meta.ts",ue),pe=i.i18n.getLazilyComputedLocalizedString.bind(void 0,Se);let me,ye;async function we(){return me||(me=await import("../main/main.js")),me}function ve(e){return()=>i.i18n.getLocalizedLanguageRegion(e,i.DevToolsLocale.DevToolsLocale.instance())}r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DRAWER,actionId:"inspector_main.focus-debuggee",loadActionDelegate:async()=>(await async function(){return ye||(ye=await import("../inspector_main/inspector_main.js")),ye}()).InspectorMain.FocusDebuggeeActionDelegate.instance(),order:100,title:pe(ue.focusDebuggee)}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.DRAWER,actionId:"main.toggle-drawer",loadActionDelegate:async()=>r.InspectorView.ActionDelegate.instance(),order:101,title:pe(ue.toggleDrawer),bindings:[{shortcut:"Esc"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.next-tab",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.nextPanel),loadActionDelegate:async()=>r.InspectorView.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+]"},{platform:"mac",shortcut:"Meta+]"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.previous-tab",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.previousPanel),loadActionDelegate:async()=>r.InspectorView.ActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+["},{platform:"mac",shortcut:"Meta+["}]}),r.ActionRegistration.registerActionExtension({actionId:"main.debug-reload",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.reloadDevtools),loadActionDelegate:async()=>(await we()).MainImpl.ReloadActionDelegate.instance(),bindings:[{shortcut:"Alt+R"}]}),r.ActionRegistration.registerActionExtension({category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.restoreLastDockPosition),actionId:"main.toggle-dock",loadActionDelegate:async()=>r.DockController.ToggleDockActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+D"},{platform:"mac",shortcut:"Meta+Shift+D"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.zoom-in",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.zoomIn),loadActionDelegate:async()=>(await we()).MainImpl.ZoomActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Plus",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+Plus"},{platform:"windows,linux",shortcut:"Ctrl+NumpadPlus"},{platform:"windows,linux",shortcut:"Ctrl+Shift+NumpadPlus"},{platform:"mac",shortcut:"Meta+Plus",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+Shift+Plus"},{platform:"mac",shortcut:"Meta+NumpadPlus"},{platform:"mac",shortcut:"Meta+Shift+NumpadPlus"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.zoom-out",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.zoomOut),loadActionDelegate:async()=>(await we()).MainImpl.ZoomActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Minus",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+Minus"},{platform:"windows,linux",shortcut:"Ctrl+NumpadMinus"},{platform:"windows,linux",shortcut:"Ctrl+Shift+NumpadMinus"},{platform:"mac",shortcut:"Meta+Minus",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+Shift+Minus"},{platform:"mac",shortcut:"Meta+NumpadMinus"},{platform:"mac",shortcut:"Meta+Shift+NumpadMinus"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.zoom-reset",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.resetZoomLevel),loadActionDelegate:async()=>(await we()).MainImpl.ZoomActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+0"},{platform:"windows,linux",shortcut:"Ctrl+Numpad0"},{platform:"mac",shortcut:"Meta+Numpad0"},{platform:"mac",shortcut:"Meta+0"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.find",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.searchInPanel),loadActionDelegate:async()=>(await we()).MainImpl.SearchActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"F3"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.cancel",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.cancelSearch),loadActionDelegate:async()=>(await we()).MainImpl.SearchActionDelegate.instance(),order:10,bindings:[{shortcut:"Esc"}]}),r.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.find-next",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.findNextResult),loadActionDelegate:async()=>(await we()).MainImpl.SearchActionDelegate.instance(),bindings:[{platform:"mac",shortcut:"Meta+G",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+G"},{platform:"windows,linux",shortcut:"F3",keybindSets:["devToolsDefault","vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"main.search-in-panel.find-previous",category:r.ActionRegistration.ActionCategory.GLOBAL,title:pe(ue.findPreviousResult),loadActionDelegate:async()=>(await we()).MainImpl.SearchActionDelegate.instance(),bindings:[{platform:"mac",shortcut:"Meta+Shift+G",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+Shift+G"},{platform:"windows,linux",shortcut:"Shift+F3",keybindSets:["devToolsDefault","vsCode"]}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:pe(ue.theme),settingName:"uiTheme",settingType:t.Settings.SettingType.ENUM,defaultValue:"systemPreferred",reloadRequired:!0,options:[{title:pe(ue.switchToSystemPreferredColor),text:pe(ue.systemPreference),value:"systemPreferred"},{title:pe(ue.switchToLightTheme),text:pe(ue.lightCapital),value:"default"},{title:pe(ue.switchToDarkTheme),text:pe(ue.darkCapital),value:"dark"}],tags:[pe(ue.darkLower),pe(ue.lightLower)]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:pe(ue.panelLayout),settingName:"sidebarPosition",settingType:t.Settings.SettingType.ENUM,defaultValue:"auto",options:[{title:pe(ue.useHorizontalPanelLayout),text:pe(ue.horizontal),value:"bottom"},{title:pe(ue.useVerticalPanelLayout),text:pe(ue.vertical),value:"right"},{title:pe(ue.useAutomaticPanelLayout),text:pe(ue.auto),value:"auto"}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:pe(ue.colorFormat),settingName:"colorFormat",settingType:t.Settings.SettingType.ENUM,defaultValue:"original",options:[{title:pe(ue.setColorFormatAsAuthored),text:pe(ue.asAuthored),value:"original"},{title:pe(ue.setColorFormatToHex),text:"HEX: #dac0de",value:"hex",raw:!0},{title:pe(ue.setColorFormatToRgb),text:"RGB: rgb(128 255 255)",value:"rgb",raw:!0},{title:pe(ue.setColorFormatToHsl),text:"HSL: hsl(300deg 80% 90%)",value:"hsl",raw:!0}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,title:pe(ue.enableCtrlShortcutToSwitchPanels),titleMac:pe(ue.enableShortcutToSwitchPanels),settingName:"shortcutPanelSwitch",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.GLOBAL,settingName:"currentDockState",settingType:t.Settings.SettingType.ENUM,defaultValue:"right",options:[{value:"right",text:pe(ue.right),title:pe(ue.dockToRight)},{value:"bottom",text:pe(ue.bottom),title:pe(ue.dockToBottom)},{value:"left",text:pe(ue.left),title:pe(ue.dockToLeft)},{value:"undocked",text:pe(ue.undocked),title:pe(ue.undockIntoSeparateWindow)}]}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"activeKeybindSet",settingType:t.Settings.SettingType.ENUM,defaultValue:"devToolsDefault",options:[{value:"devToolsDefault",title:pe(ue.devtoolsDefault),text:pe(ue.devtoolsDefault)},{value:"vsCode",title:i.i18n.lockedLazyString("Visual Studio Code"),text:i.i18n.lockedLazyString("Visual Studio Code")}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.APPEARANCE,storageType:t.Settings.SettingStorageType.Synced,settingName:"language",settingType:t.Settings.SettingType.ENUM,title:pe(ue.language),defaultValue:"en-US",options:[{value:"browserLanguage",title:pe(ue.browserLanguage),text:pe(ue.browserLanguage)},...i.i18n.getAllSupportedDevToolsLocales().filter((e=>"en-XL"!==e)).map((e=>{return{value:t=e,title:ve(t),text:ve(t)};var t}))],reloadRequired:!0}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SYNC,settingName:"sync_preferences",settingType:t.Settings.SettingType.BOOLEAN,title:pe(ue.enableSync),defaultValue:!1,reloadRequired:!0,experiment:e.Runtime.ExperimentName.SYNC_SETTINGS}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"userShortcuts",settingType:t.Settings.SettingType.ARRAY,defaultValue:[]}),r.ViewManager.registerLocationResolver({name:"drawer-view",category:r.ViewManager.ViewLocationCategoryValues.DRAWER,loadResolver:async()=>r.InspectorView.InspectorView.instance()}),r.ViewManager.registerLocationResolver({name:"drawer-sidebar",category:r.ViewManager.ViewLocationCategoryValues.DRAWER_SIDEBAR,loadResolver:async()=>r.InspectorView.InspectorView.instance()}),r.ViewManager.registerLocationResolver({name:"panel",category:r.ViewManager.ViewLocationCategoryValues.PANEL,loadResolver:async()=>r.InspectorView.InspectorView.instance()}),r.ContextMenu.registerProvider({contextTypes:()=>[n.UISourceCode.UISourceCode,o.Resource.Resource,o.NetworkRequest.NetworkRequest],loadProvider:async()=>c.Linkifier.ContentProviderContextMenuProvider.instance(),experiment:void 0}),r.ContextMenu.registerProvider({contextTypes:()=>[Node],loadProvider:async()=>r.XLink.ContextMenuProvider.instance(),experiment:void 0}),r.ContextMenu.registerProvider({contextTypes:()=>[Node],loadProvider:async()=>c.Linkifier.LinkContextMenuProvider.instance(),experiment:void 0}),r.Toolbar.registerToolbarItem({separator:!0,location:r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,order:100,showLabel:void 0,actionId:void 0,condition:void 0,loadItem:void 0}),r.Toolbar.registerToolbarItem({separator:!0,order:97,location:r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,actionId:void 0,condition:void 0,loadItem:void 0}),r.Toolbar.registerToolbarItem({loadItem:async()=>(await we()).MainImpl.SettingsButtonProvider.instance(),order:98,location:r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),r.Toolbar.registerToolbarItem({loadItem:async()=>(await we()).MainImpl.MainMenuItem.instance(),order:99,location:r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),r.Toolbar.registerToolbarItem({loadItem:async()=>r.DockController.CloseButtonProvider.instance(),order:100,location:r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),t.AppProvider.registerAppProvider({loadAppProvider:async()=>(await we()).SimpleApp.SimpleAppProvider.instance(),order:10,condition:void 0});const he={flamechartMouseWheelAction:"Flamechart mouse wheel action:",scroll:"Scroll",zoom:"Zoom",liveMemoryAllocationAnnotations:"Live memory allocation annotations",showLiveMemoryAllocation:"Show live memory allocation annotations",hideLiveMemoryAllocation:"Hide live memory allocation annotations",collectGarbage:"Collect garbage"},Ae=i.i18n.registerUIStrings("ui/legacy/components/perf_ui/perf_ui-meta.ts",he),Ee=i.i18n.getLazilyComputedLocalizedString.bind(void 0,Ae);let Ce;r.ActionRegistration.registerActionExtension({actionId:"components.collect-garbage",category:r.ActionRegistration.ActionCategory.PERFORMANCE,title:Ee(he.collectGarbage),iconClass:"largeicon-trash-bin",loadActionDelegate:async()=>(await async function(){return Ce||(Ce=await import("../../ui/legacy/components/perf_ui/perf_ui.js")),Ce}()).GCActionDelegate.GCActionDelegate.instance()}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.PERFORMANCE,storageType:t.Settings.SettingStorageType.Synced,title:Ee(he.flamechartMouseWheelAction),settingName:"flamechartMouseWheelAction",settingType:t.Settings.SettingType.ENUM,defaultValue:"zoom",options:[{title:Ee(he.scroll),text:Ee(he.scroll),value:"scroll"},{title:Ee(he.zoom),text:Ee(he.zoom),value:"zoom"}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.MEMORY,experiment:e.Runtime.ExperimentName.LIVE_HEAP_PROFILE,title:Ee(he.liveMemoryAllocationAnnotations),settingName:"memoryLiveHeapProfile",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:Ee(he.showLiveMemoryAllocation)},{value:!1,title:Ee(he.hideLiveMemoryAllocation)}]});const Te={openFile:"Open file",runCommand:"Run command"},be=i.i18n.registerUIStrings("ui/legacy/components/quick_open/quick_open-meta.ts",Te),fe=i.i18n.getLazilyComputedLocalizedString.bind(void 0,be);let Re;async function xe(){return Re||(Re=await import("../../ui/legacy/components/quick_open/quick_open.js")),Re}r.ActionRegistration.registerActionExtension({actionId:"commandMenu.show",category:r.ActionRegistration.ActionCategory.GLOBAL,title:fe(Te.runCommand),loadActionDelegate:async()=>(await xe()).CommandMenu.ShowActionDelegate.instance(),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+P",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+Shift+P",keybindSets:["devToolsDefault","vsCode"]},{shortcut:"F1",keybindSets:["vsCode"]}]}),r.ActionRegistration.registerActionExtension({actionId:"quickOpen.show",category:r.ActionRegistration.ActionCategory.GLOBAL,title:fe(Te.openFile),loadActionDelegate:async()=>(await xe()).QuickOpen.ShowActionDelegate.instance(),order:100,bindings:[{platform:"mac",shortcut:"Meta+P",keybindSets:["devToolsDefault","vsCode"]},{platform:"mac",shortcut:"Meta+O",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+P",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+O",keybindSets:["devToolsDefault","vsCode"]}]}),r.ContextMenu.registerItem({location:r.ContextMenu.ItemLocation.MAIN_MENU_DEFAULT,actionId:"commandMenu.show",order:void 0}),r.ContextMenu.registerItem({location:r.ContextMenu.ItemLocation.MAIN_MENU_DEFAULT,actionId:"quickOpen.show",order:void 0});const Ne={preserveLogUponNavigation:"Preserve log upon navigation",doNotPreserveLogUponNavigation:"Do not preserve log upon navigation",pauseOnExceptions:"Pause on exceptions",doNotPauseOnExceptions:"Do not pause on exceptions",disableJavascript:"Disable JavaScript",enableJavascript:"Enable JavaScript",disableAsyncStackTraces:"Disable async stack traces",doNotCaptureAsyncStackTraces:"Do not capture async stack traces",captureAsyncStackTraces:"Capture async stack traces",showRulersOnHover:"Show rulers on hover",doNotShowRulersOnHover:"Do not show rulers on hover",showAreaNames:"Show area names",showGridNamedAreas:"Show grid named areas",doNotShowGridNamedAreas:"Do not show grid named areas",showTrackSizes:"Show track sizes",showGridTrackSizes:"Show grid track sizes",doNotShowGridTrackSizes:"Do not show grid track sizes",extendGridLines:"Extend grid lines",doNotExtendGridLines:"Do not extend grid lines",showLineLabels:"Show line labels",hideLineLabels:"Hide line labels",showLineNumbers:"Show line numbers",showLineNames:"Show line names",showPaintFlashingRectangles:"Show paint flashing rectangles",hidePaintFlashingRectangles:"Hide paint flashing rectangles",showLayoutShiftRegions:"Show layout shift regions",hideLayoutShiftRegions:"Hide layout shift regions",highlightAdFrames:"Highlight ad frames",doNotHighlightAdFrames:"Do not highlight ad frames",showLayerBorders:"Show layer borders",hideLayerBorders:"Hide layer borders",showCoreWebVitalsOverlay:"Show Core Web Vitals overlay",hideCoreWebVitalsOverlay:"Hide Core Web Vitals overlay",showFramesPerSecondFpsMeter:"Show frames per second (FPS) meter",hideFramesPerSecondFpsMeter:"Hide frames per second (FPS) meter",showScrollPerformanceBottlenecks:"Show scroll performance bottlenecks",hideScrollPerformanceBottlenecks:"Hide scroll performance bottlenecks",emulateAFocusedPage:"Emulate a focused page",doNotEmulateAFocusedPage:"Do not emulate a focused page",doNotEmulateCssMediaType:"Do not emulate CSS media type",noEmulation:"No emulation",emulateCssPrintMediaType:"Emulate CSS print media type",print:"print",emulateCssScreenMediaType:"Emulate CSS screen media type",screen:"screen",query:"query",emulateCssMediaType:"Emulate CSS media type",doNotEmulateCss:"Do not emulate CSS {PH1}",emulateCss:"Emulate CSS {PH1}",emulateCssMediaFeature:"Emulate CSS media feature {PH1}",doNotEmulateAnyVisionDeficiency:"Do not emulate any vision deficiency",emulateBlurredVision:"Emulate blurred vision",blurredVision:"Blurred vision",emulateProtanopia:"Emulate protanopia",protanopia:"Protanopia",emulateDeuteranopia:"Emulate deuteranopia",deuteranopia:"Deuteranopia",emulateTritanopia:"Emulate tritanopia",tritanopia:"Tritanopia",emulateAchromatopsia:"Emulate achromatopsia",achromatopsia:"Achromatopsia",emulateVisionDeficiencies:"Emulate vision deficiencies",disableLocalFonts:"Disable local fonts",enableLocalFonts:"Enable local fonts",disableAvifFormat:"Disable `AVIF` format",enableAvifFormat:"Enable `AVIF` format",disableJpegXlFormat:"Disable `JPEG XL` format",enableJpegXlFormat:"Enable `JPEG XL` format",disableWebpFormat:"Disable `WebP` format",enableWebpFormat:"Enable `WebP` format",enableCustomFormatters:"Enable custom formatters",enableNetworkRequestBlocking:"Enable network request blocking",disableNetworkRequestBlocking:"Disable network request blocking",enableCache:"Enable cache",disableCache:"Disable cache (while DevTools is open)",emulateAutoDarkMode:"Emulate auto dark mode",enableEmulateAutoDarkMode:"Enable auto dark mode",enabledDarkMode:"Enable",disableEmulateAutoDarkMode:"Disable auto dark mode",disabledDarkMode:"Disable",doNotEmulateDarkMode:"Do not emulate auto dark mode"},De=i.i18n.registerUIStrings("core/sdk/sdk-meta.ts",Ne),Le=i.i18n.getLazilyComputedLocalizedString.bind(void 0,De);t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"skipStackFramesPattern",settingType:t.Settings.SettingType.REGEX,defaultValue:""}),t.Settings.registerSettingExtension({storageType:t.Settings.SettingStorageType.Synced,settingName:"skipContentScripts",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,storageType:t.Settings.SettingStorageType.Synced,title:Le(Ne.preserveLogUponNavigation),settingName:"preserveConsoleLog",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:Le(Ne.preserveLogUponNavigation)},{value:!1,title:Le(Ne.doNotPreserveLogUponNavigation)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.DEBUGGER,settingName:"pauseOnExceptionEnabled",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,options:[{value:!0,title:Le(Ne.pauseOnExceptions)},{value:!1,title:Le(Ne.doNotPauseOnExceptions)}]}),t.Settings.registerSettingExtension({settingName:"pauseOnCaughtException",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.DEBUGGER,title:Le(Ne.disableJavascript),settingName:"javaScriptDisabled",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,order:1,defaultValue:!1,options:[{value:!0,title:Le(Ne.disableJavascript)},{value:!1,title:Le(Ne.enableJavascript)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.DEBUGGER,title:Le(Ne.disableAsyncStackTraces),settingName:"disableAsyncStackTraces",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1,order:2,options:[{value:!0,title:Le(Ne.doNotCaptureAsyncStackTraces)},{value:!1,title:Le(Ne.captureAsyncStackTraces)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.DEBUGGER,settingName:"breakpointsActive",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,defaultValue:!0}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.ELEMENTS,storageType:t.Settings.SettingStorageType.Synced,title:Le(Ne.showRulersOnHover),settingName:"showMetricsRulers",settingType:t.Settings.SettingType.BOOLEAN,options:[{value:!0,title:Le(Ne.showRulersOnHover)},{value:!1,title:Le(Ne.doNotShowRulersOnHover)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.GRID,storageType:t.Settings.SettingStorageType.Synced,title:Le(Ne.showAreaNames),settingName:"showGridAreas",settingType:t.Settings.SettingType.BOOLEAN,options:[{value:!0,title:Le(Ne.showGridNamedAreas)},{value:!1,title:Le(Ne.doNotShowGridNamedAreas)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.GRID,storageType:t.Settings.SettingStorageType.Synced,title:Le(Ne.showTrackSizes),settingName:"showGridTrackSizes",settingType:t.Settings.SettingType.BOOLEAN,options:[{value:!0,title:Le(Ne.showGridTrackSizes)},{value:!1,title:Le(Ne.doNotShowGridTrackSizes)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.GRID,storageType:t.Settings.SettingStorageType.Synced,title:Le(Ne.extendGridLines),settingName:"extendGridLines",settingType:t.Settings.SettingType.BOOLEAN,options:[{value:!0,title:Le(Ne.extendGridLines)},{value:!1,title:Le(Ne.doNotExtendGridLines)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.GRID,storageType:t.Settings.SettingStorageType.Synced,title:Le(Ne.showLineLabels),settingName:"showGridLineLabels",settingType:t.Settings.SettingType.ENUM,options:[{title:Le(Ne.hideLineLabels),text:Le(Ne.hideLineLabels),value:"none"},{title:Le(Ne.showLineNumbers),text:Le(Ne.showLineNumbers),value:"lineNumbers"},{title:Le(Ne.showLineNames),text:Le(Ne.showLineNames),value:"lineNames"}],defaultValue:"lineNumbers"}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showPaintRects",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.showPaintFlashingRectangles)},{value:!1,title:Le(Ne.hidePaintFlashingRectangles)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showLayoutShiftRegions",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.showLayoutShiftRegions)},{value:!1,title:Le(Ne.hideLayoutShiftRegions)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showAdHighlights",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.highlightAdFrames)},{value:!1,title:Le(Ne.doNotHighlightAdFrames)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showDebugBorders",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.showLayerBorders)},{value:!1,title:Le(Ne.hideLayerBorders)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showWebVitals",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.showCoreWebVitalsOverlay)},{value:!1,title:Le(Ne.hideCoreWebVitalsOverlay)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showFPSCounter",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.showFramesPerSecondFpsMeter)},{value:!1,title:Le(Ne.hideFramesPerSecondFpsMeter)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"showScrollBottleneckRects",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.showScrollPerformanceBottlenecks)},{value:!1,title:Le(Ne.hideScrollPerformanceBottlenecks)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,title:Le(Ne.emulateAFocusedPage),settingName:"emulatePageFocus",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:Le(Ne.emulateAFocusedPage)},{value:!1,title:Le(Ne.doNotEmulateAFocusedPage)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMedia",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCssMediaType),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCssPrintMediaType),text:Le(Ne.print),value:"print"},{title:Le(Ne.emulateCssScreenMediaType),text:Le(Ne.screen),value:"screen"}],tags:[Le(Ne.query)],title:Le(Ne.emulateCssMediaType)}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMediaFeaturePrefersColorScheme",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCss,{PH1:"prefers-color-scheme"}),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCss,{PH1:"prefers-color-scheme: light"}),text:i.i18n.lockedLazyString("prefers-color-scheme: light"),value:"light"},{title:Le(Ne.emulateCss,{PH1:"prefers-color-scheme: dark"}),text:i.i18n.lockedLazyString("prefers-color-scheme: dark"),value:"dark"}],tags:[Le(Ne.query)],title:Le(Ne.emulateCssMediaFeature,{PH1:"prefers-color-scheme"})}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMediaFeatureForcedColors",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCss,{PH1:"forced-colors"}),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCss,{PH1:"forced-colors: active"}),text:i.i18n.lockedLazyString("forced-colors: active"),value:"active"},{title:Le(Ne.emulateCss,{PH1:"forced-colors: none"}),text:i.i18n.lockedLazyString("forced-colors: none"),value:"none"}],tags:[Le(Ne.query)],title:Le(Ne.emulateCssMediaFeature,{PH1:"forced-colors"})}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"emulatedCSSMediaFeaturePrefersReducedMotion",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCss,{PH1:"prefers-reduced-motion"}),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCss,{PH1:"prefers-reduced-motion: reduce"}),text:i.i18n.lockedLazyString("prefers-reduced-motion: reduce"),value:"reduce"}],tags:[Le(Ne.query)],title:Le(Ne.emulateCssMediaFeature,{PH1:"prefers-reduced-motion"})}),t.Settings.registerSettingExtension({settingName:"emulatedCSSMediaFeaturePrefersContrast",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCss,{PH1:"prefers-contrast"}),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCss,{PH1:"prefers-contrast: more"}),text:i.i18n.lockedLazyString("prefers-contrast: more"),value:"more"},{title:Le(Ne.emulateCss,{PH1:"prefers-contrast: less"}),text:i.i18n.lockedLazyString("prefers-contrast: less"),value:"less"},{title:Le(Ne.emulateCss,{PH1:"prefers-contrast: custom"}),text:i.i18n.lockedLazyString("prefers-contrast: custom"),value:"custom"}],tags:[Le(Ne.query)],title:Le(Ne.emulateCssMediaFeature,{PH1:"prefers-contrast"})}),t.Settings.registerSettingExtension({settingName:"emulatedCSSMediaFeaturePrefersReducedData",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCss,{PH1:"prefers-reduced-data"}),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCss,{PH1:"prefers-reduced-data: reduce"}),text:i.i18n.lockedLazyString("prefers-reduced-data: reduce"),value:"reduce"}],title:Le(Ne.emulateCssMediaFeature,{PH1:"prefers-reduced-data"})}),t.Settings.registerSettingExtension({settingName:"emulatedCSSMediaFeatureColorGamut",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"",options:[{title:Le(Ne.doNotEmulateCss,{PH1:"color-gamut"}),text:Le(Ne.noEmulation),value:""},{title:Le(Ne.emulateCss,{PH1:"color-gamut: srgb"}),text:i.i18n.lockedLazyString("color-gamut: srgb"),value:"srgb"},{title:Le(Ne.emulateCss,{PH1:"color-gamut: p3"}),text:i.i18n.lockedLazyString("color-gamut: p3"),value:"p3"},{title:Le(Ne.emulateCss,{PH1:"color-gamut: rec2020"}),text:i.i18n.lockedLazyString("color-gamut: rec2020"),value:"rec2020"}],title:Le(Ne.emulateCssMediaFeature,{PH1:"color-gamut"})}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"emulatedVisionDeficiency",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"none",options:[{title:Le(Ne.doNotEmulateAnyVisionDeficiency),text:Le(Ne.noEmulation),value:"none"},{title:Le(Ne.emulateBlurredVision),text:Le(Ne.blurredVision),value:"blurredVision"},{title:Le(Ne.emulateProtanopia),text:Le(Ne.protanopia),value:"protanopia"},{title:Le(Ne.emulateDeuteranopia),text:Le(Ne.deuteranopia),value:"deuteranopia"},{title:Le(Ne.emulateTritanopia),text:Le(Ne.tritanopia),value:"tritanopia"},{title:Le(Ne.emulateAchromatopsia),text:Le(Ne.achromatopsia),value:"achromatopsia"}],tags:[Le(Ne.query)],title:Le(Ne.emulateVisionDeficiencies)}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"localFontsDisabled",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.disableLocalFonts)},{value:!1,title:Le(Ne.enableLocalFonts)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"avifFormatDisabled",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.disableAvifFormat)},{value:!1,title:Le(Ne.enableAvifFormat)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"jpegXlFormatDisabled",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.disableJpegXlFormat)},{value:!1,title:Le(Ne.enableJpegXlFormat)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,settingName:"webpFormatDisabled",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,options:[{value:!0,title:Le(Ne.disableWebpFormat)},{value:!1,title:Le(Ne.enableWebpFormat)}],defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.CONSOLE,title:Le(Ne.enableCustomFormatters),settingName:"customFormatters",settingType:t.Settings.SettingType.BOOLEAN,defaultValue:!1}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.NETWORK,title:Le(Ne.enableNetworkRequestBlocking),settingName:"requestBlockingEnabled",settingType:t.Settings.SettingType.BOOLEAN,storageType:t.Settings.SettingStorageType.Session,defaultValue:!1,options:[{value:!0,title:Le(Ne.enableNetworkRequestBlocking)},{value:!1,title:Le(Ne.disableNetworkRequestBlocking)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.NETWORK,title:Le(Ne.disableCache),settingName:"cacheDisabled",settingType:t.Settings.SettingType.BOOLEAN,order:0,defaultValue:!1,userActionCondition:"hasOtherClients",options:[{value:!0,title:Le(Ne.disableCache)},{value:!1,title:Le(Ne.enableCache)}]}),t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.RENDERING,title:Le(Ne.emulateAutoDarkMode),settingName:"emulateAutoDarkMode",settingType:t.Settings.SettingType.ENUM,storageType:t.Settings.SettingStorageType.Session,defaultValue:"default",options:[{title:Le(Ne.doNotEmulateDarkMode),text:Le(Ne.noEmulation),value:"default"},{title:Le(Ne.enableEmulateAutoDarkMode),text:Le(Ne.enabledDarkMode),value:"enabled"},{title:Le(Ne.disableEmulateAutoDarkMode),text:Le(Ne.disabledDarkMode),value:"disabled"}]});const Pe={defaultIndentation:"Default indentation:",setIndentationToSpaces:"Set indentation to 2 spaces",Spaces:"2 spaces",setIndentationToFSpaces:"Set indentation to 4 spaces",fSpaces:"4 spaces",setIndentationToESpaces:"Set indentation to 8 spaces",eSpaces:"8 spaces",setIndentationToTabCharacter:"Set indentation to tab character",tabCharacter:"Tab character"},Ie=i.i18n.registerUIStrings("ui/legacy/components/source_frame/source_frame-meta.ts",Pe),Oe=i.i18n.getLazilyComputedLocalizedString.bind(void 0,Ie);let Me,ke;t.Settings.registerSettingExtension({category:t.Settings.SettingCategory.SOURCES,storageType:t.Settings.SettingStorageType.Synced,title:Oe(Pe.defaultIndentation),settingName:"textEditorIndent",settingType:t.Settings.SettingType.ENUM,defaultValue:" ",options:[{title:Oe(Pe.setIndentationToSpaces),text:Oe(Pe.Spaces),value:" "},{title:Oe(Pe.setIndentationToFSpaces),text:Oe(Pe.fSpaces),value:" "},{title:Oe(Pe.setIndentationToESpaces),text:Oe(Pe.eSpaces),value:" "},{title:Oe(Pe.setIndentationToTabCharacter),text:Oe(Pe.tabCharacter),value:"\t"}]}),r.Toolbar.registerToolbarItem({loadItem:async()=>(await async function(){return Me||(Me=await import("../../panels/console_counters/console_counters.js")),Me}()).WarningErrorCounter.WarningErrorCounter.instance(),order:1,location:r.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_RIGHT,showLabel:void 0,condition:void 0,separator:void 0,actionId:void 0}),r.UIUtils.registerRenderer({contextTypes:()=>[o.RemoteObject.RemoteObject],loadRenderer:async()=>(await async function(){return ke||(ke=await import("../../ui/legacy/components/object_ui/object_ui.js")),ke}()).ObjectPropertiesSection.Renderer.instance()}); diff --git a/chii/entrypoints/startup/startup.js b/chii/entrypoints/startup/startup.js new file mode 100644 index 00000000..9785aada --- /dev/null +++ b/chii/entrypoints/startup/startup.js @@ -0,0 +1 @@ +import*as t from"../../core/root/root.js";async function o(o){console.timeStamp("Root.Runtime.startApplication");const e={};for(let t=0;t{"disassemble"===e.data.method&&self.postMessage(s.WasmParserWorker.dissambleWASM(e.data.params,(s=>{self.postMessage(s)})))},self.postMessage("workerReady"); diff --git a/chii/entrypoints/wasmparser_worker/wasmparser_worker.js b/chii/entrypoints/wasmparser_worker/wasmparser_worker.js new file mode 100644 index 00000000..50470dc2 --- /dev/null +++ b/chii/entrypoints/wasmparser_worker/wasmparser_worker.js @@ -0,0 +1 @@ +import*as e from"../../core/common/common.js";import*as t from"../../third_party/wasmparser/wasmparser.js";var s=Object.freeze({__proto__:null,dissambleWASM:function(s,o){try{const r=e.Base64.decode(s.content);let n=new t.WasmParser.BinaryReader;n.setData(r,0,r.byteLength);const a=new t.WasmDis.DevToolsNameGenerator;a.read(n);const i=new Uint8Array(r);n=new t.WasmParser.BinaryReader;const c=new t.WasmDis.WasmDisassembler;c.addOffsets=!0,c.exportMetadata=a.getExportMetadata(),c.nameResolver=a.getNameResolver();const f=[],m=[],l=[],p=1e6;let d=131072,g=new Uint8Array(d),h=0,u=0;for(let e=0;ei.length-e&&(d=i.length-e);const t=h+d;if(g.byteLengthp){f[p]=";; .... text is truncated due to size",f.splice(p+1),m&&m.splice(p+1);break}if(s)break;if(0===n.position){h=t;continue}const a=n.data.subarray(n.position,n.length);h=a.length,g.set(a),u+=n.position;o({event:"progress",params:{percentage:Math.floor(u/i.length*100)}})}o({event:"progress",params:{percentage:99}});const b=f.join("\n");o({event:"progress",params:{percentage:100}}),o({method:"disassemble",result:{source:b,offsets:m,functionBodyOffsets:l}})}catch(e){o({method:"disassemble",error:e})}}});export{s as WasmParserWorker}; diff --git a/chii/entrypoints/worker_app/WorkerMain.js b/chii/entrypoints/worker_app/WorkerMain.js new file mode 100644 index 00000000..7367b87a --- /dev/null +++ b/chii/entrypoints/worker_app/WorkerMain.js @@ -0,0 +1 @@ +import*as e from"../../core/common/common.js";import*as a from"../../core/i18n/i18n.js";import*as n from"../../core/sdk/sdk.js";import*as t from"../../panels/mobile_throttling/mobile_throttling.js";import*as r from"../../ui/legacy/components/utils/utils.js";const i={main:"Main"},o=a.i18n.registerUIStrings("entrypoints/worker_app/WorkerMain.ts",i),s=a.i18n.getLocalizedString.bind(void 0,o);let g;class c{static instance(e={forceNew:null}){const{forceNew:a}=e;return g&&!a||(g=new c),g}async run(){n.Connections.initMainConnection((async()=>{await n.TargetManager.TargetManager.instance().maybeAttachInitialTarget()||n.TargetManager.TargetManager.instance().createTarget("main",s(i.main),n.Target.Type.ServiceWorker,null)}),r.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost),new t.NetworkPanelIndicator.NetworkPanelIndicator}}e.Runnable.registerEarlyInitializationRunnable(c.instance),n.ChildTargetManager.ChildTargetManager.install((async({target:e,waitingForDebugger:a})=>{if(e.parentTarget()||e.type()!==n.Target.Type.ServiceWorker||!a)return;const t=e.model(n.DebuggerModel.DebuggerModel);t&&(t.isReadyToPause()||await t.once(n.DebuggerModel.Events.DebuggerIsReadyToPause),t.pause())}));export{c as WorkerMainImpl}; diff --git a/chii/entrypoints/worker_app/worker_app.js b/chii/entrypoints/worker_app/worker_app.js new file mode 100644 index 00000000..00ad5c3b --- /dev/null +++ b/chii/entrypoints/worker_app/worker_app.js @@ -0,0 +1 @@ +Root.allDescriptors.push(...[]);Root.applicationDescriptor={"modules":[]};import*as RootModule from'../../core/root/root.js';import'../shell/shell.js';import'../../panels/browser_debugger/browser_debugger-meta.js';import'../../panels/developer_resources/developer_resources-meta.js';import'../../panels/elements/elements-meta.js';import'../../panels/help/help-meta.js';import'../../panels/issues/issues-meta.js';import'../../panels/layer_viewer/layer_viewer-meta.js';import'../../panels/mobile_throttling/mobile_throttling-meta.js';import'../../panels/network/network-meta.js';import'../../panels/application/application-meta.js';import'../../panels/timeline/timeline-meta.js';import'./WorkerMain.js';import*as Main from'../main/main.js';import*as Startup from'../startup/startup.js';new Main.MainImpl.MainImpl();Startup.RuntimeInstantiator.startApplication('worker_app'); \ No newline at end of file diff --git a/chii/inspector.html b/chii/inspector.html new file mode 100644 index 00000000..9a2773b6 --- /dev/null +++ b/chii/inspector.html @@ -0,0 +1,19 @@ + + + + +DevTools + + + + diff --git a/chii/integration_test_runner.html b/chii/integration_test_runner.html new file mode 100644 index 00000000..482deda9 --- /dev/null +++ b/chii/integration_test_runner.html @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/chii/js_app.html b/chii/js_app.html new file mode 100644 index 00000000..4e7e4ed6 --- /dev/null +++ b/chii/js_app.html @@ -0,0 +1,19 @@ + + + + +DevTools + + + + diff --git a/chii/legacy_test_runner/legacy_test_runner.js b/chii/legacy_test_runner/legacy_test_runner.js new file mode 100644 index 00000000..8f93c62e --- /dev/null +++ b/chii/legacy_test_runner/legacy_test_runner.js @@ -0,0 +1,35 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +import '../core/common/common-legacy.js'; +import '../models/text_utils/text_utils-legacy.js'; +import '../core/host/host-legacy.js'; +import '../core/protocol_client/protocol_client-legacy.js'; +import '../ui/legacy/legacy-legacy.js'; +import '../models/workspace/workspace-legacy.js'; +import '../models/bindings/bindings-legacy.js'; +import '../ui/legacy/components/utils/utils-legacy.js'; +import '../models/persistence/persistence-legacy.js'; +import '../models/extensions/extensions-legacy.js'; +import '../entrypoints/devtools_app/devtools_app.js'; +import '../panels/accessibility/accessibility-legacy.js'; +import '../panels/animation/animation-legacy.js'; +import '../models/bindings/bindings-legacy.js'; +import '../ui/legacy/components/color_picker/color_picker-legacy.js'; +import '../core/common/common-legacy.js'; +import '../ui/legacy/components/data_grid/data_grid-legacy.js'; +import '../third_party/diff/diff-legacy.js'; +import '../models/extensions/extensions-legacy.js'; +import '../models/formatter/formatter-legacy.js'; +import '../ui/legacy/components/inline_editor/inline_editor-legacy.js'; +import '../core/root/root-legacy.js'; +import '../core/sdk/sdk-legacy.js'; +import './test_runner/test_runner.js'; +// @ts-ignore +if (self.testRunner) { + // @ts-ignore + testRunner.dumpAsText(); + // @ts-ignore + testRunner.waitUntilDone(); +} +//# sourceMappingURL=legacy_test_runner.js.map \ No newline at end of file diff --git a/chii/legacy_test_runner/test_runner/test_runner.js b/chii/legacy_test_runner/test_runner/test_runner.js new file mode 100644 index 00000000..75a708f2 --- /dev/null +++ b/chii/legacy_test_runner/test_runner/test_runner.js @@ -0,0 +1 @@ +import*as e from"../../core/platform/platform.js";import*as n from"../../core/protocol_client/protocol_client.js";import*as t from"../../core/root/root.js";import*as r from"../../models/bindings/bindings.js";import*as o from"../../models/workspace/workspace.js";import*as s from"../../ui/components/code_highlighter/code_highlighter.js";import*as i from"../../ui/legacy/legacy.js";function a(){return!self.testRunner||Boolean(t.Runtime.Runtime.queryParam("debugFrontend"))}function u(){a()||(console.log=(...e)=>{f(`log: ${e}`)},console.error=(...e)=>{f(`error: ${e}`)},console.info=(...e)=>{f(`info: ${e}`)},console.assert=(e,...n)=>{e||f(`ASSERTION FAILURE: ${n.join(" ")}`)})}self.Platform=self.Platform||{},self.Platform.StringUtilities=e.StringUtilities,self.Platform.MapUtilities=e.MapUtilities,self.Platform.ArrayUtilities=e.ArrayUtilities,self.onerror=(e,n,t,r,o)=>{f("TEST ENDED IN ERROR: "+o.stack),R()},self.addEventListener("unhandledrejection",(e=>{f(`PROMISE FAILURE: ${e.reason.stack}`),R()})),u();let c=[],l=e=>{c.push(String(e))};function d(e){l=e}function f(e){l(e)}let m,p=!1,g=()=>{p||(p=!0,function(){Array.prototype.forEach.call(document.documentElement.childNodes,(e=>e.remove()));const e=document.createElement("div");e.style&&(e.style.whiteSpace="pre",e.style.height="10px",e.style.overflow="hidden");document.documentElement.appendChild(e);for(let n=0;n{m=e}));if(await self.runtime.loadModulePromise(e),Y)return n}async function P(e){let n=e;for(const[r,o]of t.Runtime.mappingForLayoutTests.entries())o===e&&(n=r);await import(`../../${n}/${n.split("/").reverse()[0]}-legacy.js`)}async function E(e){await import(`../${e}/${e}.js`)}function x(e){return i.ViewManager.ViewManager.instance().showView(e)}function A(e,n,t,r,o){return new KeyboardEvent("keydown",{key:e,bubbles:!0,cancelable:!0,ctrlKey:Boolean(n),altKey:Boolean(t),shiftKey:Boolean(r),metaKey:Boolean(o)})}function M(e,n){return function(){if(!e)return;const t=this;try{return e.apply(t,arguments)}catch(t){f("Exception while running: "+e+"\n"+(t.stack||t)),n?M(n)():R()}}}function D(e){return async function(){if(!e)return;const n=this;try{return await e.apply(n,arguments)}catch(n){f("Exception while running: "+e+"\n"+(n.stack||n)),R()}}}function L(e){function n(n){let t=0;for(;n&&n!==e;)"OL"!==n.nodeName||n.classList&&n.classList.contains("object-properties-section")||++t,n=n.parentNode;return Array(4*t+1).join(" ")}let t="",r=e,o=!1;for(;r.traverseNextNode(e);)if(r=r.traverseNextNode(e),r.nodeType===Node.TEXT_NODE)t+=r.nodeValue;else if("LI"===r.nodeName||"TR"===r.nodeName)o?o=!1:t+="\n"+n(r);else{if("STYLE"===r.nodeName){r=r.traverseNextNode(e);continue}r.classList&&r.classList.contains("object-properties-section")&&(o=!0)}return t}function I(e){return L(e).replace(/\s{3,}/g," ")}function b(e){let n="",t=e;for(;t.traverseNextNode(e);)t=t.traverseNextNode(e,"DEVTOOLS-CSS-LENGTH"===t.tagName),t.nodeType===Node.TEXT_NODE?n+=t.nodeValue:"STYLE"===t.nodeName&&(t=t.traverseNextNode(e));return n}async function k(e){const n=await O(e);return TestRunner.runtimeModel.createRemoteObject(n.result)}async function C(e,n){const t=await O(e);M(n)(t.result.value,t.exceptionDetails)}self.TestRunner=self.TestRunner||{};let N=0;async function O(e){const r=(new Error).stack.split("at "),o=t.Runtime.Runtime.queryParam("test"),s=r.reduce(((e,n)=>n.includes(o)?n:e),r[r.length-2]).trim().split("/"),i=s[s.length-1].slice(0,-1).split(":"),a=i[0],u=`test://evaluations/${N++}/`+a,c=parseInt(i[1],10);-1===(e="\n".repeat(c-1)+e).indexOf("sourceURL=")&&(e+=`//# sourceURL=${u}`);const l=await TestRunner.RuntimeAgent.invoke_evaluate({expression:e,objectGroup:"console"}),d=l[n.InspectorBackend.ProtocolError];return d?(f("Error: "+d),void R()):l}async function F(e,t){const r=await TestRunner.RuntimeAgent.invoke_evaluate({expression:e,objectGroup:"console",userGesture:t});if(!r[n.InspectorBackend.ProtocolError])return r.result.value;f("Error: "+(r.exceptionDetails&&r.exceptionDetails.text||"exception from evaluateInPageAnonymously.")),R()}function j(e){return new Promise((n=>C(e,n)))}async function K(e){const t=await TestRunner.RuntimeAgent.invoke_evaluate({expression:e,objectGroup:"console",includeCommandLineAPI:!1,awaitPromise:!0}),r=t[n.InspectorBackend.ProtocolError];if(!r&&!t.exceptionDetails)return t.result.value;let o="Error: ";r?o+=r:t.exceptionDetails&&(o+=t.exceptionDetails.text,t.exceptionDetails.exception&&(o+=" "+t.exceptionDetails.exception.description)),f(o),R()}function U(e,n){return K(e+"("+(n=n||[]).map((e=>JSON.stringify(e))).join(",")+")")}function W(e,n){F("setTimeout(unescape('"+escape(e)+"'), 1)",n)}function _(e,n){const t='internals.evaluateInInspectorOverlay("(" + '+e+' + ")()")';TestRunner.runtimeModel.executionContexts()[0].evaluate({expression:t,objectGroup:"",includeCommandLineAPI:!1,silent:!1,returnByValue:!0,generatePreview:!1},!1,!1).then((e=>{n(e.object.value)}))}function B(e,n){e||f("FAIL: "+n)}function $(e){ProtocolClient.test.deprecatedRunAfterPendingDispatches(e)}function V(e){if(!e.includes(")/i,t=``;e=e.match(n)?e.replace(n,"$1"+t):t+e}return F(`document.write(\`${e=e.replace(/'/g,"\\'").replace(/\n/g,"\\n")}\`);document.close();`)}function H(e){return K(`\n (function(){\n let script = document.createElement('script');\n script.src = '${e}';\n document.head.append(script);\n return new Promise(f => script.onload = f);\n })();\n `)}function G(e){return K(`\n (function(){\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = '${e}';\n link.onload = onload;\n document.head.append(link);\n let resolve;\n const promise = new Promise(r => resolve = r);\n function onload() {\n // TODO(chenwilliam): It shouldn't be necessary to force\n // style recalc here but some tests rely on it.\n window.getComputedStyle(document.body).color;\n resolve();\n }\n return promise;\n })();\n `)}function q(e,n={}){return n.id=n.id||"",n.name=n.name||"",K(`\n (function(){\n const iframe = document.createElement('iframe');\n iframe.src = '${e}';\n iframe.id = '${n.id}';\n iframe.name = '${n.name}';\n document.body.appendChild(iframe);\n return new Promise(f => iframe.onload = f);\n })();\n `)}let Y=0;async function X(e){Y++,await TestRunner.RuntimeAgent.invoke_evaluate({expression:e,objectGroup:"console"}),Y--,Y||void 0===m||m()}function z(e){f("\nRunning: "+e)}function J(){ProtocolClient.test.dumpProtocol=self.testRunner.logToStderr.bind(self.testRunner)}function Q(e,n,t){n+="\n//# sourceURL="+e;const r=TestRunner.runtimeModel.executionContexts().find((e=>e.frameId===t.id));TestRunner.RuntimeAgent.evaluate(n,"console",!1,!1,r.id)}const Z={formatAsTypeName:e=>"<"+typeof e+">",formatAsTypeNameOrNull:e=>null===e?"null":Z.formatAsTypeName(e),formatAsRecentTime(e){if("object"!=typeof e||!(e instanceof Date))return Z.formatAsTypeName(e);const n=Date.now()-e;return 0<=n&&n<18e5?"":e},formatAsURL(e){if(!e)return e;const n=e.lastIndexOf("devtools/");return n<0?e:".../"+e.substr(n)},formatAsDescription:e=>e?'"'+e.replace(/^function [gs]et /,"function ")+'"':e};function ee(e,n,t,r){t=t||"",f((r=r||t)+"{");const o=Object.keys(e);o.sort();for(let r=0;r"),f(n+r.join(" "));for(let r=t.firstChild;r;r=r.nextSibling)e(n+" ",r);t.shadowRoot&&e(n+" ",t.shadowRoot),f(n+"")}("",e)}function re(e){if(!e)return"";if(e.nodeType===Node.TEXT_NODE&&e.nodeValue)return e.parentElement&&"STYLE"===e.parentElement.nodeName?"":e.nodeValue;let n="";const t=e.childNodes;for(let e=0;e80?f(r+"was skipped due to prefix length limit"):null===e?f(r+"null"):e&&e.constructor&&"Array"===e.constructor.name?ne(e,n,t,r):"object"==typeof e?ee(e,n,t,r):f("string"==typeof e?r+'"'+e+'"':r+e)}function se(e,n,t){return t=t||function(){return!0},new Promise((r=>{n.addEventListener(e,(function o(s){if(!t(s.data))return;n.removeEventListener(e,o),r(s.data)}))}))}function ie(e){e=e||(e=>!0);for(const n of self.SDK.targetManager.targets())if(e(n))return Promise.resolve(n);return new Promise((n=>{const t={targetAdded:function(r){e(r)&&(self.SDK.targetManager.unobserveTargets(t),n(r))},targetRemoved:function(){}};self.SDK.targetManager.observeTargets(t)}))}function ae(e){return new Promise((n=>{const t={targetRemoved:function(r){r===e&&(self.SDK.targetManager.unobserveTargets(t),n(r))},targetAdded:function(){}};self.SDK.targetManager.observeTargets(t)}))}function ue(e){return e.executionContexts().length?Promise.resolve(e.executionContexts()[0]):e.once(SDK.RuntimeModel.Events.ExecutionContextCreated)}function ce(e){const n=e.runtimeModel;return-1===n.executionContexts().indexOf(e)?Promise.resolve():se(SDK.RuntimeModel.Events.ExecutionContextDestroyed,n,(n=>n===e))}function le(e,n,t){efe(e,n)))}function pe(){TestRunner.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load,pe),we()}function ge(e){ye(!0,void 0,e)}function Te(e){ye(!1,void 0,e)}function Re(e,n){ye(!1,e,n)}function he(){return new Promise((e=>Te(e)))}function ye(e,n,t){de=M(t),TestRunner.resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load,ve),TestRunner.resourceTreeModel.reloadPage(e,n)}function ve(){TestRunner.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load,ve),f("Page reloaded."),we()}async function we(){if(await ue(TestRunner.runtimeModel),de){const e=de;de=void 0,e()}}function Se(e){TestRunner.resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load,(function n(){TestRunner.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load,n),e()}))}function Pe(e){const n=de;de=M((function(){n&&n(),e()}))}function Ee(e){const n=e.slice();!function e(){if(!n.length)return void R();const t=n.shift();f(""),f("Running: "+/function\s([^(]*)/.exec(t)[1]),M(t)(e)}()}async function xe(e){for(const n of e)f(""),f("Running: "+/function\s([^(]*)/.exec(n)[1]),await D(n)();R()}function Ae(e,n,t){if(e===n)return;let r;throw r=t?"Failure ("+t+"):":"Failure:",new Error(r+" expected <"+e+"> found <"+n+">")}function Me(e,n){Ae(!0,Boolean(e),n)}function De(e,n,t,r){t=M(t);const o=e[n];if("function"!=typeof o)throw new Error("Cannot find method to override: "+n);return e[n]=function(s){try{return t.apply(this,arguments)}catch(e){throw new Error("Exception in overriden method '"+n+"': "+e)}finally{r||(e[n]=o)}},o}function Le(e){let n=e.replace(/\(file:\/\/\/(?:[^)]+\)|[\w\/:-]+)/g,"(...)");return n=n.replace(/\(http:\/\/(?:[^)]+\)|[\w\/:-]+)/g,"(...)"),n=n.replace(/\(test:\/\/(?:[^)]+\)|[\w\/:-]+)/g,"(...)"),n=n.replace(/\(:[^)]+\)/g,"(...)"),n=n.replace(/VM\d+/g,"VM"),n.replace(/\s*at[^()]+\(native\)/g,"")}function Ie(){i.InspectorView.InspectorView.instance().element.setAttribute("style","display:none !important")}function be(){return TestRunner.resourceTreeModel.mainFrame}class ke{constructor(e){this.callback=e,this.buffer=""}async open(e){return!0}async write(e){this.buffer+=e}async close(){this.callback(this.buffer)}}class Ce{constructor(e){this.value=e}get(){return this.value}set(e){this.value=e}}function Ne(){return self.runtime.modules.filter((e=>e.loadedForTest)).filter((e=>"help"!==e.name())).filter((e=>-1===e.name().indexOf("test_runner")))}function Oe(n){const t=new Set(n||[]);f("Loaded modules:");const r=Ne().sort((function(n,t){return e.StringUtilities.naturalOrderComparator(n.descriptor.name,t.descriptor.name)}));for(const e of r)t.has(e)||f(" "+e.descriptor.name);return r}function Fe(e,n){function t(t){return(!n||t.project().type()===n)&&(!(!n&&t.project().type()===o.Workspace.projectTypes.Service)&&!(e&&!t.url().endsWith(e)))}for(const n of self.Workspace.workspace.uiSourceCodes())if(e&&t(n))return Promise.resolve(n);return se(o.Workspace.Events.UISourceCodeAdded,self.Workspace.workspace,t)}function je(e){self.Workspace.workspace.once(o.Workspace.Events.UISourceCodeRemoved).then(e)}function Ke(e=""){const n=t.Runtime.Runtime.queryParam("test");return new URL(e,n+"/../").href}function Ue(e,n){const t=document.createElement("span");return t.textContent=e,s.CodeHighlighter.highlightNode(t,n).then((function(){const n=[];for(let e=0;econsole.log("Test completed"))),void(self.test=async function(){await import(e)});try{await import(e)}catch(e){f("TEST ENDED EARLY DUE TO UNCAUGHT ERROR:"),f(e&&e.stack||e),f("=== DO NOT COMMIT THIS INTO -expected.txt ==="),R()}}self.Platform=self.Platform||{},self.Platform.StringUtilities=e.StringUtilities;let He=!1;class Ge{targetAdded(e){"main"===e.id()&&function(e){self.TestRunner.BrowserAgent=e.browserAgent(),self.TestRunner.CSSAgent=e.cssAgent(),self.TestRunner.DeviceOrientationAgent=e.deviceOrientationAgent(),self.TestRunner.DOMAgent=e.domAgent(),self.TestRunner.DOMDebuggerAgent=e.domdebuggerAgent(),self.TestRunner.DebuggerAgent=e.debuggerAgent(),self.TestRunner.EmulationAgent=e.emulationAgent(),self.TestRunner.HeapProfilerAgent=e.heapProfilerAgent(),self.TestRunner.InputAgent=e.inputAgent(),self.TestRunner.InspectorAgent=e.inspectorAgent(),self.TestRunner.NetworkAgent=e.networkAgent(),self.TestRunner.OverlayAgent=e.overlayAgent(),self.TestRunner.PageAgent=e.pageAgent(),self.TestRunner.ProfilerAgent=e.profilerAgent(),self.TestRunner.RuntimeAgent=e.runtimeAgent(),self.TestRunner.TargetAgent=e.targetAgent(),self.TestRunner.networkManager=e.model(SDK.NetworkManager),self.TestRunner.securityOriginManager=e.model(SDK.SecurityOriginManager),self.TestRunner.resourceTreeModel=e.model(SDK.ResourceTreeModel),self.TestRunner.debuggerModel=e.model(SDK.DebuggerModel),self.TestRunner.runtimeModel=e.model(SDK.RuntimeModel),self.TestRunner.domModel=e.model(SDK.DOMModel),self.TestRunner.domDebuggerModel=e.model(SDK.DOMDebuggerModel),self.TestRunner.cssModel=e.model(SDK.CSSModel),self.TestRunner.cpuProfilerModel=e.model(SDK.CPUProfilerModel),self.TestRunner.overlayModel=e.model(SDK.OverlayModel),self.TestRunner.serviceWorkerManager=e.model(SDK.ServiceWorkerManager),self.TestRunner.tracingManager=e.model(SDK.TracingManager),self.TestRunner.mainTarget=e}(e),He||(He=!0,V(`\n \n \n \n \n \n `).then((()=>Ve())))}targetRemoved(e){}}SDK.targetManager.observeTargets(new Ge);export{$e as TestRunner,Ge as _TestObserver,Ve as _executeTestScript}; diff --git a/chii/models/bindings/bindings-legacy.js b/chii/models/bindings/bindings-legacy.js new file mode 100644 index 00000000..fa328c65 --- /dev/null +++ b/chii/models/bindings/bindings-legacy.js @@ -0,0 +1 @@ +import*as e from"./bindings.js";self.Bindings=self.Bindings||{},Bindings=Bindings||{},Bindings.IgnoreListManager=e.IgnoreListManager.IgnoreListManager,Bindings.BreakpointManager=e.BreakpointManager.BreakpointManager,Bindings.BreakpointManager.Events=e.BreakpointManager.Events,Bindings.BreakpointManager.Breakpoint=e.BreakpointManager.Breakpoint,Bindings.BreakpointManager.ModelBreakpoint=e.BreakpointManager.ModelBreakpoint,Bindings.CSSWorkspaceBinding=e.CSSWorkspaceBinding.CSSWorkspaceBinding,Bindings.CSSWorkspaceBinding.SourceMapping=e.CSSWorkspaceBinding.SourceMapping,Bindings.CSSWorkspaceBinding.ModelInfo=e.CSSWorkspaceBinding.ModelInfo,Bindings.CompilerScriptMapping=e.CompilerScriptMapping.CompilerScriptMapping,Bindings.ContentProviderBasedProject=e.ContentProviderBasedProject.ContentProviderBasedProject,Bindings.DebuggerWorkspaceBinding=e.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding,Bindings.DebuggerSourceMapping=e.DebuggerWorkspaceBinding.DebuggerSourceMapping,Bindings.DefaultScriptMapping=e.DefaultScriptMapping.DefaultScriptMapping,Bindings.ChunkedReader=e.FileUtils.ChunkedReader,Bindings.ChunkedFileReader=e.FileUtils.ChunkedFileReader,Bindings.FileOutputStream=e.FileUtils.FileOutputStream,Bindings.LiveLocation=e.LiveLocation.LiveLocation,Bindings.LiveLocationPool=e.LiveLocation.LiveLocationPool,Bindings.NetworkProjectManager=e.NetworkProject.NetworkProjectManager,Bindings.NetworkProjectManager.Events=e.NetworkProject.Events,Bindings.NetworkProject=e.NetworkProject.NetworkProject,Bindings.PresentationConsoleMessageManager=e.PresentationConsoleMessageHelper.PresentationConsoleMessageManager,Bindings.PresentationConsoleMessage=e.PresentationConsoleMessageHelper.PresentationConsoleMessage,Bindings.ResourceMapping=e.ResourceMapping.ResourceMapping,Bindings.ResourceScriptFile=e.ResourceScriptMapping.ResourceScriptFile,Bindings.resourceForURL=e.ResourceUtils.resourceForURL,Bindings.displayNameForURL=e.ResourceUtils.displayNameForURL,Bindings.SASSSourceMapping=e.SASSSourceMapping.SASSSourceMapping,Bindings.StylesSourceMapping=e.StylesSourceMapping.StylesSourceMapping,Bindings.StyleFile=e.StylesSourceMapping.StyleFile,Bindings.TempFile=e.TempFile.TempFile,Bindings.TempFileBackingStorage=e.TempFile.TempFileBackingStorage; diff --git a/chii/models/bindings/bindings.js b/chii/models/bindings/bindings.js new file mode 100644 index 00000000..79f74e1a --- /dev/null +++ b/chii/models/bindings/bindings.js @@ -0,0 +1 @@ +import*as e from"../../core/common/common.js";import*as t from"../../core/sdk/sdk.js";import*as o from"../workspace/workspace.js";import*as r from"../../core/platform/platform.js";import*as s from"../../core/root/root.js";import*as i from"../text_utils/text_utils.js";import*as n from"../../core/i18n/i18n.js";const a={unknownErrorLoadingFile:"Unknown error loading file"},c=n.i18n.registerUIStrings("models/bindings/ContentProviderBasedProject.ts",a),u=n.i18n.getLocalizedString.bind(void 0,c);class d extends o.Workspace.ProjectStore{#e;#t;#o;constructor(e,t,o,r,s){super(e,t,o,r),this.#e=new Map,this.#t=s,this.#o=new WeakMap,e.addProject(this)}async requestFileContent(e){const t=this.#e.get(e.url());try{const[e,o]=await Promise.all([t.requestContent(),t.contentEncoded()]);return{content:e.content,isEncoded:o,error:"error"in e&&e.error||""}}catch(e){return{content:null,isEncoded:!1,error:e?String(e):u(a.unknownErrorLoadingFile)}}}isServiceProject(){return this.#t}async requestMetadata(e){const{metadata:t}=this.#o.get(e);return t}canSetFileContent(){return!1}async setFileContent(e,t,o){}fullDisplayName(e){let t=e.parentURL().replace(/^(?:https?|file)\:\/\//,"");try{t=decodeURI(t)}catch(e){}return t+"/"+e.displayName(!0)}mimeType(e){const{mimeType:t}=this.#o.get(e);return t}canRename(){return!1}rename(e,t,o){const r=e.url();this.performRename(r,t,function(t,s){if(t&&s){const t=r.split("/");t[t.length-1]=s;const o=t.join("/"),i=this.#e.get(r);this.#e.set(o,i),this.#e.delete(r),this.renameUISourceCode(e,s)}o(t,s)}.bind(this))}excludeFolder(e){}canExcludeFolder(e){return!1}async createFile(e,t,o,r){return null}canCreateFile(){return!1}deleteFile(e){}remove(){}performRename(e,t,o){o(!1)}searchInFileContent(e,t,o,r){return this.#e.get(e.url()).searchInContent(t,o,r)}async findFilesMatchingSearchRequest(e,t,o){const r=[];return o.setTotalWork(t.length),await Promise.all(t.map(async function(t){const s=this.#e.get(t);let i=!0;for(const t of e.queries().slice()){if(!(await s.searchInContent(t,!e.ignoreCase(),e.isRegex())).length){i=!1;break}}i&&r.push(t);o.incrementWorked(1)}.bind(this))),o.done(),r}indexContent(e){Promise.resolve().then(e.done.bind(e))}addUISourceCodeWithProvider(e,t,o,r){this.#e.set(e.url(),t),this.#o.set(e,{mimeType:r,metadata:o}),this.addUISourceCode(e)}addContentProvider(e,t,o){const r=this.createUISourceCode(e,t.contentType());return this.addUISourceCodeWithProvider(r,t,null,o),r}removeFile(e){this.#e.delete(e),this.removeUISourceCode(e)}reset(){this.#e.clear(),this.removeProject(),this.workspace().addProject(this)}dispose(){this.#e.clear(),this.removeProject()}}var l=Object.freeze({__proto__:null,ContentProviderBasedProject:d});let h;class p{#r;#s;#i;constructor(o){this.#r=o,t.TargetManager.TargetManager.instance().addModelListener(t.DebuggerModel.DebuggerModel,t.DebuggerModel.Events.GlobalObjectCleared,this.clearCacheIfNeeded.bind(this),this),e.Settings.Settings.instance().moduleSetting("skipStackFramesPattern").addChangeListener(this.patternChanged.bind(this)),e.Settings.Settings.instance().moduleSetting("skipContentScripts").addChangeListener(this.patternChanged.bind(this)),this.#s=new Set,this.#i=new Map,t.TargetManager.TargetManager.instance().observeModels(t.DebuggerModel.DebuggerModel,this)}static instance(e={forceNew:null,debuggerWorkspaceBinding:null}){const{forceNew:t,debuggerWorkspaceBinding:o}=e;if(!h||t){if(!o)throw new Error(`Unable to create settings: targetManager, workspace, and debuggerWorkspaceBinding must be provided: ${(new Error).stack}`);h=new p(o)}return h}addChangeListener(e){this.#s.add(e)}removeChangeListener(e){this.#s.delete(e)}modelAdded(e){this.setIgnoreListPatterns(e);const o=e.sourceMapManager();o.addEventListener(t.SourceMapManager.Events.SourceMapAttached,this.sourceMapAttached,this),o.addEventListener(t.SourceMapManager.Events.SourceMapDetached,this.sourceMapDetached,this)}modelRemoved(e){this.clearCacheIfNeeded();const o=e.sourceMapManager();o.removeEventListener(t.SourceMapManager.Events.SourceMapAttached,this.sourceMapAttached,this),o.removeEventListener(t.SourceMapManager.Events.SourceMapDetached,this.sourceMapDetached,this)}clearCacheIfNeeded(){this.#i.size>1024&&this.#i.clear()}getSkipStackFramesPatternSetting(){return e.Settings.Settings.instance().moduleSetting("skipStackFramesPattern")}setIgnoreListPatterns(e){const t=this.getSkipStackFramesPatternSetting().getAsArray(),o=[];for(const e of t)!e.disabled&&e.pattern&&o.push(e.pattern);return e.setBlackboxPatterns(o)}isIgnoreListedUISourceCode(t){if(t.project().type()===o.Workspace.projectTypes.ContentScripts&&e.Settings.Settings.instance().moduleSetting("skipContentScripts").get())return!0;const r=this.uiSourceCodeURL(t);return!!r&&this.isIgnoreListedURL(r)}isIgnoreListedURL(t,o){if(this.#i.has(t))return Boolean(this.#i.get(t));if(o&&e.Settings.Settings.instance().moduleSetting("skipContentScripts").get())return!0;const r=this.getSkipStackFramesPatternSetting().asRegExp(),s=r&&r.test(t)||!1;return this.#i.set(t,s),s}sourceMapAttached(e){const t=e.data.client,o=e.data.sourceMap;this.updateScriptRanges(t,o)}sourceMapDetached(e){const t=e.data.client;this.updateScriptRanges(t,null)}async updateScriptRanges(e,t){let o=!1;if(p.instance().isIgnoreListedURL(e.sourceURL,e.isContentScript())||(o=!!t&&t.sourceURLs().some((e=>this.isIgnoreListedURL(e)))),!o)return g.get(e)&&await e.setBlackboxedRanges([])&&g.delete(e),void await this.#r.updateLocations(e);if(!t)return;const r=t.mappings(),s=[];if(r.length>0){let e=!1;0===r[0].lineNumber&&0===r[0].columnNumber||(s.push({lineNumber:0,columnNumber:0}),e=!0);for(const t of r)t.sourceURL&&e!==this.isIgnoreListedURL(t.sourceURL)&&(s.push({lineNumber:t.lineNumber,columnNumber:t.columnNumber}),e=!e)}!function(e,t){if(e.length!==t.length)return!1;for(let o=0;o0)return;o.delete(t);const s={uiSourceCode:e,frame:r.frame};M.instance().dispatchEventToListeners(L.FrameAttributionRemoved,s)}static targetForUISourceCode(e){return f.get(e.project())||null}static setTargetForProject(e,t){f.set(e,t)}static getTargetForProject(e){return f.get(e)||null}static framesForUISourceCode(e){const o=v.targetForUISourceCode(e),r=o&&o.model(t.ResourceTreeModel.ResourceTreeModel),s=b.get(e);if(!r||!s)return[];return Array.from(s.keys()).map((e=>r.frameForId(e))).filter((e=>Boolean(e)))}}var C=Object.freeze({__proto__:null,NetworkProjectManager:M,get Events(){return L},NetworkProject:v});class I{#n;#a;#c;#r;#u;#d;#l;#h;#p;#g;#m;constructor(e,r,s){this.#n=e,this.#a=this.#n.sourceMapManager(),this.#c=r,this.#r=s;const i=e.target();this.#u=new d(r,"jsSourceMaps::"+i.id(),o.Workspace.projectTypes.Network,"",!1),this.#d=new d(r,"jsSourceMaps:extensions:"+i.id(),o.Workspace.projectTypes.ContentScripts,"",!1),v.setTargetForProject(this.#u,i),v.setTargetForProject(this.#d,i),this.#l=new Map,this.#h=new Map,this.#p=new Map,this.#g=new d(r,"jsSourceMaps:stub:"+i.id(),o.Workspace.projectTypes.Service,"",!0),this.#m=[this.#a.addEventListener(t.SourceMapManager.Events.SourceMapWillAttach,this.sourceMapWillAttach,this),this.#a.addEventListener(t.SourceMapManager.Events.SourceMapFailedToAttach,this.sourceMapFailedToAttach,this),this.#a.addEventListener(t.SourceMapManager.Events.SourceMapAttached,this.sourceMapAttached,this),this.#a.addEventListener(t.SourceMapManager.Events.SourceMapDetached,this.sourceMapDetached,this),this.#c.addEventListener(o.Workspace.Events.UISourceCodeAdded,(e=>{this.onUiSourceCodeAdded(e)}),this)]}onUiSourceCodeAdded(e){const t=e.data;if(t.contentType().isDocument())for(const e of this.#n.scriptsForSourceURL(t.url()))this.#r.updateLocations(e)}addStubUISourceCode(t){const o=this.#g.addContentProvider(t.sourceURL+":sourcemap",i.StaticContentProvider.StaticContentProvider.fromString(t.sourceURL,e.ResourceType.resourceTypes.Script,"\n\n\n\n\n// Please wait a bit.\n// Compiled script is not shown while source map is being loaded!"),"text/javascript");this.#p.set(t,o)}async removeStubUISourceCode(e){const t=this.#p.get(e);this.#p.delete(e),t&&this.#g.removeFile(t.url()),await this.#r.updateLocations(e)}static uiSourceCodeOrigin(e){const t=w.get(e);return t?t.getReferringSourceMaps().map((e=>e.compiledURL())):[]}getLocationRangesForSameSourceLocation(e){const t=e.debuggerModel,o=e.script();if(!o)return[];const r=this.#a.sourceMapForClient(o);if(!r)return[];const s=r.findEntry(e.lineNumber,e.columnNumber);if(!s||!s.sourceURL)return[];return r.findReverseRanges(s.sourceURL,s.sourceLineNumber,s.sourceColumnNumber).map((function(e){return{start:t.createRawLocation(o,e.startLine,e.startColumn),end:t.createRawLocation(o,e.endLine,e.endColumn)}}))}uiSourceCodeForURL(e,t){return t?this.#d.uiSourceCodeForURL(e):this.#u.uiSourceCodeForURL(e)}rawLocationToUILocation(e){const t=e.script();if(!t)return null;const r=e.lineNumber-t.lineOffset;let s=e.columnNumber;r||(s-=t.columnOffset);const i=this.#p.get(t);if(i)return new o.UISourceCode.UILocation(i,r,s);const n=this.#a.sourceMapForClient(t);if(!n)return null;const a=n.findEntry(r,s);if(!a||!a.sourceURL)return null;const c=t.isContentScript()?this.#d.uiSourceCodeForURL(a.sourceURL):this.#u.uiSourceCodeForURL(a.sourceURL);return c?c.uiLocation(a.sourceLineNumber,a.sourceColumnNumber):null}uiLocationToRawLocations(e,t,o){const r=w.get(e);if(!r)return[];const s=[];for(const i of r.getReferringSourceMaps()){const r=i.sourceLineMapping(e.url(),t,o);if(r)for(const e of this.#a.clientsForSourceMap(i))s.push(this.#n.createRawLocation(e,r.lineNumber+e.lineOffset,r.lineNumber?r.columnNumber:r.columnNumber+e.columnOffset))}return s}async sourceMapWillAttach(e){const t=e.data.client;this.addStubUISourceCode(t),await this.#r.updateLocations(t)}async sourceMapFailedToAttach(e){const t=e.data.client;await this.removeStubUISourceCode(t)}async sourceMapAttached(e){const t=e.data.client,o=e.data.sourceMap;await this.removeStubUISourceCode(t),p.instance().isIgnoreListedURL(t.sourceURL,t.isContentScript())||await this.populateSourceMapSources(t,o),this.sourceMapAttachedForTest(o)}async sourceMapDetached(e){const t=e.data.client,o=e.data.sourceMap,r=t.isContentScript()?this.#h:this.#l;for(const e of o.sourceURLs()){const s=r.get(e);s&&(s.removeSourceMap(o,t.frameId),s.getUiSourceCode()||r.delete(e))}await this.#r.updateLocations(t)}sourceMapForScript(e){return this.#a.sourceMapForClient(e)}scriptsForUISourceCode(e){const t=w.get(e);if(!t)return[];const o=[];for(const e of t.getReferringSourceMaps())this.#a.clientsForSourceMap(e).forEach((e=>o.push(e)));return o}sourceMapAttachedForTest(e){}async populateSourceMapSources(e,t){const o=e.isContentScript()?this.#d:this.#u,r=e.isContentScript()?this.#h:this.#l;for(const s of t.sourceURLs()){let i=r.get(s);i||(i=new y(o,s),r.set(s,i)),i.addSourceMap(t,e.frameId)}await this.#r.updateLocations(e)}static uiLineHasMapping(e,t){const o=w.get(e);if(!o)return!0;for(const r of o.getReferringSourceMaps())if(r.sourceLineMapping(e.url(),t,0))return!0;return!1}dispose(){e.EventTarget.removeEventListeners(this.#m),this.#u.dispose(),this.#d.dispose(),this.#g.dispose()}}const w=new WeakMap;class y{#b;#f;referringSourceMaps;#S;uiSourceCode;constructor(e,t){this.#b=e,this.#f=t,this.referringSourceMaps=[],this.uiSourceCode=null}recreateUISourceCodeIfNeeded(t){const r=this.referringSourceMaps[this.referringSourceMaps.length-1],s=this.#b.createUISourceCode(this.#f,e.ResourceType.resourceTypes.SourceMapScript);w.set(s,this);const i=r.sourceContentProvider(this.#f,e.ResourceType.resourceTypes.SourceMapScript),n=e.ResourceType.ResourceType.mimeFromURL(this.#f)||"text/javascript",a=r.embeddedContentByURL(this.#f),c="string"==typeof a?new o.UISourceCode.UISourceCodeMetadata(null,a.length):null;this.uiSourceCode?(v.cloneInitialFrameAttribution(this.uiSourceCode,s),this.#b.removeFile(this.uiSourceCode.url())):v.setInitialFrameAttribution(s,t),this.uiSourceCode=s,this.#b.addUISourceCodeWithProvider(this.uiSourceCode,i,c,n)}addSourceMap(e,t){this.uiSourceCode&&v.addFrameAttribution(this.uiSourceCode,t),this.referringSourceMaps.push(e),this.recreateUISourceCodeIfNeeded(t)}removeSourceMap(e,t){const o=this.uiSourceCode;v.removeFrameAttribution(o,t);const r=this.referringSourceMaps.lastIndexOf(e);-1!==r&&this.referringSourceMaps.splice(r,1),this.referringSourceMaps.length?this.recreateUISourceCodeIfNeeded(t):(this.#b.removeFile(o.url()),this.uiSourceCode=null)}getReferringSourceMaps(){return this.referringSourceMaps}getUiSourceCode(){return this.uiSourceCode}}var R=Object.freeze({__proto__:null,CompilerScriptMapping:I});const k={errorInDebuggerLanguagePlugin:"Error in debugger language plugin: {PH1}",loadingDebugSymbolsForVia:"[{PH1}] Loading debug symbols for {PH2} (via {PH3})...",loadingDebugSymbolsFor:"[{PH1}] Loading debug symbols for {PH2}...",loadedDebugSymbolsForButDidnt:"[{PH1}] Loaded debug symbols for {PH2}, but didn't find any source files",loadedDebugSymbolsForFound:"[{PH1}] Loaded debug symbols for {PH2}, found {PH3} source file(s)",failedToLoadDebugSymbolsFor:"[{PH1}] Failed to load debug symbols for {PH2} ({PH3})",failedToLoadDebugSymbolsForFunction:'Missing debug symbols for function "{PH1}"',symbolFileNotFound:'Symbol file "{PH1}" not found'},T=n.i18n.registerUIStrings("models/bindings/DebuggerLanguagePlugins.ts",k),F=n.i18n.getLocalizedString.bind(void 0,T);class U{typeInfo;members;typeMap;constructor(e,t,o){this.typeInfo=e,this.members=t,this.typeMap=o}static create(e){if(0===e.length)return null;const t=new Map;for(const o of e)t.set(o.typeId,new U(o,[],t));for(const o of t.values())o.members=o.typeInfo.members.map((({typeId:o})=>{const r=t.get(o);if(!r)throw new Error(`Incomplete type information for type ${e[0].typeNames[0]||""}`);return r}));return t.get(e[0].typeId)||null}}function P(e){return`${e.sourceURL}@${e.hash}`}function j(e){const{script:t}=e;return{rawModuleId:P(t),codeOffset:e.location().columnNumber-(t.codeOffset()||0),inlineFrameIndex:e.inlineFrameIndex}}class N extends t.RemoteObject.RemoteObjectImpl{inspectableAddress;callFrame;constructor(e,t,o,r,s,i,n,a,c,u,d){super(e.debuggerModel.runtimeModel(),t,o,r,s,n,a,c,u,d),this.inspectableAddress=i,this.callFrame=e}}async function E(e,o,r,s){const i=j(e);let n;try{n=await o.getTypeInfo(r,i)}catch(t){B.throwLocal(e,t.message)}if(!n)return new t.RemoteObject.LocalJSONObject(void 0);const{base:a,typeInfos:c}=n,u=U.create(c);if(!u)return new t.RemoteObject.LocalJSONObject(void 0);if(u.typeInfo.hasValue&&!u.typeInfo.canExpand&&a)return D(e,o,u,a,[],s);const d=await O.getInspectableAddress(e,o,a,[],s);return new O(e,o,u,a,[],s,d)}async function D(e,t,o,r,s,i){const n=j(e);let a=await t.getFormatter({base:r,field:s},n);a||(a={js:""});const c=await e.debuggerModel.target().debuggerAgent().invoke_evaluateOnCallFrame({callFrameId:e.id,expression:a.js,objectGroup:i.objectGroup,includeCommandLineAPI:i.includeCommandLineAPI,silent:i.silent,returnByValue:i.returnByValue,generatePreview:i.generatePreview,throwOnSideEffect:i.throwOnSideEffect,timeout:i.timeout}),u=c.getError();if(u)throw new Error(u);const{result:d,exceptionDetails:l}=c;if(l)throw new B(e.debuggerModel.runtimeModel().createRemoteObject(d),l);const h=new A(e,o,t,d,null,i,void 0),p=await async function(e){const{tag:t,value:o,inspectableAddress:r,description:s}=await e.findProperties("tag","value","inspectableAddress","description");if(!t||!o)return null;const{className:i,symbol:n}=await t.findProperties("className","symbol");if(!i||!n)return null;const a=i.value;if("string"!=typeof a||void 0===n.objectId)return null;const c=s?.value;"string"==typeof c&&(o.description=c);return o.formatterTag={symbol:n.objectId,className:a},o.inspectableAddress=r?r.value:void 0,o}(h),g=p||h;return void 0===g.value&&"undefined"!==g.type&&(g.description=o.typeInfo.typeNames[0]),g}class A extends N{#M;#L;formatterTag;#v;constructor(e,t,o,r,s,i,n){super(e,r.objectId,r.type,r.subtype,r.value,n,r.unserializableValue,r.description,r.preview,r.customPreview,r.className),this.#M=o,this.#L=t,this.formatterTag=s,this.#v=i}async findProperties(...e){const t={};for(const o of(await this.getOwnProperties(!1)).properties||[])e.indexOf(o.name)>=0&&o.value&&(t[o.name]=o.value);return t}async createRemoteObject(e){const t=await this.getEvalBaseFromObject(e);if(!t)return new A(this.callFrame,this.#L,this.#M,e,this.formatterTag,this.#v,void 0);const o=this.#L.typeMap.get(t.rootType.typeId);if(!o)throw new Error("Unknown typeId in eval base");if(t.rootType.hasValue&&!t.rootType.canExpand&&t)return D(this.callFrame,this.#M,o,t,[],this.#v);const r=await O.getInspectableAddress(this.callFrame,this.#M,t,[],this.#v);return new O(this.callFrame,this.#M,o,t,[],this.#v,r)}async getEvalBaseFromObject(e){const{objectId:t}=e;if(!e||!this.formatterTag)return null;const{className:o,symbol:r}=this.formatterTag;if(o!==e.className)return null;const s=await this.debuggerModel().target().runtimeAgent().invoke_callFunctionOn({functionDeclaration:"function(sym) { return this[sym]; }",objectId:t,arguments:[{objectId:r}]}),{result:i}=s;if(!i||"undefined"===i.type)return null;const n=new A(this.callFrame,this.#L,this.#M,i,null,this.#v,void 0),{payload:a,rootType:c}=await n.findProperties("payload","rootType");if(void 0===a||void 0===c)return null;const u=await async function(e,t){if(void 0!==t.value)return t.value;const o=await e.debuggerModel.target().runtimeAgent().invoke_callFunctionOn({functionDeclaration:"function() { return this; }",objectId:t.objectId,returnByValue:!0}),{result:r}=o;return r?r.value:void 0}(this.callFrame,a),{typeId:d}=await c.findProperties("typeId");if(void 0===u||void 0===d)return null;const l=this.#L.typeMap.get(d.value);return l?{payload:u,rootType:l.typeInfo}:null}}class B extends Error{exception;exceptionDetails;constructor(e,t){const{description:o}=t.exception||{};super(o||t.text),this.exception=e,this.exceptionDetails=t}static throwLocal(e,t){const o={type:"object",subtype:"error",description:t},r={text:"Uncaught",exceptionId:-1,columnNumber:0,lineNumber:0,exception:o},s=e.debuggerModel.runtimeModel().createRemoteObject(o);throw new B(s,r)}}class O extends N{#C;#M;#L;#I;#w;#v;constructor(e,t,o,r,s,i,n){const a=o.typeInfo.typeNames[0]||"",c="object";super(e,void 0,c,void 0,null,n,void 0,a,void 0,void 0,a),this.#C=c,this.#M=t,this.#L=o,this.#I=r,this.#w=s,this.hasChildrenInternal=!0,this.#v=i}get type(){return this.#C}async expandMember(e,t){const o=this.#w.concat(t);if(e.typeInfo.hasValue&&!e.typeInfo.canExpand&&this.#I)return D(this.callFrame,this.#M,e,this.#I,o,this.#v);const r=void 0!==this.inspectableAddress?this.inspectableAddress+t.offset:void 0;return new O(this.callFrame,this.#M,e,this.#I,o,this.#v,r)}static async getInspectableAddress(e,t,o,r,s){if(!o)return;const i=await t.getInspectableAddress({base:o,field:r});if(!i.js)return;const n=await e.debuggerModel.target().debuggerAgent().invoke_evaluateOnCallFrame({callFrameId:e.id,expression:i.js,objectGroup:s.objectGroup,includeCommandLineAPI:s.includeCommandLineAPI,silent:s.silent,returnByValue:!0,generatePreview:s.generatePreview,throwOnSideEffect:s.throwOnSideEffect,timeout:s.timeout}),a=n.getError();if(a)throw new Error(a);const{result:c,exceptionDetails:u}=n;if(u)throw new B(e.debuggerModel.runtimeModel().createRemoteObject(c),u);const d=c.value;if(Number.isSafeInteger(d)&&!(d<0))return d;console.error(`Inspectable address is not a positive, safe integer: ${d}`)}async doGetProperties(e,o,r){const{typeInfo:s}=this.#L;if(o||!s.canExpand)return{properties:[],internalProperties:[]};if(s.members.length>0){if(s.arraySize>0){const{typeId:e}=this.#L.typeInfo.members[0],o=[],r=this.#L.members[0];for(let i=0;i{const r=this.#L.typeInfo.members[o],s=await this.expandMember(e,r),i=r.name||"";return new t.RemoteObject.RemoteObjectProperty(i,s,!1,!1,!0,!1)})));return{properties:await e,internalProperties:[]}}return{properties:[],internalProperties:[]}}}class W extends t.RemoteObject.LocalJSONObject{constructor(e){super(e)}get description(){return this.type}get type(){return"namespace"}}class x extends t.RemoteObject.RemoteObjectImpl{variables;#y;#M;#R;constructor(e,t,o){super(e.debuggerModel.runtimeModel(),void 0,"object",void 0,null),this.variables=[],this.#y=e,this.#M=t,this.#R=o}async doGetProperties(e,o,r){if(o)return{properties:[],internalProperties:[]};const s=[],i={};function n(e,o){return new t.RemoteObject.RemoteObjectProperty(e,o,!1,!1,!0,!1)}for(const e of this.variables){let o;try{o=await E(this.#y,this.#M,e.name,{generatePreview:!1,includeCommandLineAPI:!0,objectGroup:"backtrace",returnByValue:!1,silent:!1})}catch(e){console.warn(e),o=new t.RemoteObject.LocalJSONObject(void 0)}if(e.nestedName&&e.nestedName.length>1){let t=i;for(let o=0;o{const t=await this.getFunctionInfo(e.script,e.location());if(t){const{frames:o,missingSymbolFiles:r}=t;if(o.length)return o.map((({name:t},o)=>e.createVirtualCallFrame(o,t)));if(r&&r.length)for(const t of r)e.addWarning(F(k.symbolFileNotFound,{PH1:t}));e.addWarning(F(k.failedToLoadDebugSymbolsForFunction,{PH1:e.functionName}))}return e}))).then((e=>e.flat()))}modelAdded(e){this.#A.set(e,new z(e,this.#c)),e.addEventListener(t.DebuggerModel.Events.GlobalObjectCleared,this.globalObjectCleared,this),e.addEventListener(t.DebuggerModel.Events.ParsedScriptSource,this.parsedScriptSource,this),e.setEvaluateOnCallFrameCallback(this.evaluateOnCallFrame.bind(this)),e.setExpandCallFramesCallback(this.expandCallFrames.bind(this))}modelRemoved(o){o.removeEventListener(t.DebuggerModel.Events.GlobalObjectCleared,this.globalObjectCleared,this),o.removeEventListener(t.DebuggerModel.Events.ParsedScriptSource,this.parsedScriptSource,this),o.setEvaluateOnCallFrameCallback(null),o.setExpandCallFramesCallback(null);const r=this.#A.get(o);r&&(r.dispose(),this.#A.delete(o)),this.#B.forEach(((t,r)=>{const s=t.scripts.filter((e=>e.debuggerModel!==o));0===s.length?(t.plugin.removeRawModule(r).catch((t=>{e.Console.Console.instance().error(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message}))})),this.#B.delete(r)):t.scripts=s}))}globalObjectCleared(e){const t=e.data;this.modelRemoved(t),this.modelAdded(t)}addPlugin(e){this.#D.push(e);for(const e of this.#A.keys())for(const t of e.scripts())this.hasPluginForScript(t)||this.parsedScriptSource({data:t})}removePlugin(e){this.#D=this.#D.filter((t=>t!==e));const t=new Set;this.#B.forEach(((o,r)=>{o.plugin===e&&(o.scripts.forEach((e=>t.add(e))),this.#B.delete(r))}));for(const e of t){this.#A.get(e.debuggerModel).removeScript(e),this.parsedScriptSource({data:e})}}hasPluginForScript(e){const t=P(e),o=this.#B.get(t);return void 0!==o&&o.scripts.includes(e)}async rawModuleIdAndPluginForScript(e){const t=P(e),o=this.#B.get(t);return o&&(await o.addRawModulePromise,o===this.#B.get(t))?{rawModuleId:t,plugin:o.plugin}:{rawModuleId:t,plugin:null}}uiSourceCodeForURL(e,t){const o=this.#A.get(e);return o?o.getProject().uiSourceCodeForURL(t):null}async rawLocationToUILocation(t){const o=t.script();if(!o)return null;const{rawModuleId:r,plugin:s}=await this.rawModuleIdAndPluginForScript(o);if(!s)return null;const i={rawModuleId:r,codeOffset:t.columnNumber-(o.codeOffset()||0),inlineFrameIndex:t.inlineFrameIndex};try{const e=await s.rawLocationToSourceLocation(i);for(const t of e){const e=this.uiSourceCodeForURL(o.debuggerModel,t.sourceFileURL);if(e)return e.uiLocation(t.lineNumber,t.columnNumber>=0?t.columnNumber:void 0)}}catch(t){e.Console.Console.instance().error(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message}))}return null}uiLocationToRawLocationRanges(o,r,s=-1){const i=[];return this.scriptsForUISourceCode(o).forEach((e=>{const n=P(e),a=this.#B.get(n);if(!a)return;const{plugin:c}=a;i.push(async function(e,i,n){const a={rawModuleId:e,sourceFileURL:o.url(),lineNumber:r,columnNumber:s},c=await i.sourceLocationToRawLocation(a);if(!c)return[];return c.map((e=>({start:new t.DebuggerModel.Location(n.debuggerModel,n.scriptId,0,Number(e.startOffset)+(n.codeOffset()||0)),end:new t.DebuggerModel.Location(n.debuggerModel,n.scriptId,0,Number(e.endOffset)+(n.codeOffset()||0))})))}(n,c,e))})),0===i.length?Promise.resolve(null):Promise.all(i).then((e=>e.flat())).catch((t=>(e.Console.Console.instance().error(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message})),null)))}async uiLocationToRawLocations(e,t,o){const r=await this.uiLocationToRawLocationRanges(e,t,o);return r?r.map((({start:e})=>e)):null}scriptsForUISourceCode(e){for(const t of this.#A.values()){const o=t.uiSourceCodeToScripts.get(e);if(o)return o}return[]}parsedScriptSource(t){const o=t.data;if(o.sourceURL)for(const t of this.#D){if(!t.handleScript(o))return;const r=P(o);let s=this.#B.get(r);if(s)s.scripts.push(o);else{const i=(async()=>{const i=e.Console.Console.instance(),n=o.sourceURL,a=o.debugSymbols&&o.debugSymbols.externalURL||"";a?i.log(F(k.loadingDebugSymbolsForVia,{PH1:t.name,PH2:n,PH3:a})):i.log(F(k.loadingDebugSymbolsFor,{PH1:t.name,PH2:n}));try{const e=!a&&n.startsWith("wasm://")?await o.getWasmBytecode():void 0,c=await t.addRawModule(r,a,{url:n,code:e});return s!==this.#B.get(r)?[]:(0===c.length?i.warn(F(k.loadedDebugSymbolsForButDidnt,{PH1:t.name,PH2:n})):i.log(F(k.loadedDebugSymbolsForFound,{PH1:t.name,PH2:n,PH3:c.length})),c)}catch(e){return i.error(F(k.failedToLoadDebugSymbolsFor,{PH1:t.name,PH2:n,PH3:e.message})),this.#B.delete(r),[]}})();s={rawModuleId:r,plugin:t,scripts:[o],addRawModulePromise:i},this.#B.set(r,s)}return void s.addRawModulePromise.then((e=>{if(o.debuggerModel.scriptForId(o.scriptId)===o){const t=this.#A.get(o.debuggerModel);t&&(t.addSourceFiles(o,e),this.#r.updateLocations(o))}}))}}async resolveScopeChain(t){const o=t.script,{rawModuleId:r,plugin:s}=await this.rawModuleIdAndPluginForScript(o);if(!s)return null;const i={rawModuleId:r,codeOffset:t.location().columnNumber-(o.codeOffset()||0),inlineFrameIndex:t.inlineFrameIndex};try{if(0===(await s.rawLocationToSourceLocation(i)).length)return null;const e=new Map,o=await s.listVariablesInScope(i);for(const r of o||[]){let o=e.get(r.scope);if(!o){const{type:n,typeName:a,icon:c}=await s.getScopeInfo(r.scope);o=new H(t,n,a,c,s,i),e.set(r.scope,o)}o.object().variables.push(r)}return Array.from(e.values())}catch(t){return e.Console.Console.instance().error(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message})),null}}async getFunctionInfo(t,o){const{rawModuleId:r,plugin:s}=await this.rawModuleIdAndPluginForScript(t);if(!s)return null;const i={rawModuleId:r,codeOffset:o.columnNumber-(t.codeOffset()||0),inlineFrameIndex:0};try{return await s.getFunctionInfo(i)}catch(t){return e.Console.Console.instance().warn(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message})),{frames:[]}}}async getInlinedFunctionRanges(o){const r=o.script();if(!r)return[];const{rawModuleId:s,plugin:i}=await this.rawModuleIdAndPluginForScript(r);if(!i)return[];const n={rawModuleId:s,codeOffset:o.columnNumber-(r.codeOffset()||0)};try{return(await i.getInlinedFunctionRanges(n)).map((e=>({start:new t.DebuggerModel.Location(r.debuggerModel,r.scriptId,0,Number(e.startOffset)+(r.codeOffset()||0)),end:new t.DebuggerModel.Location(r.debuggerModel,r.scriptId,0,Number(e.endOffset)+(r.codeOffset()||0))})))}catch(t){return e.Console.Console.instance().warn(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message})),[]}}async getInlinedCalleesRanges(o){const r=o.script();if(!r)return[];const{rawModuleId:s,plugin:i}=await this.rawModuleIdAndPluginForScript(r);if(!i)return[];const n={rawModuleId:s,codeOffset:o.columnNumber-(r.codeOffset()||0)};try{return(await i.getInlinedCalleesRanges(n)).map((e=>({start:new t.DebuggerModel.Location(r.debuggerModel,r.scriptId,0,Number(e.startOffset)+(r.codeOffset()||0)),end:new t.DebuggerModel.Location(r.debuggerModel,r.scriptId,0,Number(e.endOffset)+(r.codeOffset()||0))})))}catch(t){return e.Console.Console.instance().warn(F(k.errorInDebuggerLanguagePlugin,{PH1:t.message})),[]}}async getMappedLines(e){const t=await Promise.all(this.scriptsForUISourceCode(e).map((e=>this.rawModuleIdAndPluginForScript(e))));let o;for(const{rawModuleId:r,plugin:s}of t){if(!s)continue;const t=await s.getMappedLines(r,e.url());void 0!==t&&(void 0===o?o=new Set(t):t.forEach((e=>o.add(e))))}return o}}class z{#n;project;uiSourceCodeToScripts;constructor(e,t){this.#n=e,this.project=new d(t,"language_plugins::"+e.target().id(),o.Workspace.projectTypes.Network,"",!1),v.setTargetForProject(this.project,e.target()),this.uiSourceCodeToScripts=new Map}addSourceFiles(o,r){const s=o.createPageResourceLoadInitiator();for(const i of r){let r=this.project.uiSourceCodeForURL(i);if(r){const e=this.uiSourceCodeToScripts.get(r);e.includes(o)||e.push(o)}else{r=this.project.createUISourceCode(i,e.ResourceType.resourceTypes.SourceMapScript),v.setInitialFrameAttribution(r,o.frameId),this.uiSourceCodeToScripts.set(r,[o]);const n=new t.CompilerSourceMappingContentProvider.CompilerSourceMappingContentProvider(i,e.ResourceType.resourceTypes.SourceMapScript,s),a=e.ResourceType.ResourceType.mimeFromURL(i)||"text/javascript";this.project.addUISourceCodeWithProvider(r,n,null,a)}}}removeScript(e){this.uiSourceCodeToScripts.forEach(((t,o)=>{0===(t=t.filter((t=>t!==e))).length?(this.uiSourceCodeToScripts.delete(o),this.project.removeUISourceCode(o.url())):this.uiSourceCodeToScripts.set(o,t)}))}dispose(){this.project.dispose()}getProject(){return this.project}}var V=Object.freeze({__proto__:null,ValueNode:N,SourceScope:H,DebuggerLanguagePluginManager:_,DebuggerLanguagePlugin:class{name;constructor(e){this.name=e}handleScript(e){throw new Error("Not implemented yet")}dispose(){}async addRawModule(e,t,o){throw new Error("Not implemented yet")}async sourceLocationToRawLocation(e){throw new Error("Not implemented yet")}async rawLocationToSourceLocation(e){throw new Error("Not implemented yet")}async getScopeInfo(e){throw new Error("Not implemented yet")}async listVariablesInScope(e){throw new Error("Not implemented yet")}removeRawModule(e){throw new Error("Not implemented yet")}getTypeInfo(e,t){throw new Error("Not implemented yet")}getFormatter(e,t){throw new Error("Not implemented yet")}getInspectableAddress(e){throw new Error("Not implemented yet")}async getFunctionInfo(e){throw new Error("Not implemented yet")}async getInlinedFunctionRanges(e){throw new Error("Not implemented yet")}async getInlinedCalleesRanges(e){throw new Error("Not implemented yet")}async getMappedLines(e,t){throw new Error("Not implemented yet")}}});const G=new WeakMap,q=new WeakMap;class ${#n;#r;#b;#m;#O;constructor(e,r,s){this.#n=e,this.#r=s,this.#b=new d(r,"debugger:"+e.target().id(),o.Workspace.projectTypes.Debugger,"",!0),this.#m=[e.addEventListener(t.DebuggerModel.Events.GlobalObjectCleared,this.debuggerReset,this),e.addEventListener(t.DebuggerModel.Events.ParsedScriptSource,this.parsedScriptSource,this),e.addEventListener(t.DebuggerModel.Events.DiscardedAnonymousScriptSource,this.discardedScriptSource,this)],this.#O=new WeakMap}static scriptForUISourceCode(e){const t=G.get(e);return t?t.values().next().value:null}rawLocationToUILocation(e){const t=e.script();if(!t)return null;const o=q.get(t);if(!o)return null;const{lineNumber:r,columnNumber:s=0}=e;return o.uiLocation(r,s)}uiLocationToRawLocations(e,t,o){const r=this.#O.get(e);return r?[this.#n.createRawLocation(r,t,o)]:[]}parsedScriptSource(t){const o=t.data,r=e.ParsedURL.ParsedURL.extractName(o.sourceURL),s="debugger:///VM"+o.scriptId+(r?" "+r:""),i=this.#b.createUISourceCode(s,e.ResourceType.resourceTypes.Script);this.#O.set(i,o);const n=G.get(i);n?n.add(o):G.set(i,new Set([o])),q.set(o,i),this.#b.addUISourceCodeWithProvider(i,o,null,"text/javascript"),this.#r.updateLocations(o)}discardedScriptSource(e){const t=e.data,o=q.get(t);if(!o)return;q.delete(t),this.#O.delete(o);const r=G.get(o);r&&(r.delete(t),r.size||G.delete(o)),this.#b.removeUISourceCode(o.url())}debuggerReset(){this.#b.reset()}dispose(){e.EventTarget.removeEventListeners(this.#m),this.debuggerReset(),this.#b.dispose()}}var J=Object.freeze({__proto__:null,DefaultScriptMapping:$});class K{#W;#x;#H;constructor(e,t){this.#W=e,this.#x=t,this.#x.add(this),this.#H=null}async update(){this.#W&&(this.#H?await this.#H.then((()=>this.update())):(this.#H=this.#W(this),await this.#H,this.#H=null))}async uiLocation(){throw"Not implemented"}dispose(){this.#x.delete(this),this.#W=null}async isIgnoreListed(){throw"Not implemented"}}class Q{#_;constructor(){this.#_=new Set}add(e){this.#_.add(e)}delete(e){this.#_.delete(e)}disposeAll(){for(const e of this.#_)e.dispose()}}var X=Object.freeze({__proto__:null,LiveLocationWithPool:K,LiveLocationPool:Q});class Y{#a;#b;#m;#z;constructor(e,r,s){this.#a=r,this.#b=new d(s,"cssSourceMaps:"+e.id(),o.Workspace.projectTypes.Network,"",!1),v.setTargetForProject(this.#b,e),this.#z=new Map,this.#m=[this.#a.addEventListener(t.SourceMapManager.Events.SourceMapAttached,this.sourceMapAttached,this),this.#a.addEventListener(t.SourceMapManager.Events.SourceMapDetached,this.sourceMapDetached,this)]}sourceMapAttachedForTest(e){}async sourceMapAttached(e){const t=e.data.client,o=e.data.sourceMap,r=this.#b,s=this.#z;for(const e of o.sourceURLs()){let i=s.get(e);i||(i=new ee(r,e),s.set(e,i)),i.addSourceMap(o,t.frameId)}await le.instance().updateLocations(t),this.sourceMapAttachedForTest(o)}async sourceMapDetached(e){const t=e.data.client,o=e.data.sourceMap,r=this.#z;for(const e of o.sourceURLs()){const s=r.get(e);s&&(s.removeSourceMap(o,t.frameId),s.getUiSourceCode()||r.delete(e))}await le.instance().updateLocations(t)}rawLocationToUILocation(e){const t=e.header();if(!t)return null;const o=this.#a.sourceMapForClient(t);if(!o)return null;let{lineNumber:r,columnNumber:s}=e;o.mapsOrigin()&&t.isInline&&(r-=t.startLine,0===r&&(s-=t.startColumn));const i=o.findEntry(r,s);if(!i||!i.sourceURL)return null;const n=this.#b.uiSourceCodeForURL(i.sourceURL);return n?n.uiLocation(i.sourceLineNumber,i.sourceColumnNumber):null}uiLocationToRawLocations(e){const{uiSourceCode:o,lineNumber:r,columnNumber:s=0}=e,i=Z.get(o);if(!i)return[];const n=[];for(const e of i.getReferringSourceMaps()){const i=e.findReverseEntries(o.url(),r,s);for(const o of this.#a.clientsForSourceMap(e))n.push(...i.map((e=>new t.CSSModel.CSSLocation(o,e.lineNumber,e.columnNumber))))}return n}dispose(){e.EventTarget.removeEventListeners(this.#m),this.#b.dispose()}}const Z=new WeakMap;class ee{#b;#f;referringSourceMaps;#S;uiSourceCode;constructor(e,t){this.#b=e,this.#f=t,this.referringSourceMaps=[],this.uiSourceCode=null}recreateUISourceCodeIfNeeded(t){const r=this.referringSourceMaps[this.referringSourceMaps.length-1],s=r.sourceContentProvider(this.#f,e.ResourceType.resourceTypes.SourceMapStyleSheet),i=this.#b.createUISourceCode(this.#f,s.contentType());Z.set(i,this);const n=e.ResourceType.ResourceType.mimeFromURL(this.#f)||s.contentType().canonicalMimeType(),a=r.embeddedContentByURL(this.#f),c="string"==typeof a?new o.UISourceCode.UISourceCodeMetadata(null,a.length):null;this.uiSourceCode?(v.cloneInitialFrameAttribution(this.uiSourceCode,i),this.#b.removeFile(this.uiSourceCode.url())):v.setInitialFrameAttribution(i,t),this.uiSourceCode=i,this.#b.addUISourceCodeWithProvider(this.uiSourceCode,s,c,n)}addSourceMap(e,t){this.uiSourceCode&&v.addFrameAttribution(this.uiSourceCode,t),this.referringSourceMaps.push(e),this.recreateUISourceCodeIfNeeded(t)}removeSourceMap(e,t){const o=this.uiSourceCode;v.removeFrameAttribution(o,t);const r=this.referringSourceMaps.lastIndexOf(e);-1!==r&&this.referringSourceMaps.splice(r,1),this.referringSourceMaps.length?this.recreateUISourceCodeIfNeeded(t):(this.#b.removeFile(o.url()),this.uiSourceCode=null)}getReferringSourceMaps(){return this.referringSourceMaps}getUiSourceCode(){return this.uiSourceCode}}var te=Object.freeze({__proto__:null,SASSSourceMapping:Y});function oe(e){for(const o of t.TargetManager.TargetManager.instance().models(t.ResourceTreeModel.ResourceTreeModel)){const t=o.resourceForURL(e);if(t)return t}return null}function re(e,o,r){const s=e.model(t.ResourceTreeModel.ResourceTreeModel);if(!s)return null;const i=s.frameForId(o);return i?se(i.resourceForURL(r)):null}function se(e){return!e||"number"!=typeof e.contentSize()&&!e.lastModified()?null:new o.UISourceCode.UISourceCodeMetadata(e.lastModified(),e.contentSize())}var ie=Object.freeze({__proto__:null,resourceForURL:oe,displayNameForURL:function(s){if(!s)return"";const i=oe(s);if(i)return i.displayName;const n=o.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(s);if(n)return n.displayName();const a=t.TargetManager.TargetManager.instance().mainTarget(),c=a&&a.inspectedURL();if(!c)return r.StringUtilities.trimURL(s,"");const u=e.ParsedURL.ParsedURL.fromString(c);if(!u)return s;const d=u.lastPathComponent,l=c.indexOf(d);if(-1!==l&&l+d.length===c.length){const e=c.substring(0,l);if(s.startsWith(e))return s.substring(l)}const h=r.StringUtilities.trimURL(s,u.host);return"/"===h?u.host+"/":h},metadataForURL:re,resourceMetadata:se});const ne=new WeakMap;class ae{#V;#b;#G;#m;constructor(e,r){this.#V=e;const s=this.#V.target();this.#b=new d(r,"css:"+s.id(),o.Workspace.projectTypes.Network,"",!1),v.setTargetForProject(this.#b,s),this.#G=new Map,this.#m=[this.#V.addEventListener(t.CSSModel.Events.StyleSheetAdded,this.styleSheetAdded,this),this.#V.addEventListener(t.CSSModel.Events.StyleSheetRemoved,this.styleSheetRemoved,this),this.#V.addEventListener(t.CSSModel.Events.StyleSheetChanged,this.styleSheetChanged,this)]}rawLocationToUILocation(e){const t=e.header();if(!t||!this.acceptsHeader(t))return null;const o=this.#G.get(t.resourceURL());if(!o)return null;let r=e.lineNumber,s=e.columnNumber;if(t.isInline&&t.hasSourceURL){r-=t.lineNumberInSource(0);const e=t.columnNumberInSource(r,0);void 0===e?s=e:s-=e}return o.getUiSourceCode().uiLocation(r,s)}uiLocationToRawLocations(e){const o=ne.get(e.uiSourceCode);if(!o)return[];const r=[];for(const s of o.getHeaders()){let o=e.lineNumber,i=e.columnNumber;s.isInline&&s.hasSourceURL&&(i=s.columnNumberInSource(o,e.columnNumber||0),o=s.lineNumberInSource(o)),r.push(new t.CSSModel.CSSLocation(s,o,i))}return r}acceptsHeader(e){return!e.isConstructedByNew()&&(!(e.isInline&&!e.hasSourceURL&&"inspector"!==e.origin)&&!!e.resourceURL())}styleSheetAdded(e){const t=e.data;if(!this.acceptsHeader(t))return;const o=t.resourceURL();let r=this.#G.get(o);r?r.addHeader(t):(r=new ce(this.#V,this.#b,t),this.#G.set(o,r))}styleSheetRemoved(e){const t=e.data;if(!this.acceptsHeader(t))return;const o=t.resourceURL(),r=this.#G.get(o);r&&(1===r.getHeaders().size?(r.dispose(),this.#G.delete(o)):r.removeHeader(t))}styleSheetChanged(e){const t=this.#V.styleSheetHeaderForId(e.data.styleSheetId);if(!t||!this.acceptsHeader(t))return;const o=this.#G.get(t.resourceURL());o&&o.styleSheetChanged(t)}dispose(){for(const e of this.#G.values())e.dispose();this.#G.clear(),e.EventTarget.removeEventListeners(this.#m),this.#b.removeProject()}}class ce{#V;#b;headers;uiSourceCode;#m;#q;#$;#J;#K;constructor(t,r,s){this.#V=t,this.#b=r,this.headers=new Set([s]);const i=t.target(),n=s.resourceURL(),a=re(i,s.frameId,n);this.uiSourceCode=this.#b.createUISourceCode(n,s.contentType()),ne.set(this.uiSourceCode,this),v.setInitialFrameAttribution(this.uiSourceCode,s.frameId),this.#b.addUISourceCodeWithProvider(this.uiSourceCode,this,a,"text/css"),this.#m=[this.uiSourceCode.addEventListener(o.UISourceCode.Events.WorkingCopyChanged,this.workingCopyChanged,this),this.uiSourceCode.addEventListener(o.UISourceCode.Events.WorkingCopyCommitted,this.workingCopyCommitted,this)],this.#q=new e.Throttler.Throttler(ce.updateTimeout),this.#$=!1}addHeader(e){this.headers.add(e),v.addFrameAttribution(this.uiSourceCode,e.frameId)}removeHeader(e){this.headers.delete(e),v.removeFrameAttribution(this.uiSourceCode,e.frameId)}styleSheetChanged(e){if(console.assert(this.headers.has(e)),this.#K||!this.headers.has(e))return;const t=this.mirrorContent.bind(this,e,!0);this.#q.schedule(t,!1)}workingCopyCommitted(){if(this.#J)return;const e=this.mirrorContent.bind(this,this.uiSourceCode,!0);this.#q.schedule(e,!0)}workingCopyChanged(){if(this.#J)return;const e=this.mirrorContent.bind(this,this.uiSourceCode,!1);this.#q.schedule(e,!1)}async mirrorContent(e,t){if(this.#$)return void this.styleFileSyncedForTest();let o=null;if(e===this.uiSourceCode)o=this.uiSourceCode.workingCopy();else{o=(await e.requestContent()).content}if(null===o||this.#$)return void this.styleFileSyncedForTest();e!==this.uiSourceCode&&(this.#J=!0,this.uiSourceCode.addRevision(o),this.#J=!1),this.#K=!0;const r=[];for(const s of this.headers)s!==e&&r.push(this.#V.setStyleSheetText(s.id,o,t));await Promise.all(r),this.#K=!1,this.styleFileSyncedForTest()}styleFileSyncedForTest(){}dispose(){this.#$||(this.#$=!0,this.#b.removeFile(this.uiSourceCode.url()),e.EventTarget.removeEventListeners(this.#m))}contentURL(){return console.assert(this.headers.size>0),this.headers.values().next().value.originalContentProvider().contentURL()}contentType(){return console.assert(this.headers.size>0),this.headers.values().next().value.originalContentProvider().contentType()}contentEncoded(){return console.assert(this.headers.size>0),this.headers.values().next().value.originalContentProvider().contentEncoded()}requestContent(){return console.assert(this.headers.size>0),this.headers.values().next().value.originalContentProvider().requestContent()}searchInContent(e,t,o){return console.assert(this.headers.size>0),this.headers.values().next().value.originalContentProvider().searchInContent(e,t,o)}static updateTimeout=200;getHeaders(){return this.headers}getUiSourceCode(){return this.uiSourceCode}}var ue=Object.freeze({__proto__:null,StylesSourceMapping:ae,StyleFile:ce});let de;class le{#c;#Q;#X;#Y;constructor(e,o){this.#c=o,this.#Q=new Map,this.#X=[],e.observeModels(t.CSSModel.CSSModel,this),this.#Y=new Set}static instance(e={forceNew:null,targetManager:null,workspace:null}){const{forceNew:t,targetManager:o,workspace:r}=e;if(!de||t){if(!o||!r)throw new Error(`Unable to create CSSWorkspaceBinding: targetManager and workspace must be provided: ${(new Error).stack}`);de=new le(o,r)}return de}static removeInstance(){de=void 0}get modelToInfo(){return this.#Q}getCSSModelInfo(e){return this.#Q.get(e)}modelAdded(e){this.#Q.set(e,new he(e,this.#c))}modelRemoved(e){this.getCSSModelInfo(e).dispose(),this.#Q.delete(e)}async pendingLiveLocationChangesPromise(){await Promise.all(this.#Y)}recordLiveLocationChange(e){e.then((()=>{this.#Y.delete(e)})),this.#Y.add(e)}async updateLocations(e){const t=this.getCSSModelInfo(e.cssModel()).updateLocations(e);this.recordLiveLocationChange(t),await t}createLiveLocation(e,t,o){const r=this.getCSSModelInfo(e.cssModel()).createLiveLocation(e,t,o);return this.recordLiveLocationChange(r),r}propertyUILocation(e,o){const r=e.ownerStyle;if(!r||r.type!==t.CSSStyleDeclaration.Type.Regular||!r.styleSheetId)return null;const s=r.cssModel().styleSheetHeaderForId(r.styleSheetId);if(!s)return null;const i=o?e.nameRange():e.valueRange();if(!i)return null;const n=i.startLine,a=i.startColumn,c=new t.CSSModel.CSSLocation(s,s.lineNumberInSource(n),s.columnNumberInSource(n,a));return this.rawLocationToUILocation(c)}rawLocationToUILocation(e){for(let t=this.#X.length-1;t>=0;--t){const o=this.#X[t].rawLocationToUILocation(e);if(o)return o}return this.getCSSModelInfo(e.cssModel()).rawLocationToUILocation(e)}uiLocationToRawLocations(e){for(let t=this.#X.length-1;t>=0;--t){const o=this.#X[t].uiLocationToRawLocations(e);if(o.length)return o}const t=[];for(const o of this.#Q.values())t.push(...o.uiLocationToRawLocations(e));return t}addSourceMapping(e){this.#X.push(e)}}class he{#m;#Z;#ee;#_;#te;constructor(e,o){this.#m=[e.addEventListener(t.CSSModel.Events.StyleSheetAdded,(e=>{this.styleSheetAdded(e)}),this),e.addEventListener(t.CSSModel.Events.StyleSheetRemoved,(e=>{this.styleSheetRemoved(e)}),this)],this.#Z=new ae(e,o);const s=e.sourceMapManager();this.#ee=new Y(e.target(),s,o),this.#_=new r.MapUtilities.Multimap,this.#te=new r.MapUtilities.Multimap}get locations(){return this.#_}async createLiveLocation(e,t,o){const r=new pe(e,this,t,o),s=e.header();return s?(r.setHeader(s),this.#_.set(s,r),await r.update()):this.#te.set(e.url,r),r}disposeLocation(e){const t=e.header();t?this.#_.delete(t,e):this.#te.delete(e.url,e)}updateLocations(e){const t=[];for(const o of this.#_.get(e))t.push(o.update());return Promise.all(t)}async styleSheetAdded(e){const t=e.data;if(!t.sourceURL)return;const o=[];for(const e of this.#te.get(t.sourceURL))e.setHeader(t),this.#_.set(t,e),o.push(e.update());await Promise.all(o),this.#te.deleteAll(t.sourceURL)}async styleSheetRemoved(e){const t=e.data,o=[];for(const e of this.#_.get(t))e.setHeader(t),this.#te.set(e.url,e),o.push(e.update());await Promise.all(o),this.#_.deleteAll(t)}rawLocationToUILocation(e){let t=null;return t=t||this.#ee.rawLocationToUILocation(e),t=t||this.#Z.rawLocationToUILocation(e),t=t||Me.instance().cssLocationToUILocation(e),t}uiLocationToRawLocations(e){let t=this.#ee.uiLocationToRawLocations(e);return t.length?t:(t=this.#Z.uiLocationToRawLocations(e),t.length?t:Me.instance().uiLocationToCSSLocations(e))}dispose(){e.EventTarget.removeEventListeners(this.#m),this.#Z.dispose(),this.#ee.dispose()}}class pe extends K{url;#oe;#re;#se;headerInternal;constructor(e,t,o,r){super(o,r),this.url=e.url,this.#oe=e.lineNumber,this.#re=e.columnNumber,this.#se=t,this.headerInternal=null}header(){return this.headerInternal}setHeader(e){this.headerInternal=e}async uiLocation(){if(!this.headerInternal)return null;const e=new t.CSSModel.CSSLocation(this.headerInternal,this.#oe,this.#re);return le.instance().rawLocationToUILocation(e)}dispose(){super.dispose(),this.#se.disposeLocation(this)}async isIgnoreListed(){return!1}}var ge=Object.freeze({__proto__:null,CSSWorkspaceBinding:le,ModelInfo:he,LiveLocation:pe});let me;const be=new WeakMap,fe=new WeakMap,Se=new WeakSet;class Me{#c;#Q;constructor(e,o){this.#c=o,this.#Q=new Map,e.observeModels(t.ResourceTreeModel.ResourceTreeModel,this)}static instance(e={forceNew:null,targetManager:null,workspace:null}){const{forceNew:t,targetManager:o,workspace:r}=e;if(!me||t){if(!o||!r)throw new Error(`Unable to create ResourceMapping: targetManager and workspace must be provided: ${(new Error).stack}`);me=new Me(o,r)}return me}modelAdded(e){const t=new Le(this.#c,e);this.#Q.set(e,t)}modelRemoved(e){const t=this.#Q.get(e);t&&(t.dispose(),this.#Q.delete(e))}infoForTarget(e){const o=e.model(t.ResourceTreeModel.ResourceTreeModel);return o&&this.#Q.get(o)||null}cssLocationToUILocation(e){const t=e.header();if(!t)return null;const o=this.infoForTarget(e.cssModel().target());if(!o)return null;const r=o.getProject().uiSourceCodeForURL(e.url);if(!r)return null;const s=be.get(t)||i.TextRange.TextRange.createFromLocation(t.startLine,t.startColumn),n=e.lineNumber+s.startLine-t.startLine;let a=e.columnNumber;return e.lineNumber===t.startLine&&(a+=s.startColumn-t.startColumn),r.uiLocation(n,a)}jsLocationToUILocation(e){const t=e.script();if(!t)return null;const o=this.infoForTarget(e.debuggerModel.target());if(!o)return null;const r=o.getProject().uiSourceCodeForURL(t.sourceURL);if(!r)return null;const s=fe.get(t)||i.TextRange.TextRange.createFromLocation(t.lineOffset,t.columnOffset),n=e.lineNumber+s.startLine-t.lineOffset;let a=e.columnNumber;return e.lineNumber===t.lineOffset&&(a+=s.startColumn-t.columnOffset),r.uiLocation(n,a)}uiLocationToJSLocations(e,o,r){if(!Se.has(e))return[];const s=v.targetForUISourceCode(e);if(!s)return[];const i=s.model(t.DebuggerModel.DebuggerModel);if(!i)return[];const n=i.createRawLocationByURL(e.url(),o,r);if(n){const e=n.script();if(e&&e.containsLocation(o,r))return[n]}return[]}uiLocationToCSSLocations(e){if(!Se.has(e.uiSourceCode))return[];const o=v.targetForUISourceCode(e.uiSourceCode);if(!o)return[];const r=o.model(t.CSSModel.CSSModel);return r?r.createRawLocationsByURL(e.uiSourceCode.url(),e.lineNumber,e.columnNumber):[]}resetForTest(e){const o=e.model(t.ResourceTreeModel.ResourceTreeModel),r=o?this.#Q.get(o):null;r&&r.resetForTest()}}class Le{project;#z;#V;#m;constructor(e,r){const s=r.target();this.project=new d(e,"resources:"+s.id(),o.Workspace.projectTypes.Network,"",!1),v.setTargetForProject(this.project,s),this.#z=new Map;const i=s.model(t.CSSModel.CSSModel);console.assert(Boolean(i)),this.#V=i,this.#m=[r.addEventListener(t.ResourceTreeModel.Events.ResourceAdded,this.resourceAdded,this),r.addEventListener(t.ResourceTreeModel.Events.FrameWillNavigate,this.frameWillNavigate,this),r.addEventListener(t.ResourceTreeModel.Events.FrameDetached,this.frameDetached,this),this.#V.addEventListener(t.CSSModel.Events.StyleSheetChanged,(e=>{this.styleSheetChanged(e)}),this)]}async styleSheetChanged(e){const t=this.#V.styleSheetHeaderForId(e.data.styleSheetId);if(!t||!t.isInline||t.isInline&&t.isMutable)return;const o=this.#z.get(t.resourceURL());o&&await o.styleSheetChanged(t,e.data.edit||null)}acceptsResource(t){const o=t.resourceType();return(o===e.ResourceType.resourceTypes.Image||o===e.ResourceType.resourceTypes.Font||o===e.ResourceType.resourceTypes.Document||o===e.ResourceType.resourceTypes.Manifest)&&(!(o===e.ResourceType.resourceTypes.Image&&t.mimeType&&!t.mimeType.startsWith("image"))&&(!(o===e.ResourceType.resourceTypes.Font&&t.mimeType&&!t.mimeType.includes("font"))&&(o!==e.ResourceType.resourceTypes.Image&&o!==e.ResourceType.resourceTypes.Font||!t.contentURL().startsWith("data:"))))}resourceAdded(e){const t=e.data;if(!this.acceptsResource(t))return;let o=this.#z.get(t.url);o?o.addResource(t):(o=new ve(this.project,t),this.#z.set(t.url,o))}removeFrameResources(e){for(const t of e.resources()){if(!this.acceptsResource(t))continue;const e=this.#z.get(t.url);e&&(1===e.resources.size?(e.dispose(),this.#z.delete(t.url)):e.removeResource(t))}}frameWillNavigate(e){this.removeFrameResources(e.data)}frameDetached(e){this.removeFrameResources(e.data.frame)}resetForTest(){for(const e of this.#z.values())e.dispose();this.#z.clear()}dispose(){e.EventTarget.removeEventListeners(this.#m);for(const e of this.#z.values())e.dispose();this.#z.clear(),this.project.removeProject()}getProject(){return this.project}}class ve{resources;#b;#ie;#ne;constructor(e,t){this.resources=new Set([t]),this.#b=e,this.#ie=this.#b.createUISourceCode(t.url,t.contentType()),Se.add(this.#ie),t.frameId&&v.setInitialFrameAttribution(this.#ie,t.frameId),this.#b.addUISourceCodeWithProvider(this.#ie,this,se(t),t.mimeType),this.#ne=[]}inlineStyles(){const e=v.targetForUISourceCode(this.#ie),o=[];if(!e)return o;const r=e.model(t.CSSModel.CSSModel);if(r)for(const e of r.getStyleSheetIdsForURL(this.#ie.url())){const t=r.styleSheetHeaderForId(e);t&&o.push(t)}return o}inlineScripts(){const e=v.targetForUISourceCode(this.#ie);if(!e)return[];const o=e.model(t.DebuggerModel.DebuggerModel);return o?o.scriptsForSourceURL(this.#ie.url()):[]}async styleSheetChanged(e,t){if(this.#ne.push({stylesheet:e,edit:t}),this.#ne.length>1)return;const{content:o}=await this.#ie.requestContent();null!==o&&await this.innerStyleSheetChanged(o),this.#ne=[]}async innerStyleSheetChanged(e){const t=this.inlineScripts(),o=this.inlineStyles();let r=new i.Text.Text(e);for(const e of this.#ne){const s=e.edit;if(!s)continue;const n=e.stylesheet,a=be.get(n)||i.TextRange.TextRange.createFromLocation(n.startLine,n.startColumn),c=s.oldRange.relativeFrom(a.startLine,a.startColumn),u=s.newRange.relativeFrom(a.startLine,a.startColumn);r=new i.Text.Text(r.replaceRange(c,s.newText));const d=[];for(const e of t){const t=fe.get(e)||i.TextRange.TextRange.createFromLocation(e.lineOffset,e.columnOffset);t.follows(c)&&(fe.set(e,t.rebaseAfterTextEdit(c,u)),d.push(Ue.instance().updateLocations(e)))}for(const e of o){const t=be.get(e)||i.TextRange.TextRange.createFromLocation(e.startLine,e.startColumn);t.follows(c)&&(be.set(e,t.rebaseAfterTextEdit(c,u)),d.push(le.instance().updateLocations(e)))}await Promise.all(d)}this.#ie.addRevision(r.value())}addResource(e){this.resources.add(e),e.frameId&&v.addFrameAttribution(this.#ie,e.frameId)}removeResource(e){this.resources.delete(e),e.frameId&&v.removeFrameAttribution(this.#ie,e.frameId)}dispose(){this.#b.removeFile(this.#ie.url())}firstResource(){return console.assert(this.resources.size>0),this.resources.values().next().value}contentURL(){return this.firstResource().contentURL()}contentType(){return this.firstResource().contentType()}contentEncoded(){return this.firstResource().contentEncoded()}requestContent(){return this.firstResource().requestContent()}searchInContent(e,t,o){return this.firstResource().searchInContent(e,t,o)}}var Ce=Object.freeze({__proto__:null,ResourceMapping:Me});const Ie={liveEditFailed:"`LiveEdit` failed: {PH1}",liveEditCompileFailed:"`LiveEdit` compile failed: {PH1}"},we=n.i18n.registerUIStrings("models/bindings/ResourceScriptMapping.ts",Ie),ye=n.i18n.getLocalizedString.bind(void 0,we);class Re{debuggerModel;#c;debuggerWorkspaceBinding;#ae;#ce;#ue;#m;constructor(e,o,r){this.debuggerModel=e,this.#c=o,this.debuggerWorkspaceBinding=r,this.#ae=new Map,this.#ce=new Map,this.#ue=new Set;const s=e.runtimeModel();this.#m=[this.debuggerModel.addEventListener(t.DebuggerModel.Events.ParsedScriptSource,(e=>{this.parsedScriptSource(e)}),this),this.debuggerModel.addEventListener(t.DebuggerModel.Events.GlobalObjectCleared,this.globalObjectCleared,this),s.addEventListener(t.RuntimeModel.Events.ExecutionContextDestroyed,this.executionContextDestroyed,this)]}project(e){const t=(e.isContentScript()?"js:extensions:":"js::")+this.debuggerModel.target().id()+":"+e.frameId;let r=this.#ce.get(t);if(!r){const s=e.isContentScript()?o.Workspace.projectTypes.ContentScripts:o.Workspace.projectTypes.Network;r=new d(this.#c,t,s,"",!1),v.setTargetForProject(r,this.debuggerModel.target()),this.#ce.set(t,r)}return r}rawLocationToUILocation(e){const t=e.script();if(!t)return null;const o=this.project(t).uiSourceCodeForURL(t.sourceURL);if(!o)return null;const r=this.#ae.get(o);if(!r)return null;if(r.hasDivergedFromVM()&&!r.isMergingToVM()||r.isDivergingFromVM())return null;if(!r.hasScripts([t]))return null;const{lineNumber:s,columnNumber:i=0}=e;return o.uiLocation(s,i)}uiLocationToRawLocations(e,t,o){const r=this.#ae.get(e);if(!r)return[];const{script:s}=r;return s?[this.debuggerModel.createRawLocation(s,t,o)]:[]}acceptsScript(t){if(!t.sourceURL||t.isLiveEdit()||t.isInlineScript()&&!t.hasSourceURL)return!1;if(t.isContentScript()&&!t.hasSourceURL){if(!new e.ParsedURL.ParsedURL(t.sourceURL).isValid)return!1}return!0}async parsedScriptSource(e){const t=e.data;if(!this.acceptsScript(t))return;this.#ue.add(t);const o=t.originalContentProvider(),r=t.sourceURL,s=this.project(t),i=s.uiSourceCodeForURL(r);if(i){const e=this.#ae.get(i);e&&e.script&&await this.removeScript(e.script)}const n=s.createUISourceCode(r,o.contentType());v.setInitialFrameAttribution(n,t.frameId);const a=re(this.debuggerModel.target(),t.frameId,r),c=new ke(this,n,[t]);this.#ae.set(n,c);const u=t.isWasm()?"application/wasm":"text/javascript";s.addUISourceCodeWithProvider(n,o,a,u),await this.debuggerWorkspaceBinding.updateLocations(t)}scriptFile(e){return this.#ae.get(e)||null}async removeScript(e){if(!this.#ue.has(e))return;this.#ue.delete(e);const t=this.project(e),o=t.uiSourceCodeForURL(e.sourceURL),r=this.#ae.get(o);r&&r.dispose(),this.#ae.delete(o),t.removeFile(e.sourceURL),await this.debuggerWorkspaceBinding.updateLocations(e)}executionContextDestroyed(e){const t=e.data,o=this.debuggerModel.scriptsForExecutionContext(t);for(const e of o)this.removeScript(e)}globalObjectCleared(){const e=Array.from(this.#ue);for(const t of e)this.removeScript(t)}resetForTest(){const e=Array.from(this.#ue);for(const t of e)this.removeScript(t)}dispose(){e.EventTarget.removeEventListeners(this.#m);const t=Array.from(this.#ue);for(const e of t)this.removeScript(e);for(const e of this.#ce.values())e.removeProject();this.#ce.clear()}}class ke extends e.ObjectWrapper.ObjectWrapper{#de;#le;scriptInternal;#he;#pe;#ge;#me;constructor(e,t,r){super(),console.assert(r.length>0),this.#de=e,this.#le=t,this.#le.contentType().isScript()&&(this.scriptInternal=r[r.length-1]),this.#le.addEventListener(o.UISourceCode.Events.WorkingCopyChanged,this.workingCopyChanged,this),this.#le.addEventListener(o.UISourceCode.Events.WorkingCopyCommitted,this.workingCopyCommitted,this)}hasScripts(e){return Boolean(this.scriptInternal)&&this.scriptInternal===e[0]}isDiverged(){if(this.#le.isDirty())return!0;if(!this.scriptInternal)return!1;if(void 0===this.#he||null===this.#he)return!1;const e=this.#le.workingCopy();if(!e)return!1;if(!e.startsWith(this.#he.trimRight()))return!0;const o=this.#le.workingCopy().substr(this.#he.length);return Boolean(o.length)&&!o.match(t.Script.sourceURLRegex)}workingCopyChanged(){this.update()}workingCopyCommitted(){if(this.#le.project().canSetFileContent())return;if(!this.scriptInternal)return;const e=this.#de.debuggerModel,t=Ae.instance().breakpointLocationsForUISourceCode(this.#le).map((e=>e.breakpoint)),o=this.#le.workingCopy();e.setScriptSource(this.scriptInternal.scriptId,o,((e,r)=>{this.scriptSourceWasSet(o,t,e,r)}))}async scriptSourceWasSet(t,r,s,i){if(s||i||(this.#he=t),await this.update(),!s&&!i)return void await Promise.all(r.map((e=>e.refreshInDebugger())));if(!i)return void e.Console.Console.instance().addMessage(ye(Ie.liveEditFailed,{PH1:String(s)}),e.Console.MessageLevel.Warning);const n=ye(Ie.liveEditCompileFailed,{PH1:i.text});this.#le.addLineMessage(o.UISourceCode.Message.Level.Error,n,i.lineNumber,i.columnNumber)}async update(){this.isDiverged()&&!this.#ge?await this.divergeFromVM():!this.isDiverged()&&this.#ge&&await this.mergeToVM()}async divergeFromVM(){this.scriptInternal&&(this.#pe=!0,await this.#de.debuggerWorkspaceBinding.updateLocations(this.scriptInternal),this.#pe=void 0,this.#ge=!0,this.dispatchEventToListeners("DidDivergeFromVM"))}async mergeToVM(){this.scriptInternal&&(this.#ge=void 0,this.#me=!0,await this.#de.debuggerWorkspaceBinding.updateLocations(this.scriptInternal),this.#me=void 0,this.dispatchEventToListeners("DidMergeToVM"))}hasDivergedFromVM(){return Boolean(this.#ge)}isDivergingFromVM(){return Boolean(this.#pe)}isMergingToVM(){return Boolean(this.#me)}checkMapping(){this.scriptInternal&&void 0===this.#he?this.scriptInternal.requestContent().then((e=>{this.#he=e.content,this.update().then((()=>this.mappingCheckedForTest()))})):this.mappingCheckedForTest()}mappingCheckedForTest(){}dispose(){this.#le.removeEventListener(o.UISourceCode.Events.WorkingCopyChanged,this.workingCopyChanged,this),this.#le.removeEventListener(o.UISourceCode.Events.WorkingCopyCommitted,this.workingCopyCommitted,this)}addSourceMapURL(e){this.scriptInternal&&this.scriptInternal.debuggerModel.setSourceMapURL(this.scriptInternal,e)}hasSourceMapURL(){return void 0!==this.scriptInternal&&Boolean(this.scriptInternal.sourceMapURL)}get script(){return this.scriptInternal||null}get uiSourceCode(){return this.#le}}var Te=Object.freeze({__proto__:null,ResourceScriptMapping:Re,ResourceScriptFile:ke});let Fe;class Ue{workspace;#X;#A;#Y;pluginManager;constructor(e,o){this.workspace=o,this.#X=[],this.#A=new Map,e.addModelListener(t.DebuggerModel.DebuggerModel,t.DebuggerModel.Events.GlobalObjectCleared,this.globalObjectCleared,this),e.addModelListener(t.DebuggerModel.DebuggerModel,t.DebuggerModel.Events.DebuggerResumed,this.debuggerResumed,this),e.observeModels(t.DebuggerModel.DebuggerModel,this),this.#Y=new Set,this.pluginManager=s.Runtime.experiments.isEnabled("wasmDWARFDebugging")?new _(e,o,this):null}static instance(e={forceNew:null,targetManager:null,workspace:null}){const{forceNew:t,targetManager:o,workspace:r}=e;if(!Fe||t){if(!o||!r)throw new Error(`Unable to create DebuggerWorkspaceBinding: targetManager and workspace must be provided: ${(new Error).stack}`);Fe=new Ue(o,r)}return Fe}static removeInstance(){Fe=void 0}addSourceMapping(e){this.#X.push(e)}async computeAutoStepRanges(e,o){function r(e,t){const{start:o,end:r}=t;return o.scriptId===e.scriptId&&(!(e.lineNumberr.lineNumber)&&(!(e.lineNumber===o.lineNumber&&e.columnNumber=r.columnNumber)))}const s=o.location();if(!s)return[];const i=this.pluginManager;let n=[];if(i){if(e===t.DebuggerModel.StepMode.StepOut)return await i.getInlinedFunctionRanges(s);const o=await i.rawLocationToUILocation(s);if(o)return n=await i.uiLocationToRawLocationRanges(o.uiSourceCode,o.lineNumber,o.columnNumber)||[],n=n.filter((e=>r(s,e))),e===t.DebuggerModel.StepMode.StepOver&&(n=n.concat(await i.getInlinedCalleesRanges(s))),n}const a=this.#A.get(s.debuggerModel)?.compilerMapping;return a?(n=a.getLocationRangesForSameSourceLocation(s),n=n.filter((e=>r(s,e))),n):[]}modelAdded(e){this.#A.set(e,new Pe(e,this)),e.setComputeAutoStepRangesCallback(this.computeAutoStepRanges.bind(this))}modelRemoved(e){e.setComputeAutoStepRangesCallback(null);const t=this.#A.get(e);t&&(t.dispose(),this.#A.delete(e))}async pendingLiveLocationChangesPromise(){await Promise.all(this.#Y)}recordLiveLocationChange(e){e.then((()=>{this.#Y.delete(e)})),this.#Y.add(e)}async updateLocations(e){const t=this.#A.get(e.debuggerModel);if(t){const o=t.updateLocations(e);this.recordLiveLocationChange(o),await o}}async createLiveLocation(e,t,o){const r=this.#A.get(e.debuggerModel);if(!r)return null;const s=r.createLiveLocation(e,t,o);return this.recordLiveLocationChange(s),s}async createStackTraceTopFrameLiveLocation(e,t,o){console.assert(e.length>0);const r=Ne.createStackTraceTopFrameLocation(e,this,t,o);return this.recordLiveLocationChange(r),r}async createCallFrameLiveLocation(e,t,o){if(!e.script())return null;const r=e.debuggerModel,s=this.createLiveLocation(e,t,o);this.recordLiveLocationChange(s);const i=await s;return i?(this.registerCallFrameLiveLocation(r,i),i):null}async rawLocationToUILocation(e){for(const t of this.#X){const o=t.rawLocationToUILocation(e);if(o)return o}if(this.pluginManager){const t=await this.pluginManager.rawLocationToUILocation(e);if(t)return t}const t=this.#A.get(e.debuggerModel);return t?t.rawLocationToUILocation(e):null}uiSourceCodeForSourceMapSourceURL(e,t,o){const r=this.#A.get(e);return r?r.compilerMapping.uiSourceCodeForURL(t,o):null}async uiLocationToRawLocations(e,t,o){for(const r of this.#X){const s=r.uiLocationToRawLocations(e,t,o);if(s.length)return s}const r=await(this.pluginManager?.uiLocationToRawLocations(e,t,o));if(r)return r;for(const r of this.#A.values()){const s=r.uiLocationToRawLocations(e,t,o);if(s.length)return s}return[]}uiLocationToRawLocationsForUnformattedJavaScript(e,t,o){console.assert(e.contentType().isScript());const r=[];for(const s of this.#A.values())r.push(...s.uiLocationToRawLocations(e,t,o));return r}async normalizeUILocation(e){const t=await this.uiLocationToRawLocations(e.uiSourceCode,e.lineNumber,e.columnNumber);for(const e of t){const t=await this.rawLocationToUILocation(e);if(t)return t}return e}scriptFile(e,t){const o=this.#A.get(t);return o?o.getResourceMapping().scriptFile(e):null}scriptsForUISourceCode(e){const t=new Set;this.pluginManager&&this.pluginManager.scriptsForUISourceCode(e).forEach((e=>t.add(e)));for(const o of this.#A.values()){const r=o.getResourceMapping().scriptFile(e);r&&r.script&&t.add(r.script),o.compilerMapping.scriptsForUISourceCode(e).forEach((e=>t.add(e)))}return[...t]}scriptsForResource(e){const t=new Set;for(const o of this.#A.values()){const r=o.getResourceMapping().scriptFile(e);r&&r.script&&t.add(r.script)}return[...t]}supportsConditionalBreakpoints(e){if(!this.pluginManager)return!0;return this.pluginManager.scriptsForUISourceCode(e).every((e=>e.isJavaScript()))}sourceMapForScript(e){const t=this.#A.get(e.debuggerModel);return t?t.compilerMapping.sourceMapForScript(e):null}globalObjectCleared(e){this.reset(e.data)}reset(e){const t=this.#A.get(e);if(t){for(const e of t.callFrameLocations.values())this.removeLiveLocation(e);t.callFrameLocations.clear()}}resetForTest(e){const o=e.model(t.DebuggerModel.DebuggerModel),r=this.#A.get(o);r&&r.getResourceMapping().resetForTest()}registerCallFrameLiveLocation(e,t){const o=this.#A.get(e);if(o){o.callFrameLocations.add(t)}}removeLiveLocation(e){const t=this.#A.get(e.rawLocation.debuggerModel);t&&t.disposeLocation(e)}debuggerResumed(e){this.reset(e.data)}}class Pe{#n;#r;callFrameLocations;#be;resourceMapping;compilerMapping;#_;constructor(e,t){this.#n=e,this.#r=t,this.callFrameLocations=new Set;const o=t.workspace;this.#be=new $(e,o,t),this.resourceMapping=new Re(e,o,t),this.compilerMapping=new I(e,o,t),this.#_=new r.MapUtilities.Multimap,e.setBeforePausedCallback(this.beforePaused.bind(this))}async createLiveLocation(e,t,o){console.assert(""!==e.scriptId);const r=e.scriptId,s=new je(r,e,this.#r,t,o);return this.#_.set(r,s),await s.update(),s}disposeLocation(e){this.#_.delete(e.scriptId,e)}async updateLocations(e){const t=[];for(const o of this.#_.get(e.scriptId))t.push(o.update());await Promise.all(t)}rawLocationToUILocation(e){let t=this.compilerMapping.rawLocationToUILocation(e);return t=t||this.resourceMapping.rawLocationToUILocation(e),t=t||Me.instance().jsLocationToUILocation(e),t=t||this.#be.rawLocationToUILocation(e),t}uiLocationToRawLocations(e,t,o=0){let r=this.compilerMapping.uiLocationToRawLocations(e,t,o);return r=r.length?r:this.resourceMapping.uiLocationToRawLocations(e,t,o),r=r.length?r:Me.instance().uiLocationToJSLocations(e,t,o),r=r.length?r:this.#be.uiLocationToRawLocations(e,t,o),r}beforePaused(e){return Boolean(e.callFrames[0])}dispose(){this.#n.setBeforePausedCallback(null),this.compilerMapping.dispose(),this.resourceMapping.dispose(),this.#be.dispose()}getResourceMapping(){return this.resourceMapping}}class je extends K{scriptId;rawLocation;#fe;constructor(e,t,o,r,s){super(r,s),this.scriptId=e,this.rawLocation=t,this.#fe=o}async uiLocation(){const e=this.rawLocation;return this.#fe.rawLocationToUILocation(e)}dispose(){super.dispose(),this.#fe.removeLiveLocation(this)}async isIgnoreListed(){const e=await this.uiLocation();return!!e&&p.instance().isIgnoreListedUISourceCode(e.uiSourceCode)}}class Ne extends K{#Se;#Me;#_;constructor(e,t){super(e,t),this.#Se=!0,this.#Me=null,this.#_=null}static async createStackTraceTopFrameLocation(e,t,o,r){const s=new Ne(o,r),i=e.map((e=>t.createLiveLocation(e,s.scheduleUpdate.bind(s),r)));return s.#_=(await Promise.all(i)).filter((e=>Boolean(e))),await s.updateLocation(),s}async uiLocation(){return this.#Me?this.#Me.uiLocation():null}async isIgnoreListed(){return!!this.#Me&&this.#Me.isIgnoreListed()}dispose(){if(super.dispose(),this.#_)for(const e of this.#_)e.dispose();this.#_=null,this.#Me=null}async scheduleUpdate(){this.#Se||(this.#Se=!0,queueMicrotask((()=>{this.updateLocation()})))}async updateLocation(){if(this.#Se=!1,this.#_&&0!==this.#_.length){this.#Me=this.#_[0];for(const e of this.#_)if(!await e.isIgnoreListed()){this.#Me=e;break}this.update()}}}var Ee=Object.freeze({__proto__:null,DebuggerWorkspaceBinding:Ue,Location:je});let De;class Ae extends e.ObjectWrapper.ObjectWrapper{storage;#c;targetManager;debuggerWorkspaceBinding;#Le;#ve;constructor(e,t,r){super(),this.storage=new xe,this.#c=t,this.targetManager=e,this.debuggerWorkspaceBinding=r,this.#Le=new Map,this.#ve=new Map,this.#c.addEventListener(o.Workspace.Events.UISourceCodeAdded,this.uiSourceCodeAdded,this),this.#c.addEventListener(o.Workspace.Events.UISourceCodeRemoved,this.uiSourceCodeRemoved,this),this.#c.addEventListener(o.Workspace.Events.ProjectRemoved,this.projectRemoved,this)}static instance(e={forceNew:null,targetManager:null,workspace:null,debuggerWorkspaceBinding:null}){const{forceNew:t,targetManager:o,workspace:r,debuggerWorkspaceBinding:s}=e;if(!De||t){if(!o||!r||!s)throw new Error(`Unable to create settings: targetManager, workspace, and debuggerWorkspaceBinding must be provided: ${(new Error).stack}`);De=new Ae(o,r,s)}return De}static breakpointStorageId(e,t,o){return e?`${e}:${t}`+("number"==typeof o?`:${o}`:""):""}async copyBreakpoints(e,t){const o=this.storage.breakpointItems(e);for(const e of o)await this.setBreakpoint(t,e.lineNumber,e.columnNumber,e.condition,e.enabled)}restoreBreakpoints(e){const t=e.url();if(!t)return;this.storage.mute();const o=this.storage.breakpointItems(t);for(const t of o)this.innerSetBreakpoint(e,t.lineNumber,t.columnNumber,t.condition,t.enabled);this.storage.unmute()}uiSourceCodeAdded(e){const t=e.data;this.restoreBreakpoints(t)}uiSourceCodeRemoved(e){const t=e.data;this.removeUISourceCode(t)}projectRemoved(e){const t=e.data;for(const e of t.uiSourceCodes())this.removeUISourceCode(e)}removeUISourceCode(e){this.breakpointLocationsForUISourceCode(e).forEach((t=>t.breakpoint.removeUISourceCode(e)))}async setBreakpoint(t,r,s,i,n){let a=new o.UISourceCode.UILocation(t,r,s);const c=await this.debuggerWorkspaceBinding.normalizeUILocation(a);return c.id()!==a.id()&&(e.Revealer.reveal(c),a=c),this.innerSetBreakpoint(a.uiSourceCode,a.lineNumber,a.columnNumber,i,n)}innerSetBreakpoint(e,t,o,r,s){const i=Ae.breakpointStorageId(e.url(),t,o);let n=this.#ve.get(i);return n?(n.updateState(r,s),n.addUISourceCode(e),n.updateBreakpoint(),n):(n=new Oe(this,e,e.url(),t,o,r,s),this.#ve.set(i,n),n)}findBreakpoint(e){const t=this.#Le.get(e.uiSourceCode);return t&&t.get(e.id())||null}async possibleBreakpoints(e,t){const{pluginManager:r}=this.debuggerWorkspaceBinding;if(r){const o=await r.uiLocationToRawLocations(e,t.startLine);if(o){const e=[];for(const t of o){const o=await this.debuggerWorkspaceBinding.rawLocationToUILocation(t);o&&e.push(o)}return e}}const s=Ue.instance().uiLocationToRawLocations(e,t.startLine,t.startColumn),i=Ue.instance().uiLocationToRawLocations(e,t.endLine,t.endColumn),[n,a]=await Promise.all([s,i]),c=new Map;for(const e of a)c.set(e.debuggerModel,e);let u=null,d=null;for(const e of n){const t=c.get(e.debuggerModel);if(t){u=e,d=t;break}}return u&&d?u.debuggerModel.getPossibleBreakpoints(u,d,!1).then(async function(t){const r=t.map((e=>this.debuggerWorkspaceBinding.rawLocationToUILocation(e))),s=(await Promise.all(r)).filter((t=>t&&t.uiSourceCode===e));if(!s.length)return[];s.sort(o.UISourceCode.UILocation.comparator);let i=s[0];const n=[i];for(const e of s)e.id()!==i.id()&&(n.push(e),i=e);return n}.bind(this)):[]}breakpointLocationsForUISourceCode(e){const t=this.#Le.get(e);return t?Array.from(t.values()):[]}allBreakpointLocations(){const e=[];for(const t of this.#Le.values())e.push(...t.values());return e}removeBreakpoint(e,t){t&&this.storage.removeBreakpoint(e),this.#ve.delete(e.breakpointStorageId())}uiLocationAdded(e,t){let o=this.#Le.get(t.uiSourceCode);o||(o=new Map,this.#Le.set(t.uiSourceCode,o));const r={breakpoint:e,uiLocation:t};o.set(t.id(),r),this.dispatchEventToListeners(Be.BreakpointAdded,r)}uiLocationRemoved(e,t){const o=this.#Le.get(t.uiSourceCode);if(!o)return;o.get(t.id())&&(o.delete(t.id()),0===o.size&&this.#Le.delete(t.uiSourceCode),this.dispatchEventToListeners(Be.BreakpointRemoved,{breakpoint:e,uiLocation:t}))}}var Be;!function(e){e.BreakpointAdded="breakpoint-added",e.BreakpointRemoved="breakpoint-removed"}(Be||(Be={}));class Oe{breakpointManager;urlInternal;#Ce;#Ie;#we;uiSourceCodes;#ye;#Re;isRemoved;currentState;#ke;constructor(e,o,r,s,i,n,a){this.breakpointManager=e,this.urlInternal=r,this.#Ce=s,this.#Ie=i,this.#we=new Set,this.uiSourceCodes=new Set,this.currentState=null,this.#ke=new Map,this.updateState(n,a),this.addUISourceCode(o),this.breakpointManager.targetManager.observeModels(t.DebuggerModel.DebuggerModel,this)}async refreshInDebugger(){if(!this.isRemoved){const e=Array.from(this.#ke.values());await Promise.all(e.map((e=>e.refreshBreakpoint())))}}modelAdded(e){const t=this.breakpointManager.debuggerWorkspaceBinding;this.#ke.set(e,new We(e,this,t))}modelRemoved(e){const t=this.#ke.get(e);this.#ke.delete(e),t&&(t.cleanUpAfterDebuggerIsGone(),t.removeEventListeners())}addUISourceCode(e){this.uiSourceCodes.has(e)||(this.uiSourceCodes.add(e),this.bound()||this.breakpointManager.uiLocationAdded(this,this.defaultUILocation(e)))}clearUISourceCodes(){this.bound()||this.removeAllUnboundLocations(),this.uiSourceCodes.clear()}removeUISourceCode(e){if(this.uiSourceCodes.has(e)&&(this.uiSourceCodes.delete(e),this.bound()||this.breakpointManager.uiLocationRemoved(this,this.defaultUILocation(e))),this.bound()){for(const t of this.#we)t.uiSourceCode===e&&(this.#we.delete(t),this.breakpointManager.uiLocationRemoved(this,t));this.bound()||this.isRemoved||this.addAllUnboundLocations()}}url(){return this.urlInternal}lineNumber(){return this.#Ce}columnNumber(){return this.#Ie}uiLocationAdded(e){this.isRemoved||(this.bound()||this.removeAllUnboundLocations(),this.#we.add(e),this.breakpointManager.uiLocationAdded(this,e))}uiLocationRemoved(e){this.#we.has(e)&&(this.#we.delete(e),this.breakpointManager.uiLocationRemoved(this,e),this.bound()||this.isRemoved||this.addAllUnboundLocations())}enabled(){return this.#Re}bound(){return 0!==this.#we.size}hasBoundScript(){for(const e of this.uiSourceCodes)if(e.project().type()===o.Workspace.projectTypes.Network)return!0;return!1}setEnabled(e){this.updateState(this.#ye,e)}condition(){return this.#ye}setCondition(e){this.updateState(e,this.#Re)}updateState(e,t){this.#Re===t&&this.#ye===e||(this.#Re=t,this.#ye=e,this.breakpointManager.storage.updateBreakpoint(this),this.updateBreakpoint())}updateBreakpoint(){this.bound()||(this.removeAllUnboundLocations(),this.isRemoved||this.addAllUnboundLocations());for(const e of this.#ke.values())e.scheduleUpdateInDebugger()}remove(e){this.isRemoved=!0;const o=!e;for(const e of this.#ke.values())e.scheduleUpdateInDebugger(),e.removeEventListeners();this.breakpointManager.removeBreakpoint(this,o),this.breakpointManager.targetManager.unobserveModels(t.DebuggerModel.DebuggerModel,this),this.clearUISourceCodes()}breakpointStorageId(){return Ae.breakpointStorageId(this.urlInternal,this.#Ce,this.#Ie)}resetLocations(){this.clearUISourceCodes();for(const e of this.#ke.values())e.resetLocations()}defaultUILocation(e){return e.uiLocation(this.#Ce,this.#Ie)}removeAllUnboundLocations(){for(const e of this.uiSourceCodes)this.breakpointManager.uiLocationRemoved(this,this.defaultUILocation(e))}addAllUnboundLocations(){for(const e of this.uiSourceCodes)this.breakpointManager.uiLocationAdded(this,this.defaultUILocation(e))}getUiSourceCodes(){return this.uiSourceCodes}getIsRemoved(){return this.isRemoved}}class We{#n;#Te;#r;#Fe;#we;#Ue;#Pe;#je;#Ne;#Ee;constructor(e,o,r){this.#n=e,this.#Te=o,this.#r=r,this.#Fe=new Q,this.#we=new Map,this.#n.addEventListener(t.DebuggerModel.Events.DebuggerWasDisabled,this.cleanUpAfterDebuggerIsGone,this),this.#n.addEventListener(t.DebuggerModel.Events.DebuggerWasEnabled,this.scheduleUpdateInDebugger,this),this.#Ue=!1,this.#Pe=!1,this.#je=!1,this.#Ne=null,this.#Ee=[],this.#n.debuggerEnabled()&&this.scheduleUpdateInDebugger()}resetLocations(){for(const e of this.#we.values())this.#Te.uiLocationRemoved(e);this.#we.clear(),this.#Fe.disposeAll()}scheduleUpdateInDebugger(){this.#Pe?this.#Ue=!0:(this.#Pe=!0,this.updateInDebugger().then((()=>{this.#Pe=!1,this.#Ue&&(this.#Ue=!1,this.scheduleUpdateInDebugger())})))}scriptDiverged(){for(const e of this.#Te.getUiSourceCodes()){const t=this.#r.scriptFile(e,this.#n);if(t&&t.hasDivergedFromVM())return!0}return!1}async updateInDebugger(){if(this.#n.target().isDisposed())return void this.cleanUpAfterDebuggerIsGone();const e=this.#Te.lineNumber(),t=this.#Te.columnNumber(),o=this.#Te.condition();let r=null;if(!this.#Te.getIsRemoved()&&this.#Te.enabled()&&!this.scriptDiverged()){let s=[];for(const o of this.#Te.getUiSourceCodes()){if(s=(await Ue.instance().uiLocationToRawLocations(o,e,t)).filter((e=>e.debuggerModel===this.#n)),s.length)break}if(s.length&&s.every((e=>e.script()))){const e=s.map((e=>{const t=e.script();return{url:t.sourceURL,scriptId:t.scriptId,scriptHash:t.hash,lineNumber:e.lineNumber,columnNumber:e.columnNumber}}));r=new Oe.State(e,o)}else if(this.#Te.currentState)r=new Oe.State(this.#Te.currentState.positions,o);else{const s={url:this.#Te.url(),scriptId:"",scriptHash:"",lineNumber:e,columnNumber:t};r=new Oe.State([s],o)}}if(this.#Ee.length&&Oe.State.equals(r,this.#Ne))return;if(this.#Te.currentState=r,this.#Ee.length)return void await this.refreshBreakpoint();if(!r)return;const s=await Promise.all(r.positions.map((e=>e.url?this.#n.setBreakpointByURL(e.url,e.lineNumber,e.columnNumber,o):this.#n.setBreakpointInAnonymousScript(e.scriptId,e.scriptHash,e.lineNumber,e.columnNumber,o)))),i=[];let n=[],a=!1;for(const e of s)e.breakpointId?(i.push(e.breakpointId),n=n.concat(e.locations)):this.#n.debuggerEnabled()&&!this.#n.isReadyToPause()&&(a=!0);i.length||!a?(this.#Ne=r,this.#je?this.#je=!1:i.length?(this.#Ee=i,this.#Ee.forEach((e=>this.#n.addBreakpointListener(e,this.breakpointResolved,this))),await Promise.all(n.map((e=>this.addResolvedLocation(e))))):this.#Te.remove(!0)):this.scheduleUpdateInDebugger()}async refreshBreakpoint(){this.#Ee.length&&(this.resetLocations(),await Promise.all(this.#Ee.map((e=>this.#n.removeBreakpoint(e)))),this.didRemoveFromDebugger(),this.#Ne=null,this.scheduleUpdateInDebugger())}didRemoveFromDebugger(){this.#je?this.#je=!1:(this.resetLocations(),this.#Ee.forEach((e=>this.#n.removeBreakpointListener(e,this.breakpointResolved,this))),this.#Ee=[])}async breakpointResolved({data:e}){await this.addResolvedLocation(e)}async locationUpdated(e){const t=this.#we.get(e),o=await e.uiLocation();t&&this.#Te.uiLocationRemoved(t),o?(this.#we.set(e,o),this.#Te.uiLocationAdded(o)):this.#we.delete(e)}async addResolvedLocation(e){const t=await this.#r.rawLocationToUILocation(e);if(!t)return;const o=this.#Te.breakpointManager.findBreakpoint(t);o&&o.breakpoint!==this.#Te?this.#Te.remove(!1):await this.#r.createLiveLocation(e,this.locationUpdated.bind(this),this.#Fe)}cleanUpAfterDebuggerIsGone(){this.#Pe&&(this.#je=!0),this.resetLocations(),this.#Ne=null,this.#Ee.length&&this.didRemoveFromDebugger()}removeEventListeners(){this.#n.removeEventListener(t.DebuggerModel.Events.DebuggerWasDisabled,this.cleanUpAfterDebuggerIsGone,this),this.#n.removeEventListener(t.DebuggerModel.Events.DebuggerWasEnabled,this.scheduleUpdateInDebugger,this)}}!function(e){e.State=class{positions;condition;constructor(e,t){this.positions=e,this.condition=t}static equals(e,t){if(!e||!t)return!1;if(e.condition!==t.condition)return!1;if(e.positions.length!==t.positions.length)return!1;for(let o=0;ot.url===e))}updateBreakpoint(e){!this.#Be&&e.breakpointStorageId()&&(this.#Ae.set(e.breakpointStorageId(),new xe.Item(e)),this.save())}removeBreakpoint(e){this.#Be||(this.#Ae.delete(e.breakpointStorageId()),this.save())}save(){this.#De.set(Array.from(this.#Ae.values()))}}!function(e){e.Item=class{url;lineNumber;columnNumber;condition;enabled;constructor(e){this.url=e.url(),this.lineNumber=e.lineNumber(),this.columnNumber=e.columnNumber(),this.condition=e.condition(),this.enabled=e.enabled()}}}(xe||(xe={}));var He=Object.freeze({__proto__:null,BreakpointManager:Ae,get Events(){return Be},get Breakpoint(){return Oe},ModelBreakpoint:We});class _e{#Oe;#We;#xe;#He;#_e;#ze;#Ve;#Ge;#qe;#$e;#Je;#Ke;constructor(e,t,o){this.#Oe=e,this.#We=e.size,this.#xe=0,this.#_e=t,this.#ze=o,this.#Ve=new TextDecoder,this.#Ge=!1,this.#qe=null,this.#He=null}async read(e){if(this.#ze&&this.#ze(this),this.#Oe?.type.endsWith("gzip")){const e=this.decompressStream(this.#Oe.stream());this.#He=e.getReader()}else this.#Ke=new FileReader,this.#Ke.onload=this.onChunkLoaded.bind(this),this.#Ke.onerror=this.onError.bind(this);return this.#Je=e,this.loadChunk(),new Promise((e=>{this.#$e=e}))}cancel(){this.#Ge=!0}loadedSize(){return this.#xe}fileSize(){return this.#We}fileName(){return this.#Oe?this.#Oe.name:""}error(){return this.#qe}decompressStream(e){const t=new DecompressionStream("gzip");return e.pipeThrough(t)}onChunkLoaded(e){if(this.#Ge)return;if(e.target.readyState!==FileReader.DONE)return;if(!this.#Ke)return;const t=this.#Ke.result;this.#xe+=t.byteLength;const o=this.#xe===this.#We;this.decodeChunkBuffer(t,o)}async decodeChunkBuffer(e,t){if(!this.#Je)return;const o=this.#Ve.decode(e,{stream:!t});await this.#Je.write(o),this.#Ge||(this.#ze&&this.#ze(this),t?this.finishRead():this.loadChunk())}finishRead(){this.#Je&&(this.#Oe=null,this.#Ke=null,this.#Je.close(),this.#$e(!this.#qe))}async loadChunk(){if(this.#Je&&this.#Oe){if(this.#He){const{value:e,done:t}=await this.#He.read();if(t||!e)return this.finishRead();this.decodeChunkBuffer(e.buffer,!1)}if(this.#Ke){const e=this.#xe,t=Math.min(this.#We,e+this.#_e),o=this.#Oe.slice(e,t);this.#Ke.readAsArrayBuffer(o)}}}onError(e){const t=e.target;this.#qe=t.error,this.#$e(!1)}}var ze=Object.freeze({__proto__:null,ChunkedFileReader:_e,FileOutputStream:class{#Qe;#Xe;#Ye;constructor(){this.#Qe=[]}async open(e){this.#Ye=!1,this.#Qe=[],this.#Xe=e;const t=await o.FileManager.FileManager.instance().save(this.#Xe,"",!0);return t&&o.FileManager.FileManager.instance().addEventListener(o.FileManager.Events.AppendedToURL,this.onAppendDone,this),Boolean(t)}write(e){return new Promise((t=>{this.#Qe.push(t),o.FileManager.FileManager.instance().append(this.#Xe,e)}))}async close(){this.#Ye=!0,this.#Qe.length||(o.FileManager.FileManager.instance().removeEventListener(o.FileManager.Events.AppendedToURL,this.onAppendDone,this),o.FileManager.FileManager.instance().close(this.#Xe))}onAppendDone(e){if(e.data!==this.#Xe)return;const t=this.#Qe.shift();t&&t(),this.#Qe.length||this.#Ye&&(o.FileManager.FileManager.instance().removeEventListener(o.FileManager.Events.AppendedToURL,this.onAppendDone,this),o.FileManager.FileManager.instance().close(this.#Xe))}}});const Ve=new WeakMap;class Ge{#n;#Ze;#et;#x;constructor(e){this.#n=e,this.#Ze=new Map,this.#et=[],e.addEventListener(t.DebuggerModel.Events.ParsedScriptSource,(e=>{queueMicrotask((()=>{this.parsedScriptSource(e)}))})),e.addEventListener(t.DebuggerModel.Events.GlobalObjectCleared,this.debuggerReset,this),this.#x=new Q}consoleMessageAdded(e){const t=this.rawLocation(e);t?this.addConsoleMessageToScript(e,t):this.addPendingConsoleMessage(e)}rawLocation(e){if(e.scriptId)return this.#n.createRawLocationByScriptId(e.scriptId,e.line,e.column);const t=e.stackTrace&&e.stackTrace.callFrames?e.stackTrace.callFrames[0]:null;return t?this.#n.createRawLocationByScriptId(t.scriptId,t.lineNumber,t.columnNumber):e.url?this.#n.createRawLocationByURL(e.url,e.line,e.column):null}addConsoleMessageToScript(e,t){this.#et.push(new qe(e,t,this.#x))}addPendingConsoleMessage(e){if(!e.url)return;const t=this.#Ze.get(e.url);t?t.push(e):this.#Ze.set(e.url,[e])}parsedScriptSource(e){const t=e.data,o=this.#Ze.get(t.sourceURL);if(!o)return;const r=[];for(const e of o){const o=this.rawLocation(e);o&&t.scriptId===o.scriptId?this.addConsoleMessageToScript(e,o):r.push(e)}r.length?this.#Ze.set(t.sourceURL,r):this.#Ze.delete(t.sourceURL)}consoleCleared(){this.#Ze=new Map,this.debuggerReset()}debuggerReset(){for(const e of this.#et)e.dispose();this.#et=[],this.#x.disposeAll()}}class qe extends o.UISourceCode.Message{#ie;constructor(e,t,r){super("error"===e.level?o.UISourceCode.Message.Level.Error:o.UISourceCode.Message.Level.Warning,e.messageText),Ue.instance().createLiveLocation(t,this.updateLocation.bind(this),r)}async updateLocation(e){this.#ie&&this.#ie.removeMessage(this);const t=await e.uiLocation();t&&(this.range=i.TextRange.TextRange.createFromLocation(t.lineNumber,t.columnNumber||0),this.#ie=t.uiSourceCode,this.#ie.addMessage(this))}dispose(){this.#ie&&this.#ie.removeMessage(this)}}var $e=Object.freeze({__proto__:null,PresentationConsoleMessageManager:class{constructor(){t.TargetManager.TargetManager.instance().observeModels(t.DebuggerModel.DebuggerModel,this),t.ConsoleModel.ConsoleModel.instance().addEventListener(t.ConsoleModel.Events.ConsoleCleared,this.consoleCleared,this),t.ConsoleModel.ConsoleModel.instance().addEventListener(t.ConsoleModel.Events.MessageAdded,(e=>this.consoleMessageAdded(e.data))),t.ConsoleModel.ConsoleModel.instance().messages().forEach(this.consoleMessageAdded,this)}modelAdded(e){Ve.set(e,new Ge(e))}modelRemoved(e){const t=Ve.get(e);t&&t.consoleCleared()}consoleMessageAdded(e){const t=e.runtimeModel();if(!e.isErrorOrWarning()||!e.runtimeModel()||"violation"===e.source||!t)return;const o=Ve.get(t.debuggerModel());o&&o.consoleMessageAdded(e)}consoleCleared(){for(const e of t.TargetManager.TargetManager.instance().models(t.DebuggerModel.DebuggerModel)){const t=Ve.get(e);t&&t.consoleCleared()}}},PresentationConsoleMessageHelper:Ge,PresentationConsoleMessage:qe});class Je{#tt;constructor(){this.#tt=null}write(e){this.#tt&&e.unshift(this.#tt),this.#tt=new Blob(e,{type:"text/plain"})}read(){return this.readRange()}size(){return this.#tt?this.#tt.size:0}async readRange(t,o){if(!this.#tt)return e.Console.Console.instance().error("Attempt to read a temp file that was never written"),"";const r="number"==typeof t||"number"==typeof o?this.#tt.slice(t,o):this.#tt,s=new FileReader;try{await new Promise(((e,t)=>{s.onloadend=e,s.onerror=t,s.readAsText(r)}))}catch(t){e.Console.Console.instance().error("Failed to read from temp file: "+t.message)}return s.result}async copyToOutputStream(e,t){if(!this.#tt)return e.close(),null;const o=new _e(this.#tt,1e7,t);return o.read(e).then((e=>e?null:o.error()))}remove(){this.#tt=null}}var Ke=Object.freeze({__proto__:null,TempFile:Je,TempFileBackingStorage:class{#Oe;#ot;#rt;constructor(){this.#Oe=null,this.reset()}appendString(e){this.#ot.push(e),this.#rt+=e.length;this.#rt>10485760&&this.flush()}appendAccessibleString(e){if(this.flush(),!this.#Oe)return async()=>null;const t=this.#Oe.size();return this.#ot.push(e),this.flush(),this.#Oe.readRange.bind(this.#Oe,t,this.#Oe.size())}flush(){this.#ot.length&&(this.#Oe||(this.#Oe=new Je),this.#rt=0,this.#Oe.write(this.#ot.splice(0)))}finishWriting(){this.flush()}reset(){this.#Oe&&this.#Oe.remove(),this.#Oe=null,this.#ot=[],this.#rt=0}writeToStream(e){return this.#Oe?this.#Oe.copyToOutputStream(e):Promise.resolve(null)}}});export{He as BreakpointManager,ge as CSSWorkspaceBinding,R as CompilerScriptMapping,l as ContentProviderBasedProject,V as DebuggerLanguagePlugins,Ee as DebuggerWorkspaceBinding,J as DefaultScriptMapping,ze as FileUtils,m as IgnoreListManager,X as LiveLocation,C as NetworkProject,$e as PresentationConsoleMessageHelper,Ce as ResourceMapping,Te as ResourceScriptMapping,ie as ResourceUtils,te as SASSSourceMapping,ue as StylesSourceMapping,Ke as TempFile}; diff --git a/chii/models/emulation/emulation.js b/chii/models/emulation/emulation.js new file mode 100644 index 00000000..5c6d67b9 --- /dev/null +++ b/chii/models/emulation/emulation.js @@ -0,0 +1 @@ +import*as e from"../../core/common/common.js";import*as t from"../../core/host/host.js";import*as i from"../../core/i18n/i18n.js";import*as o from"../../core/root/root.js";import*as a from"../../core/sdk/sdk.js";import*as n from"../../ui/legacy/legacy.js";const l={laptopWithTouch:"Laptop with touch",laptopWithHiDPIScreen:"Laptop with HiDPI screen",laptopWithMDPIScreen:"Laptop with MDPI screen"},r=i.i18n.registerUIStrings("models/emulation/EmulatedDevices.ts",l),h=i.i18n.getLazilyComputedLocalizedString.bind(void 0,r);function s(e){return e.replace(/@url\(([^\)]*?)\)/g,((e,t)=>new URL(`../../emulated_devices/${t}`,import.meta.url).toString()))}class d{title;type;order;vertical;horizontal;deviceScaleFactor;capabilities;userAgent;userAgentMetadata;modes;isDualScreen;verticalSpanned;horizontalSpanned;#e;#t;constructor(){this.title="",this.type=m.Unknown,this.vertical={width:0,height:0,outlineInsets:null,outlineImage:null,hinge:null},this.horizontal={width:0,height:0,outlineInsets:null,outlineImage:null,hinge:null},this.deviceScaleFactor=1,this.capabilities=[b.Touch,b.Mobile],this.userAgent="",this.userAgentMetadata=null,this.modes=[],this.isDualScreen=!1,this.verticalSpanned={width:0,height:0,outlineInsets:null,outlineImage:null,hinge:null},this.horizontalSpanned={width:0,height:0,outlineInsets:null,outlineImage:null,hinge:null},this.#e=f.Default,this.#t=!0}static fromJSONV1(e){try{function t(e,t,i,o){if("object"!=typeof e||null===e||!e.hasOwnProperty(t)){if(void 0!==o)return o;throw new Error("Emulated device is missing required property '"+t+"'")}const a=e[t];if(typeof a!==i||null===a)throw new Error("Emulated device property '"+t+"' has wrong type '"+typeof a+"'");return a}function i(e,i){const o=t(e,i,"number");if(o!==Math.abs(o))throw new Error("Emulated device value '"+i+"' must be integer");return o}function o(e){return new k(i(e,"left"),i(e,"top"),i(e,"right"),i(e,"bottom"))}function n(e){const o={};if(o.r=i(e,"r"),o.r<0||o.r>255)throw new Error("color has wrong r value: "+o.r);if(o.g=i(e,"g"),o.g<0||o.g>255)throw new Error("color has wrong g value: "+o.g);if(o.b=i(e,"b"),o.b<0||o.b>255)throw new Error("color has wrong b value: "+o.b);if(o.a=t(e,"a","number"),o.a<0||o.a>1)throw new Error("color has wrong a value: "+o.a);return o}function l(e){const t={};if(t.width=i(e,"width"),t.width<0||t.width>N)throw new Error("Emulated device has wrong hinge width: "+t.width);if(t.height=i(e,"height"),t.height<0||t.height>N)throw new Error("Emulated device has wrong hinge height: "+t.height);if(t.x=i(e,"x"),t.x<0||t.x>N)throw new Error("Emulated device has wrong x offset: "+t.height);if(t.y=i(e,"y"),t.x<0||t.x>N)throw new Error("Emulated device has wrong y offset: "+t.height);return e.contentColor&&(t.contentColor=n(e.contentColor)),e.outlineColor&&(t.outlineColor=n(e.outlineColor)),t}function r(e){const a={};if(a.width=i(e,"width"),a.width<0||a.width>N||a.widthN||a.height100)throw new Error("Emulated device has wrong deviceScaleFactor: "+h.deviceScaleFactor);if(h.vertical=r(t(e.screen,"vertical","object")),h.horizontal=r(t(e.screen,"horizontal","object")),h.isDualScreen=t(e,"dual-screen","boolean",!1),h.isDualScreen&&(h.verticalSpanned=r(t(e.screen,"vertical-spanned","object",null)),h.horizontalSpanned=r(t(e.screen,"horizontal-spanned","object",null))),h.isDualScreen&&(!h.verticalSpanned||!h.horizontalSpanned))throw new Error("Emulated device '"+h.title+"'has dual screen without spanned orientations");const b=t(e,"modes","object",[{title:"default",orientation:"vertical"},{title:"default",orientation:"horizontal"}]);if(!Array.isArray(b))throw new Error("Emulated device modes must be an array");h.modes=[];for(let e=0;ea.height||i.insets.left+i.insets.right>a.width)throw new Error("Emulated device mode '"+i.title+"'has wrong mode insets");i.image=t(b[e],"image","string",null),h.modes.push(i)}return h.#t=t(e,"show-by-default","boolean",void 0),h.#e=t(e,"show","string",f.Default),h}catch(e){return null}}static deviceComparator(e,t){const i=e.order||0,o=t.order||0;return i>o?1:o>i||e.titlet.title?1:0}modesForOrientation(e){const t=[];for(let i=0;ie.push(t.toJSON()))),this.#a.set(e),this.dispatchEventToListeners("CustomDevicesUpdated")}saveStandardDevices(){const e=[];this.#o.forEach((t=>e.push(t.toJSON()))),this.#i.set(e),this.dispatchEventToListeners("StandardDevicesUpdated")}copyShowValues(e,t){const i=new Map;for(const t of e)i.set(t.title,t);for(const e of t){const t=i.get(e.title);t&&e.copyShowFrom(t)}}}const w=[{order:10,"show-by-default":!0,title:"iPhone SE",screen:{horizontal:{width:667,height:375},"device-pixel-ratio":2,vertical:{width:375,height:667}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",type:"phone"},{order:12,"show-by-default":!0,title:"iPhone XR",screen:{horizontal:{width:896,height:414},"device-pixel-ratio":2,vertical:{width:414,height:896}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",type:"phone"},{order:14,"show-by-default":!0,title:"iPhone 12 Pro",screen:{horizontal:{width:844,height:390},"device-pixel-ratio":3,vertical:{width:390,height:844}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",type:"phone"},{order:16,"show-by-default":!1,title:"Pixel 3 XL",screen:{horizontal:{width:786,height:393},"device-pixel-ratio":2.75,vertical:{width:393,height:786}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 11; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.181 Mobile Safari/537.36",type:"phone"},{order:18,"show-by-default":!0,title:"Pixel 5",screen:{horizontal:{width:851,height:393},"device-pixel-ratio":2.75,vertical:{width:393,height:851}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36",type:"phone"},{order:20,"show-by-default":!0,title:"Samsung Galaxy S8+",screen:{horizontal:{width:740,height:360},"device-pixel-ratio":4,vertical:{width:360,height:740}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36",type:"phone"},{order:24,"show-by-default":!0,title:"Samsung Galaxy S20 Ultra",screen:{horizontal:{width:915,height:412},"device-pixel-ratio":3.5,vertical:{width:412,height:915}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36",type:"phone"},{order:26,"show-by-default":!0,title:"iPad Air",screen:{horizontal:{width:1180,height:820},"device-pixel-ratio":2,vertical:{width:820,height:1180}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1",type:"tablet"},{order:28,"show-by-default":!0,title:"iPad Mini",screen:{horizontal:{width:1024,height:768},"device-pixel-ratio":2,vertical:{width:768,height:1024}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1",type:"tablet"},{order:30,"show-by-default":!0,title:"Surface Pro 7",screen:{horizontal:{width:1368,height:912},"device-pixel-ratio":2,vertical:{width:912,height:1368}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1",type:"tablet"},{order:32,"show-by-default":!0,"dual-screen":!0,title:"Surface Duo",screen:{horizontal:{width:720,height:540},"device-pixel-ratio":2.5,vertical:{width:540,height:720},"vertical-spanned":{width:1114,height:720,hinge:{width:34,height:720,x:540,y:0,contentColor:{r:38,g:38,b:38,a:1}}},"horizontal-spanned":{width:720,height:1114,hinge:{width:720,height:34,x:0,y:540,contentColor:{r:38,g:38,b:38,a:1}}}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36",type:"phone",modes:[{title:"default",orientation:"vertical",insets:{left:0,top:0,right:0,bottom:0}},{title:"default",orientation:"horizontal",insets:{left:0,top:0,right:0,bottom:0}},{title:"spanned",orientation:"vertical-spanned",insets:{left:0,top:0,right:0,bottom:0}},{title:"spanned",orientation:"horizontal-spanned",insets:{left:0,top:0,right:0,bottom:0}}]},{order:34,"show-by-default":!0,"dual-screen":!0,title:"Galaxy Fold",screen:{horizontal:{width:653,height:280},"device-pixel-ratio":3,vertical:{width:280,height:653},"vertical-spanned":{width:717,height:512},"horizontal-spanned":{width:512,height:717}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36",type:"phone",modes:[{title:"default",orientation:"vertical",insets:{left:0,top:0,right:0,bottom:0}},{title:"default",orientation:"horizontal",insets:{left:0,top:0,right:0,bottom:0}},{title:"spanned",orientation:"vertical-spanned",insets:{left:0,top:0,right:0,bottom:0}},{title:"spanned",orientation:"horizontal-spanned",insets:{left:0,top:0,right:0,bottom:0}}]},{order:36,"show-by-default":!0,title:"Samsung Galaxy A51/71",screen:{horizontal:{width:914,height:412},"device-pixel-ratio":2.625,vertical:{width:412,height:914}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36",type:"phone"},{order:52,"show-by-default":!0,title:"Nest Hub Max",screen:{horizontal:{outline:{image:"@url(optimized/google-nest-hub-max-horizontal.avif)",insets:{left:92,top:96,right:91,bottom:248}},width:1280,height:800},"device-pixel-ratio":2,vertical:{width:1280,height:800}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.188 Safari/537.36 CrKey/1.54.250320",type:"tablet",modes:[{title:"default",orientation:"horizontal"}]},{order:50,"show-by-default":!0,title:"Nest Hub",screen:{horizontal:{outline:{image:"@url(optimized/google-nest-hub-horizontal.avif)",insets:{left:82,top:74,right:83,bottom:222}},width:1024,height:600},"device-pixel-ratio":2,vertical:{width:1024,height:600}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.109 Safari/537.36 CrKey/1.54.248666",type:"tablet",modes:[{title:"default",orientation:"horizontal"}]},{"show-by-default":!1,title:"iPhone 4",screen:{horizontal:{width:480,height:320},"device-pixel-ratio":2,vertical:{width:320,height:480}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53",type:"phone"},{order:130,"show-by-default":!1,title:"iPhone 5/SE",screen:{horizontal:{outline:{image:"@url(optimized/iPhone5-landscape.avif)",insets:{left:115,top:25,right:115,bottom:28}},width:568,height:320},"device-pixel-ratio":2,vertical:{outline:{image:"@url(optimized/iPhone5-portrait.avif)",insets:{left:29,top:105,right:25,bottom:111}},width:320,height:568}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",type:"phone"},{order:131,"show-by-default":!1,title:"iPhone 6/7/8",screen:{horizontal:{outline:{image:"@url(optimized/iPhone6-landscape.avif)",insets:{left:106,top:28,right:106,bottom:28}},width:667,height:375},"device-pixel-ratio":2,vertical:{outline:{image:"@url(optimized/iPhone6-portrait.avif)",insets:{left:28,top:105,right:28,bottom:105}},width:375,height:667}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",type:"phone"},{order:132,"show-by-default":!1,title:"iPhone 6/7/8 Plus",screen:{horizontal:{outline:{image:"@url(optimized/iPhone6Plus-landscape.avif)",insets:{left:109,top:29,right:109,bottom:27}},width:736,height:414},"device-pixel-ratio":3,vertical:{outline:{image:"@url(optimized/iPhone6Plus-portrait.avif)",insets:{left:26,top:107,right:30,bottom:111}},width:414,height:736}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",type:"phone"},{order:133,"show-by-default":!1,title:"iPhone X",screen:{horizontal:{width:812,height:375},"device-pixel-ratio":3,vertical:{width:375,height:812}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",type:"phone"},{"show-by-default":!1,title:"BlackBerry Z30",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":2,vertical:{width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+",type:"phone"},{"show-by-default":!1,title:"Nexus 4",screen:{horizontal:{width:640,height:384},"device-pixel-ratio":2,vertical:{width:384,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"4.4.2",architecture:"",model:"Nexus 4",mobile:!0},type:"phone"},{title:"Nexus 5",type:"phone","user-agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"6.0",architecture:"",model:"Nexus 5",mobile:!0},capabilities:["touch","mobile"],"show-by-default":!1,screen:{"device-pixel-ratio":3,vertical:{width:360,height:640},horizontal:{width:640,height:360}},modes:[{title:"default",orientation:"vertical",insets:{left:0,top:25,right:0,bottom:48},image:"@url(optimized/google-nexus-5-vertical-default-1x.avif) 1x, @url(optimized/google-nexus-5-vertical-default-2x.avif) 2x"},{title:"navigation bar",orientation:"vertical",insets:{left:0,top:80,right:0,bottom:48},image:"@url(optimized/google-nexus-5-vertical-navigation-1x.avif) 1x, @url(optimized/google-nexus-5-vertical-navigation-2x.avif) 2x"},{title:"keyboard",orientation:"vertical",insets:{left:0,top:80,right:0,bottom:312},image:"@url(optimized/google-nexus-5-vertical-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5-vertical-keyboard-2x.avif) 2x"},{title:"default",orientation:"horizontal",insets:{left:0,top:25,right:42,bottom:0},image:"@url(optimized/google-nexus-5-horizontal-default-1x.avif) 1x, @url(optimized/google-nexus-5-horizontal-default-2x.avif) 2x"},{title:"navigation bar",orientation:"horizontal",insets:{left:0,top:80,right:42,bottom:0},image:"@url(optimized/google-nexus-5-horizontal-navigation-1x.avif) 1x, @url(optimized/google-nexus-5-horizontal-navigation-2x.avif) 2x"},{title:"keyboard",orientation:"horizontal",insets:{left:0,top:80,right:42,bottom:202},image:"@url(optimized/google-nexus-5-horizontal-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5-horizontal-keyboard-2x.avif) 2x"}]},{title:"Nexus 5X",type:"phone","user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"8.0.0",architecture:"",model:"Nexus 5X",mobile:!0},capabilities:["touch","mobile"],"show-by-default":!1,screen:{"device-pixel-ratio":2.625,vertical:{outline:{image:"@url(optimized/Nexus5X-portrait.avif)",insets:{left:18,top:88,right:22,bottom:98}},width:412,height:732},horizontal:{outline:{image:"@url(optimized/Nexus5X-landscape.avif)",insets:{left:88,top:21,right:98,bottom:19}},width:732,height:412}},modes:[{title:"default",orientation:"vertical",insets:{left:0,top:24,right:0,bottom:48},image:"@url(optimized/google-nexus-5x-vertical-default-1x.avif) 1x, @url(optimized/google-nexus-5x-vertical-default-2x.avif) 2x"},{title:"navigation bar",orientation:"vertical",insets:{left:0,top:80,right:0,bottom:48},image:"@url(optimized/google-nexus-5x-vertical-navigation-1x.avif) 1x, @url(optimized/google-nexus-5x-vertical-navigation-2x.avif) 2x"},{title:"keyboard",orientation:"vertical",insets:{left:0,top:80,right:0,bottom:342},image:"@url(optimized/google-nexus-5x-vertical-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5x-vertical-keyboard-2x.avif) 2x"},{title:"default",orientation:"horizontal",insets:{left:0,top:24,right:48,bottom:0},image:"@url(optimized/google-nexus-5x-horizontal-default-1x.avif) 1x, @url(optimized/google-nexus-5x-horizontal-default-2x.avif) 2x"},{title:"navigation bar",orientation:"horizontal",insets:{left:0,top:80,right:48,bottom:0},image:"@url(optimized/google-nexus-5x-horizontal-navigation-1x.avif) 1x, @url(optimized/google-nexus-5x-horizontal-navigation-2x.avif) 2x"},{title:"keyboard",orientation:"horizontal",insets:{left:0,top:80,right:48,bottom:222},image:"@url(optimized/google-nexus-5x-horizontal-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5x-horizontal-keyboard-2x.avif) 2x"}]},{"show-by-default":!1,title:"Nexus 6",screen:{horizontal:{width:732,height:412},"device-pixel-ratio":3.5,vertical:{width:412,height:732}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"7.1.1",architecture:"",model:"Nexus 6",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Nexus 6P",screen:{horizontal:{outline:{image:"@url(optimized/Nexus6P-landscape.avif)",insets:{left:94,top:17,right:88,bottom:17}},width:732,height:412},"device-pixel-ratio":3.5,vertical:{outline:{image:"@url(optimized/Nexus6P-portrait.avif)",insets:{left:16,top:94,right:16,bottom:88}},width:412,height:732}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"8.0.0",architecture:"",model:"Nexus 6P",mobile:!0},type:"phone"},{order:120,"show-by-default":!1,title:"Pixel 2",screen:{horizontal:{width:731,height:411},"device-pixel-ratio":2.625,vertical:{width:411,height:731}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"8.0",architecture:"",model:"Pixel 2",mobile:!0},type:"phone"},{order:121,"show-by-default":!1,title:"Pixel 2 XL",screen:{horizontal:{width:823,height:411},"device-pixel-ratio":3.5,vertical:{width:411,height:823}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"8.0.0",architecture:"",model:"Pixel 2 XL",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Pixel 3",screen:{horizontal:{width:786,height:393},"device-pixel-ratio":2.75,vertical:{width:393,height:786}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"9",architecture:"",model:"Pixel 3",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Pixel 4",screen:{horizontal:{width:745,height:353},"device-pixel-ratio":3,vertical:{width:353,height:745}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"10",architecture:"",model:"Pixel 4",mobile:!0},type:"phone"},{"show-by-default":!1,title:"LG Optimus L70",screen:{horizontal:{width:640,height:384},"device-pixel-ratio":1.25,vertical:{width:384,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"4.4.2",architecture:"",model:"LGMS323",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Nokia N9",screen:{horizontal:{width:854,height:480},"device-pixel-ratio":1,vertical:{width:480,height:854}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",type:"phone"},{"show-by-default":!1,title:"Nokia Lumia 520",screen:{horizontal:{width:533,height:320},"device-pixel-ratio":1.5,vertical:{width:320,height:533}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)",type:"phone"},{"show-by-default":!1,title:"Microsoft Lumia 550",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":2,vertical:{width:640,height:360}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263",type:"phone"},{"show-by-default":!1,title:"Microsoft Lumia 950",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":4,vertical:{width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263",type:"phone"},{"show-by-default":!1,title:"Galaxy S III",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":2,vertical:{width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","user-agent-metadata":{platform:"Android",platformVersion:"4.0",architecture:"",model:"GT-I9300",mobile:!0},type:"phone"},{order:110,"show-by-default":!1,title:"Galaxy S5",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":3,vertical:{width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"5.0",architecture:"",model:"SM-G900P",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Galaxy S8",screen:{horizontal:{width:740,height:360},"device-pixel-ratio":3,vertical:{width:360,height:740}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"7.0",architecture:"",model:"SM-G950U",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Galaxy S9+",screen:{horizontal:{width:658,height:320},"device-pixel-ratio":4.5,vertical:{width:320,height:658}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"8.0.0",architecture:"",model:"SM-G965U",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Galaxy Tab S4",screen:{horizontal:{width:1138,height:712},"device-pixel-ratio":2.25,vertical:{width:712,height:1138}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"8.1.0",architecture:"",model:"SM-T837A",mobile:!0},type:"phone"},{order:1,"show-by-default":!1,title:"JioPhone 2",screen:{horizontal:{width:320,height:240},"device-pixel-ratio":1,vertical:{width:240,height:320}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5",type:"phone"},{"show-by-default":!1,title:"Kindle Fire HDX",screen:{horizontal:{width:1280,height:800},"device-pixel-ratio":2,vertical:{width:800,height:1280}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true",type:"tablet"},{"show-by-default":!1,title:"iPad Mini",screen:{horizontal:{width:1024,height:768},"device-pixel-ratio":2,vertical:{width:768,height:1024}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",type:"tablet"},{order:140,"show-by-default":!1,title:"iPad",screen:{horizontal:{outline:{image:"@url(optimized/iPad-landscape.avif)",insets:{left:112,top:56,right:116,bottom:52}},width:1024,height:768},"device-pixel-ratio":2,vertical:{outline:{image:"@url(optimized/iPad-portrait.avif)",insets:{left:52,top:114,right:55,bottom:114}},width:768,height:1024}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",type:"tablet"},{order:141,"show-by-default":!1,title:"iPad Pro",screen:{horizontal:{width:1366,height:1024},"device-pixel-ratio":2,vertical:{width:1024,height:1366}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",type:"tablet"},{"show-by-default":!1,title:"Blackberry PlayBook",screen:{horizontal:{width:1024,height:600},"device-pixel-ratio":1,vertical:{width:600,height:1024}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",type:"tablet"},{"show-by-default":!1,title:"Nexus 10",screen:{horizontal:{width:1280,height:800},"device-pixel-ratio":2,vertical:{width:800,height:1280}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"6.0.1",architecture:"",model:"Nexus 10",mobile:!1},type:"tablet"},{"show-by-default":!1,title:"Nexus 7",screen:{horizontal:{width:960,height:600},"device-pixel-ratio":2,vertical:{width:600,height:960}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"6.0.1",architecture:"",model:"Nexus 7",mobile:!1},type:"tablet"},{"show-by-default":!1,title:"Galaxy Note 3",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":3,vertical:{width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","user-agent-metadata":{platform:"Android",platformVersion:"4.3",architecture:"",model:"SM-N900T",mobile:!0},type:"phone"},{"show-by-default":!1,title:"Galaxy Note II",screen:{horizontal:{width:640,height:360},"device-pixel-ratio":2,vertical:{width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","user-agent-metadata":{platform:"Android",platformVersion:"4.1",architecture:"",model:"GT-N7100",mobile:!0},type:"phone"},{"show-by-default":!1,title:h(l.laptopWithTouch),screen:{horizontal:{width:1280,height:950},"device-pixel-ratio":1,vertical:{width:950,height:1280}},capabilities:["touch"],"user-agent":"",type:"notebook",modes:[{title:"default",orientation:"horizontal"}]},{"show-by-default":!1,title:h(l.laptopWithHiDPIScreen),screen:{horizontal:{width:1440,height:900},"device-pixel-ratio":2,vertical:{width:900,height:1440}},capabilities:[],"user-agent":"",type:"notebook",modes:[{title:"default",orientation:"horizontal"}]},{"show-by-default":!1,title:h(l.laptopWithMDPIScreen),screen:{horizontal:{width:1280,height:800},"device-pixel-ratio":1,vertical:{width:800,height:1280}},capabilities:[],"user-agent":"",type:"notebook",modes:[{title:"default",orientation:"horizontal"}]},{"show-by-default":!1,title:"Moto G4",screen:{horizontal:{outline:{image:"@url(optimized/MotoG4-landscape.avif)",insets:{left:91,top:30,right:74,bottom:30}},width:640,height:360},"device-pixel-ratio":3,vertical:{outline:{image:"@url(optimized/MotoG4-portrait.avif)",insets:{left:30,top:91,right:30,bottom:74}},width:360,height:640}},capabilities:["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","user-agent-metadata":{platform:"Android",platformVersion:"6.0.1",architecture:"",model:"Moto G (4)",mobile:!0},type:"phone"}];var M=Object.freeze({__proto__:null,computeRelativeImageURL:s,EmulatedDevice:d,Horizontal:c,Vertical:u,HorizontalSpanned:g,VerticalSpanned:p,Type:m,Capability:b,_Show:f,EmulatedDevicesList:S});const x={widthMustBeANumber:"Width must be a number.",widthMustBeLessThanOrEqualToS:"Width must be less than or equal to {PH1}.",widthMustBeGreaterThanOrEqualToS:"Width must be greater than or equal to {PH1}.",heightMustBeANumber:"Height must be a number.",heightMustBeLessThanOrEqualToS:"Height must be less than or equal to {PH1}.",heightMustBeGreaterThanOrEqualTo:"Height must be greater than or equal to {PH1}.",devicePixelRatioMustBeANumberOr:"Device pixel ratio must be a number or blank.",devicePixelRatioMustBeLessThanOr:"Device pixel ratio must be less than or equal to {PH1}.",devicePixelRatioMustBeGreater:"Device pixel ratio must be greater than or equal to {PH1}."},y=i.i18n.registerUIStrings("models/emulation/DeviceModeModel.ts",x),z=i.i18n.getLocalizedString.bind(void 0,y);let I;class A extends e.ObjectWrapper.ObjectWrapper{#l;#r;#h;#s;#d;#c;#u;#g;#p;#m;#b;#f;#v;#S;#w;#M;#x;#y;#z;#I;#A;#k;#P;#T;#L;#E;#N;#D;constructor(){super(),this.#l=new P(0,0,1,1),this.#r=new P(0,0,1,1),this.#h=new n.Geometry.Size(1,1),this.#s=new n.Geometry.Size(1,1),this.#d=!1,this.#c=new n.Geometry.Size(1,1),this.#u=window.devicePixelRatio,this.#g=L.Desktop,this.#p=o.Runtime.experiments.isEnabled("dualScreenSupport"),this.#m="segments"in window.visualViewport,this.#b=e.Settings.Settings.instance().createSetting("emulation.deviceScale",1),this.#b.get()||this.#b.set(1),this.#b.addChangeListener(this.scaleSettingChanged,this),this.#f=1,this.#v=e.Settings.Settings.instance().createSetting("emulation.deviceWidth",400),this.#v.get()N&&this.#v.set(N),this.#v.addChangeListener(this.widthSettingChanged,this),this.#S=e.Settings.Settings.instance().createSetting("emulation.deviceHeight",0),this.#S.get()&&this.#S.get()N&&this.#S.set(N),this.#S.addChangeListener(this.heightSettingChanged,this),this.#w=e.Settings.Settings.instance().createSetting("emulation.deviceUA",L.Mobile),this.#w.addChangeListener(this.uaSettingChanged,this),this.#M=e.Settings.Settings.instance().createSetting("emulation.deviceScaleFactor",0),this.#M.addChangeListener(this.deviceScaleFactorSettingChanged,this),this.#x=e.Settings.Settings.instance().moduleSetting("emulation.showDeviceOutline"),this.#x.addChangeListener(this.deviceOutlineSettingChanged,this),this.#y=e.Settings.Settings.instance().createSetting("emulation.toolbarControlsEnabled",!0,e.Settings.SettingStorageType.Session),this.#z=T.None,this.#I=null,this.#A=null,this.#k=1,this.#P=!1,this.#T=!1,this.#L=null,this.#E=null,a.TargetManager.TargetManager.instance().observeModels(a.EmulationModel.EmulationModel,this)}static instance(e={forceNew:null}){return I&&!e.forceNew||(I=new A),I}static widthValidator(e){let t,i=!1;return/^[\d]+$/.test(e)?Number(e)>N?t=z(x.widthMustBeLessThanOrEqualToS,{PH1:N}):Number(e)N?t=z(x.heightMustBeLessThanOrEqualToS,{PH1:N}):Number(e)C?t=z(x.devicePixelRatioMustBeLessThanOr,{PH1:C}):Number(e)this.preferredScaledWidth())&&(i=this.preferredScaledWidth());let o=this.#S.get();(!o||o>this.preferredScaledHeight())&&(o=this.preferredScaledHeight());const a=t?G:0;this.#k=this.calculateFitScale(this.#v.get(),this.#S.get()),this.#g=this.#w.get(),this.applyDeviceMetrics(new n.Geometry.Size(i,o),new k(0,0,0,0),new k(0,0,0,0),this.#b.get(),this.#M.get()||a,t,o>=i?"portraitPrimary":"landscapePrimary",e),this.applyUserAgent(t?O:"",t?K:null),this.applyTouch(this.#w.get()===L.DesktopTouch||this.#w.get()===L.Mobile,this.#w.get()===L.Mobile)}i&&i.setShowViewportSizeOnResize(this.#z===T.None),this.dispatchEventToListeners("Updated")}calculateFitScale(e,t,i,o){const a=i?i.left+i.right:0,n=i?i.top+i.bottom:0,l=o?o.left+o.right:0,r=o?o.top+o.bottom:0;let h=Math.min(e?this.#s.width/(e+a):1,t?this.#s.height/(t+n):1);h=Math.min(Math.floor(100*h),100);let s=h;for(;s>.7*h;){let i=!0;if(e&&(i=i&&Number.isInteger((e-l)*s/100)),t&&(i=i&&Number.isInteger((t-r)*s/100)),i)return s/100;s-=1}return h/100}setSizeAndScaleToFit(e,t){this.#b.set(this.calculateFitScale(e,t)),this.setWidth(e),this.setHeight(t)}applyUserAgent(e,t){a.NetworkManager.MultitargetNetworkManager.instance().setUserAgentOverride(e,t)}applyDeviceMetrics(e,t,i,o,a,l,r,h,s=!1){e.width=Math.max(1,Math.floor(e.width)),e.height=Math.max(1,Math.floor(e.height));let d=e.width-t.left-t.right,c=e.height-t.top-t.bottom;this.#N=new n.Geometry.Size(d,c);const u=t.left,g=t.top,p="landscapePrimary"===r?90:0;if(this.#c=e,this.#u=a||window.devicePixelRatio,this.#l=new P(Math.max(0,(this.#h.width-e.width*o)/2),i.top*o,e.width*o,e.height*o),this.#D=new P(this.#l.left-i.left*o,0,(i.left+e.width+i.right)*o,(i.top+e.height+i.bottom)*o),this.#r=new P(u*o,g*o,Math.min(d*o,this.#h.width-this.#l.left-u*o),Math.min(c*o,this.#h.height-this.#l.top-g*o)),this.#f=o,s||(1===o&&this.#h.width>=e.width&&this.#h.height>=e.height&&(d=0,c=0),this.#r.width===d*o&&this.#r.height===c*o&&Number.isInteger(d*o)&&Number.isInteger(c*o)&&(d=0,c=0)),this.#L)if(h&&this.#L.resetPageScaleFactor(),d||c||l||a||1!==o||r||s){const t={width:d,height:c,deviceScaleFactor:a,mobile:l,scale:o,screenWidth:e.width,screenHeight:e.height,positionX:u,positionY:g,dontSetVisibleSize:!0,displayFeature:void 0,screenOrientation:void 0},i=this.getDisplayFeature();i&&(t.displayFeature=i),r&&(t.screenOrientation={type:r,angle:p}),this.#L.emulateDevice(t)}else this.#L.emulateDevice(null)}exitHingeMode(){const e=this.#L?this.#L.overlayModel():null;e&&e.showHingeForDualScreen(null)}webPlatformExperimentalFeaturesEnabled(){return this.#m}shouldReportDisplayFeature(){return this.#m&&this.#p}async captureScreenshot(e,t){const i=this.#L?this.#L.target().model(a.ScreenCaptureModel.ScreenCaptureModel):null;if(!i)return null;const o=this.#L?this.#L.overlayModel():null;if(o&&o.setShowViewportSizeOnResize(!1),e){const e=await i.fetchLayoutMetrics();if(!e)return null;const o=Math.min(16384,e.contentHeight);t={x:0,y:0,width:Math.floor(e.contentWidth),height:Math.floor(o),scale:1}}const n=await i.captureScreenshot("png",100,t),l={width:0,height:0,deviceScaleFactor:0,mobile:!1};if(e&&this.#L){if(this.#I&&this.#A){const e=this.#I.orientationByName(this.#A.orientation);l.width=e.width,l.height=e.height;const t=this.getDisplayFeature();t&&(l.displayFeature=t)}else l.width=0,l.height=0;await this.#L.emulateDevice(l)}return this.calculateAndEmulate(!1),n}applyTouch(e,t){this.#P=e,this.#T=t;for(const i of a.TargetManager.TargetManager.instance().models(a.EmulationModel.EmulationModel))i.emulateTouch(e,t)}showHingeIfApplicable(e){const t=this.#I&&this.#A?this.#I.orientationByName(this.#A.orientation):null;this.#p&&t&&t.hinge?e.showHingeForDualScreen(t.hinge):e.showHingeForDualScreen(null)}getDisplayFeatureOrientation(){if(!this.#A)throw new Error("Mode required to get display feature orientation.");switch(this.#A.orientation){case p:case u:return"vertical";default:return"horizontal"}}getDisplayFeature(){if(!this.shouldReportDisplayFeature())return null;if(!this.#I||!this.#A||this.#A.orientation!==p&&this.#A.orientation!==g)return null;const e=this.#I.orientationByName(this.#A.orientation);if(!e||!e.hinge)return null;const t=e.hinge;return{orientation:this.getDisplayFeatureOrientation(),offset:this.#A.orientation===p?t.x:t.y,maskLength:this.#A.orientation===p?t.width:t.height}}}class k{left;top;right;bottom;constructor(e,t,i,o){this.left=e,this.top=t,this.right=i,this.bottom=o}isEqual(e){return null!==e&&this.left===e.left&&this.top===e.top&&this.right===e.right&&this.bottom===e.bottom}}class P{left;top;width;height;constructor(e,t,i,o){this.left=e,this.top=t,this.width=i,this.height=o}isEqual(e){return null!==e&&this.left===e.left&&this.top===e.top&&this.width===e.width&&this.height===e.height}scale(e){return new P(this.left*e,this.top*e,this.width*e,this.height*e)}relativeTo(e){return new P(this.left-e.left,this.top-e.top,this.width,this.height)}rebaseTo(e){return new P(this.left+e.left,this.top+e.top,this.width,this.height)}}var T,L;!function(e){e.None="None",e.Responsive="Responsive",e.Device="Device"}(T||(T={})),function(e){e.Mobile="Mobile",e.MobileNoTouch="Mobile (no touch)",e.Desktop="Desktop",e.DesktopTouch="Desktop (touch)"}(L||(L={}));const E=50,N=9999,D=0,C=10,O=a.NetworkManager.MultitargetNetworkManager.patchUserAgentWithChromeVersion("Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36"),K={platform:"Android",platformVersion:"6.0",architecture:"",model:"Nexus 5",mobile:!0},G=2;var H=Object.freeze({__proto__:null,DeviceModeModel:A,Insets:k,Rect:P,get Type(){return T},get UA(){return L},MinDeviceSize:E,MaxDeviceSize:N,MinDeviceScaleFactor:D,MaxDeviceScaleFactor:C,MaxDeviceNameLength:50,defaultMobileScaleFactor:G});export{H as DeviceModeModel,M as EmulatedDevices}; diff --git a/chii/models/extensions/extensions-legacy.js b/chii/models/extensions/extensions-legacy.js new file mode 100644 index 00000000..c7317fb0 --- /dev/null +++ b/chii/models/extensions/extensions-legacy.js @@ -0,0 +1 @@ +import*as n from"./extensions.js";self.Extensions=self.Extensions||{},Extensions=Extensions||{},Extensions.ExtensionSidebarPane=n.ExtensionPanel.ExtensionSidebarPane,Extensions.ExtensionServer=n.ExtensionServer.ExtensionServer,Extensions.ExtensionServer.Events=n.ExtensionServer.Events,Extensions.ExtensionStatus=n.ExtensionServer.ExtensionStatus,Extensions.ExtensionTraceProvider=n.ExtensionTraceProvider.ExtensionTraceProvider,Extensions.TracingSession=n.ExtensionTraceProvider.TracingSession; diff --git a/chii/models/extensions/extensions.js b/chii/models/extensions/extensions.js new file mode 100644 index 00000000..e62a78b2 --- /dev/null +++ b/chii/models/extensions/extensions.js @@ -0,0 +1 @@ +import*as e from"../../core/sdk/sdk.js";import*as t from"../../ui/legacy/legacy.js";import*as n from"../../core/common/common.js";import*as s from"../../core/host/host.js";import*as i from"../../core/platform/platform.js";import*as r from"../../core/root/root.js";import*as o from"../logs/logs.js";import*as a from"../../ui/legacy/components/utils/utils.js";import*as c from"../../ui/legacy/theme_support/theme_support.js";import*as d from"../bindings/bindings.js";import*as u from"../har/har.js";import*as l from"../workspace/workspace.js";self.injectedExtensionAPI=function(e,t,n,s,i,r){const o=new Set(s),a=window.chrome||{};if(Object.getOwnPropertyDescriptor(a,"devtools"))return;let c=!1;function d(e,t){this._type=e,this._listeners=[],this._customDispatch=t}function u(){this.onRequestFinished=new E("network-request-finished",(function(e){const t=e.arguments[1];t.__proto__=new x(e.arguments[0]),this._fire(t)})),b(this,"network","onFinished","onRequestFinished"),this.onNavigated=new E("inspected-url-changed")}function l(e){this._id=e}function h(){const e={elements:new T,sources:new P};function t(t){return e[t]}for(const n in e)Object.defineProperty(this,n,{get:t.bind(null,n),enumerable:!0});this.applyStyleSheet=function(e){F.sendRequest({command:"applyStyleSheet",styleSheet:e})}}function p(e){this._id=e,e&&(this.onShown=new E("view-shown-"+e,(function(e){const t=e.arguments[0];"number"==typeof t?this._fire(window.parent.frames[t]):this._fire()})),this.onHidden=new E("view-hidden,"+e))}function g(e){p.call(this,null),this._hostPanelName=e,this.onSelectionChanged=new E("panel-objectSelected-"+e)}function m(){this._plugins=new Map}function f(e){return function(...t){const n={__proto__:e.prototype};e.apply(n,t),function(e,t){for(const n in t){if("_"===n.charAt(0))continue;let s=null;for(let e=t;e&&!s;e=e.__proto__)s=Object.getOwnPropertyDescriptor(e,n);s&&("function"==typeof s.value?e[n]=s.value.bind(t):"function"==typeof s.get?e.__defineGetter__(n,s.get.bind(t)):Object.defineProperty(e,n,s))}}(this,n)}}function b(e,t,n,s){let i=!1;e.__defineGetter__(n,(function(){return i||(console.warn(t+"."+n+" is deprecated. Use "+t+"."+s+" instead"),i=!0),e[s]}))}function w(e){const t=e[e.length-1];return"function"==typeof t?t:void 0}d.prototype={addListener:function(e){if("function"!=typeof e)throw"addListener: callback is not a function";0===this._listeners.length&&F.sendRequest({command:"subscribe",type:this._type}),this._listeners.push(e),F.registerHandler("notify-"+this._type,this._dispatch.bind(this))},removeListener:function(e){const t=this._listeners;for(let n=0;ns.call(this,new I(i))))},setOpenResourceHandler:function(e){const t=F.hasHandler("open-resource");e?F.registerHandler("open-resource",(function(t){c=!0;try{const{resource:n,lineNumber:s}=t;e.call(null,new v(n),s)}finally{c=!1}})):F.unregisterHandler("open-resource"),t===!e&&F.sendRequest({command:"setOpenResourceHandler",handlerPresent:Boolean(e)})},openResource:function(e,t,n,s){const i=w(arguments),r="number"==typeof n?n:0;F.sendRequest({command:"openResource",url:e,lineNumber:t,columnNumber:r},i)},get SearchAction(){return{CancelSearch:"cancelSearch",PerformSearch:"performSearch",NextSearchResult:"nextSearchResult",PreviousSearchResult:"previousSearchResult"}}},g.prototype={createSidebarPane:function(e,t){const n="extension-sidebar-"+F.nextObjectId();F.sendRequest({command:"createSidebarPane",panel:this._hostPanelName,id:n,title:e},t&&function(){t&&t(new _(n))})},__proto__:p.prototype},m.prototype={registerLanguageExtensionPlugin:async function(e,t,n){if(this._plugins.has(e))throw new Error(`Tried to register plugin '${t}' twice`);const s=new MessageChannel,i=s.port1;this._plugins.set(e,i),i.onmessage=({data:t})=>{const{requestId:n}=t;console.time(`${n}: ${t.method}`),function(t){switch(t.method){case"addRawModule":return e.addRawModule(t.parameters.rawModuleId,t.parameters.symbolsURL,t.parameters.rawModule);case"removeRawModule":return e.removeRawModule(t.parameters.rawModuleId);case"sourceLocationToRawLocation":return e.sourceLocationToRawLocation(t.parameters.sourceLocation);case"rawLocationToSourceLocation":return e.rawLocationToSourceLocation(t.parameters.rawLocation);case"getScopeInfo":return e.getScopeInfo(t.parameters.type);case"listVariablesInScope":return e.listVariablesInScope(t.parameters.rawLocation);case"getTypeInfo":return e.getTypeInfo(t.parameters.expression,t.parameters.context);case"getFormatter":return e.getFormatter(t.parameters.expressionOrField,t.parameters.context);case"getInspectableAddress":return"getInspectableAddress"in e?e.getInspectableAddress(t.parameters.field):Promise.resolve({js:""});case"getFunctionInfo":return e.getFunctionInfo(t.parameters.rawLocation);case"getInlinedFunctionRanges":return e.getInlinedFunctionRanges(t.parameters.rawLocation);case"getInlinedCalleesRanges":return e.getInlinedCalleesRanges(t.parameters.rawLocation);case"getMappedLines":return"getMappedLines"in e?e.getMappedLines(t.parameters.rawModuleId,t.parameters.sourceFileURL):Promise.resolve(void 0)}throw new Error(`Unknown language plugin method ${t.method}`)}(t).then((e=>i.postMessage({requestId:n,result:e}))).catch((e=>i.postMessage({requestId:n,error:{message:e.message}}))).finally((()=>console.timeEnd(`${n}: ${t.method}`)))},await new Promise((e=>{F.sendRequest({command:"registerLanguageExtensionPlugin",pluginName:t,port:s.port2,supportedScriptTypes:n},(()=>e()),[s.port2])}))},unregisterLanguageExtensionPlugin:async function(e){const t=this._plugins.get(e);if(!t)throw new Error("Tried to unregister a plugin that was not previously registered");this._plugins.delete(e),t.postMessage({event:"unregisteredLanguageExtensionPlugin"}),t.close()}};const R=f(m),y=f(C),E=f(d),I=f(A),_=f(L),S=f(g),x=f(l),v=f(j),O=f(k);class T extends S{constructor(){super("elements")}}class P extends S{constructor(){super("sources")}}function A(e){p.call(this,e),this.onSearch=new E("panel-search-"+e)}function L(e){p.call(this,e)}function C(e){this._id=e,this.onClicked=new E("button-clicked-"+e)}function q(){}function k(e){this._id=e}function H(e){this.onRecordingStarted=new E("trace-recording-started-"+e,(function(e){const t=e.arguments[0];this._fire(new O(t))})),this.onRecordingStopped=new E("trace-recording-stopped-"+e)}function N(){this.onResourceAdded=new E("resource-added",(function(e){this._fire(new v(e.arguments[0]))})),this.onResourceContentCommitted=new E("resource-content-committed",(function(e){this._fire(new v(e.arguments[0]),e.arguments[1])}))}function j(e){this._url=e.url,this._type=e.type}A.prototype={createStatusBarButton:function(e,t,n){const s="button-"+F.nextObjectId();return F.sendRequest({command:"createToolbarButton",panel:this._id,id:s,icon:e,tooltip:t,disabled:Boolean(n)}),new y(s)},show:function(){c&&F.sendRequest({command:"showPanel",id:this._id})},__proto__:p.prototype},L.prototype={setHeight:function(e){F.sendRequest({command:"setSidebarHeight",id:this._id,height:e})},setExpression:function(e,t,n,s){F.sendRequest({command:"setSidebarContent",id:this._id,expression:e,rootTitle:t,evaluateOnPage:!0,evaluateOptions:"object"==typeof n?n:{}},w(arguments))},setObject:function(e,t,n){F.sendRequest({command:"setSidebarContent",id:this._id,expression:e,rootTitle:t},n)},setPage:function(e){F.sendRequest({command:"setSidebarPage",id:this._id,page:e})},__proto__:p.prototype},C.prototype={update:function(e,t,n){F.sendRequest({command:"updateButton",id:this._id,icon:e,tooltip:t,disabled:Boolean(n)})}},q.prototype={addTraceProvider:function(e,t){const n="extension-trace-provider-"+F.nextObjectId();return F.sendRequest({command:"addTraceProvider",id:n,categoryName:e,categoryTooltip:t}),new H(n)}},k.prototype={complete:function(e,t){F.sendRequest({command:"completeTra.eSession",id:this._id,url:e||"",timeOffset:t||0})}},N.prototype={reload:function(e){let t=null;"object"==typeof e?t=e:"string"==typeof e&&(t={userAgent:e},console.warn("Passing userAgent as string parameter to inspectedWindow.reload() is deprecated. Use inspectedWindow.reload({ userAgent: value}) instead.")),F.sendRequest({command:"Reload",options:t})},eval:function(e,t){const n=w(arguments);function s(e){const{isError:t,isException:s,value:i}=e;t||s?n&&n(void 0,e):n&&n(i)}return F.sendRequest({command:"evaluateOnInspectedPage",expression:e,evaluateOptions:"object"==typeof t?t:void 0},n&&s),null},getResources:function(e){function t(e){return new v(e)}F.sendRequest({command:"getPageResources"},e&&function(n){e&&e(n.map(t))})}},j.prototype={get url(){return this._url},get type(){return this._type},getContent:function(e){F.sendRequest({command:"getResourceContent",url:this._url},e&&function(t){const{content:n,encoding:s}=t;e&&e(n,s)})},setContent:function(e,t,n){F.sendRequest({command:"setResourceContent",url:this._url,content:e,commit:t},n)}};let M=[],D=null;function B(){D=null,F.sendRequest({command:"_forwardKeyboardEvent",entries:M}),M=[]}function U(){this._callbacks={},this._handlers={},this._lastRequestId=0,this._lastObjectId=0,this.registerHandler("callback",this._onCallback.bind(this));const e=new MessageChannel;this._port=e.port1,this._port.addEventListener("message",this._onMessage.bind(this),!1),this._port.start(),window.parent.postMessage("registerExtension","*",[e.port2])}document.addEventListener("keydown",(function(e){const t=document.activeElement;if(t){if(("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName)&&!(e.ctrlKey||e.altKey||e.metaKey))return}let n=0;e.shiftKey&&(n|=1),e.ctrlKey&&(n|=2),e.altKey&&(n|=4),e.metaKey&&(n|=8);const s=255&e.keyCode|n<<8;if(!o.has(s))return;e.preventDefault();const i={eventType:e.type,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey,keyIdentifier:e.keyIdentifier,key:e.key,code:e.code,location:e.location,keyCode:e.keyCode};M.push(i),D||(D=setTimeout(B,0))}),!1),U.prototype={sendRequest:function(e,t,n){"function"==typeof t&&(e.requestId=this._registerCallback(t)),this._port.postMessage(e,n)},hasHandler:function(e){return Boolean(this._handlers[e])},registerHandler:function(e,t){this._handlers[e]=t},unregisterHandler:function(e){delete this._handlers[e]},nextObjectId:function(){return r.toString()+"_"+ ++this._lastObjectId},_registerCallback:function(e){const t=++this._lastRequestId;return this._callbacks[t]=e,t},_onCallback:function(e){if(e.requestId in this._callbacks){const t=this._callbacks[e.requestId];delete this._callbacks[e.requestId],t(e.result)}},_onMessage:function(e){const t=e.data,n=this._handlers[t.command];n&&n.call(this,t)}};const F=new U,W=new function(){this.inspectedWindow=new N,this.panels=new h,this.network=new u,this.timeline=new q,this.languageServices=new R,b(this,"webInspector","resources","network")};if(Object.defineProperty(a,"devtools",{value:{},enumerable:!0}),a.devtools.inspectedWindow={},Object.defineProperty(a.devtools.inspectedWindow,"tabId",{get:function(){return t}}),a.devtools.inspectedWindow.__proto__=W.inspectedWindow,a.devtools.network=W.network,a.devtools.panels=W.panels,a.devtools.panels.themeName=n,a.devtools.languageServices=W.languageServices,!1!==e.exposeExperimentalAPIs){a.experimental=a.experimental||{},a.experimental.devtools=a.experimental.devtools||{};const e=Object.getOwnPropertyNames(W);for(let t=0;tJSON.stringify(e))).join(",");return i||(i=()=>{}),"(function(injectedScriptId){ ("+self.injectedExtensionAPI.toString()+")("+r+","+i+", injectedScriptId);})"};var h=Object.freeze({__proto__:null});class p extends t.Widget.Widget{server;id;iframe;frameIndex;constructor(e,t,n,s){super(),this.setHideOnDetach(),this.element.className="vbox flex-auto",this.element.tabIndex=-1,this.server=e,this.id=t,this.iframe=document.createElement("iframe"),this.iframe.addEventListener("load",this.onLoad.bind(this),!1),this.iframe.src=n,this.iframe.className=s,this.setDefaultFocusedElement(this.element),this.element.appendChild(this.iframe)}wasShown(){super.wasShown(),"number"==typeof this.frameIndex&&this.server.notifyViewShown(this.id,this.frameIndex)}willHide(){"number"==typeof this.frameIndex&&this.server.notifyViewHidden(this.id)}onLoad(){const e=window.frames;this.frameIndex=Array.prototype.indexOf.call(e,this.iframe.contentWindow),this.isShowing()&&this.server.notifyViewShown(this.id,this.frameIndex)}}class g extends t.Widget.VBox{server;id;constructor(e,t){super(),this.server=e,this.id=t}wasShown(){this.server.notifyViewShown(this.id)}willHide(){this.server.notifyViewHidden(this.id)}}var m=Object.freeze({__proto__:null,ExtensionView:p,ExtensionNotifierView:g});class f extends t.Panel.Panel{server;id;panelToolbar;searchableViewInternal;constructor(e,n,s,i){super(n),this.server=e,this.id=s,this.setHideOnDetach(),this.panelToolbar=new t.Toolbar.Toolbar("hidden",this.element),this.searchableViewInternal=new t.SearchableView.SearchableView(this,null),this.searchableViewInternal.show(this.element);new p(e,this.id,i,"extension").show(this.searchableViewInternal.element)}addToolbarItem(e){this.panelToolbar.element.classList.remove("hidden"),this.panelToolbar.appendToolbarItem(e)}searchCanceled(){this.server.notifySearchAction(this.id,"cancelSearch"),this.searchableViewInternal.updateSearchMatchesCount(0)}searchableView(){return this.searchableViewInternal}performSearch(e,t,n){const s=e.query;this.server.notifySearchAction(this.id,"performSearch",s)}jumpToNextSearchResult(){this.server.notifySearchAction(this.id,"nextSearchResult")}jumpToPreviousSearchResult(){this.server.notifySearchAction(this.id,"previousSearchResult")}supportsCaseSensitiveSearch(){return!1}supportsRegexSearch(){return!1}}class b{id;toolbarButtonInternal;constructor(e,n,s,i,r){this.id=n,this.toolbarButtonInternal=new t.Toolbar.ToolbarButton("",""),this.toolbarButtonInternal.addEventListener(t.Toolbar.ToolbarButton.Events.Click,e.notifyButtonClicked.bind(e,this.id)),this.update(s,i,r)}update(e,t,n){"string"==typeof e&&this.toolbarButtonInternal.setBackgroundImage(e),"string"==typeof t&&this.toolbarButtonInternal.setTitle(t),"boolean"==typeof n&&this.toolbarButtonInternal.setEnabled(!n)}toolbarButton(){return this.toolbarButtonInternal}}class w extends t.View.SimpleView{panelNameInternal;server;idInternal;extensionView;objectPropertiesView;constructor(e,t,n,s){super(n),this.element.classList.add("fill"),this.panelNameInternal=t,this.server=e,this.idInternal=s}id(){return this.idInternal}panelName(){return this.panelNameInternal}setObject(t,n,s){this.createObjectPropertiesView(),this.setObjectInternal(e.RemoteObject.RemoteObject.fromLocalObject(t),n,s)}setExpression(e,t,n,s,i){this.createObjectPropertiesView(),this.server.evaluate(e,!0,!1,n,s,this.onEvaluate.bind(this,t,i))}setPage(e){this.objectPropertiesView&&(this.objectPropertiesView.detach(),delete this.objectPropertiesView),this.extensionView&&this.extensionView.detach(!0),this.extensionView=new p(this.server,this.idInternal,e,"extension fill"),this.extensionView.show(this.element),this.element.style.height||this.setHeight("150px")}setHeight(e){this.element.style.height=e}onEvaluate(e,t,n,s,i){n?t(n.toString()):s?this.setObjectInternal(s,e,t):t()}createObjectPropertiesView(){this.objectPropertiesView||(this.extensionView&&(this.extensionView.detach(!0),delete this.extensionView),this.objectPropertiesView=new g(this.server,this.idInternal),this.objectPropertiesView.show(this.element))}setObjectInternal(e,n,s){const i=this.objectPropertiesView;i?(i.element.removeChildren(),t.UIUtils.Renderer.render(e,{title:n,editable:!1}).then((e=>{if(!e)return void s();const t=e.tree&&e.tree.firstChild();t&&t.expand(),i.element.appendChild(e.node),s()}))):s("operation cancelled")}}var R=Object.freeze({__proto__:null,ExtensionPanel:f,ExtensionButton:b,ExtensionSidebarPane:w});class y{extensionOrigin;id;categoryName;categoryTooltip;constructor(e,t,n,s){this.extensionOrigin=e,this.id=t,this.categoryName=n,this.categoryTooltip=s}start(e){const t=String(++E);O.instance().startTraceRecording(this.id,t,e)}stop(){O.instance().stopTraceRecording(this.id)}shortDisplayName(){return this.categoryName}longDisplayName(){return this.categoryTooltip}persistentIdentifier(){return`${this.extensionOrigin}/${this.categoryName}`}}let E=0;var I=Object.freeze({__proto__:null,ExtensionTraceProvider:y});class _ extends d.DebuggerLanguagePlugins.DebuggerLanguagePlugin{supportedScriptTypes;port;nextRequestId;pendingRequests;constructor(e,t,n){super(e),this.supportedScriptTypes=t,this.port=n,this.port.onmessage=this.onResponse.bind(this),this.nextRequestId=0,this.pendingRequests=new Map}sendRequest(e,t){return new Promise(((n,s)=>{const i=this.nextRequestId++;this.pendingRequests.set(i,{resolve:n,reject:s}),this.port.postMessage({requestId:i,method:e,parameters:t})}))}onResponse({data:e}){if("event"in e){const{event:t}=e;switch(t){case"unregisteredLanguageExtensionPlugin":{for(const{reject:e}of this.pendingRequests.values())e(new Error("Language extension endpoint disconnected"));this.pendingRequests.clear(),this.port.close();const{pluginManager:e}=d.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance();e&&e.removePlugin(this);break}}return}const{requestId:t,result:n,error:s}=e;if(!this.pendingRequests.has(t))return void console.error(`No pending request ${t}`);const{resolve:i,reject:r}=this.pendingRequests.get(t);this.pendingRequests.delete(t),s?r(new Error(s.message)):i(n)}handleScript(e){const t=e.scriptLanguage();return null!==t&&null!==e.debugSymbols&&t===this.supportedScriptTypes.language&&this.supportedScriptTypes.symbol_types.includes(e.debugSymbols.type)}addRawModule(e,t,n){return this.sendRequest("addRawModule",{rawModuleId:e,symbolsURL:t,rawModule:n})}removeRawModule(e){return this.sendRequest("removeRawModule",{rawModuleId:e})}sourceLocationToRawLocation(e){return this.sendRequest("sourceLocationToRawLocation",{sourceLocation:e})}rawLocationToSourceLocation(e){return this.sendRequest("rawLocationToSourceLocation",{rawLocation:e})}getScopeInfo(e){return this.sendRequest("getScopeInfo",{type:e})}listVariablesInScope(e){return this.sendRequest("listVariablesInScope",{rawLocation:e})}getFunctionInfo(e){return this.sendRequest("getFunctionInfo",{rawLocation:e})}getInlinedFunctionRanges(e){return this.sendRequest("getInlinedFunctionRanges",{rawLocation:e})}getInlinedCalleesRanges(e){return this.sendRequest("getInlinedCalleesRanges",{rawLocation:e})}getTypeInfo(e,t){return this.sendRequest("getTypeInfo",{expression:e,context:t})}getFormatter(e,t){return this.sendRequest("getFormatter",{expressionOrField:e,context:t})}getInspectableAddress(e){return this.sendRequest("getInspectableAddress",{field:e})}async getMappedLines(e,t){return this.sendRequest("getMappedLines",{rawModuleId:e,sourceFileURL:t})}dispose(){}}const S=new WeakMap,x=["chrome://newtab","chrome://new-tab-page"].map((e=>new URL(e).origin));let v;class O extends n.ObjectWrapper.ObjectWrapper{clientObjects;handlers;subscribers;subscriptionStartHandlers;subscriptionStopHandlers;extraHeaders;requests;requestIds;lastRequestId;registeredExtensions;status;sidebarPanesInternal;traceProvidersInternal;traceSessions;extensionsEnabled;inspectedTabId;extensionAPITestHook;constructor(){super(),this.clientObjects=new Map,this.handlers=new Map,this.subscribers=new Map,this.subscriptionStartHandlers=new Map,this.subscriptionStopHandlers=new Map,this.extraHeaders=new Map,this.requests=new Map,this.requestIds=new Map,this.lastRequestId=0,this.registeredExtensions=new Map,this.status=new A,this.sidebarPanesInternal=[],this.traceProvidersInternal=[],this.traceSessions=new Map,this.extensionsEnabled=!0,this.registerHandler("addRequestHeaders",this.onAddRequestHeaders.bind(this)),this.registerHandler("addTraceProvider",this.onAddTraceProvider.bind(this)),this.registerHandler("applyStyleSheet",this.onApplyStyleSheet.bind(this)),this.registerHandler("completeTra.eSession",this.onCompleteTraceSession.bind(this)),this.registerHandler("createPanel",this.onCreatePanel.bind(this)),this.registerHandler("createSidebarPane",this.onCreateSidebarPane.bind(this)),this.registerHandler("createToolbarButton",this.onCreateToolbarButton.bind(this)),this.registerHandler("evaluateOnInspectedPage",this.onEvaluateOnInspectedPage.bind(this)),this.registerHandler("_forwardKeyboardEvent",this.onForwardKeyboardEvent.bind(this)),this.registerHandler("getHAR",this.onGetHAR.bind(this)),this.registerHandler("getPageResources",this.onGetPageResources.bind(this)),this.registerHandler("getRequestContent",this.onGetRequestContent.bind(this)),this.registerHandler("getResourceContent",this.onGetResourceContent.bind(this)),this.registerHandler("Reload",this.onReload.bind(this)),this.registerHandler("setOpenResourceHandler",this.onSetOpenResourceHandler.bind(this)),this.registerHandler("setResourceContent",this.onSetResourceContent.bind(this)),this.registerHandler("setSidebarHeight",this.onSetSidebarHeight.bind(this)),this.registerHandler("setSidebarContent",this.onSetSidebarContent.bind(this)),this.registerHandler("setSidebarPage",this.onSetSidebarPage.bind(this)),this.registerHandler("showPanel",this.onShowPanel.bind(this)),this.registerHandler("subscribe",this.onSubscribe.bind(this)),this.registerHandler("openResource",this.onOpenResource.bind(this)),this.registerHandler("unsubscribe",this.onUnsubscribe.bind(this)),this.registerHandler("updateButton",this.onUpdateButton.bind(this)),this.registerHandler("registerLanguageExtensionPlugin",this.registerLanguageExtensionEndpoint.bind(this)),window.addEventListener("message",this.onWindowMessage.bind(this),!1);const e=window.DevToolsAPI&&window.DevToolsAPI.getInspectedTabId&&window.DevToolsAPI.getInspectedTabId();e&&this.setInspectedTabId({data:e}),s.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(s.InspectorFrontendHostAPI.Events.SetInspectedTabId,this.setInspectedTabId,this),this.initExtensions()}static instance(e={forceNew:null}){const{forceNew:t}=e;return v&&!t||(v=new O),v}initializeExtensions(){null!==this.inspectedTabId&&s.InspectorFrontendHost.InspectorFrontendHostInstance.setAddExtensionCallback(this.addExtension.bind(this))}hasExtensions(){return Boolean(this.registeredExtensions.size)}notifySearchAction(e,t,n){this.postNotification("panel-search-"+e,t,n)}notifyViewShown(e,t){this.postNotification("view-shown-"+e,t)}notifyViewHidden(e){this.postNotification("view-hidden,"+e)}notifyButtonClicked(e){this.postNotification("button-clicked-"+e)}registerLanguageExtensionEndpoint(e,t){if("registerLanguageExtensionPlugin"!==e.command)return this.status.E_BADARG("command","expected subscribe");const{pluginManager:n}=d.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance();if(!n)return this.status.E_FAILED("WebAssembly DWARF support needs to be enabled to use this extension");const{pluginName:s,port:i,supportedScriptTypes:{language:r,symbol_types:o}}=e,a=Array.isArray(o)&&o.every((e=>"string"==typeof e))?o:[],c=new _(s,{language:r,symbol_types:a},i);return n.addPlugin(c),this.status.OK()}inspectedURLChanged(t){if(!this.canInspectURL(t.data.inspectedURL()))return void this.disableExtensions();if(t.data!==e.TargetManager.TargetManager.instance().mainTarget())return;this.requests=new Map;const n=t.data.inspectedURL();this.postNotification("inspected-url-changed",n)}startTraceRecording(e,t,n){this.traceSessions.set(t,n),this.postNotification("trace-recording-started-"+e,t)}stopTraceRecording(e){this.postNotification("trace-recording-stopped-"+e)}hasSubscribers(e){return this.subscribers.has(e)}postNotification(e,...t){if(!this.extensionsEnabled)return;const n=this.subscribers.get(e);if(!n)return;const s={command:"notify-"+e,arguments:Array.prototype.slice.call(arguments,1)};for(const e of n)e.postMessage(s)}onSubscribe(e,t){if("subscribe"!==e.command)return this.status.E_BADARG("command","expected subscribe");const n=this.subscribers.get(e.type);if(n)n.add(t);else{this.subscribers.set(e.type,new Set([t]));const n=this.subscriptionStartHandlers.get(e.type);n&&n()}}onUnsubscribe(e,t){if("unsubscribe"!==e.command)return this.status.E_BADARG("command","expected unsubscribe");const n=this.subscribers.get(e.type);if(n&&(n.delete(t),!n.size)){this.subscribers.delete(e.type);const t=this.subscriptionStopHandlers.get(e.type);t&&t()}}onAddRequestHeaders(t){if("addRequestHeaders"!==t.command)return this.status.E_BADARG("command","expected addRequestHeaders");const n=t.extensionId;if("string"!=typeof n)return this.status.E_BADARGTYPE("extensionId",typeof n,"string");let s=this.extraHeaders.get(n);s||(s=new Map,this.extraHeaders.set(n,s));for(const e in t.headers)s.set(e,t.headers[e]);const i={};for(const e of this.extraHeaders.values())for(const[t,n]of e)"__proto__"!==t&&"string"==typeof n&&(i[t]=n);e.NetworkManager.MultitargetNetworkManager.instance().setExtraHTTPHeaders(i)}onApplyStyleSheet(e){if("applyStyleSheet"!==e.command)return this.status.E_BADARG("command","expected applyStyleSheet");if(!r.Runtime.experiments.isEnabled("applyCustomStylesheet"))return;const t=document.createElement("style");t.textContent=e.styleSheet,document.head.appendChild(t),c.ThemeSupport.instance().addCustomStylesheet(e.styleSheet);for(let e=document.body;e;e=e.traverseNextNode(document.body))e instanceof ShadowRoot&&c.ThemeSupport.instance().injectCustomStyleSheets(e)}getExtensionOrigin(e){const t=S.get(e);if(!t)throw new Error("Received a message from an unregistered extension");return t}onCreatePanel(e,n){if("createPanel"!==e.command)return this.status.E_BADARG("command","expected createPanel");const s=e.id;if(this.clientObjects.has(s)||t.InspectorView.InspectorView.instance().hasPanel(s))return this.status.E_EXISTS(s);const i=this.expandResourcePath(this.getExtensionOrigin(n),e.page);let r=this.getExtensionOrigin(n)+e.title;r=r.replace(/\s/g,"");const o=new P(r,e.title,new f(this,r,s,i));return this.clientObjects.set(s,o),t.InspectorView.InspectorView.instance().addPanel(o),this.status.OK()}onShowPanel(e){if("showPanel"!==e.command)return this.status.E_BADARG("command","expected showPanel");let n=e.id;const s=this.clientObjects.get(e.id);s&&s instanceof P&&(n=s.viewId()),t.InspectorView.InspectorView.instance().showPanel(n)}onCreateToolbarButton(e,t){if("createToolbarButton"!==e.command)return this.status.E_BADARG("command","expected createToolbarButton");const n=this.clientObjects.get(e.panel);if(!(n&&n instanceof P))return this.status.E_NOTFOUND(e.panel);const s=new b(this,e.id,this.expandResourcePath(this.getExtensionOrigin(t),e.icon),e.tooltip,e.disabled);return this.clientObjects.set(e.id,s),n.widget().then((function(e){e.addToolbarItem(s.toolbarButton())})),this.status.OK()}onUpdateButton(e,t){if("updateButton"!==e.command)return this.status.E_BADARG("command","expected updateButton");const n=this.clientObjects.get(e.id);return n&&n instanceof b?(n.update(e.icon&&this.expandResourcePath(this.getExtensionOrigin(t),e.icon),e.tooltip,e.disabled),this.status.OK()):this.status.E_NOTFOUND(e.id)}onCompleteTraceSession(e){if("completeTra.eSession"!==e.command)return this.status.E_BADARG("command","expected completeTra.eSession");const t=this.traceSessions.get(e.id);if(!t)return this.status.E_NOTFOUND(e.id);this.traceSessions.delete(e.id),t.complete(e.url,e.timeOffset)}onCreateSidebarPane(e){if("createSidebarPane"!==e.command)return this.status.E_BADARG("command","expected createSidebarPane");const t=e.id,n=new w(this,e.panel,e.title,t);return this.sidebarPanesInternal.push(n),this.clientObjects.set(t,n),this.dispatchEventToListeners(T.SidebarPaneAdded,n),this.status.OK()}sidebarPanes(){return this.sidebarPanesInternal}onSetSidebarHeight(e){if("setSidebarHeight"!==e.command)return this.status.E_BADARG("command","expected setSidebarHeight");const t=this.clientObjects.get(e.id);return t&&t instanceof w?(t.setHeight(e.height),this.status.OK()):this.status.E_NOTFOUND(e.id)}onSetSidebarContent(e,t){if("setSidebarContent"!==e.command)return this.status.E_BADARG("command","expected setSidebarContent");const{requestId:n,id:s,rootTitle:i,expression:r,evaluateOptions:o,evaluateOnPage:a}=e,c=this.clientObjects.get(s);if(!(c&&c instanceof w))return this.status.E_NOTFOUND(e.id);function d(e){const s=e?this.status.E_FAILED(e):this.status.OK();this.dispatchCallback(n,t,s)}a?c.setExpression(r,i,o,this.getExtensionOrigin(t),d.bind(this)):c.setObject(e.expression,e.rootTitle,d.bind(this))}onSetSidebarPage(e,t){if("setSidebarPage"!==e.command)return this.status.E_BADARG("command","expected setSidebarPage");const n=this.clientObjects.get(e.id);if(!(n&&n instanceof w))return this.status.E_NOTFOUND(e.id);n.setPage(this.expandResourcePath(this.getExtensionOrigin(t),e.page))}onOpenResource(e){if("openResource"!==e.command)return this.status.E_BADARG("command","expected openResource");const t=l.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(e.url);if(t)return n.Revealer.reveal(t.uiLocation(e.lineNumber,e.columnNumber)),this.status.OK();const s=d.ResourceUtils.resourceForURL(e.url);if(s)return n.Revealer.reveal(s),this.status.OK();const i=o.NetworkLog.NetworkLog.instance().requestForURL(e.url);return i?(n.Revealer.reveal(i),this.status.OK()):this.status.E_NOTFOUND(e.url)}onSetOpenResourceHandler(e,t){if("setOpenResourceHandler"!==e.command)return this.status.E_BADARG("command","expected setOpenResourceHandler");const n=this.registeredExtensions.get(this.getExtensionOrigin(t));if(!n)throw new Error("Received a message from an unregistered extension");const{name:s}=n;e.handlerPresent?a.Linkifier.Linkifier.registerLinkHandler(s,this.handleOpenURL.bind(this,t)):a.Linkifier.Linkifier.unregisterLinkHandler(s)}handleOpenURL(e,t,n){e.postMessage({command:"open-resource",resource:this.makeResource(t),lineNumber:n+1})}onReload(t){if("Reload"!==t.command)return this.status.E_BADARG("command","expected Reload");const n=t.options||{};let s;return e.NetworkManager.MultitargetNetworkManager.instance().setUserAgentOverride("string"==typeof n.userAgent?n.userAgent:"",null),n.injectedScript&&(s="(function(){"+n.injectedScript+"})()"),e.ResourceTreeModel.ResourceTreeModel.reloadAllPages(Boolean(n.ignoreCache),s),this.status.OK()}onEvaluateOnInspectedPage(e,t){if("evaluateOnInspectedPage"!==e.command)return this.status.E_BADARG("command","expected evaluateOnInspectedPage");const{requestId:n,expression:s,evaluateOptions:i}=e;return this.evaluate(s,!0,!0,i,this.getExtensionOrigin(t),function(e,s,i){let r;r=e||!s?this.status.E_PROTOCOLERROR(e?.toString()):i?{isException:!0,value:s.description}:{value:s.value},this.dispatchCallback(n,t,r)}.bind(this))}async onGetHAR(e){if("getHAR"!==e.command)return this.status.E_BADARG("command","expected getHAR");const t=o.NetworkLog.NetworkLog.instance().requests(),n=await u.Log.Log.build(t);for(let e=0;et.addEventListener(n,s,this)),(()=>t.removeEventListener(n,s,this)))}registerAutosubscriptionTargetManagerHandler(t,n,s,i){this.registerSubscriptionHandler(t,(()=>e.TargetManager.TargetManager.instance().addModelListener(n,s,i,this)),(()=>e.TargetManager.TargetManager.instance().removeModelListener(n,s,i,this)))}registerResourceContentCommittedHandler(e){this.registerSubscriptionHandler("resource-content-committed",function(){l.Workspace.WorkspaceImpl.instance().addEventListener(l.Workspace.Events.WorkingCopyCommittedByUser,e,this),l.Workspace.WorkspaceImpl.instance().setHasResourceContentTrackingExtensions(!0)}.bind(this),function(){l.Workspace.WorkspaceImpl.instance().setHasResourceContentTrackingExtensions(!1),l.Workspace.WorkspaceImpl.instance().removeEventListener(l.Workspace.Events.WorkingCopyCommittedByUser,e,this)}.bind(this))}expandResourcePath(e,t){return e+this.normalizePath(t)}normalizePath(e){const t=e.split("/"),n=[];for(let e=0;e");if(!this.canInspectURL(c.url))return this.status.E_FAILED("Permission denied");i.useContentScriptContext?d=r:i.scriptExecutionContext&&(d=i.scriptExecutionContext);const u=c.resourceTreeModel().target().model(e.RuntimeModel.RuntimeModel),l=u?u.executionContexts():[];if(d){for(let e=0;e!this.workerTasks.get(e)));if(!e&&this.workerTasks.size{const o=new u(e,t,r,!1);this.taskQueue.push(o),this.processNextTask()}))}format(e,t,r){const o={mimeType:e,content:t,indentString:r};return this.runTask("format",o)}javaScriptIdentifiers(e){return this.runTask("javaScriptIdentifiers",{content:e}).then((e=>e||[]))}evaluatableJavaScriptSubstring(e){return this.runTask("evaluatableJavaScriptSubstring",{content:e}).then((e=>e||""))}parseCSS(e,t){this.runChunkedTask("parseCSS",{content:e},(function(e,r){t(e,r||[])}))}outlineForMimetype(e,t,r){switch(t){case"text/html":return this.runChunkedTask("htmlOutline",{content:e},r),!0;case"text/javascript":return this.runChunkedTask("javaScriptOutline",{content:e},r),!0;case"text/css":return this.parseCSS(e,(function(e,t){r(e,t.map((e=>{const t="selectorText"in e?e.selectorText:e.atRule;return{line:e.lineNumber,subtitle:void 0,column:e.columnNumber,title:t}})))})),!0}return!1}argumentsList(e){return this.runTask("argumentsList",{content:e})}}class u{method;params;callback;isChunked;constructor(e,t,r,o){this.method=e,this.params=t,this.callback=r,this.isChunked=o}}function d(){return c.instance()}var p=Object.freeze({__proto__:null,FormatterWorkerPool:c,formatterWorkerPool:d});function l(e,t,r){return(t?e[t-1]+1:0)+r}function m(e,r){const o=t.ArrayUtilities.upperBound(e,r-1,t.ArrayUtilities.DEFAULT_COMPARATOR);let n;return n=o?r-e[o-1]-1:r,[o,n]}async function g(t,r,o,n=e.Settings.Settings.instance().moduleSetting("textEditorIndent").get()){return t.isDocumentOrScriptOrStyleSheet()?h(r,o,n):{formattedContent:o,formattedMapping:new S}}async function h(r,o,n=e.Settings.Settings.instance().moduleSetting("textEditorIndent").get()){const i=o.replace(/\r\n?|[\n\u2028\u2029]/g,"\n").replace(/^\uFEFF/,""),s=d(),a=await s.format(r,i,n),c=t.StringUtilities.findLineEndingIndexes(i),u=t.StringUtilities.findLineEndingIndexes(a.content),p=new f(c,u,a.mapping);return{formattedContent:a.content,formattedMapping:p}}class S{originalToFormatted(e,t=0){return[e,t]}formattedToOriginal(e,t=0){return[e,t]}}class f{originalLineEndings;formattedLineEndings;mapping;constructor(e,t,r){this.originalLineEndings=e,this.formattedLineEndings=t,this.mapping=r}originalToFormatted(e,t){const r=l(this.originalLineEndings,e,t||0),o=this.convertPosition(this.mapping.original,this.mapping.formatted,r);return m(this.formattedLineEndings,o)}formattedToOriginal(e,t){const r=l(this.formattedLineEndings,e,t||0),o=this.convertPosition(this.mapping.formatted,this.mapping.original,r);return m(this.originalLineEndings,o)}convertPosition(e,r,o){const n=t.ArrayUtilities.upperBound(e,o,t.ArrayUtilities.DEFAULT_COMPARATOR)-1;let i=r[n]+o-e[n];return nr[n+1]&&(i=r[n+1]),i}}var k=Object.freeze({__proto__:null,format:g,formatScriptContent:h});const C=new WeakMap;class T{originalSourceCode;formattedSourceCode;mapping;constructor(e,t,r){this.originalSourceCode=e,this.formattedSourceCode=t,this.mapping=r}originalPath(){return this.originalSourceCode.project().id()+":"+this.originalSourceCode.url()}static for(e){return C.get(e)||null}}let w=null;class y{projectId;project;formattedSourceCodes;scriptMapping;styleMapping;constructor(){this.projectId="formatter:",this.project=new o.ContentProviderBasedProject.ContentProviderBasedProject(i.Workspace.WorkspaceImpl.instance(),this.projectId,i.Workspace.projectTypes.Formatter,"formatter",!0),this.formattedSourceCodes=new Map,this.scriptMapping=new L,this.styleMapping=new M,i.Workspace.WorkspaceImpl.instance().addEventListener(i.Workspace.Events.UISourceCodeRemoved,(e=>{this.onUISourceCodeRemoved(e)}),this)}static instance({forceNew:e=!1}={}){return w&&!e||(w=new y),w}async onUISourceCodeRemoved(e){const t=e.data,r=this.formattedSourceCodes.get(t);r&&r.formatData&&await this.discardFormatData(r.formatData),this.formattedSourceCodes.delete(t)}async discardFormattedUISourceCode(e){const t=T.for(e);return t?(await this.discardFormatData(t),this.formattedSourceCodes.delete(t.originalSourceCode),t.originalSourceCode):null}async discardFormatData(e){C.delete(e.formattedSourceCode),await this.scriptMapping.setSourceMappingEnabled(e,!1),this.styleMapping.setSourceMappingEnabled(e,!1),this.project.removeFile(e.formattedSourceCode.url())}hasFormatted(e){return this.formattedSourceCodes.has(e)}getOriginalUISourceCode(e){const t=C.get(e);return t?t.originalSourceCode:e}async format(e){const t=this.formattedSourceCodes.get(e);if(t)return t.promise;const r=new Promise((async(t,o)=>{const{content:i}=await e.requestContent();try{const{formattedContent:o,formattedMapping:s}=await g(e.contentType(),e.mimeType(),i||""),a=this.formattedSourceCodes.get(e);if(!a||a.promise!==r)return;let c,u=0,d="";do{c=`${e.url()}:formatted${d}`,d=":"+u++}while(this.project.uiSourceCodeForURL(c));const p=n.StaticContentProvider.StaticContentProvider.fromString(c,e.contentType(),o),l=this.project.createUISourceCode(c,p.contentType()),m=new T(e,l,s);C.set(l,m),this.project.addUISourceCodeWithProvider(l,p,null,e.mimeType()),await this.scriptMapping.setSourceMappingEnabled(m,!0),await this.styleMapping.setSourceMappingEnabled(m,!0),a.formatData=m,t(m)}catch(e){o(e)}}));return this.formattedSourceCodes.set(e,{promise:r,formatData:null}),r}}class L{constructor(){o.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().addSourceMapping(this)}rawLocationToUILocation(e){const t=e.script(),r=t&&T.for(t);if(!r||!t)return null;const[o,n]=r.mapping.originalToFormatted(e.lineNumber,e.columnNumber||0);return r.formattedSourceCode.uiLocation(o,n)}uiLocationToRawLocations(t,n,i){const s=T.for(t);if(!s)return[];const[a,c]=s.mapping.formattedToOriginal(n,i);if(s.originalSourceCode.contentType().isScript()){const e=o.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().uiLocationToRawLocationsForUnformattedJavaScript(s.originalSourceCode,a,c);return console.assert(e.every((e=>e&&Boolean(e.script())))),e}if(s.originalSourceCode.contentType()===e.ResourceType.resourceTypes.Document){const e=o.NetworkProject.NetworkProject.targetForUISourceCode(s.originalSourceCode),t=e&&e.model(r.DebuggerModel.DebuggerModel);if(t){const e=t.scriptsForSourceURL(s.originalSourceCode.url()).filter((e=>e.isInlineScript()&&!e.hasSourceURL)).map((e=>e.rawLocation(a,c))).filter((e=>Boolean(e)));return console.assert(e.every((e=>e&&Boolean(e.script())))),e}}return[]}async setSourceMappingEnabled(e,t){const r=this.scriptsForUISourceCode(e.originalSourceCode);if(!r.length)return;if(t)for(const t of r)C.set(t,e);else for(const e of r)C.delete(e);const n=r.map((e=>o.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().updateLocations(e)));await Promise.all(n)}scriptsForUISourceCode(t){if(t.contentType()===e.ResourceType.resourceTypes.Document){const e=o.NetworkProject.NetworkProject.targetForUISourceCode(t),n=e&&e.model(r.DebuggerModel.DebuggerModel);if(n){return n.scriptsForSourceURL(t.url()).filter((e=>e.isInlineScript()&&!e.hasSourceURL))}}if(t.contentType().isScript()){console.assert(!C.has(t));return o.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().uiLocationToRawLocationsForUnformattedJavaScript(t,0,0).map((e=>e.script())).filter((e=>Boolean(e)))}return[]}}const b=new WeakMap;class M{headersSymbol;constructor(){o.CSSWorkspaceBinding.CSSWorkspaceBinding.instance().addSourceMapping(this),this.headersSymbol=Symbol("Formatter.SourceFormatter.StyleMapping._headersSymbol")}rawLocationToUILocation(e){const t=e.header(),r=t&&T.for(t);if(!r)return null;const o=r.mapping.originalToFormatted(e.lineNumber,e.columnNumber||0);return r.formattedSourceCode.uiLocation(o[0],o[1])}uiLocationToRawLocations(e){const t=T.for(e.uiSourceCode);if(!t)return[];const[o,n]=t.mapping.formattedToOriginal(e.lineNumber,e.columnNumber),i=b.get(t.originalSourceCode);if(!i)return[];return i.filter((e=>e.containsLocation(o,n))).map((e=>new r.CSSModel.CSSLocation(e,o,n)))}async setSourceMappingEnabled(e,t){const r=e.originalSourceCode,n=this.headersForUISourceCode(r);t?(b.set(r,n),n.forEach((t=>{C.set(t,e)}))):(b.delete(r),n.forEach((e=>{C.delete(e)})));const i=n.map((e=>o.CSSWorkspaceBinding.CSSWorkspaceBinding.instance().updateLocations(e)));await Promise.all(i)}headersForUISourceCode(t){if(t.contentType()===e.ResourceType.resourceTypes.Document){const e=o.NetworkProject.NetworkProject.targetForUISourceCode(t),n=e&&e.model(r.CSSModel.CSSModel);if(n)return n.headersForSourceURL(t.url()).filter((e=>e.isInline&&!e.hasSourceURL))}else if(t.contentType().isStyleSheet()){return o.CSSWorkspaceBinding.CSSWorkspaceBinding.instance().uiLocationToRawLocations(t.uiLocation(0,0)).map((e=>e.header())).filter((e=>Boolean(e)))}return[]}}var F=Object.freeze({__proto__:null,SourceFormatData:T,SourceFormatter:y});export{p as FormatterWorkerPool,k as ScriptFormatter,F as SourceFormatter}; diff --git a/chii/models/har/har.js b/chii/models/har/har.js new file mode 100644 index 00000000..8e55449d --- /dev/null +++ b/chii/models/har/har.js @@ -0,0 +1 @@ +import*as e from"../../core/common/common.js";import*as t from"../../core/sdk/sdk.js";import*as s from"../../core/i18n/i18n.js";import*as r from"../../core/platform/platform.js";class o{custom;constructor(e){if(!e||"object"!=typeof e)throw"First parameter is expected to be an object";this.custom=new Map}static safeDate(e){const t=new Date(e);if(!Number.isNaN(t.getTime()))return t;throw"Invalid date format"}static safeNumber(e){const t=Number(e);if(!Number.isNaN(t))return t;throw"Casting to number results in NaN"}static optionalNumber(e){return void 0!==e?o.safeNumber(e):void 0}static optionalString(e){return void 0!==e?String(e):void 0}customAsString(e){const t=this.custom.get(e);if(t)return String(t)}customAsNumber(e){const t=this.custom.get(e);if(!t)return;const s=Number(t);return Number.isNaN(s)?void 0:s}customAsArray(e){const t=this.custom.get(e);if(t)return Array.isArray(t)?t:void 0}customInitiator(){return this.custom.get("initiator")}}class i extends o{version;creator;browser;pages;entries;comment;constructor(e){if(super(e),this.version=String(e.version),this.creator=new n(e.creator),this.browser=e.browser?new n(e.browser):void 0,this.pages=Array.isArray(e.pages)?e.pages.map((e=>new a(e))):[],!Array.isArray(e.entries))throw"log.entries is expected to be an array";this.entries=e.entries.map((e=>new u(e))),this.comment=o.optionalString(e.comment)}}class n extends o{name;version;comment;constructor(e){super(e),this.name=String(e.name),this.version=String(e.version),this.comment=o.optionalString(e.comment)}}class a extends o{startedDateTime;id;title;pageTimings;comment;constructor(e){super(e),this.startedDateTime=o.safeDate(e.startedDateTime),this.id=String(e.id),this.title=String(e.title),this.pageTimings=new c(e.pageTimings),this.comment=o.optionalString(e.comment)}}class c extends o{onContentLoad;onLoad;comment;constructor(e){super(e),this.onContentLoad=o.optionalNumber(e.onContentLoad),this.onLoad=o.optionalNumber(e.onLoad),this.comment=o.optionalString(e.comment)}}class u extends o{pageref;startedDateTime;time;request;response;cache;timings;serverIPAddress;connection;comment;constructor(e){super(e),this.pageref=o.optionalString(e.pageref),this.startedDateTime=o.safeDate(e.startedDateTime),this.time=o.safeNumber(e.time),this.request=new m(e.request),this.response=new d(e.response),this.cache={},this.timings=new S(e.timings),this.serverIPAddress=o.optionalString(e.serverIPAddress),this.connection=o.optionalString(e.connection),this.comment=o.optionalString(e.comment),this.custom.set("fromCache",o.optionalString(e._fromCache)),this.custom.set("initiator",this.importInitiator(e._initiator)),this.custom.set("priority",o.optionalString(e._priority)),this.custom.set("resourceType",o.optionalString(e._resourceType)),this.custom.set("webSocketMessages",this.importWebSocketMessages(e._webSocketMessages))}importInitiator(e){if("object"==typeof e)return new f(e)}importWebSocketMessages(e){if(!Array.isArray(e))return;const t=[];for(const s of e){if("object"!=typeof s)return;t.push(new T(s))}return t}}class m extends o{method;url;httpVersion;cookies;headers;queryString;postData;headersSize;bodySize;comment;constructor(e){super(e),this.method=String(e.method),this.url=String(e.url),this.httpVersion=String(e.httpVersion),this.cookies=Array.isArray(e.cookies)?e.cookies.map((e=>new l(e))):[],this.headers=Array.isArray(e.headers)?e.headers.map((e=>new p(e))):[],this.queryString=Array.isArray(e.queryString)?e.queryString.map((e=>new h(e))):[],this.postData=e.postData?new g(e.postData):void 0,this.headersSize=o.safeNumber(e.headersSize),this.bodySize=o.safeNumber(e.bodySize),this.comment=o.optionalString(e.comment)}}class d extends o{status;statusText;httpVersion;cookies;headers;content;redirectURL;headersSize;bodySize;comment;constructor(e){super(e),this.status=o.safeNumber(e.status),this.statusText=String(e.statusText),this.httpVersion=String(e.httpVersion),this.cookies=Array.isArray(e.cookies)?e.cookies.map((e=>new l(e))):[],this.headers=Array.isArray(e.headers)?e.headers.map((e=>new p(e))):[],this.content=new b(e.content),this.redirectURL=String(e.redirectURL),this.headersSize=o.safeNumber(e.headersSize),this.bodySize=o.safeNumber(e.bodySize),this.comment=o.optionalString(e.comment),this.custom.set("transferSize",o.optionalNumber(e._transferSize)),this.custom.set("error",o.optionalString(e._error))}}class l extends o{name;value;path;domain;expires;httpOnly;secure;comment;constructor(e){super(e),this.name=String(e.name),this.value=String(e.value),this.path=o.optionalString(e.path),this.domain=o.optionalString(e.domain),this.expires=e.expires?o.safeDate(e.expires):void 0,this.httpOnly=void 0!==e.httpOnly?Boolean(e.httpOnly):void 0,this.secure=void 0!==e.secure?Boolean(e.secure):void 0,this.comment=o.optionalString(e.comment)}}class p extends o{name;value;comment;constructor(e){super(e),this.name=String(e.name),this.value=String(e.value),this.comment=o.optionalString(e.comment)}}class h extends o{name;value;comment;constructor(e){super(e),this.name=String(e.name),this.value=String(e.value),this.comment=o.optionalString(e.comment)}}class g extends o{mimeType;params;text;comment;constructor(e){super(e),this.mimeType=String(e.mimeType),this.params=Array.isArray(e.params)?e.params.map((e=>new y(e))):[],this.text=String(e.text),this.comment=o.optionalString(e.comment)}}class y extends o{name;value;fileName;contentType;comment;constructor(e){super(e),this.name=String(e.name),this.value=o.optionalString(e.value),this.fileName=o.optionalString(e.fileName),this.contentType=o.optionalString(e.contentType),this.comment=o.optionalString(e.comment)}}class b extends o{size;compression;mimeType;text;encoding;comment;constructor(e){super(e),this.size=o.safeNumber(e.size),this.compression=o.optionalNumber(e.compression),this.mimeType=String(e.mimeType),this.text=o.optionalString(e.text),this.encoding=o.optionalString(e.encoding),this.comment=o.optionalString(e.comment)}}class S extends o{blocked;dns;connect;send;wait;receive;ssl;comment;constructor(e){super(e),this.blocked=o.optionalNumber(e.blocked),this.dns=o.optionalNumber(e.dns),this.connect=o.optionalNumber(e.connect),this.send=o.safeNumber(e.send),this.wait=o.safeNumber(e.wait),this.receive=o.safeNumber(e.receive),this.ssl=o.optionalNumber(e.ssl),this.comment=o.optionalString(e.comment),this.custom.set("blocked_queueing",o.optionalNumber(e._blocked_queueing)),this.custom.set("blocked_proxy",o.optionalNumber(e._blocked_proxy))}}class f extends o{type;url;lineNumber;constructor(e){super(e),this.type=o.optionalString(e.type),this.url=o.optionalString(e.url),this.lineNumber=o.optionalNumber(e.lineNumber)}}class T extends o{time;opcode;data;type;constructor(e){super(e),this.time=o.optionalNumber(e.time),this.opcode=o.optionalNumber(e.opcode),this.data=o.optionalString(e.data),this.type=o.optionalString(e.type)}}var q=Object.freeze({__proto__:null,HARRoot:class extends o{log;constructor(e){super(e),this.log=new i(e.log)}},HARLog:i,HARPage:a,HAREntry:u,HARParam:y,HARTimings:S,HARInitiator:f});class v{static requestsFromHARLog(e){const s=new Map;for(const t of e.pages)s.set(t.id,t);e.entries.sort(((e,t)=>e.startedDateTime.valueOf()-t.startedDateTime.valueOf()));const r=new Map,o=[];for(const i of e.entries){const e=i.pageref;let n=e?r.get(e):void 0;const a=n?n.mainRequest.url():i.request.url;let c=null;const u=i.customInitiator();u&&(c={type:u.type,url:u.url,lineNumber:u.lineNumber});const m=t.NetworkRequest.NetworkRequest.createWithoutBackendRequest("har-"+o.length,i.request.url,a,c),d=e?s.get(e):void 0;!n&&e&&d&&(n=v.buildPageLoad(d,m),r.set(e,n)),v.fillRequestFromHAREntry(m,i,n),n&&n.bindRequest(m),o.push(m)}return o}static buildPageLoad(e,s){const r=new t.PageLoad.PageLoad(s);return r.startTime=e.startedDateTime.valueOf(),r.contentLoadTime=1e3*Number(e.pageTimings.onContentLoad),r.loadTime=1e3*Number(e.pageTimings.onLoad),r}static fillRequestFromHAREntry(e,s,r){s.request.postData?e.setRequestFormData(!0,s.request.postData.text):e.setRequestFormData(!1,null),e.connectionId=s.connection||"",e.requestMethod=s.request.method,e.setRequestHeaders(s.request.headers),s.response.content.mimeType&&"x-unknown"!==s.response.content.mimeType&&(e.mimeType=s.response.content.mimeType),e.responseHeaders=s.response.headers,e.statusCode=s.response.status,e.statusText=s.response.statusText;let o=s.response.httpVersion.toLowerCase();"http/2.0"===o&&(o="h2"),e.protocol=o.replace(/^http\/2\.0?\+quic/,"http/2+quic");const i=s.startedDateTime.getTime()/1e3;e.setIssueTime(i,i);const n=s.response.content.size>0?s.response.content.size:0,a=s.response.headersSize>0?s.response.headersSize:0,c=s.response.bodySize>0?s.response.bodySize:0;e.resourceSize=n||a+c;let u=s.response.customAsNumber("transferSize");void 0===u&&(u=s.response.headersSize+s.response.bodySize),e.setTransferSize(u>=0?u:0);const m=s.customAsString("fromCache");"memory"===m?e.setFromMemoryCache():"disk"===m&&e.setFromDiskCache();const d=s.response.content.text,l={error:null,content:d||null,encoded:"base64"===s.response.content.encoding};e.setContentDataProvider((async()=>l)),v.setupTiming(e,i,s.time,s.timings),e.setRemoteAddress(s.serverIPAddress||"",80),e.setResourceType(v.getResourceType(e,s,r));const p=s.customAsString("priority");p&&Protocol.Network.ResourcePriority.hasOwnProperty(p)&&e.setPriority(p);const h=s.customAsArray("webSocketMessages");if(h)for(const s of h){if(void 0===s.time)continue;if(!Object.values(t.NetworkRequest.WebSocketFrameType).includes(s.type))continue;if(void 0===s.opcode)continue;if(void 0===s.data)continue;const r=s.type===t.NetworkRequest.WebSocketFrameType.Send;e.addFrame({time:s.time,text:s.data,opCode:s.opcode,mask:r,type:s.type})}e.finished=!0}static getResourceType(t,s,r){const o=s.customAsString("resourceType");if(o){const t=e.ResourceType.ResourceType.fromName(o);if(t)return t}if(r&&r.mainRequest===t)return e.ResourceType.resourceTypes.Document;const i=e.ResourceType.ResourceType.fromMimeType(s.response.content.mimeType);if(i!==e.ResourceType.resourceTypes.Other)return i;const n=e.ResourceType.ResourceType.fromURL(s.request.url);return n||e.ResourceType.resourceTypes.Other}static setupTiming(e,t,s,r){function o(e){return void 0===e||e<0?-1:(i+=e,i)}let i=r.blocked&&r.blocked>=0?r.blocked:0;const n=r.customAsNumber("blocked_proxy")||-1,a=r.customAsNumber("blocked_queueing")||-1,c=r.ssl&&r.ssl>=0?r.ssl:0;r.connect&&r.connect>0&&(r.connect-=c);const u={proxyStart:n>0?i-n:-1,proxyEnd:n>0?i:-1,requestTime:t+(a>0?a:0)/1e3,dnsStart:r.dns&&r.dns>=0?i:-1,dnsEnd:o(r.dns),connectStart:r.connect&&r.connect>=0?i:-1,connectEnd:o(r.connect)+c,sslStart:r.ssl&&r.ssl>=0?i:-1,sslEnd:o(r.ssl),workerStart:-1,workerReady:-1,workerFetchStart:-1,workerRespondWithSettled:-1,sendStart:r.send>=0?i:-1,sendEnd:o(r.send),pushStart:0,pushEnd:0,receiveHeadersEnd:o(r.wait)};o(r.receive),e.timing=u,e.endTime=t+Math.max(s,i)/1e3}}var w=Object.freeze({__proto__:null,Importer:v});class k{static pseudoWallTime(e,t){return new Date(1e3*e.pseudoWallTime(t))}static async build(e){const t=new k,s=[];for(const t of e)s.push(x.build(t));const r=await Promise.all(s);return{version:"1.2",creator:t.creator(),pages:t.buildPages(e),entries:r}}creator(){const e=/AppleWebKit\/([^ ]+)/.exec(window.navigator.userAgent);return{name:"WebInspector",version:e?e[1]:"n/a"}}buildPages(e){const s=new Set,r=[];for(let o=0;or.blocked&&(r.blocked=r._blocked_proxy);const s=e.dnsEnd>=0?t:0,o=e.dnsEnd>=0?e.dnsEnd:-1;r.dns=o-s;const n=e.sslEnd>0?e.sslStart:0,a=e.sslEnd>0?e.sslEnd:-1;r.ssl=a-n;const c=e.connectEnd>=0?d([o,t]):0,u=e.connectEnd>=0?e.connectEnd:-1;r.connect=u-c;const m=e.sendEnd>=0?Math.max(u,o,t):0,l=e.sendEnd>=0?e.sendEnd:0;r.send=l-m,r.send<0&&(r.send=0),i=Math.max(l,u,a,o,t,0)}else if(-1===this.request.responseReceivedTime)return r.blocked=x.toMilliseconds(this.request.endTime-t),r;const n=e?e.requestTime:s,a=i,c=x.toMilliseconds(this.request.responseReceivedTime-n);r.wait=c-a;const u=c,m=x.toMilliseconds(this.request.endTime-n);return r.receive=Math.max(m-u,0),r;function d(e){return e.reduce(((e,t)=>t>=0&&te.issueTime()-t.issueTime()));const o=await k.build(e),i=[];for(let t=0;t=57344&&t<64976||t>65007&&t<=1114111&&65534!=(65534&t)))return!0;var t;return!1}(s)&&(s=r.StringUtilities.toBase64(s),o=!0),e.response.content.text=s}o&&(e.response.content.encoding="base64")}}static async writeToStream(e,t,s){const r=t.createSubProgress();r.setTitle(A(R.writingFile)),r.setTotalWork(s.length);for(let t=0;t 96) diff --git a/chii/models/issues_manager/descriptions/CompatibilityModeQuirks.md b/chii/models/issues_manager/descriptions/CompatibilityModeQuirks.md new file mode 100644 index 00000000..5107ea74 --- /dev/null +++ b/chii/models/issues_manager/descriptions/CompatibilityModeQuirks.md @@ -0,0 +1,5 @@ +# Page layout may be unexpected due to Quirks Mode + +One or more documents in this page is in Quirks Mode, which will render the affected document(s) with quirks incompatible with the current HTML and CSS specifications. + +Quirks Mode exists mostly due to historical reasons. If this is not intentional, you can [add or modify the DOCTYPE to be ``](issueQuirksModeDoctype) to render the page in No Quirks Mode. diff --git a/chii/models/issues_manager/descriptions/LowTextContrast.md b/chii/models/issues_manager/descriptions/LowTextContrast.md new file mode 100644 index 00000000..3340be98 --- /dev/null +++ b/chii/models/issues_manager/descriptions/LowTextContrast.md @@ -0,0 +1,5 @@ +# Users may have difficulties reading text content due to insufficient color contrast + +Low-contrast text is difficult or impossible for users to read. A [minimum contrast ratio (AA) of 4.5](issuesContrastWCAG21AA) is recommended for all text. Since font size and weight affect color perception, an exception is made for very large or bold text — in this case, a contrast ratio of 3.0 is allowed. The [enhanced conformance level (AAA)](issuesContrastWCAG21AAA) requires the contrast ratio to be above 7.0 for regular text and 4.5 for large text. + +Update colors or change the font size or weight to achieve sufficient contrast. You can use the [“Suggest color” feature](issuesContrastSuggestColor) in the DevTools color picker to automatically select a better text color. \ No newline at end of file diff --git a/chii/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md b/chii/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md new file mode 100644 index 00000000..724e1c4b --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md @@ -0,0 +1,8 @@ +# Migrate entirely to HTTPS to have cookies sent to same-site subresources + +A cookie was not sent to {PLACEHOLDER_destination} origin from {PLACEHOLDER_origin} context. +Because this cookie would have been sent across schemes on the same site, it was not sent. +This behavior enhances the `SameSite` attribute’s protection of user data from request forgery by network attackers. + +Resolve this issue by migrating your site (as defined by the eTLD+1) entirely to HTTPS. +It is also recommended to mark the cookie with the `Secure` attribute if that is not already the case. diff --git a/chii/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md b/chii/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md new file mode 100644 index 00000000..33da14ab --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md @@ -0,0 +1,8 @@ +# Migrate entirely to HTTPS to allow cookies to be set by same-site subresources + +A cookie was not set by {PLACEHOLDER_origin} origin in {PLACEHOLDER_destination} context. +Because this cookie would have been set across schemes on the same site, it was blocked. +This behavior enhances the `SameSite` attribute’s protection of user data from request forgery by network attackers. + +Resolve this issue by migrating your site (as defined by the eTLD+1) entirely to HTTPS. +It is also recommended to mark the cookie with the `Secure` attribute if that is not already the case. diff --git a/chii/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md b/chii/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md new file mode 100644 index 00000000..bede35d2 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md @@ -0,0 +1,8 @@ +# Migrate entirely to HTTPS to have cookies sent on same-site requests + +A cookie was not sent to {PLACEHOLDER_destination} origin from {PLACEHOLDER_origin} context on a navigation. +Because this cookie would have been sent across schemes on the same site, it was not sent. +This behavior enhances the `SameSite` attribute’s protection of user data from request forgery by network attackers. + +Resolve this issue by migrating your site (as defined by the eTLD+1) entirely to HTTPS. +It is also recommended to mark the cookie with the `Secure` attribute if that is not already the case. diff --git a/chii/models/issues_manager/descriptions/SameSiteInvalidSameParty.md b/chii/models/issues_manager/descriptions/SameSiteInvalidSameParty.md new file mode 100644 index 00000000..c4878623 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteInvalidSameParty.md @@ -0,0 +1,8 @@ +# Mark SameParty cookies as Secure and do not use SameSite=Strict for SameParty cookies + +Cookies marked with `SameParty` must also be marked with `Secure`. In addition, cookies marked +with `SameParty` cannot use `SameSite=Strict`. + +Resolve this issue by updating the attributes of the cookie: + * Remove `SameParty` if the cookie should only be used by the same site but not the same first-party set + * Remove `SameSite=Strict` and specify `Secure` if the cookie should be available to all sites of the same first-party set diff --git a/chii/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md new file mode 100644 index 00000000..cfe705c0 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md @@ -0,0 +1,8 @@ +# Mark cross-site cookies as Secure to allow them to be sent in cross-site requests + +Cookies marked with `SameSite=None` must also be marked with `Secure` to get sent in cross-site requests. +This behavior protects user data from being sent over an insecure connection. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie should be sent in cross-site requests. This enables third-party use. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be sent in cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md new file mode 100644 index 00000000..55ba7d67 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md @@ -0,0 +1,8 @@ +# Mark cross-site cookies as Secure to allow setting them in cross-site contexts + +Cookies marked with `SameSite=None` must also be marked with `Secure` to allow setting them in a cross-site context. +This behavior protects user data from being sent over an insecure connection. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie is intended to be set in cross-site contexts. Note that only cookies sent over HTTPS may use the `Secure` attribute. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be set by cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md new file mode 100644 index 00000000..22600167 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md @@ -0,0 +1,8 @@ +# Mark cross-site cookies as Secure to allow them to be sent in cross-site requests + +In a future version of the browser, cookies marked with `SameSite=None` must also be marked with `Secure` to get sent in cross-site requests. +This behavior protects user data from being sent over an insecure connection. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie should be sent in cross-site requests. This enables third-party use. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be sent in cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md new file mode 100644 index 00000000..32a8d842 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md @@ -0,0 +1,8 @@ +# Mark cross-site cookies as Secure to allow setting them in cross-site contexts + +In a future version of the browser, cookies marked with `SameSite=None` must also be marked with `Secure` to allow setting them in a cross-site context. +This behavior protects user data from being sent over an insecure connection. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie is intended to be set in cross-site contexts. Note that only cookies sent over HTTPS may use the `Secure` attribute. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be set by cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md new file mode 100644 index 00000000..0f96a674 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md @@ -0,0 +1,9 @@ +# Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute + +Because a cookie’s `SameSite` attribute was not set or is invalid, it defaults to `SameSite=Lax`, +which will prevent the cookie from being sent in a cross-site request in a future version of the browser. +This behavior protects user data from accidentally leaking to third parties and cross-site request forgery. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie should be sent in cross-site requests. This enables third-party use. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be sent in cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md new file mode 100644 index 00000000..22a09f82 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md @@ -0,0 +1,9 @@ +# Indicate whether a cookie is intended to be set in cross-site context by specifying its SameSite attribute + +Because a cookie’s `SameSite` attribute was not set or is invalid, it defaults to `SameSite=Lax`, +which will prevents the cookie from being set in a cross-site context in a future version of the browser. +This behavior protects user data from accidentally leaking to third parties and cross-site request forgery. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie is intended to be set in cross-site contexts. Note that only cookies sent over HTTPS may use the `Secure` attribute. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be set by cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteUnspecifiedTreatedAsLaxRead.md b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedTreatedAsLaxRead.md new file mode 100644 index 00000000..a8524780 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedTreatedAsLaxRead.md @@ -0,0 +1,9 @@ +# Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute + +Because a cookie’s `SameSite` attribute was not set or is invalid, it defaults to `SameSite=Lax`, +which prevents the cookie from being sent in a cross-site request. +This behavior protects user data from accidentally leaking to third parties and cross-site request forgery. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie should be sent in cross-site requests. This enables third-party use. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be sent in cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteUnspecifiedTreatedAsLaxSet.md b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedTreatedAsLaxSet.md new file mode 100644 index 00000000..04e74efa --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteUnspecifiedTreatedAsLaxSet.md @@ -0,0 +1,9 @@ +# Indicate whether a cookie is intended to be set in a cross-site context by specifying its SameSite attribute + +Because a cookie’s `SameSite` attribute was not set or is invalid, it defaults to `SameSite=Lax`, +which prevents the cookie from being set in a cross-site context. +This behavior protects user data from accidentally leaking to third parties and cross-site request forgery. + +Resolve this issue by updating the attributes of the cookie: +* Specify `SameSite=None` and `Secure` if the cookie is intended to be set in cross-site contexts. Note that only cookies sent over HTTPS may use the `Secure` attribute. +* Specify `SameSite=Strict` or `SameSite=Lax` if the cookie should not be set by cross-site requests. diff --git a/chii/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md b/chii/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md new file mode 100644 index 00000000..170cba35 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md @@ -0,0 +1,8 @@ +# Migrate entirely to HTTPS to continue having cookies sent to same-site subresources + +A cookie is being sent to {PLACEHOLDER_destination} origin from {PLACEHOLDER_origin} context. +Because this cookie is being sent across schemes on the same site, it will not be sent in a future version of Chrome. +This behavior enhances the `SameSite` attribute’s protection of user data from request forgery by network attackers. + +Resolve this issue by migrating your site (as defined by the eTLD+1) entirely to HTTPS. +It is also recommended to mark the cookie with the `Secure` attribute if that is not already the case. diff --git a/chii/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md b/chii/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md new file mode 100644 index 00000000..e5154b1f --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md @@ -0,0 +1,8 @@ +# Migrate entirely to HTTPS to continue allowing cookies to be set by same-site subresources + +A cookie is being set by {PLACEHOLDER_origin} origin in {PLACEHOLDER_destination} context. +Because this cookie is being set across schemes on the same site, it will be blocked in a future version of Chrome. +This behavior enhances the `SameSite` attribute’s protection of user data from request forgery by network attackers. + +Resolve this issue by migrating your site (as defined by the eTLD+1) entirely to HTTPS. +It is also recommended to mark the cookie with the `Secure` attribute if that is not already the case. diff --git a/chii/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md b/chii/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md new file mode 100644 index 00000000..d41d22f1 --- /dev/null +++ b/chii/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md @@ -0,0 +1,8 @@ +# Migrate entirely to HTTPS to continue having cookies sent on same-site requests + +A cookie is being sent to {PLACEHOLDER_destination} origin from {PLACEHOLDER_origin} context on a navigation. +Because this cookie is being sent across schemes on the same site, it will not be sent in a future version of Chrome. +This behavior enhances the `SameSite` attribute’s protection of user data from request forgery by network attackers. + +Resolve this issue by migrating your site (as defined by the eTLD+1) entirely to HTTPS. +It is also recommended to mark the cookie with the `Secure` attribute if that is not already the case. diff --git a/chii/models/issues_manager/descriptions/TwaDigitalAssetLinksFailed.md b/chii/models/issues_manager/descriptions/TwaDigitalAssetLinksFailed.md new file mode 100644 index 00000000..f7fa23e9 --- /dev/null +++ b/chii/models/issues_manager/descriptions/TwaDigitalAssetLinksFailed.md @@ -0,0 +1,9 @@ +# Digital asset links of the Trusted Web Activity failed verification. Your app may crash in the future. + +Digital Asset Links are used to verify your ownership of web origin(s) embedded in the Trusted Web Activity. + +The verification of Digital Asset Links has failed. This is most commonly caused by your Android app's signature not matching the content in your `.well-known/assetlinks.json` file. + +⚠️ In the future, your app may crash for users if your Digital Asset Links fail to verify. + +Please check your app’s signature and make sure it matches that in your `.well-known/assetlinks.json` file. diff --git a/chii/models/issues_manager/descriptions/TwaHttpError.md b/chii/models/issues_manager/descriptions/TwaHttpError.md new file mode 100644 index 00000000..3c15f418 --- /dev/null +++ b/chii/models/issues_manager/descriptions/TwaHttpError.md @@ -0,0 +1,9 @@ +# Trusted Web Activity navigations must succeed or be handled by the ServiceWorker. Your app may crash in the future. + +Dead link (404) or 5xx status code encountered when navigating within the verified origin. + +In order to provide a seamless experience on par with Android apps, it is important for navigations within the verified origin in a Trusted Web Activity not result in broken links or internal errors. + +⚠️ In the future, your app may crash if the user navigates to a page and gets a 404 or 50x error. Ensure that all links on your origin are correct, or use a service worker to handle these errors gracefully. + +Please make sure your app doesn’t have 404 or 5xx errors, or use a service worker fetch event fallback response to handle the errors. \ No newline at end of file diff --git a/chii/models/issues_manager/descriptions/TwaPageUnavailableOffline.md b/chii/models/issues_manager/descriptions/TwaPageUnavailableOffline.md new file mode 100644 index 00000000..169d5c7b --- /dev/null +++ b/chii/models/issues_manager/descriptions/TwaPageUnavailableOffline.md @@ -0,0 +1,9 @@ +# Trusted Web Activity does not work offline. In the future, your app may crash if the user’s device goes offline. + +Navigation within the Trusted Web Activity leads to a page not available offline. + +Offline capabilities are important to create a seamless user experience on par with Android apps. Your app should provide a custom offline page. + +⚠️ In the future, your app may crash unless a proper offline handler is implemented using a ServiceWorker fetch handler. + +To resolve this issue, handle offline resource requests using a ServiceWorker. diff --git a/chii/models/issues_manager/descriptions/arAttributionEventSourceTriggerDataTooLarge.md b/chii/models/issues_manager/descriptions/arAttributionEventSourceTriggerDataTooLarge.md new file mode 100644 index 00000000..199a1552 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arAttributionEventSourceTriggerDataTooLarge.md @@ -0,0 +1,4 @@ +# Ensure the event source trigger data doesn't exceed the 1-bit limit + +The `event-source-trigger-data` query parameter of an attribution redirect was truncated to the lowest 1 bit, because it was exceeding the limit. +Replace the `event-source-trigger-data` parameter with an integer that respects the 1-bit limit, that is a number between 0 and 1. diff --git a/chii/models/issues_manager/descriptions/arAttributionSourceUntrustworthyFrameOrigin.md b/chii/models/issues_manager/descriptions/arAttributionSourceUntrustworthyFrameOrigin.md new file mode 100644 index 00000000..35123c36 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arAttributionSourceUntrustworthyFrameOrigin.md @@ -0,0 +1,4 @@ +# Ensure an attribution source triggers in a secure context + +An attribution source event was not recorded because the frame that triggered the event (or the main frame if they +are different) is not trustworthy. diff --git a/chii/models/issues_manager/descriptions/arAttributionSourceUntrustworthyOrigin.md b/chii/models/issues_manager/descriptions/arAttributionSourceUntrustworthyOrigin.md new file mode 100644 index 00000000..a35eb491 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arAttributionSourceUntrustworthyOrigin.md @@ -0,0 +1,5 @@ +# Ensure the origins provided in an attribution source are trustworthy + +An attribution source event was not recorded because an untrustworthy origin was specified. +Both, the `attributiondestination` and the `attributionreportto` origins must be +trustworthy. diff --git a/chii/models/issues_manager/descriptions/arAttributionTriggerDataTooLarge.md b/chii/models/issues_manager/descriptions/arAttributionTriggerDataTooLarge.md new file mode 100644 index 00000000..c392cc8a --- /dev/null +++ b/chii/models/issues_manager/descriptions/arAttributionTriggerDataTooLarge.md @@ -0,0 +1,4 @@ +# Ensure the trigger data doesn't exceed the 3-bit limit + +The `trigger-data` query parameter of an attribution redirect was truncated to the lowest 3 bits, because it was exceeding the limit. +Replace the `trigger-data` parameter with an integer that respects the 3-bit limit, that is a number between 0 and 7. diff --git a/chii/models/issues_manager/descriptions/arAttributionUntrustworthyFrameOrigin.md b/chii/models/issues_manager/descriptions/arAttributionUntrustworthyFrameOrigin.md new file mode 100644 index 00000000..1ab92d97 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arAttributionUntrustworthyFrameOrigin.md @@ -0,0 +1,4 @@ +# Ensure an attribution triggers in a secure context + +An attribution was not recorded because the frame that triggered the attribution (or the main frame if they +are different) is not trustworthy. diff --git a/chii/models/issues_manager/descriptions/arAttributionUntrustworthyOrigin.md b/chii/models/issues_manager/descriptions/arAttributionUntrustworthyOrigin.md new file mode 100644 index 00000000..6d49b8c9 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arAttributionUntrustworthyOrigin.md @@ -0,0 +1,4 @@ +# Ensure the origin of an attribution trigger redirect is trustworthy + +An attribution was not recorded because the origin of the attribution trigger redirect was +not trustworthy. For a redirect of the form `https:///.well-known/attribution-reporting/trigger-attribution[?data=]`, the `` origin must be trustworthy. diff --git a/chii/models/issues_manager/descriptions/arInvalidAttributionData.md b/chii/models/issues_manager/descriptions/arInvalidAttributionData.md new file mode 100644 index 00000000..67390b8f --- /dev/null +++ b/chii/models/issues_manager/descriptions/arInvalidAttributionData.md @@ -0,0 +1,8 @@ +# Ensure the "trigger-data" query parameter for an attribution redirect is a valid number + +The data associated with an attribution was defaulted to `0`. +This happens if the `trigger-data` query parameter provided in the `.well-known` redirect +is not a valid integer. + +Note that even if a valid integer is provided, only the lowest 3-bits of the `trigger-data` query parameter +are recorded, with a 5% chance of the 3-bits being noised. diff --git a/chii/models/issues_manager/descriptions/arInvalidAttributionSourceEventId.md b/chii/models/issues_manager/descriptions/arInvalidAttributionSourceEventId.md new file mode 100644 index 00000000..ced433f3 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arInvalidAttributionSourceEventId.md @@ -0,0 +1,3 @@ +# Ensure Attribution Source Event Id is a valid 64-bit integer + +An attribution source event was not recorded because the provided `attributionSourceEventId` is not a valid integer under 64 bits. diff --git a/chii/models/issues_manager/descriptions/arMissingAttributionData.md b/chii/models/issues_manager/descriptions/arMissingAttributionData.md new file mode 100644 index 00000000..b8f3583d --- /dev/null +++ b/chii/models/issues_manager/descriptions/arMissingAttributionData.md @@ -0,0 +1,7 @@ +# Ensure the "trigger-data" query parameter for an attribution redirect is included + +The data associated with an attribution was defaulted to `0` because no `trigger-data` +query parameter in the `.well-known` redirect was provided. + +Note that the `trigger-data` query parameter must be a valid integer and only the lowest 3-bits +are recorded with a 5% chance of being noised. diff --git a/chii/models/issues_manager/descriptions/arPermissionPolicyDisabled.md b/chii/models/issues_manager/descriptions/arPermissionPolicyDisabled.md new file mode 100644 index 00000000..24eb8c45 --- /dev/null +++ b/chii/models/issues_manager/descriptions/arPermissionPolicyDisabled.md @@ -0,0 +1,6 @@ +# Ensure the "attribution-reporting" Permission Policy is enabled when using the Attribution Reporting API + +This page tries to use the Attribution Reporting API but this was aborted, because the `attribution-reporting` policy is not enabled. + +This API is enabled by default in the top-level context and in same-origin child frames, but must +be explicitly opted-in for cross-origin frames. Add the permission policy as follows: `