diff --git a/.github/workflows/browser-tests.yml b/.github/workflows/browser-tests.yml
index 585f355eb63..02b12b78235 100644
--- a/.github/workflows/browser-tests.yml
+++ b/.github/workflows/browser-tests.yml
@@ -31,10 +31,10 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
@@ -66,10 +66,10 @@ jobs:
name: jQuery stable
steps:
- name: Checkout
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
@@ -98,10 +98,10 @@ jobs:
name: jQuery stable
steps:
- name: Checkout
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index da841e9a5c2..f189a525f4d 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -33,7 +33,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
+ uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
@@ -41,7 +41,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
+ uses: github/codeql-action/autobuild@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4
# âšī¸ Command-line programs to run using the OS shell.
# đ https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -55,4 +55,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
+ uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4
diff --git a/.github/workflows/filestash.yml b/.github/workflows/filestash.yml
index 1f95d78c464..62d21990819 100644
--- a/.github/workflows/filestash.yml
+++ b/.github/workflows/filestash.yml
@@ -17,10 +17,10 @@ jobs:
name: Update Filestash
steps:
- name: Checkout
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml
index faaa76b8964..286c79887c1 100644
--- a/.github/workflows/node.js.yml
+++ b/.github/workflows/node.js.yml
@@ -18,10 +18,10 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
diff --git a/Gruntfile.js b/Gruntfile.js
index 0af16188106..db31ef4742a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -253,8 +253,8 @@ grunt.initConfig( {
"jquery-simulate/jquery.simulate.js": "jquery-simulate/jquery.simulate.js",
"jquery-simulate/LICENSE.txt": "jquery-simulate/LICENSE.txt",
- "jquery/jquery.js": "jquery-3.x/dist/jquery.js",
- "jquery/LICENSE.txt": "jquery-3.x/LICENSE.txt",
+ "jquery/jquery.js": "jquery/dist/jquery.js",
+ "jquery/LICENSE.txt": "jquery/LICENSE.txt",
"jquery-1.12.4/jquery.js": "jquery-1.12.4/dist/jquery.js",
"jquery-1.12.4/LICENSE.txt": "jquery-1.12.4/LICENSE.txt",
@@ -316,8 +316,8 @@ grunt.initConfig( {
"jquery-3.7.1/jquery.js": "jquery-3.7.1/dist/jquery.js",
"jquery-3.7.1/LICENSE.txt": "jquery-3.7.1/LICENSE.txt",
- "jquery-4.0.0-rc.1/jquery.js": "jquery-4.0.0-rc.1/dist/jquery.js",
- "jquery-4.0.0-rc.1/LICENSE.txt": "jquery-4.0.0-rc.1/LICENSE.txt",
+ "jquery-4.0.0/jquery.js": "jquery-4.0.0/dist/jquery.js",
+ "jquery-4.0.0/LICENSE.txt": "jquery-4.0.0/LICENSE.txt",
"jquery-migrate-1.x/jquery-migrate.js":
"jquery-migrate-1.x/dist/jquery-migrate.js",
diff --git a/bower.json b/bower.json
index e27c3a1bd97..b7b97cde5b6 100644
--- a/bower.json
+++ b/bower.json
@@ -16,9 +16,9 @@
"jquery-mousewheel": "3.2.2",
"jquery-simulate": "1.1.1",
"qunit": "2.19.4",
- "requirejs": "2.1.14",
+ "requirejs": "2.3.8",
+ "jquery": "jquery#4.0.0",
"jquery-1.12.4": "jquery#1.12.4",
- "jquery-3.x": "jquery#3.7.1",
"jquery-2.2.4": "jquery#2.2.4",
"jquery-3.0.0": "jquery#3.0.0",
"jquery-3.1.0": "jquery#3.1.0",
@@ -38,9 +38,9 @@
"jquery-3.6.4": "jquery#3.6.4",
"jquery-3.7.0": "jquery#3.7.0",
"jquery-3.7.1": "jquery#3.7.1",
- "jquery-4.0.0-rc.1": "jquery#4.0.0-rc.1",
+ "jquery-4.0.0": "jquery#4.0.0",
"jquery-migrate-1.x": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-1.4.1.tgz",
- "jquery-migrate-3.x": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.5.2.tgz",
- "jquery-migrate-4.x": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-4.0.0-beta.1.tgz"
+ "jquery-migrate-3.x": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.6.0.tgz",
+ "jquery-migrate-4.x": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-4.0.2.tgz"
}
}
diff --git a/build/release.js b/build/release.js
index 633dd34d12c..912df02112a 100644
--- a/build/release.js
+++ b/build/release.js
@@ -153,7 +153,7 @@ Release.define( {
};
module.exports.dependencies = [
- "download.jqueryui.com@2.3.12",
+ "download.jqueryui.com@2.4.5",
"node-packager@0.0.7",
"shelljs@0.8.5"
];
diff --git a/external/jquery-4.0.0-rc.1/LICENSE.txt b/external/jquery-4.0.0/LICENSE.txt
similarity index 100%
rename from external/jquery-4.0.0-rc.1/LICENSE.txt
rename to external/jquery-4.0.0/LICENSE.txt
diff --git a/external/jquery-4.0.0-rc.1/jquery.js b/external/jquery-4.0.0/jquery.js
similarity index 99%
rename from external/jquery-4.0.0-rc.1/jquery.js
rename to external/jquery-4.0.0/jquery.js
index 004ecb2046b..097b0883448 100644
--- a/external/jquery-4.0.0-rc.1/jquery.js
+++ b/external/jquery-4.0.0/jquery.js
@@ -1,12 +1,12 @@
/*!
- * jQuery JavaScript Library v4.0.0-rc.1
+ * jQuery JavaScript Library v4.0.0
* https://jquery.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.com/license/
*
- * Date: 2025-08-11T16:40Z
+ * Date: 2026-01-18T00:20Z
*/
( function( global, factory ) {
@@ -116,7 +116,7 @@ function DOMEval( code, node, doc ) {
}
}
-var version = "4.0.0-rc.1",
+var version = "4.0.0",
rhtmlSuffix = /HTML$/i,
@@ -530,54 +530,20 @@ var whitespace = "[\\x20\\t\\r\\n\\f]";
var isIE = document$1.documentMode;
-// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
-// Make sure the `:has()` argument is parsed unforgivingly.
-// We include `*` in the test to detect buggy implementations that are
-// _selectively_ forgiving (specifically when the list includes at least
-// one valid selector).
-// Note that we treat complete lack of support for `:has()` as if it were
-// spec-compliant support, which is fine because use of `:has()` in such
-// environments will fail in the qSA path and fall back to jQuery traversal
-// anyway.
-try {
- document$1.querySelector( ":has(*,:jqfake)" );
- support.cssHas = false;
-} catch ( e ) {
- support.cssHas = true;
-}
-
-// Build QSA regex.
-// Regex strategy adopted from Diego Perini.
-var rbuggyQSA = [];
-
-if ( isIE ) {
- rbuggyQSA.push(
-
- // Support: IE 9 - 11+
- // IE's :disabled selector does not pick up the children of disabled fieldsets
- ":enabled",
- ":disabled",
-
- // Support: IE 11+
- // IE 11 doesn't find elements on a `[name='']` query in some cases.
- // Adding a temporary attribute to the document before the selection works
- // around the issue.
- "\\[" + whitespace + "*name" + whitespace + "*=" +
- whitespace + "*(?:''|\"\")"
- );
-}
+var rbuggyQSA = isIE && new RegExp(
-if ( !support.cssHas ) {
+ // Support: IE 9 - 11+
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
+ ":enabled|:disabled|" +
- // Our regular `try-catch` mechanism fails to detect natively-unsupported
- // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
- // in browsers that parse the `:has()` argument as a forgiving selector list.
- // https://drafts.csswg.org/selectors/#relational now requires the argument
- // to be parsed unforgivingly, but browsers have not yet fully adjusted.
- rbuggyQSA.push( ":has" );
-}
+ // Support: IE 11+
+ // IE 11 doesn't find elements on a `[name='']` query in some cases.
+ // Adding a temporary attribute to the document before the selection works
+ // around the issue.
+ "\\[" + whitespace + "*name" + whitespace + "*=" +
+ whitespace + "*(?:''|\"\")"
-rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+);
var rtrimCSS = new RegExp(
"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
diff --git a/external/jquery-migrate-3.x/jquery-migrate.js b/external/jquery-migrate-3.x/jquery-migrate.js
index edc32de3921..1e8642cbbf9 100644
--- a/external/jquery-migrate-3.x/jquery-migrate.js
+++ b/external/jquery-migrate-3.x/jquery-migrate.js
@@ -1,6 +1,8 @@
/*!
- * jQuery Migrate - v3.5.2 - 2024-07-17T22:31Z
+ * jQuery Migrate - v3.6.0 - 2025-12-11T02:48Z
* Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.com/license/
*/
( function( factory ) {
"use strict";
@@ -24,7 +26,7 @@
} )( function( jQuery, window ) {
"use strict";
-jQuery.migrateVersion = "3.5.2";
+jQuery.migrateVersion = "3.6.0";
// Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2
function compareVersions( v1, v2 ) {
@@ -53,7 +55,7 @@ function jQueryVersionSince( version ) {
var disabledPatches = Object.create( null );
// Don't apply patches for specified codes. Helpful for code bases
-// where some Migrate warnings have been addressed and it's desirable
+// where some Migrate warnings have been addressed, and it's desirable
// to avoid needless patches or false positives.
jQuery.migrateDisablePatches = function() {
var i;
@@ -91,10 +93,10 @@ if ( !window.console || !window.console.log ) {
return;
}
-// Need jQuery 3.x-4.x and no older Migrate loaded
+// Need jQuery 3.x and no older Migrate loaded
if ( !jQuery || !jQueryVersionSince( "3.0.0" ) ||
- jQueryVersionSince( "5.0.0" ) ) {
- window.console.log( "JQMIGRATE: jQuery 3.x-4.x REQUIRED" );
+ jQueryVersionSince( "4.0.0" ) ) {
+ window.console.log( "JQMIGRATE: jQuery 3.x REQUIRED" );
}
if ( jQuery.migrateWarnings ) {
window.console.log( "JQMIGRATE: Migrate plugin loaded multiple times" );
@@ -109,13 +111,13 @@ window.console.log( "JQMIGRATE: Migrate is installed" +
var warnedAbout = {};
-// By default each warning is only reported once.
+// By default, each warning is only reported once.
jQuery.migrateDeduplicateWarnings = true;
// List of warnings already given; public read only
jQuery.migrateWarnings = [];
-// Set to false to disable traces that appear with warnings
+// Set to `false` to disable traces that appear with warnings
if ( jQuery.migrateTrace === undefined ) {
jQuery.migrateTrace = true;
}
@@ -199,78 +201,27 @@ if ( window.document.compatMode === "BackCompat" ) {
migrateWarn( "quirks", "jQuery is not compatible with Quirks Mode" );
}
-var findProp,
+var arr = [],
+ push = arr.push,
+ sort = arr.sort,
+ splice = arr.splice,
class2type = {},
- oldInit = jQuery.fn.init,
- oldFind = jQuery.find,
-
- rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
- rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
// Require that the "whitespace run" starts from a non-whitespace
// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
-migratePatchFunc( jQuery.fn, "init", function( arg1 ) {
- var args = Array.prototype.slice.call( arguments );
-
- if ( jQuery.migrateIsPatchEnabled( "selector-empty-id" ) &&
- typeof arg1 === "string" && arg1 === "#" ) {
-
- // JQuery( "#" ) is a bogus ID selector, but it returned an empty set
- // before jQuery 3.0
- migrateWarn( "selector-empty-id", "jQuery( '#' ) is not a valid selector" );
- args[ 0 ] = [];
- }
-
- return oldInit.apply( this, args );
-}, "selector-empty-id" );
-
-// This is already done in Core but the above patch will lose this assignment
-// so we need to redo it. It doesn't matter whether the patch is enabled or not
-// as the method is always going to be a Migrate-created wrapper.
-jQuery.fn.init.prototype = jQuery.fn;
-
-migratePatchFunc( jQuery, "find", function( selector ) {
- var args = Array.prototype.slice.call( arguments );
-
- // Support: PhantomJS 1.x
- // String#match fails to match when used with a //g RegExp, only on some strings
- if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {
-
- // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
- // First see if qS thinks it's a valid selector, if so avoid a false positive
- try {
- window.document.querySelector( selector );
- } catch ( err1 ) {
-
- // Didn't *look* valid to qSA, warn and try quoting what we think is the value
- selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
- return "[" + attr + op + "\"" + value + "\"]";
- } );
-
- // If the regexp *may* have created an invalid selector, don't update it
- // Note that there may be false alarms if selector uses jQuery extensions
- try {
- window.document.querySelector( selector );
- migrateWarn( "selector-hash",
- "Attribute selector with '#' must be quoted: " + args[ 0 ] );
- args[ 0 ] = selector;
- } catch ( err2 ) {
- migrateWarn( "selector-hash",
- "Attribute selector with '#' was not fixed: " + args[ 0 ] );
- }
- }
- }
-
- return oldFind.apply( this, args );
-}, "selector-hash" );
-
-// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
-for ( findProp in oldFind ) {
- if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
- jQuery.find[ findProp ] = oldFind[ findProp ];
- }
+function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML