From 0940b036498ce913d5118dd5c4aa02d0ade39f8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Naz=C4=B1m=20Can=20Alt=C4=B1nova?= Date: Mon, 29 Jun 2026 15:31:38 +0300 Subject: [PATCH 01/33] Bump profiler-cli version to 0.4.0 (#6132) --- profiler-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiler-cli/package.json b/profiler-cli/package.json index e5dd4fbae9..0216d18372 100644 --- a/profiler-cli/package.json +++ b/profiler-cli/package.json @@ -1,6 +1,6 @@ { "name": "@firefox-devtools/profiler-cli", - "version": "0.3.0", + "version": "0.4.0", "description": "Command-line interface for querying Firefox Profiler profiles with persistent daemon sessions", "scripts": { "prepublishOnly": "node ../scripts/verify-profiler-cli-build.mjs" From 03b9fc2ff4cc9e59364a13c41c6bcdf5589693e8 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 14:50:41 +0200 Subject: [PATCH 02/33] Update all Yarn dependencies (2026-07-01) (#6135) Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- package.json | 14 ++-- yarn.lock | 222 ++++++++++++++++++++++++--------------------------- 2 files changed, 113 insertions(+), 123 deletions(-) diff --git a/package.json b/package.json index 96e20725f8..0918f33e3d 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lang-rust": "^6.0.2", "@codemirror/language": "^6.12.3", - "@codemirror/state": "^6.6.0", + "@codemirror/state": "^6.7.0", "@codemirror/view": "^6.43.1", "@firefox-devtools/react-contextmenu": "^5.2.4", "@fluent/bundle": "^0.19.1", @@ -110,7 +110,7 @@ "redux-logger": "^3.0.6", "redux-thunk": "^3.1.0", "reselect": "^4.1.8", - "smol-toml": "^1.6.1", + "smol-toml": "^1.7.0", "source-map": "^0.7.6", "url": "^0.11.4", "valibot": "^1.4.1", @@ -136,12 +136,12 @@ "@types/react-dom": "^19.2.3", "@types/redux-logger": "^3.0.6", "@types/tgwf__co2": "^0.14.2", - "@typescript-eslint/eslint-plugin": "^8.60.0", - "@typescript-eslint/parser": "^8.60.0", + "@typescript-eslint/eslint-plugin": "^8.62.1", + "@typescript-eslint/parser": "^8.62.1", "alex": "^11.0.1", "babel-jest": "^30.4.1", "babel-plugin-module-resolver": "^5.0.3", - "browserslist": "^4.28.2", + "browserslist": "^4.28.4", "browserslist-to-esbuild": "^2.1.1", "caniuse-lite": "^1.0.30001799", "cross-env": "^10.1.0", @@ -160,7 +160,7 @@ "eslint-plugin-testing-library": "^7.16.2", "fake-indexeddb": "^6.2.5", "fetch-mock": "^12.6.0", - "globals": "^17.6.0", + "globals": "^17.7.0", "husky": "^4.3.8", "jest": "^30.4.2", "jest-environment-jsdom": "^30.4.1", @@ -178,7 +178,7 @@ "stylelint-config-idiomatic-order": "^10.0.0", "stylelint-config-standard": "^40.0.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.60.0", + "typescript-eslint": "^8.62.1", "workbox-cli": "^7.4.1", "yargs": "^18.0.0" }, diff --git a/yarn.lock b/yarn.lock index c7c896af88..2bc5766005 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1116,10 +1116,10 @@ "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/state@^6.0.0", "@codemirror/state@^6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.6.0.tgz#b88dbdc14aea4ace3c6d67bb77fe28bb84e4394e" - integrity sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ== +"@codemirror/state@^6.0.0", "@codemirror/state@^6.6.0", "@codemirror/state@^6.7.0": + version "6.7.0" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.7.0.tgz#624c3504dc3d04e727dd49711fb75244e675e8e7" + integrity sha512-Zbl9NyscLMZkfXPQnNAIIAFftidrA1UbcJEIMp24C0Bukc2I5T8wJS0wsXYsnDOqCFJUeJ1BITGNs5CqPDSmSg== dependencies: "@marijn/find-cluster-break" "^1.0.0" @@ -2608,110 +2608,100 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.60.0", "@typescript-eslint/eslint-plugin@^8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.0.tgz#8fc1e0a950c43270eaf0212dc060f7edaa42f9cf" - integrity sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw== +"@typescript-eslint/eslint-plugin@8.62.1", "@typescript-eslint/eslint-plugin@^8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.1.tgz#1736dcdca6cae3359d818456a47d18b674761f7f" + integrity sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA== dependencies: "@eslint-community/regexpp" "^4.12.2" - "@typescript-eslint/scope-manager" "8.60.0" - "@typescript-eslint/type-utils" "8.60.0" - "@typescript-eslint/utils" "8.60.0" - "@typescript-eslint/visitor-keys" "8.60.0" + "@typescript-eslint/scope-manager" "8.62.1" + "@typescript-eslint/type-utils" "8.62.1" + "@typescript-eslint/utils" "8.62.1" + "@typescript-eslint/visitor-keys" "8.62.1" ignore "^7.0.5" natural-compare "^1.4.0" ts-api-utils "^2.5.0" -"@typescript-eslint/parser@8.60.0", "@typescript-eslint/parser@^8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.60.0.tgz#38d611b8e658cb10850d4975e8a175a222fbcd6a" - integrity sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg== +"@typescript-eslint/parser@8.62.1", "@typescript-eslint/parser@^8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.62.1.tgz#d3f7ba18f1bf78bfb7256fea021d1927b48e7080" + integrity sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA== dependencies: - "@typescript-eslint/scope-manager" "8.60.0" - "@typescript-eslint/types" "8.60.0" - "@typescript-eslint/typescript-estree" "8.60.0" - "@typescript-eslint/visitor-keys" "8.60.0" + "@typescript-eslint/scope-manager" "8.62.1" + "@typescript-eslint/types" "8.62.1" + "@typescript-eslint/typescript-estree" "8.62.1" + "@typescript-eslint/visitor-keys" "8.62.1" debug "^4.4.3" -"@typescript-eslint/project-service@8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.60.0.tgz#b82ab12e64d005d0c7163d1240c432381f1bde0f" - integrity sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg== +"@typescript-eslint/project-service@8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.62.1.tgz#78d880eb1cf6859b5ec263d04f95403e9f90ae47" + integrity sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.60.0" - "@typescript-eslint/types" "^8.60.0" + "@typescript-eslint/tsconfig-utils" "^8.62.1" + "@typescript-eslint/types" "^8.62.1" debug "^4.4.3" -"@typescript-eslint/scope-manager@8.60.0", "@typescript-eslint/scope-manager@^8.56.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.60.0.tgz#7617a4617c043fe235dcf066f9a40f106cfd2fd5" - integrity sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw== +"@typescript-eslint/scope-manager@8.62.1", "@typescript-eslint/scope-manager@^8.56.0": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz#7ee65e9a6eb3ccdc4816593a4ff38840306de88a" + integrity sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg== dependencies: - "@typescript-eslint/types" "8.60.0" - "@typescript-eslint/visitor-keys" "8.60.0" - -"@typescript-eslint/tsconfig-utils@8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.0.tgz#3af78c48956227a407dea9626b8db8ca53f130d2" - integrity sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ== + "@typescript-eslint/types" "8.62.1" + "@typescript-eslint/visitor-keys" "8.62.1" -"@typescript-eslint/tsconfig-utils@^8.60.0": - version "8.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz#bee8b942a13679a878101c9c74577d732062ed93" - integrity sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA== +"@typescript-eslint/tsconfig-utils@8.62.1", "@typescript-eslint/tsconfig-utils@^8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz#e2b5f24fe721044189cb7e81117c96d75979d627" + integrity sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g== -"@typescript-eslint/type-utils@8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.60.0.tgz#6971a61bc4f3a1b2df45dcc14e26a43a88a4cb6a" - integrity sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg== +"@typescript-eslint/type-utils@8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.62.1.tgz#ebd30b13bacb13070917259a23309cf644121f9a" + integrity sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg== dependencies: - "@typescript-eslint/types" "8.60.0" - "@typescript-eslint/typescript-estree" "8.60.0" - "@typescript-eslint/utils" "8.60.0" + "@typescript-eslint/types" "8.62.1" + "@typescript-eslint/typescript-estree" "8.62.1" + "@typescript-eslint/utils" "8.62.1" debug "^4.4.3" ts-api-utils "^2.5.0" -"@typescript-eslint/types@8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.60.0.tgz#e77ad768e933263b1960b2fe79de75fe1cc6e7db" - integrity sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA== - -"@typescript-eslint/types@^8.60.0": - version "8.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.60.1.tgz#ccdc482ba9e17f9723a10ce240b5e67dad3046c4" - integrity sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w== - -"@typescript-eslint/typescript-estree@8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.0.tgz#c102196a44414481190041c99eea1d854e66001b" - integrity sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g== - dependencies: - "@typescript-eslint/project-service" "8.60.0" - "@typescript-eslint/tsconfig-utils" "8.60.0" - "@typescript-eslint/types" "8.60.0" - "@typescript-eslint/visitor-keys" "8.60.0" +"@typescript-eslint/types@8.62.1", "@typescript-eslint/types@^8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.62.1.tgz#c58be954e483b2fc98275374d5bcb40b99842dc1" + integrity sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q== + +"@typescript-eslint/typescript-estree@8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz#98c1bb17635d5b026b24193a8d29188ac64380ff" + integrity sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA== + dependencies: + "@typescript-eslint/project-service" "8.62.1" + "@typescript-eslint/tsconfig-utils" "8.62.1" + "@typescript-eslint/types" "8.62.1" + "@typescript-eslint/visitor-keys" "8.62.1" debug "^4.4.3" minimatch "^10.2.2" semver "^7.7.3" tinyglobby "^0.2.15" ts-api-utils "^2.5.0" -"@typescript-eslint/utils@8.60.0", "@typescript-eslint/utils@^8.0.0", "@typescript-eslint/utils@^8.56.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.60.0.tgz#6110cddaef87606ae4ca6f8bf81bb5949fc8e098" - integrity sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA== +"@typescript-eslint/utils@8.62.1", "@typescript-eslint/utils@^8.0.0", "@typescript-eslint/utils@^8.56.0": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.62.1.tgz#1622b75c7e6df308181dd0b44855dc4228da0457" + integrity sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g== dependencies: "@eslint-community/eslint-utils" "^4.9.1" - "@typescript-eslint/scope-manager" "8.60.0" - "@typescript-eslint/types" "8.60.0" - "@typescript-eslint/typescript-estree" "8.60.0" + "@typescript-eslint/scope-manager" "8.62.1" + "@typescript-eslint/types" "8.62.1" + "@typescript-eslint/typescript-estree" "8.62.1" -"@typescript-eslint/visitor-keys@8.60.0": - version "8.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.0.tgz#f2c41eedd3d7b03b808369fb2e3fb40a93783ec2" - integrity sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg== +"@typescript-eslint/visitor-keys@8.62.1": + version "8.62.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz#499657d77ffafb8a99eb1d6c97847ca430234722" + integrity sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g== dependencies: - "@typescript-eslint/types" "8.60.0" + "@typescript-eslint/types" "8.62.1" eslint-visitor-keys "^5.0.0" "@ungap/structured-clone@^1.3.0": @@ -3287,10 +3277,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.10.12: - version "2.10.18" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz#565745085ba7743af7d4072707ad132db3a5a42f" - integrity sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A== +baseline-browser-mapping@^2.10.38: + version "2.10.40" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz#f372c8eb36ff4ad0b5e7ae467014abef124554ba" + integrity sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw== basic-auth@^2.0.1, basic-auth@~2.0.1: version "2.0.1" @@ -3382,15 +3372,15 @@ browserslist-to-esbuild@^2.1.1: dependencies: meow "^13.0.0" -browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.2: - version "4.28.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" - integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== +browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.4: + version "4.28.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.4.tgz#dd8b8167a32845ff5f8cd6ce13f5abba16cd04c9" + integrity sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw== dependencies: - baseline-browser-mapping "^2.10.12" - caniuse-lite "^1.0.30001782" - electron-to-chromium "^1.5.328" - node-releases "^2.0.36" + baseline-browser-mapping "^2.10.38" + caniuse-lite "^1.0.30001799" + electron-to-chromium "^1.5.376" + node-releases "^2.0.48" update-browserslist-db "^1.2.3" bser@2.1.1: @@ -3560,7 +3550,7 @@ camelcase@^8.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-8.0.0.tgz#c0d36d418753fb6ad9c5e0437579745c1c14a534" integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA== -caniuse-lite@^1.0.30001782, caniuse-lite@^1.0.30001799: +caniuse-lite@^1.0.30001799: version "1.0.30001799" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz#5c909138c27f1a61219d3e092071c1cc7d32dc55" integrity sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw== @@ -4344,10 +4334,10 @@ ejs@^3.1.10: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.328: - version "1.5.335" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.335.tgz#0b957cea44ef86795c227c616d16b4803d119daa" - integrity sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q== +electron-to-chromium@^1.5.376: + version "1.5.383" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.383.tgz#5bd22306497d454103b289b0fef97260c56d0855" + integrity sha512-I2484/KkAvl8lm9VyjH2JnbOIV0d/UCqT7gbzs6l+o6Vmn9wgB66uVcKX+Vk6HrXtY6fbWTOEXuv8waDTuFNCw== emittery@^0.13.1: version "0.13.1" @@ -5400,10 +5390,10 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globals@^17.6.0: - version "17.6.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-17.6.0.tgz#0f0be018d5cca8690e6375ead1f65c4bb96191fc" - integrity sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA== +globals@^17.7.0: + version "17.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.7.0.tgz#553d55090b4dde8209ec2da42580d6e7e7d8b10d" + integrity sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg== globalthis@^1.0.4: version "1.0.4" @@ -8464,10 +8454,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-releases@^2.0.36: - version "2.0.37" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.37.tgz#9bd4f10b77ba39c2b9402d4e8399c482a797f671" - integrity sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg== +node-releases@^2.0.48: + version "2.0.50" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.50.tgz#597197a852071ce42fc2550e58e223242bcba969" + integrity sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg== nopt@^2.2.0: version "2.2.1" @@ -10217,10 +10207,10 @@ smob@^1.0.0: resolved "https://registry.yarnpkg.com/smob/-/smob-1.5.0.tgz#85d79a1403abf128d24d3ebc1cdc5e1a9548d3ab" integrity sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig== -smol-toml@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/smol-toml/-/smol-toml-1.6.1.tgz#4fceb5f7c4b86c2544024ef686e12ff0983465be" - integrity sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg== +smol-toml@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/smol-toml/-/smol-toml-1.7.0.tgz#ed1b259ce7e05907df1abe758971bd0a0ef2c0dd" + integrity sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ== source-map-js@^1.2.1: version "1.2.1" @@ -11092,15 +11082,15 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@^8.60.0: - version "8.60.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.60.0.tgz#6686fecb1f4f367c0bf0075828e93b7ecacbc62b" - integrity sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw== +typescript-eslint@^8.62.1: + version "8.62.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.62.1.tgz#eb93fd94d527aa04ec5b844fb0b4ada613cc7d3f" + integrity sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw== dependencies: - "@typescript-eslint/eslint-plugin" "8.60.0" - "@typescript-eslint/parser" "8.60.0" - "@typescript-eslint/typescript-estree" "8.60.0" - "@typescript-eslint/utils" "8.60.0" + "@typescript-eslint/eslint-plugin" "8.62.1" + "@typescript-eslint/parser" "8.62.1" + "@typescript-eslint/typescript-estree" "8.62.1" + "@typescript-eslint/utils" "8.62.1" typescript@^6.0.3: version "6.0.3" From e176afe481decbab78c5936f1b0e4a6f8282493f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Qu=C3=A8ze?= Date: Wed, 1 Jul 2026 19:57:07 +0200 Subject: [PATCH 03/33] Add "/" and "f" keyboard shortcuts to focus the panel filter box (#6025) "/" now focuses the filter input on any panel that has one (Call Tree, Flame Graph, Stack Chart, Marker Chart, Marker Table, Network Chart). The shortcut is discoverable through the input placeholder, which now reads "Enter filter terms (/)". "f" is an additional undocumented shortcut with the same effect, but only on panels where "f" is not already used as a call node transform shortcut (i.e. Marker Chart, Marker Table and Network Chart). It is opt-in via a new alsoFocusOnF prop on PanelSearch. Both shortcuts are no-ops when the user is already typing in an input, textarea or contenteditable element, and when modifier keys are held. --- locales/en-US/app.ftl | 7 +- src/components/shared/IdleSearchField.tsx | 4 +- src/components/shared/MarkerSettings.tsx | 1 + src/components/shared/NetworkSettings.tsx | 1 + src/components/shared/PanelSearch.tsx | 63 +++++++++- src/test/components/PanelSearch.test.tsx | 117 ++++++++++++++++++ .../__snapshots__/FlameGraph.test.tsx.snap | 2 +- .../__snapshots__/MarkerChart.test.tsx.snap | 2 +- .../__snapshots__/MarkerTable.test.tsx.snap | 2 +- .../__snapshots__/NetworkChart.test.tsx.snap | 2 +- .../ProfileCallTreeView.test.tsx.snap | 34 ++--- .../__snapshots__/StackChart.test.tsx.snap | 10 +- .../__snapshots__/StackSettings.test.tsx.snap | 2 +- src/test/fixtures/utils.ts | 3 + 14 files changed, 218 insertions(+), 32 deletions(-) create mode 100644 src/test/components/PanelSearch.test.tsx diff --git a/locales/en-US/app.ftl b/locales/en-US/app.ftl index 86409569e7..3697baf81e 100644 --- a/locales/en-US/app.ftl +++ b/locales/en-US/app.ftl @@ -428,8 +428,11 @@ Home--chrome-extension-recording-instructions = Once installed, use the extensio ## IdleSearchField ## The component that is used for all the search inputs in the application. -IdleSearchField--search-input = - .placeholder = Enter filter terms +# `/` here overrides Firefox's Type Ahead Find shortcut, which would +# otherwise trigger an unhelpful find bar on top of the profiler UI. +# The shortcut itself is not localizable. +IdleSearchField--search-input2 = + .placeholder = Enter filter terms (/) ## JsTracerSettings ## JSTracer is an experimental feature and it's currently disabled. See Bug 1565788. diff --git a/src/components/shared/IdleSearchField.tsx b/src/components/shared/IdleSearchField.tsx index 6df08478d5..03eb79d07d 100644 --- a/src/components/shared/IdleSearchField.tsx +++ b/src/components/shared/IdleSearchField.tsx @@ -122,13 +122,13 @@ export class IdleSearchField extends PureComponent { onSubmit={this._onFormSubmit} > { title="Only display markers that match a certain name" currentSearchString={searchString} onSearch={this._onSearch} + alsoFocusOnF={true} /> diff --git a/src/components/shared/NetworkSettings.tsx b/src/components/shared/NetworkSettings.tsx index fa29fe8ad1..670e1411bd 100644 --- a/src/components/shared/NetworkSettings.tsx +++ b/src/components/shared/NetworkSettings.tsx @@ -44,6 +44,7 @@ class NetworkSettingsImpl extends PureComponent { title="Only display network requests that match a certain name" currentSearchString={searchString} onSearch={this._onSearch} + alsoFocusOnF={true} /> diff --git a/src/components/shared/PanelSearch.tsx b/src/components/shared/PanelSearch.tsx index be4be2aef7..0d86ad2ace 100644 --- a/src/components/shared/PanelSearch.tsx +++ b/src/components/shared/PanelSearch.tsx @@ -14,12 +14,18 @@ type Props = { readonly title: string; readonly currentSearchString: string; readonly onSearch: (param: string) => void; + // When true, the "f" key (in addition to "/") will also focus the search + // field. This is opt-in because some panels (e.g. those showing frames) use + // "f" as a call node transform shortcut. + readonly alsoFocusOnF?: boolean; }; type State = { searchFieldFocused: boolean }; export class PanelSearch extends React.PureComponent { override state = { searchFieldFocused: false }; + _searchFieldWrapper = React.createRef(); + _onSearchFieldIdleAfterChange = (value: string) => { this.props.onSearch(value); }; @@ -32,6 +38,58 @@ export class PanelSearch extends React.PureComponent { this.setState(() => ({ searchFieldFocused: false })); }; + override componentDidMount() { + window.addEventListener('keydown', this._handleGlobalKeyDown); + } + + override componentWillUnmount() { + window.removeEventListener('keydown', this._handleGlobalKeyDown); + } + + _handleGlobalKeyDown = (event: KeyboardEvent) => { + // Ignore key combinations involving modifier keys, so we don't interfere + // with browser or OS shortcuts. + if (event.ctrlKey || event.altKey || event.metaKey) { + return; + } + + const isSlash = event.key === '/'; + const isF = this.props.alsoFocusOnF && event.key === 'f'; + if (!isSlash && !isF) { + return; + } + + // Don't steal the key when the user is already typing in a text input, + // textarea, contenteditable element, or interacting with a select. + const target = event.target; + if (target instanceof HTMLElement) { + const tagName = target.tagName; + if ( + tagName === 'INPUT' || + tagName === 'TEXTAREA' || + tagName === 'SELECT' || + target.isContentEditable + ) { + return; + } + } + + const wrapper = this._searchFieldWrapper.current; + if (!wrapper) { + return; + } + // This is a bit of a hack: we reach into the DOM to find the search input + // rather than holding a ref to it, because the input is rendered by a + // child component (IdleSearchField). See #6060 for a cleaner approach. + const input = wrapper.querySelector( + 'input[type="search"]' + ); + if (input) { + event.preventDefault(); + input.focus(); + } + }; + override render() { const { label, title, currentSearchString, className } = this.props; const { searchFieldFocused } = this.state; @@ -40,7 +98,10 @@ export class PanelSearch extends React.PureComponent { currentSearchString && !currentSearchString.includes(','); return ( -
+