From cc326f569351dac0a2489760ccfb9d94e89a9e15 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Thu, 4 Jun 2026 16:27:24 +0530 Subject: [PATCH 01/15] fix(build): compile blocks under assets/build/blocks/ --- package-lock.json | 2590 +++++++++++++++++++++++++++++++++++++-------- package.json | 8 +- webpack.config.js | 10 +- 3 files changed, 2175 insertions(+), 433 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8d7bad6..23e480be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,12 @@ "devDependencies": { "@babel/core": "7.29.7", "@eslint-community/eslint-plugin-eslint-comments": "4.7.2", + "@types/jest": "^29.5.14", + "@types/node": "^22.10.0", + "@types/wordpress__block-editor": "15.0.6", + "@types/wordpress__i18n": "3.11.0", + "@typescript-eslint/eslint-plugin": "^8.20.0", + "@typescript-eslint/parser": "^8.20.0", "@wordpress/babel-preset-default": "8.47.0", "@wordpress/browserslist-config": "6.47.0", "@wordpress/env": "11.7.0", @@ -36,6 +42,7 @@ "npm-run-all": "4.1.5", "rtlcss": "4.3.0", "svgo": "4.0.1", + "typescript": "^5.7.0", "webpack": "5.107.2", "webpack-remove-empty-scripts": "1.1.1" } @@ -54,6 +61,94 @@ "node": ">=6.0.0" } }, + "node_modules/@ariakit/components": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ariakit/components/-/components-0.1.2.tgz", + "integrity": "sha512-tvh2P0x1cJnoPXnmDEJwdRk3z7x6cTB8ArctcZdAUXlRg9tuwW/rJoBFJMzD5qMI9CDDlQ3Zctx58HvENw4BYw==", + "dev": true, + "dependencies": { + "@ariakit/store": "0.1.2", + "@ariakit/utils": "0.1.2" + } + }, + "node_modules/@ariakit/react": { + "version": "0.4.29", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.29.tgz", + "integrity": "sha512-SLXlsddWHSwfUol4Yi0zULlalNWjzWjpS3zg7B7aaPd64saONQ5ktWf9KMxqBklcpjMLeF2dB9BAHAvpPVdCIQ==", + "dev": true, + "dependencies": { + "@ariakit/react-components": "0.1.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ariakit" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@ariakit/react-components": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ariakit/react-components/-/react-components-0.1.2.tgz", + "integrity": "sha512-SM+SPMAVlOZmGAfWNBza+0k9y4mkA5/dJhDoOyhE96cbNARy665uLdwowSJl1JGuFfcZzuzAwGon7f/rYeyfkQ==", + "dev": true, + "dependencies": { + "@ariakit/components": "0.1.2", + "@ariakit/react-store": "0.1.2", + "@ariakit/react-utils": "0.1.2", + "@ariakit/store": "0.1.2", + "@ariakit/utils": "0.1.2", + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@ariakit/react-store": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ariakit/react-store/-/react-store-0.1.2.tgz", + "integrity": "sha512-1r1Gn0tqhnOS0LFvHNGzn5/8C5aOANO5vb0Gxh94oR/be4zwCSE2zfQjOjRfpL+BBDhOcProME2+G6UslEJxbg==", + "dev": true, + "dependencies": { + "@ariakit/react-utils": "0.1.2", + "@ariakit/store": "0.1.2", + "@ariakit/utils": "0.1.2", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@ariakit/react-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ariakit/react-utils/-/react-utils-0.1.2.tgz", + "integrity": "sha512-Rnl6D1542Mqu80xK++oUv1JXS0PtNmKXd9nkdud5nyvySiBDTrmPqRW44/D+5GbuZrboreQuY3tPYwKL7a7onQ==", + "dev": true, + "dependencies": { + "@ariakit/store": "0.1.2", + "@ariakit/utils": "0.1.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@ariakit/store": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ariakit/store/-/store-0.1.2.tgz", + "integrity": "sha512-SS7bV4+a+1q9M9i0WV6DD4P/ypRKlCvII8soo2UMe1yuaxZA/Fc0htHe+EZwjJ6TMLjHfHh2TDSnXyrjC7QImA==", + "dev": true, + "dependencies": { + "@ariakit/utils": "0.1.2" + } + }, + "node_modules/@ariakit/utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ariakit/utils/-/utils-0.1.2.tgz", + "integrity": "sha512-lBJhtBWpKjIck/9i7G8cahvaUgLsyGklI/Pjv+VtY9KTzyuzX5GpRbbLKMS/e1qLnFPS4C3CybYB70b1bVcAkw==", + "dev": true + }, "node_modules/@asamuzakjp/css-color": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", @@ -1976,6 +2071,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", @@ -2195,9 +2299,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.4.tgz", - "integrity": "sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.5.tgz", + "integrity": "sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==", "dev": true, "funding": [ { @@ -2263,6 +2367,18 @@ "@csstools/css-tokenizer": "^3.0.1" } }, + "node_modules/@date-fns/tz": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.5.0.tgz", + "integrity": "sha512-lwYN/vDPeNRULcepoE/LO2Pgx+7/RV+S9ARfbc9lr2DtGkOD7pAiruHvbR1RX3Qyf6ja47EWJDMsNK5vK08DJg==", + "dev": true + }, + "node_modules/@date-fns/utc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@date-fns/utc/-/utc-2.1.1.tgz", + "integrity": "sha512-SlJDfG6RPeEX8wEVv6ZB3kak4MmbtyiI2qX/5zuKdordbrhB/iaJ58GVMZgJ6P1sJaM1gMgENFYYeg1JWrCFrA==", + "dev": true + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2318,6 +2434,180 @@ "tslib": "^2.4.0" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "dev": true, + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/css": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.13.5.tgz", + "integrity": "sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==", + "dev": true, + "dependencies": { + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "dev": true + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "dev": true, + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "dev": true + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "dev": true, + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "dev": true + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "dev": true + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "dev": true + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "dev": true + }, "node_modules/@es-joy/jsdoccomment": { "version": "0.50.2", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.50.2.tgz", @@ -2470,9 +2760,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", - "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2483,6 +2773,44 @@ "node": "^20.19.0 || ^22.13.0 || >=24" } }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "dev": true + }, "node_modules/@formatjs/ecma402-abstract": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", @@ -4630,14 +4958,14 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.3.tgz", - "integrity": "sha512-IvO50vkGydDZwS1e9rz/JXEtCCt9XvqxoGI6FlrVIvVm4/HpygMKW4ETtREWtMTsN5CLJ9FR6GuCduoQPZLBiw==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.6.tgz", + "integrity": "sha512-uI++Wx6VkBJqVmkb4ZeExwAVpZiA2Do5NrEtXoDk0Pdvce3ytFXJoviT1sLOj16+qDIMnD5nWPfOhVpnDmRJKg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.3", - "@jsonjoy.com/fs-node-utils": "4.57.3", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", "thingies": "^2.5.0" }, "engines": { @@ -4652,15 +4980,15 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.3.tgz", - "integrity": "sha512-JlIDGUWPl7Y6zl+/ISnZuh8z2aMr/xoR66D18zlaVAuL192CvlNJEzOlzp27x4P52HRtDnCSOk6f59vTsmp5vw==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.6.tgz", + "integrity": "sha512-pKkw/yC5CzSZKhIIUIsH1przOa+K5jGmZIg1sWaSF24JojyrUFbjcQv7QrcGAudriei6HQ6R0BFj+V8NbQinJw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.3", - "@jsonjoy.com/fs-node-builtins": "4.57.3", - "@jsonjoy.com/fs-node-utils": "4.57.3", + "@jsonjoy.com/fs-core": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", "thingies": "^2.5.0" }, "engines": { @@ -4675,17 +5003,17 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.3.tgz", - "integrity": "sha512-089gZoKvbeOsT2jeBaVKSz91oFXQWFG7a62sMY6gVMHnoWbyGzTb6OVUP/V7G3wLQLJ555BEsHt8SD1nj1dgaQ==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.6.tgz", + "integrity": "sha512-Kbn1jdkvDN4F2+BhoB6mMu7NCbhP0bgA5NcI1aJj/Q5UcU+I1JLLW+dEQean33iV4tXv35AzBVKPICnDltBpxw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.3", - "@jsonjoy.com/fs-node-builtins": "4.57.3", - "@jsonjoy.com/fs-node-utils": "4.57.3", - "@jsonjoy.com/fs-print": "4.57.3", - "@jsonjoy.com/fs-snapshot": "4.57.3", + "@jsonjoy.com/fs-core": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-print": "4.57.6", + "@jsonjoy.com/fs-snapshot": "4.57.6", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -4701,9 +5029,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.3.tgz", - "integrity": "sha512-JAI3PqNuY8BR7ovy4h0bADLrqJLIcUauONNZfyTxUnj3Wf3tpTYe39eJ6z7FzYyA+tdMt33VpiQQUikGr3QOBw==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.6.tgz", + "integrity": "sha512-V4DgEFT3Cg5S9fCMOZSCVdTxdJWWLBO0WnAazV7hnCM96u5zXHyW/ubDAfcSVwqjkMJ50W1Y44IXtxRoIwaCVg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4718,15 +5046,15 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.3.tgz", - "integrity": "sha512-uZGxyC0zDmcmW5bfHd4YivAZ54BLlbF9G0K5rBaksI/tZdJSGM7/AC+1TY7yvFu0Wc6gUHR7mFwf6SbQ3J1BTQ==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.6.tgz", + "integrity": "sha512-+JptNw3iifihxH2rEXrninDzX4FFVW8JD/wPR8GbJPAeL9CQUSblrlumOPB5gZuS7tYRX+PJPLtT7XzKoRhv/Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.57.3", - "@jsonjoy.com/fs-node-builtins": "4.57.3", - "@jsonjoy.com/fs-node-utils": "4.57.3" + "@jsonjoy.com/fs-fsa": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6" }, "engines": { "node": ">=10.0" @@ -4740,13 +5068,13 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.3.tgz", - "integrity": "sha512-quCil8AvfcOxob4pn0drGdcQWpkPVgkt9q1+EjeyXXT40/L3l5lvYrr6hR8LmHu0eg+DNNaUwqjLT6Hr7V4sdQ==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.6.tgz", + "integrity": "sha512-foyUrfS7WmYEUzqYXSNxmJBcSj04TABrkpFabwO9SCDCpVCfJ+qG+2sk5FjfiflG2n0SDFZDCJ6vYlJAEpxJFg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.3" + "@jsonjoy.com/fs-node-builtins": "4.57.6" }, "engines": { "node": ">=10.0" @@ -4760,13 +5088,13 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.3.tgz", - "integrity": "sha512-ITwaLZpGIqD9jHndwMvDFZDIvbVzGRsJZDQ5HKln0vyMculu1c1nb7zbEBgY8BVSBZ9S2xO138OWIBGeRsrF3Q==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.6.tgz", + "integrity": "sha512-96eAn4Dudtt67LTeuU47yUD+pg9/G/oKpI10zei9ljk3X3WK4lYKc+n3cpaPCAbKPzoyfxl0mXm8f8Y7BOSFXw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.6", "tree-dump": "^1.1.0" }, "engines": { @@ -4781,14 +5109,14 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.3.tgz", - "integrity": "sha512-wdNaG2DxCtvj9lKldAnEV3ycYPEpk+p2cP2lHD1qdxkoQGlWUtQverqvG9KZSkm6BHFha4PP6XRZbpARNfHRxA==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.6.tgz", + "integrity": "sha512-V57CMzbOgTzUWGOWQ8GzHQdpJP6JnrYVNCtTBNxVYEnlVRvo4uEJqHhtAT8vhDFrIuJOXLrTL1Fki4h5oI7xxg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.6", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -6442,9 +6770,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6466,9 +6791,6 @@ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6490,9 +6812,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6514,9 +6833,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6538,9 +6854,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -6562,9 +6875,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6667,13 +6977,13 @@ } }, "node_modules/@php-wasm/cli-util": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.35.tgz", - "integrity": "sha512-qEnMqtqO75d79kYsKz8ikSBoYzIOntF7tmUAcMvJqNrZbKrv59nZ6mkbZUlq+Nie011ZUusoAZOdvIrfSz52OA==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.36.tgz", + "integrity": "sha512-A2xdSL0W2QCVz7xvoNGPcwjyfRCWMQq0NOWuYHeUTxcVUeZ9mB2tcSnw2JySoEktaUIc/csKevmp3Ql1zIMo9g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/util": "3.1.35", + "@php-wasm/util": "3.1.36", "fast-xml-parser": "^5.5.1", "jsonc-parser": "3.3.1" }, @@ -6683,9 +6993,9 @@ } }, "node_modules/@php-wasm/logger": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.35.tgz", - "integrity": "sha512-5xIJ6c9Bh/Ja4iYN68p48AQlPFP0LLLANWtW9wwSwXmqpo3AxbV1SpQK0SbjhDLO6Ts1v2jKC6Q0IIV4sJKQ+w==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.36.tgz", + "integrity": "sha512-Rol0+ZP0JzM1+LP11oP1AJ0G/qEZrbh3XJZwcpi5lhL78ZfKXix4hKAino2C3ObFZXr9I0FbwsG4rifez023lQ==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -6694,24 +7004,24 @@ } }, "node_modules/@php-wasm/node": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.35.tgz", - "integrity": "sha512-npj9hXlwyUx04DULFe+7ha9YazTPaGoJWEWiXezw6hmFCyP7XkcevArl2r3xRVW58oQz17I7oT6oQPiO4LPgxw==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.36.tgz", + "integrity": "sha512-cKlxSm2ksiGmSA6hbJ8Hs4SsfL1k1pLta+F2NqAjaSy1klGzujYdNHetuF81+ge84r0UUU1kGRCa1gF/xh3HRQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.1.35", - "@php-wasm/logger": "3.1.35", - "@php-wasm/node-5-2": "3.1.35", - "@php-wasm/node-7-4": "3.1.35", - "@php-wasm/node-8-0": "3.1.35", - "@php-wasm/node-8-1": "3.1.35", - "@php-wasm/node-8-2": "3.1.35", - "@php-wasm/node-8-3": "3.1.35", - "@php-wasm/node-8-4": "3.1.35", - "@php-wasm/node-8-5": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", + "@php-wasm/cli-util": "3.1.36", + "@php-wasm/logger": "3.1.36", + "@php-wasm/node-5-2": "3.1.36", + "@php-wasm/node-7-4": "3.1.36", + "@php-wasm/node-8-0": "3.1.36", + "@php-wasm/node-8-1": "3.1.36", + "@php-wasm/node-8-2": "3.1.36", + "@php-wasm/node-8-3": "3.1.36", + "@php-wasm/node-8-4": "3.1.36", + "@php-wasm/node-8-5": "3.1.36", + "@php-wasm/universal": "3.1.36", + "@php-wasm/util": "3.1.36", "fs-ext-extra-prebuilt": "2.2.7", "wasm-feature-detect": "1.8.0", "ws": "8.18.0" @@ -6722,13 +7032,13 @@ } }, "node_modules/@php-wasm/node-5-2": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-5-2/-/node-5-2-3.1.35.tgz", - "integrity": "sha512-frJtXTdhIDSlqYWvcbBYrUP/oBDWzStmfdJcsxoRf0171Vr8lhEszs91rVA676T61nIVsstnNkrg4RgfxzYW/A==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-5-2/-/node-5-2-3.1.36.tgz", + "integrity": "sha512-Vrgz+FSKYIgAbQwQirNYkR/N/7MDb8T/dYtCOovh8kSOk9wZKPBRfmg4AVCnUQLoh/fvew0Uzbno7VNEaMn5Ug==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6737,13 +7047,13 @@ } }, "node_modules/@php-wasm/node-7-4": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.35.tgz", - "integrity": "sha512-2xPcC/t+pfkVj0hpPN2oNG1IbQgMplh4YPj2hMtKdxMvmod1OcXShoTHqCNK7ZGFmbT39s1JEIz7nNC7wh0Bjg==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.36.tgz", + "integrity": "sha512-xlN8vpIh8GXoTxgKnRraxxEs0H0tGsOSlFR/Apu2TyjDLEfblgq4ErgkMIVmZFpLV1Xm7itGugJvehDBwRhE4g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6752,13 +7062,13 @@ } }, "node_modules/@php-wasm/node-8-0": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.35.tgz", - "integrity": "sha512-uxDuXN8+JOp57lvMN/dtUMF8cwDkZ/MGD/PixTsh0zSK/NSDVGCod0Yvg53hKNzZsd4Qvj6iW7s6+jxQLMPH8A==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.36.tgz", + "integrity": "sha512-0NDkKQ31ZksN3Ve7684yqrY0CX8zHBNJk2QK9cNcLBSqS1/Kw4TZ+dpx61R2Uapdm0ZGRE4bAfc8Bg2rch7vIA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6767,13 +7077,13 @@ } }, "node_modules/@php-wasm/node-8-1": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.35.tgz", - "integrity": "sha512-46zmiajRUW6msk957y1ZhAYPfn+d/j8jQXNFuUUTB6d5NlMvTrvdY4ZdOTjws9yE1k+eqYF39pfIfQIUQtbkqA==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.36.tgz", + "integrity": "sha512-4HGMGw9omV52h96gBlhmFp0FlX7YiVXw32y/cMCI/pLL4z92qa+J1G63z/5CvubNzii2VInebr4/rIelJvNM5A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6782,13 +7092,13 @@ } }, "node_modules/@php-wasm/node-8-2": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.35.tgz", - "integrity": "sha512-Jmpmyij5GuLBEA8WG/EAaKzVnDREXVs8wkBnJ1qti65eVcrtwccpHrhUHVifnuQmh0PRyKk5bxhHyzekwhw3ew==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.36.tgz", + "integrity": "sha512-RiWmW+YbrmrtoRl9+3zyjPni1F0eSzwBJ0SeAkTCCHd5Ar7O7wzBh4TzF7FDs28ilP1zNOU+vV9Y2Xl121otkg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6797,13 +7107,13 @@ } }, "node_modules/@php-wasm/node-8-3": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.35.tgz", - "integrity": "sha512-NMn/hAs9PsIshG53QMirfzbI56BtSOjVy+cAaeKvdQ+axLmMVb9CE5VMRuglR9P7bKfh/R61mt8onezKdr1pmQ==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.36.tgz", + "integrity": "sha512-JirRWOrr8wFtetoSxmD6orPILDH5P5N2CNxXUn9paEjdzS1OrtWr3r45AC8y6ZI+Dc2/TWaLi1HvnMizo06FxQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6812,13 +7122,13 @@ } }, "node_modules/@php-wasm/node-8-4": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.35.tgz", - "integrity": "sha512-jdhmX9HnrZ7xKhdp4iuTsMYYns46Md9+Rdl3otfcrdWQnfYn5C23J0wUkYVLIbj/cMRcAZVDSoJnxcbCqCYGoQ==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.36.tgz", + "integrity": "sha512-Aq7uI9A/DspJmz3ciDHY9nAge+QYSfJaaMFN4KCEb4I3npIdiLF35/dHPY+aj7ZmMwwLPNsxEAMUN75av1MfYQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6827,13 +7137,13 @@ } }, "node_modules/@php-wasm/node-8-5": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.35.tgz", - "integrity": "sha512-x12fwavQWnqb/HBkLnEgBiW87G5VgzONKtiU3pC9hjtfBTz3MhENCE7Phyr9N5DYW1SeZX/8gDg7kbV/6RLF0A==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.36.tgz", + "integrity": "sha512-eevPJ1q/oOPgQD+L5KQVfKR8xNPlIlMtG5JEieE8320pk1tzUMC4f1ZABJpjDFhpE592rNjHJFoQsLGVTfV+/A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.36", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -6842,13 +7152,13 @@ } }, "node_modules/@php-wasm/progress": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.35.tgz", - "integrity": "sha512-q189opZPpvXVtuTxwEtVuiSqXA3omxLibdWmtT1s+F9K+zO8rLdJb6SzfhV1S2JAYQ4w+PHGyduetNUrEAmVYg==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.36.tgz", + "integrity": "sha512-2NchEvgF6KbNxYOo9PIOiKnJq93EYajLLhub9XK7g5mQmeA+bJg03Mn+QFN4k67sGsVKtgY4W7Wsg8IyoSGbqg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35" + "@php-wasm/logger": "3.1.36" }, "engines": { "node": ">=20.10.0", @@ -6856,9 +7166,9 @@ } }, "node_modules/@php-wasm/scopes": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.35.tgz", - "integrity": "sha512-6StQv8LCp6L9XOLBjnAhiTC6oasEGojk9DGYmLZsC8ZMBkjpLpQ2fBWh3wHAm/RcPh5lrW8Eb3jUWVqwtmEhbA==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.36.tgz", + "integrity": "sha512-hE6Yja+lv5Y7oULwf6hxqeQfmeKU+x7/xIvx6XpFtiesROi3b4W95FWWrgIXgpDUpuYLQWd2C9FQpVcMWdwDzA==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -6867,26 +7177,26 @@ } }, "node_modules/@php-wasm/stream-compression": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.35.tgz", - "integrity": "sha512-0YQSWF5Y1YIBLEVnY1dcrpGveVDUeTs1hx+uFwA4OrN9ZAMExqmghPCJuIkIRw9b8GNsHwojg/LD/5NXgc8fZQ==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.36.tgz", + "integrity": "sha512-6jsYce14wvQ7/ykCGURMaBTqM+edZTBQp0yMYLQWlJbD8DpYeaUkivkWEg0wsNd0ponNEK8jFWr1G5/QETtwxw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/util": "3.1.35" + "@php-wasm/util": "3.1.36" } }, "node_modules/@php-wasm/universal": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.35.tgz", - "integrity": "sha512-/7G87o6Lnux67MMzJFf+y/57Yi7rFQzBKuYLvhAsqg0l5na2m66FMOtTO8vOTYTt0tYcJPlCErenJ6Twd3yElQ==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.36.tgz", + "integrity": "sha512-1aEreyTpNVIBwMHbaWVgeNA8gUfqLPjtJYmtmqlyMounVtxvUGdiSCpIb2G40ZUv5X15FvI30dhnCV4izLJhZA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/progress": "3.1.35", - "@php-wasm/stream-compression": "3.1.35", - "@php-wasm/util": "3.1.35", + "@php-wasm/logger": "3.1.36", + "@php-wasm/progress": "3.1.36", + "@php-wasm/stream-compression": "3.1.36", + "@php-wasm/util": "3.1.36", "ini": "4.1.2" }, "engines": { @@ -6895,9 +7205,9 @@ } }, "node_modules/@php-wasm/util": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.35.tgz", - "integrity": "sha512-JHbScavYz2yTfP/q1Hsn2Gg5tdQooKpQQXI5XEiTLU6YhaXGEW4hp5U+1hPBHFY+aawnByjIVjRkYfu9+YX2RQ==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.36.tgz", + "integrity": "sha512-gLimD7rMWQTLlKJwQmYDephM1/TdSj2IvXx+sy34da+H4H5lMrOfUHQ0SGsHNZIu/ZCjb6DlAzm6IqlKYnhP0A==", "dev": true, "engines": { "node": ">=20.10.0", @@ -6905,14 +7215,14 @@ } }, "node_modules/@php-wasm/web-service-worker": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.35.tgz", - "integrity": "sha512-WfPmMSlGKm8t13HlID/8ULZ20bT9ihbioZd9I6VX8ME88cyUK8+N0kzGvAcT9wjvUODrwSBC2dNzKNHpZe1m9w==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.36.tgz", + "integrity": "sha512-W2ZSOs98v0EkK7xxQCuMhsNOrUw860riYM9OBavYOKU8tQ1l8IUvI2RwgUll9YBEa1tn6A+mDwEaMlcGR2Nfew==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/scopes": "3.1.35", - "@php-wasm/universal": "3.1.35" + "@php-wasm/scopes": "3.1.36", + "@php-wasm/universal": "3.1.36" }, "engines": { "node": ">=20.10.0", @@ -6920,14 +7230,14 @@ } }, "node_modules/@php-wasm/xdebug-bridge": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.35.tgz", - "integrity": "sha512-nIQlvtX+HlixGg6TjQP5reX+KEkBmlrS4339MvIoPbJ7BhH16AR7BmlzaraHIX9CKfCbBo5sbYkA3gKmZfCiOA==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.36.tgz", + "integrity": "sha512-03JgYfzLZ/rcS2aAMKdeDoOborreD/2Ju0lXlgfIfhzTp01z/gV3lOkASbLhjkMG4vYGdOflOFboRGySJPQzaA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/universal": "3.1.35", + "@php-wasm/logger": "3.1.36", + "@php-wasm/universal": "3.1.36", "ws": "8.18.0", "xml2js": "0.6.2", "yargs": "17.7.2" @@ -7554,10 +7864,20 @@ } }, "node_modules/@svgr/core/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -7688,10 +8008,20 @@ } }, "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -7770,6 +8100,52 @@ "node": ">=10" } }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", + "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", + "dev": true, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@tannin/compile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", + "integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==", + "dev": true, + "dependencies": { + "@tannin/evaluate": "^1.2.0", + "@tannin/postfix": "^1.1.0" + } + }, + "node_modules/@tannin/evaluate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz", + "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==", + "dev": true + }, + "node_modules/@tannin/plural-forms": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz", + "integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==", + "dev": true, + "dependencies": { + "@tannin/compile": "^1.1.0" + } + }, + "node_modules/@tannin/postfix": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz", + "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==", + "dev": true + }, + "node_modules/@tannin/sprintf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@tannin/sprintf/-/sprintf-1.3.3.tgz", + "integrity": "sha512-RwARl+hFwhzy0tg9atWcchLFvoQiOh4rrP7uG2N5E4W80BPCUX0ElcUR9St43fxB9EfjsW2df9Qp+UsTbvQDjA==", + "dev": true + }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -7962,6 +8338,18 @@ "@types/node": "*" } }, + "node_modules/@types/gradient-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-1.1.0.tgz", + "integrity": "sha512-SaEcbgQscHtGJ1QL+ajgDTmmqU2f6T+00jZRcFlVHUW2Asivc84LNUev/UQFyu117AsdyrtI+qpwLvgjJXJxmw==", + "dev": true + }, + "node_modules/@types/highlight-words-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.1.tgz", + "integrity": "sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==", + "dev": true + }, "node_modules/@types/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -8013,55 +8401,152 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/jsdom": { - "version": "21.1.7", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", - "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "node_modules/@types/jest/node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "license": "MIT", "dependencies": { - "@types/ms": "*", - "@types/node": "*" + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/mime": { - "version": "1.3.5", + "node_modules/@types/jest/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true, @@ -8074,6 +8559,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mousetrap": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.15.tgz", + "integrity": "sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==", + "dev": true + }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", @@ -8092,9 +8583,9 @@ } }, "node_modules/@types/node": { - "version": "20.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", - "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", + "version": "22.19.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", + "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", "dev": true, "license": "MIT", "dependencies": { @@ -8147,6 +8638,12 @@ "@types/pg": "*" } }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true + }, "node_modules/@types/qs": { "version": "6.15.1", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", @@ -8162,9 +8659,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", - "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", + "version": "19.2.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.16.tgz", + "integrity": "sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==", "dev": true, "license": "MIT", "dependencies": { @@ -8282,6 +8779,258 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/wordpress__block-editor": { + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/@types/wordpress__block-editor/-/wordpress__block-editor-15.0.6.tgz", + "integrity": "sha512-XDc596rkiNLOg0SZRONHojDRd7oE/+96nCBTQq51fJpAfgtHCPXQUs5hYJNaImxqWeuNrqYGpBgU5fFS7ZqRHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "^18", + "@wordpress/blocks": "^15.17.0", + "@wordpress/components": "^30.9.0", + "@wordpress/data": "^10.36.0", + "@wordpress/element": "^6.36.0", + "@wordpress/global-styles-engine": "^1.4.0", + "@wordpress/keycodes": "^4.36.0", + "react-autosize-textarea": "^7.1.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@types/react": { + "version": "18.3.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.30.tgz", + "integrity": "sha512-3ek6mwJL5/VBewBcY4S66cqlCtK3qi4WIq37Z0m/NHw1hjhI7274Mx1qz/+ggSzyBCOEf7eHjBN6INjPAWYfYw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@wordpress/base-styles": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.20.0.tgz", + "integrity": "sha512-Dsug4Zxz2xOFtK6CGThKYXwCqC9Yztw2STKQzwztrX4yW+o6iDbzkxpcwdDhsaVJs0Jt9A4LmJpZPh+pUozzLA==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@wordpress/components": { + "version": "30.9.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-30.9.0.tgz", + "integrity": "sha512-mx0df0TjChmpCtqQn3iFHphqaLQVNk5Yprs+3NJSfm1kWuZPKfVys6AtmhfBgXs/VrrJk34Z+1N+nqXovHuXnw==", + "dev": true, + "dependencies": { + "@ariakit/react": "^0.4.15", + "@date-fns/utc": "^2.1.1", + "@emotion/cache": "^11.7.1", + "@emotion/css": "^11.7.1", + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.0.2", + "@emotion/styled": "^11.6.0", + "@emotion/utils": "^1.0.0", + "@floating-ui/react-dom": "2.0.8", + "@types/gradient-parser": "1.1.0", + "@types/highlight-words-core": "1.2.1", + "@use-gesture/react": "^10.3.1", + "@wordpress/a11y": "^4.36.0", + "@wordpress/base-styles": "^6.12.0", + "@wordpress/compose": "^7.36.0", + "@wordpress/date": "^5.36.0", + "@wordpress/deprecated": "^4.36.0", + "@wordpress/dom": "^4.36.0", + "@wordpress/element": "^6.36.0", + "@wordpress/escape-html": "^3.36.0", + "@wordpress/hooks": "^4.36.0", + "@wordpress/html-entities": "^4.36.0", + "@wordpress/i18n": "^6.9.0", + "@wordpress/icons": "^11.3.0", + "@wordpress/is-shallow-equal": "^5.36.0", + "@wordpress/keycodes": "^4.36.0", + "@wordpress/primitives": "^4.36.0", + "@wordpress/private-apis": "^1.36.0", + "@wordpress/rich-text": "^7.36.0", + "@wordpress/warning": "^3.36.0", + "change-case": "^4.1.2", + "clsx": "^2.1.1", + "colord": "^2.7.0", + "date-fns": "^3.6.0", + "deepmerge": "^4.3.0", + "fast-deep-equal": "^3.1.3", + "framer-motion": "^11.15.0", + "gradient-parser": "1.1.1", + "highlight-words-core": "^1.2.2", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "path-to-regexp": "^6.2.1", + "re-resizable": "^6.4.0", + "react-colorful": "^5.3.1", + "react-day-picker": "^9.7.0", + "remove-accents": "^0.5.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@wordpress/compose": { + "version": "7.46.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.46.0.tgz", + "integrity": "sha512-6Yv9Wb6tlA4JYU9bdWWuIWpTTzBAVA1zrYu1GY9x2/mCOckk9iLcEEfbKULxdjwwcMo3SKqvyby4f6kEUw/Wsw==", + "dev": true, + "dependencies": { + "@types/mousetrap": "^1.6.8", + "@wordpress/deprecated": "^4.46.0", + "@wordpress/dom": "^4.46.0", + "@wordpress/element": "^6.46.0", + "@wordpress/is-shallow-equal": "^5.46.0", + "@wordpress/keycodes": "^4.46.0", + "@wordpress/priority-queue": "^3.46.0", + "@wordpress/undo-manager": "^1.46.0", + "change-case": "^4.1.2", + "mousetrap": "^1.6.5", + "use-memo-one": "^1.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@wordpress/element": { + "version": "6.46.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-6.46.0.tgz", + "integrity": "sha512-hjnrqZi0cZVdkmN0xQavKfSQJYAkb9pVSnDPpuX65OLxeD9/EWkIXvFzBb+nH8c4NzKKSqQU96XCTQrH37OCIA==", + "dev": true, + "dependencies": { + "@types/react": "^18.3.27", + "@types/react-dom": "^18.3.1", + "@wordpress/escape-html": "^3.46.0", + "change-case": "^4.1.2", + "is-plain-object": "^5.0.0", + "react": "^18.3.0", + "react-dom": "^18.3.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/@wordpress/icons": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-11.8.0.tgz", + "integrity": "sha512-ZMNHApHMmPLpNnNLfPLRf6XWoPhZFNKFKdpMlhA6Lx04J1hLVyLRz8PuM+1o3ByxD2ZiExfSRhdmI+7VvEg6DA==", + "dev": true, + "dependencies": { + "@wordpress/element": "^6.41.0", + "@wordpress/primitives": "^4.41.0", + "change-case": "4.1.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "node_modules/@types/wordpress__block-editor/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/react-autosize-textarea": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz", + "integrity": "sha512-BHpjCDkuOlllZn3nLazY2F8oYO1tS2jHnWhcjTWQdcKiiMU6gHLNt/fzmqMSyerR0eTdKtfSIqtSeTtghNwS+g==", + "dev": true, + "dependencies": { + "autosize": "^4.0.2", + "line-height": "^0.3.1", + "prop-types": "^15.5.6" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0", + "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@types/wordpress__i18n": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@types/wordpress__i18n/-/wordpress__i18n-3.11.0.tgz", + "integrity": "sha512-l4OXE1LQH7IBqRXY//NGBCsM0jPv8sdUEubPaAzPxKUxYGe+I2UTREjwB0ejuh2+J0p90EhW3mX5FYM8a8lf2w==", + "deprecated": "This is a stub types definition. wordpress__i18n provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "@wordpress/i18n": "*" + } + }, "node_modules/@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", @@ -8321,17 +9070,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.0.tgz", - "integrity": "sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz", + "integrity": "sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==", "dev": true, "license": "MIT", "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.60.1", + "@typescript-eslint/type-utils": "8.60.1", + "@typescript-eslint/utils": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -8344,22 +9093,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.60.0", + "@typescript-eslint/parser": "^8.60.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.0.tgz", - "integrity": "sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.1.tgz", + "integrity": "sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==", "dev": true, "license": "MIT", "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.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "debug": "^4.4.3" }, "engines": { @@ -8375,14 +9124,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.0.tgz", - "integrity": "sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.1.tgz", + "integrity": "sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.60.0", - "@typescript-eslint/types": "^8.60.0", + "@typescript-eslint/tsconfig-utils": "^8.60.1", + "@typescript-eslint/types": "^8.60.1", "debug": "^4.4.3" }, "engines": { @@ -8397,14 +9146,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.0.tgz", - "integrity": "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz", + "integrity": "sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.60.0", - "@typescript-eslint/visitor-keys": "8.60.0" + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8415,9 +9164,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.0.tgz", - "integrity": "sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz", + "integrity": "sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==", "dev": true, "license": "MIT", "engines": { @@ -8432,15 +9181,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.0.tgz", - "integrity": "sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz", + "integrity": "sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.60.0", - "@typescript-eslint/typescript-estree": "8.60.0", - "@typescript-eslint/utils": "8.60.0", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/utils": "8.60.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -8457,9 +9206,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.0.tgz", - "integrity": "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.1.tgz", + "integrity": "sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==", "dev": true, "license": "MIT", "engines": { @@ -8471,16 +9220,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.0.tgz", - "integrity": "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz", + "integrity": "sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==", "dev": true, "license": "MIT", "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/project-service": "8.60.1", + "@typescript-eslint/tsconfig-utils": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -8512,16 +9261,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.0.tgz", - "integrity": "sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.1.tgz", + "integrity": "sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==", "dev": true, "license": "MIT", "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.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8536,13 +9285,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.0.tgz", - "integrity": "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz", + "integrity": "sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/types": "8.60.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -8666,9 +9415,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8683,9 +9429,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8700,9 +9443,6 @@ "loong64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8717,9 +9457,6 @@ "loong64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8734,9 +9471,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8751,9 +9485,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8768,9 +9499,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8785,9 +9513,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8802,9 +9527,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8819,9 +9541,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8903,6 +9622,24 @@ "win32" ] }, + "node_modules/@use-gesture/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", + "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", + "dev": true + }, + "node_modules/@use-gesture/react": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", + "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", + "dev": true, + "dependencies": { + "@use-gesture/core": "10.3.1" + }, + "peerDependencies": { + "react": ">= 16.8.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -9111,6 +9848,30 @@ } } }, + "node_modules/@wordpress/a11y": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.47.0.tgz", + "integrity": "sha512-Gq0PRRg7/jXFD4V8UfQNQEMR5DX8KxYUK1QUbHgRedsaW/ZhlgsXJHmBMZfeLubBn/tf0xpdPYdp0MNA5oc3Rg==", + "dev": true, + "dependencies": { + "@wordpress/dom-ready": "^4.47.0", + "@wordpress/i18n": "^6.20.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/autop": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-4.47.0.tgz", + "integrity": "sha512-2r/Fq6TeRV7ytsRfppJozKVaqY2jPGue2dwvthgo8/LruHOGuSBSFz67wmgI+0WUXPqq2+DjQ5mL0+416sxNMA==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/babel-preset-default": { "version": "8.47.0", "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.47.0.tgz", @@ -9177,6 +9938,86 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/blob": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-4.47.0.tgz", + "integrity": "sha512-uLFDeZlccLFuz42jRGgw+yH+B/5ISXDl6ht3kZugHo5auXD3oUikDLyz1+kiR/hhbWF2dzzoWOxAi52d+nHhSQ==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/block-serialization-default-parser": { + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.47.0.tgz", + "integrity": "sha512-xRZ026shHpau7VWDXLGBvfaU6s/yC1efzOGKiDGZ0fbTbTQcr09ma7ToaDyCiHIfMoSu9lMYnriLLOEKVht8Sg==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/blocks": { + "version": "15.20.0", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.20.0.tgz", + "integrity": "sha512-XqTNFRu6lZgNzYTj8hWnzVieDMXQ91rhRhkk6wl7HXmnalkk5b8kynUZlfDM47Qh0ZX4aCmsVru4bcebw3cbXg==", + "dev": true, + "dependencies": { + "@wordpress/autop": "^4.47.0", + "@wordpress/blob": "^4.47.0", + "@wordpress/block-serialization-default-parser": "^5.47.0", + "@wordpress/data": "^10.47.0", + "@wordpress/deprecated": "^4.47.0", + "@wordpress/dom": "^4.47.0", + "@wordpress/element": "^7.0.0", + "@wordpress/hooks": "^4.47.0", + "@wordpress/html-entities": "^4.47.0", + "@wordpress/i18n": "^6.20.0", + "@wordpress/is-shallow-equal": "^5.47.0", + "@wordpress/private-apis": "^1.47.0", + "@wordpress/rich-text": "^7.47.0", + "@wordpress/shortcode": "^4.47.0", + "@wordpress/warning": "^3.47.0", + "change-case": "^4.1.2", + "colord": "^2.7.0", + "fast-deep-equal": "^3.1.3", + "hpq": "^1.3.0", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "react-is": "^19.0.0", + "remove-accents": "^0.5.0", + "showdown": "^1.9.1", + "simple-html-tokenizer": "^0.5.7", + "uuid": "^14.0.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/@wordpress/blocks/node_modules/react-is": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", + "dev": true + }, + "node_modules/@wordpress/blocks/node_modules/uuid": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", + "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, "node_modules/@wordpress/browserslist-config": { "version": "6.47.0", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.47.0.tgz", @@ -9188,6 +10029,77 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/compose": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-8.0.0.tgz", + "integrity": "sha512-M+zUGHjXzFPJzL9/Kufxe8qTNOE1RHWSynGaF3vdAXJFaQRw30asvyO85DfnEELQ0R5blaWCbBexyp6oIYnyBQ==", + "dev": true, + "dependencies": { + "@types/mousetrap": "^1.6.8", + "@wordpress/deprecated": "^4.47.0", + "@wordpress/dom": "^4.47.0", + "@wordpress/element": "^7.0.0", + "@wordpress/is-shallow-equal": "^5.47.0", + "@wordpress/keycodes": "^4.47.0", + "@wordpress/priority-queue": "^3.47.0", + "@wordpress/private-apis": "^1.47.0", + "@wordpress/undo-manager": "^1.47.0", + "change-case": "^4.1.2", + "mousetrap": "^1.6.5", + "use-memo-one": "^1.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/@wordpress/data": { + "version": "10.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.47.0.tgz", + "integrity": "sha512-OAwxgplnv42U2oIKb7QkzR/v8OfStgSfl8/eHtA+aE4Z4yvRas71O1w6mmHABIKo3+zSwyxiTakag+LMD9/9Mw==", + "dev": true, + "dependencies": { + "@wordpress/compose": "^8.0.0", + "@wordpress/deprecated": "^4.47.0", + "@wordpress/element": "^7.0.0", + "@wordpress/is-shallow-equal": "^5.47.0", + "@wordpress/priority-queue": "^3.47.0", + "@wordpress/private-apis": "^1.47.0", + "@wordpress/redux-routine": "^5.47.0", + "deepmerge": "^4.3.0", + "equivalent-key-map": "^0.2.2", + "is-plain-object": "^5.0.0", + "is-promise": "^4.0.0", + "redux": "^5.0.1", + "rememo": "^4.0.2", + "use-memo-one": "^1.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/@wordpress/date": { + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-5.47.0.tgz", + "integrity": "sha512-B9Z8p2TyeWCf00b2mkcJao1w2gciVlYwSP/vnCEtAHt5ntA3Z5Tl2c+QPb9RlwRlhvKOU6GoNduB3JkvWpgw/w==", + "dev": true, + "dependencies": { + "@wordpress/deprecated": "^4.47.0", + "moment": "^2.29.4", + "moment-timezone": "^0.5.40" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { "version": "6.47.0", "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.47.0.tgz", @@ -9226,26 +10138,27 @@ "npm": ">=8.19.2" } }, - "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.47.0.tgz", - "integrity": "sha512-ddDmuW+QaK9g2jsbZi/WWTEDIY3BaO17XLEIIw2vAXksiFTffFlaWh13f85Tl8Md68qZQvG89hEJ++y8DRmNKQ==", + "node_modules/@wordpress/dom": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.47.0.tgz", + "integrity": "sha512-HD9pdNpS8dJnA70ZSBjx6FBbC4dChNaWWE+OxlvhgKisgETSIZaxvvc+W23WPIfC1WsKfD4amKtfLHXo+38TrQ==", "dev": true, - "license": "GPL-2.0-or-later", "dependencies": { - "change-case": "^4.1.2", - "get-port": "^5.1.1", - "lighthouse": "^12.2.2", - "mime": "^3.0.0", - "web-vitals": "^4.2.1" + "@wordpress/deprecated": "^4.47.0" }, "engines": { "node": ">=18.12.0", "npm": ">=8.19.2" - }, - "peerDependencies": { - "@playwright/test": ">=1", - "@types/node": "^20.17.10" + } + }, + "node_modules/@wordpress/dom-ready": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.47.0.tgz", + "integrity": "sha512-j2s4GdhxxQi2pbgyqdSz+Xh59K626/ErASH/ZKF7GlnBk4fjf3X0Odg7wopZ5wQfJgZSfEjGr1sonRst5uMAVw==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/element": { @@ -9635,6 +10548,27 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/@wordpress/global-styles-engine": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@wordpress/global-styles-engine/-/global-styles-engine-1.14.0.tgz", + "integrity": "sha512-95gGXqiODOokD95ANs8UGJ14UwFkppSkZEWaIexMiIGGGAqyL+Y1PmQ7eGeHXFNF8RdO3mbagjrWHnbcFM6RMg==", + "dev": true, + "dependencies": { + "@wordpress/blocks": "^15.20.0", + "@wordpress/data": "^10.47.0", + "@wordpress/i18n": "^6.20.0", + "@wordpress/style-engine": "^2.47.0", + "colord": "^2.9.2", + "deepmerge": "^4.3.0", + "fast-deep-equal": "^3.1.3", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/hooks": { "version": "4.47.0", "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.47.0.tgz", @@ -9646,6 +10580,36 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/html-entities": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.47.0.tgz", + "integrity": "sha512-D3sVJF1uTkjTUJvaAVJsoV8dCkP8q8L29NpavP4qClVQAhlYEynhmMUpesoL163f65Fi7XHwfIVejGjGDrMoXA==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/i18n": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.20.0.tgz", + "integrity": "sha512-CRwh4/kRtetolDHL8qXUuvV4XV4lSbvqQ7TiqBK3t6OTtj+exQME9Jb/vQACaQFKJBGCHTHoEtwMfJ5tfrkggg==", + "dev": true, + "dependencies": { + "@tannin/sprintf": "^1.3.2", + "@wordpress/hooks": "^4.47.0", + "gettext-parser": "^1.3.1", + "memize": "^2.1.0", + "tannin": "^1.2.0" + }, + "bin": { + "pot-to-php": "tools/pot-to-php.js" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/interactivity": { "version": "6.47.0", "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.47.0.tgz", @@ -9660,6 +10624,16 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/is-shallow-equal": { + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.47.0.tgz", + "integrity": "sha512-NskF7HZlGvK8e5GlU8U340g9LGe/rcH3+4UxDAj9oECVL09B1s1IQaHWNUs65lq+ACNca6p7eOOfcBQ7PNhqXA==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/jest-console": { "version": "8.47.0", "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.47.0.tgz", @@ -9697,6 +10671,19 @@ "jest": ">=29" } }, + "node_modules/@wordpress/keycodes": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.47.0.tgz", + "integrity": "sha512-hAN65nUfVyhbq9EfIG7ue4FtZ7PoWCSmN7BnWdPAP6GLe9/RdfPuHtc91Of7xBULdMeXLeH04KsfwuE99tjo+w==", + "dev": true, + "dependencies": { + "@wordpress/i18n": "^6.20.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/npm-package-json-lint-config": { "version": "5.47.0", "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.47.0.tgz", @@ -9744,6 +10731,36 @@ "prettier": ">=3" } }, + "node_modules/@wordpress/primitives": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-4.47.0.tgz", + "integrity": "sha512-Y1uhC6BiLFzORtXnMa07o3DVXG0z+q2KV6g48ClpZJ9aDiehBfdThBHwa6oa7HbYX/yAoMuCkuA7fWbm3zYxNw==", + "dev": true, + "dependencies": { + "@wordpress/element": "^7.0.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/@wordpress/priority-queue": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.47.0.tgz", + "integrity": "sha512-KWvo9JmFkNrv16DJEiqna97Oe7HLlVZaaB3t05QH8uJYG1YiH58Ld15B2V7nZWxZZ+HBm6CLrPUuGnt1+Ohtiw==", + "dev": true, + "dependencies": { + "requestidlecallback": "^0.3.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/private-apis": { "version": "1.47.0", "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.47.0.tgz", @@ -9755,6 +10772,51 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/redux-routine": { + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-5.47.0.tgz", + "integrity": "sha512-r2HV47NUYxk/XiaG47nLgmb5GeC+KtisHVS4WYlKsUe3JlCffKc1dphL58EST1xvCt9UBCiwXfd8+Y0GHaXUpw==", + "dev": true, + "dependencies": { + "is-plain-object": "^5.0.0", + "is-promise": "^4.0.0", + "rungen": "^0.3.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "redux": ">=4" + } + }, + "node_modules/@wordpress/rich-text": { + "version": "7.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.47.0.tgz", + "integrity": "sha512-CNQGDtfp9ObpwtIYsAO8UD0mb4hj9F5K8maLn1t83EkxaozwzTGjpGSaV6Y/J9eQd2ZkvG9Cu37YfKO4gRhbHw==", + "dev": true, + "dependencies": { + "@wordpress/a11y": "^4.47.0", + "@wordpress/compose": "^8.0.0", + "@wordpress/data": "^10.47.0", + "@wordpress/deprecated": "^4.47.0", + "@wordpress/dom": "^4.47.0", + "@wordpress/element": "^7.0.0", + "@wordpress/escape-html": "^3.47.0", + "@wordpress/i18n": "^6.20.0", + "@wordpress/keycodes": "^4.47.0", + "@wordpress/private-apis": "^1.47.0", + "colord": "2.9.3", + "memize": "^2.1.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, "node_modules/@wordpress/scripts": { "version": "32.3.0", "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-32.3.0.tgz", @@ -10156,6 +11218,38 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@wordpress/scripts/node_modules/@types/node": { + "version": "20.19.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", + "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@wordpress/scripts/node_modules/@wordpress/e2e-test-utils-playwright": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.47.0.tgz", + "integrity": "sha512-ddDmuW+QaK9g2jsbZi/WWTEDIY3BaO17XLEIIw2vAXksiFTffFlaWh13f85Tl8Md68qZQvG89hEJ++y8DRmNKQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "change-case": "^4.1.2", + "get-port": "^5.1.1", + "lighthouse": "^12.2.2", + "mime": "^3.0.0", + "web-vitals": "^4.2.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "@playwright/test": ">=1", + "@types/node": "^20.17.10" + } + }, "node_modules/@wordpress/scripts/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -10946,6 +12040,32 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/@wordpress/shortcode": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-4.47.0.tgz", + "integrity": "sha512-WGCP3dWN6BwD9jOPLrICtMml4PcA+z01jliepQFrdblol9+McRsss9DZ8pvQQ9jiZEyRqw4SXw8RzDBirjFYYg==", + "dev": true, + "dependencies": { + "memize": "^2.0.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/style-engine": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-2.47.0.tgz", + "integrity": "sha512-QMb9gyNhQ8wMGj1O3cFJC8hqI9Io8gq0m3pW/tfhGsI8ms7vRHD/hJCZxA5nVBq8uTsN0jIXFPBDAyUAcBf4Zg==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/style-runtime": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.3.0.tgz", @@ -11006,6 +12126,19 @@ } } }, + "node_modules/@wordpress/undo-manager": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.47.0.tgz", + "integrity": "sha512-tmAIGJ28X0+/yt9KHacPwJTXX/qjmLgZgrkF86b/qXC5uz5OuvjrtcUwG3YcH/DoQjDRwe8eOkJ/6Ql3LwqrhA==", + "dev": true, + "dependencies": { + "@wordpress/is-shallow-equal": "^5.47.0" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/warning": { "version": "3.47.0", "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.47.0.tgz", @@ -11018,20 +12151,20 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.35.tgz", - "integrity": "sha512-w3+5CK99q/bCfN/HvRi/Kay3u94w33wkkYKt/Y9GKPTXAgkWkpDm7EuMSvSoOPcq6PLRZuWW/t4HZcP8MqR3EQ==", - "dev": true, - "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/progress": "3.1.35", - "@php-wasm/stream-compression": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", - "@php-wasm/web-service-worker": "3.1.35", - "@wp-playground/common": "3.1.35", - "@wp-playground/storage": "3.1.35", - "@wp-playground/wordpress": "3.1.35", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.36.tgz", + "integrity": "sha512-Q2pULs5l69hYwuSgWyVHMyxRshD+cCkMuewemR4w4KFyEiMcAxlQhLxSj/eM1MkMhII83KblPo7x8iaoPCAimQ==", + "dev": true, + "dependencies": { + "@php-wasm/logger": "3.1.36", + "@php-wasm/progress": "3.1.36", + "@php-wasm/stream-compression": "3.1.36", + "@php-wasm/universal": "3.1.36", + "@php-wasm/util": "3.1.36", + "@php-wasm/web-service-worker": "3.1.36", + "@wp-playground/common": "3.1.36", + "@wp-playground/storage": "3.1.36", + "@wp-playground/wordpress": "3.1.36", "ajv": "8.12.0" }, "engines": { @@ -11040,24 +12173,24 @@ } }, "node_modules/@wp-playground/cli": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.35.tgz", - "integrity": "sha512-QpTWJ+eacdJ+yk2AbjaVJqI3P6iME1drpMOr/uT+U8EQMjDgHQA9nbkh/yux+m7sjFd1UE+/ajT5QZZ7kDWv9Q==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.36.tgz", + "integrity": "sha512-/G+XPoMn/n0MaqCAjDtEP9bKr9aaswUb63v75D0VsGx4YQ3pja9N7+8cRiSXmqQ25yghWDrsdglPBjp91AEpoA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.1.35", - "@php-wasm/logger": "3.1.35", - "@php-wasm/node": "3.1.35", - "@php-wasm/progress": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", - "@php-wasm/xdebug-bridge": "3.1.35", - "@wp-playground/blueprints": "3.1.35", - "@wp-playground/common": "3.1.35", - "@wp-playground/storage": "3.1.35", - "@wp-playground/tools": "3.1.35", - "@wp-playground/wordpress": "3.1.35", + "@php-wasm/cli-util": "3.1.36", + "@php-wasm/logger": "3.1.36", + "@php-wasm/node": "3.1.36", + "@php-wasm/progress": "3.1.36", + "@php-wasm/universal": "3.1.36", + "@php-wasm/util": "3.1.36", + "@php-wasm/xdebug-bridge": "3.1.36", + "@wp-playground/blueprints": "3.1.36", + "@wp-playground/common": "3.1.36", + "@wp-playground/storage": "3.1.36", + "@wp-playground/tools": "3.1.36", + "@wp-playground/wordpress": "3.1.36", "express": "4.22.0", "fs-extra": "11.1.1", "tmp-promise": "3.0.3", @@ -11069,14 +12202,14 @@ } }, "node_modules/@wp-playground/common": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.35.tgz", - "integrity": "sha512-KVU5JWgCVjFU1SJ8PeaIl82oijCqs43JWRR5rfjgfJbDxXl6ntPfY/elPe7eI3noMoeyFJ10pAAO1ESXGWxygA==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.36.tgz", + "integrity": "sha512-uxYwWscPL76IntpIk5FJitPzcRm2BudmSlPNDswCc7DbnHVsaoG1jishFK/baTocQInsAdJlHZwL/sHgARx1Dg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35" + "@php-wasm/universal": "3.1.36", + "@php-wasm/util": "3.1.36" }, "engines": { "node": ">=20.10.0", @@ -11084,15 +12217,15 @@ } }, "node_modules/@wp-playground/storage": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.35.tgz", - "integrity": "sha512-De7zdHGwBuwQE+kO1p0EGkN8jBim/QJ8ftjRuymxDJXzNimdLmfedqSNa0ajpNcRSq0HKFz/gyxpcWq1hSDnCw==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.36.tgz", + "integrity": "sha512-BGXtXvZZDKwg1LuwTQlqFx5FHg9jC8fq3kCsMi389MIm7OGerqoUw5ONcGnrkarIxybkjHbrLZBUk5zsaXNiVg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/stream-compression": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", + "@php-wasm/stream-compression": "3.1.36", + "@php-wasm/universal": "3.1.36", + "@php-wasm/util": "3.1.36", "@zip.js/zip.js": "2.7.57", "isomorphic-git": "1.37.6", "octokit": "3.1.2", @@ -11100,13 +12233,13 @@ } }, "node_modules/@wp-playground/tools": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.35.tgz", - "integrity": "sha512-tQHcCBmlV7FLj/4YO+3F166/n8J+UNSeJpOnYUrAUiVJjsACoQETYrcal2hejJViEk5KRYlPIISTQeHb9RxBGA==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.36.tgz", + "integrity": "sha512-wB+AwGZUpeB8xN/lTxWarnMfTg/o2Z8vlUhMFB50+p7GVoG34XRrZWj0Tvys87e+XAiCu0KOYqhBYfHkNcujag==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wp-playground/blueprints": "3.1.35" + "@wp-playground/blueprints": "3.1.36" }, "engines": { "node": ">=20.10.0", @@ -11114,16 +12247,16 @@ } }, "node_modules/@wp-playground/wordpress": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.35.tgz", - "integrity": "sha512-agJyrrlrsIhMYPHsWZudgHnNGOHda8Jg+kX6TB91wgUR581QiXWv0cfubBnNpIKO+4pI6rOSopUu/5T7YKhhZQ==", + "version": "3.1.36", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.36.tgz", + "integrity": "sha512-YwtbwG/eIBiBhGg3G1M7kVtXVmEWBSw3RL6+lcUw2rR1UGnqe5lFRx8QxVN36FXRP40NFeKgVuhZI2eTkbGdjA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", - "@wp-playground/common": "3.1.35" + "@php-wasm/logger": "3.1.36", + "@php-wasm/universal": "3.1.36", + "@php-wasm/util": "3.1.36", + "@wp-playground/common": "3.1.36" }, "engines": { "node": ">=20.10.0", @@ -11796,6 +12929,12 @@ "postcss": "^8.1.0" } }, + "node_modules/autosize": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.4.tgz", + "integrity": "sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==", + "dev": true + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -11813,9 +12952,9 @@ } }, "node_modules/axe-core": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.4.tgz", - "integrity": "sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.0.tgz", + "integrity": "sha512-FTavr/7Ba0IptwGOPxnQvdyW2tAsdLBMTBXz7rKH6xJ2skpyxpBxyHkDdBs4lf69yRqYpkqCdfhnwS8YULGOmg==", "dev": true, "license": "MPL-2.0", "engines": { @@ -11823,9 +12962,9 @@ } }, "node_modules/axios": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", - "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", "dev": true, "license": "MIT", "dependencies": { @@ -11970,6 +13109,21 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", @@ -12064,9 +13218,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.3.tgz", - "integrity": "sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -12079,9 +13233,9 @@ } }, "node_modules/bare-fs": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", - "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.2.tgz", + "integrity": "sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12114,9 +13268,9 @@ } }, "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.1.tgz", + "integrity": "sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12192,9 +13346,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.32", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", - "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", + "version": "2.10.33", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz", + "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -13278,6 +14432,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -13440,6 +14603,12 @@ "node": ">= 0.6" } }, + "node_modules/computed-style": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", + "integrity": "sha512-WpAmaKbMNmS3OProfHIdJiNleNJdgUrJfbKArXua28QF7+0CoZjlLn0lp6vlc+dl5r2/X9GQiQRQQU4BzSa69w==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -15336,6 +16505,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "dev": true + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -15943,9 +17128,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.364", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz", - "integrity": "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==", + "version": "1.5.366", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.366.tgz", + "integrity": "sha512-OlRuhb688YTCzzU3gXPLn6nGyd+F+53INE1qaKKlu6kETErE8FYsyDh0XqXEU+uBRn0MpCzz2vfNwORhkap8qg==", "dev": true, "license": "ISC" }, @@ -15989,6 +17174,27 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -16090,9 +17296,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz", - "integrity": "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==", + "version": "5.22.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.2.tgz", + "integrity": "sha512-0rxICaFZ7NQho/sHely2bvOPRP0Eu2B0NZ9zM54YvRvWMn7jfz3DmnOZDR9LlXDdDcqntAVc6Hfy4gr/tdH/Ag==", "dev": true, "license": "MIT", "dependencies": { @@ -16189,6 +17395,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/equivalent-key-map": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", + "integrity": "sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -17690,6 +18902,12 @@ "find-process": "bin/find-process.js" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -17860,6 +19078,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "11.18.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", + "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", + "dev": true, + "dependencies": { + "motion-dom": "^11.18.1", + "motion-utils": "^11.18.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -18152,6 +19397,16 @@ "node": ">= 14" } }, + "node_modules/gettext-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", + "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==", + "dev": true, + "dependencies": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, "node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -18375,6 +19630,15 @@ "dev": true, "license": "ISC" }, + "node_modules/gradient-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gradient-parser/-/gradient-parser-1.1.1.tgz", + "integrity": "sha512-Hu0YfNU+38EsTmnUfLXUKFMXq9yz7htGYpF4x+dlbBhUCvIvzLt0yVLT/gJRmvLKFJdqNFrz4eKkIUjIXSr7Tw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -18543,6 +19807,21 @@ "hermes-estree": "0.25.1" } }, + "node_modules/highlight-words-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.3.tgz", + "integrity": "sha512-m1O9HW3/GNHxzSIXWw1wCNXXsgLlxrP0OI6+ycGUhiUHkikqW3OrwVHz+lxeNBe5yqLESdIcj8PowHQ2zLvUvQ==", + "dev": true + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -18609,6 +19888,12 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpq": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.4.0.tgz", + "integrity": "sha512-ycJQMRaRPBcfnoT1gS5I1XCvbbw9KO94Y0vkwksuOjcJMqNZtb03MF2tCItLI2mQbkZWSSeFinoRDPmjzv4tKg==", + "dev": true + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -19568,6 +20853,12 @@ "dev": true, "license": "MIT" }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -22990,9 +24281,9 @@ } }, "node_modules/launch-editor": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.0.tgz", - "integrity": "sha512-Pj3ZOx9dD1BClS7YcSQx0An1PCF9wz4JpvbEmKvDxQtm0jxlkk5NhW8x0SBAKA/acHBKZaqdd5FFOWlXo500JA==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", "dev": true, "license": "MIT", "dependencies": { @@ -23279,6 +24570,18 @@ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, + "node_modules/line-height": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", + "integrity": "sha512-YExecgqPwnp5gplD2+Y8e8A5+jKpr25+DzMbFdI1/1UAr0FJrTFv4VkHLf8/6B590i1wUPJWMKKldkd/bdQ//w==", + "dev": true, + "dependencies": { + "computed-style": "~0.1.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -23984,10 +25287,20 @@ } }, "node_modules/markdownlint-cli/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -24063,20 +25376,20 @@ } }, "node_modules/memfs": { - "version": "4.57.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.3.tgz", - "integrity": "sha512-dlvqataP1zUOlfj6pv9wgCSC5pRIooNntXgdLfR7FWlcKi1p8fMfJADtHp/+8Dhu5JFvMHNh7L0QVcuaaBKqqA==", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.6.tgz", + "integrity": "sha512-WQK+DGjKCnPdpSyJUXphz+COF2uEhhsxQ3VIWBSbzpbbXuch3h4FePMqXrXGdLjsTgo4JFzBFsP6AWd9pVazGw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.3", - "@jsonjoy.com/fs-fsa": "4.57.3", - "@jsonjoy.com/fs-node": "4.57.3", - "@jsonjoy.com/fs-node-builtins": "4.57.3", - "@jsonjoy.com/fs-node-to-fsa": "4.57.3", - "@jsonjoy.com/fs-node-utils": "4.57.3", - "@jsonjoy.com/fs-print": "4.57.3", - "@jsonjoy.com/fs-snapshot": "4.57.3", + "@jsonjoy.com/fs-core": "4.57.6", + "@jsonjoy.com/fs-fsa": "4.57.6", + "@jsonjoy.com/fs-node": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-to-fsa": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-print": "4.57.6", + "@jsonjoy.com/fs-snapshot": "4.57.6", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -24467,6 +25780,48 @@ "dev": true, "license": "MIT" }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.48", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", + "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", + "dev": true, + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/motion-dom": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", + "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", + "dev": true, + "dependencies": { + "motion-utils": "^11.18.1" + } + }, + "node_modules/motion-utils": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", + "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", + "dev": true + }, + "node_modules/mousetrap": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==", + "dev": true + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -24647,9 +26002,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.46", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", - "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", "dev": true, "license": "MIT", "engines": { @@ -24820,10 +26175,20 @@ } }, "node_modules/npm-package-json-lint/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -27434,27 +28799,79 @@ "node": ">=0.10.0" } }, + "node_modules/re-resizable": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.11.2.tgz", + "integrity": "sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==", + "dev": true, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/react": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", - "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/react-colorful": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.7.0.tgz", + "integrity": "sha512-fuesYIemttah97XmsIHmz4OORDHiSFzyc9HMAIrCHJou2jaRQmL8cFJ76K4zQhhj8jzwOBlOi4BaGTjjOZCfTg==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", + "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", + "dev": true, + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-day-picker/node_modules/date-fns": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/react-dom": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", - "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "dev": true, "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.6" + "react": "^19.2.7" } }, "node_modules/react-is": { @@ -27474,9 +28891,9 @@ }, "node_modules/react-is-19": { "name": "react-is", - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.6.tgz", - "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", "dev": true, "license": "MIT" }, @@ -27725,6 +29142,12 @@ "node": ">=8" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "dev": true + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -27827,6 +29250,24 @@ "regjsparser": "bin/parser" } }, + "node_modules/rememo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rememo/-/rememo-4.0.2.tgz", + "integrity": "sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ==", + "dev": true + }, + "node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "dev": true + }, + "node_modules/requestidlecallback": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/requestidlecallback/-/requestidlecallback-0.3.0.tgz", + "integrity": "sha512-TWHFkT7S9p7IxLC5A1hYmAYQx2Eb9w1skrXmQ+dS1URyvR8tenMLl4lHbqEOUnpEYxNKpkVMXUgknVpBZWXXfQ==", + "dev": true + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -27862,6 +29303,12 @@ "node": ">=8.6.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/requireindex": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", @@ -28194,6 +29641,12 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rungen": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/rungen/-/rungen-0.3.2.tgz", + "integrity": "sha512-zWl10xu2D7zoR8zSC2U6bg5bYF6T/Wk7rxwp8IPaJH7f0Ge21G03kNHVgHR7tyVkSSfAOG0Rqf/Cl38JftSmtw==", + "dev": true + }, "node_modules/rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -28665,6 +30118,12 @@ "dev": true, "license": "ISC" }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -28824,6 +30283,225 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/showdown": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", + "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", + "dev": true, + "dependencies": { + "yargs": "^14.2" + }, + "bin": { + "showdown": "bin/showdown.js" + } + }, + "node_modules/showdown/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/showdown/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/showdown/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/showdown/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/showdown/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/showdown/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/showdown/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/showdown/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/showdown/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/showdown/node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/showdown/node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -28978,6 +30656,12 @@ "url": "https://github.com/steveukx/git-js?sponsor=1" } }, + "node_modules/simple-html-tokenizer": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz", + "integrity": "sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==", + "dev": true + }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -30235,10 +31919,20 @@ } }, "node_modules/stylelint/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -30339,6 +32033,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -30544,6 +32244,15 @@ "node": ">=8" } }, + "node_modules/tannin": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz", + "integrity": "sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==", + "dev": true, + "dependencies": { + "@tannin/plural-forms": "^1.1.0" + } + }, "node_modules/tapable": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", @@ -30821,9 +32530,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.3.tgz", - "integrity": "sha512-g62dB+w1/OEFnPvmX0yd/HnetYITOL+1nJW7kitOycOeAvmbWC/nu0fwmmQ/kupNojqExzyC/T++pST/jRJ2mQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", "engines": { @@ -30831,9 +32540,9 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { @@ -30892,20 +32601,20 @@ } }, "node_modules/tldts-core": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.1.tgz", - "integrity": "sha512-sc2nGvGbixlJRHwTh/qQdPXTxJU1UDJboGPQm4d/01YUJ9r/u6aeIulQvEaxUlvKDN7hb1qCLjax+jhVAPLa/g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.2.tgz", + "integrity": "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==", "dev": true, "license": "MIT" }, "node_modules/tldts-icann": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.4.0.tgz", - "integrity": "sha512-guDQQAxukhpUJB4ax1Is9tWrSYRbvDAJFSMPCHSSc+C5viEfLpoF5KELybFUuw0nno2R2sP+oXHfAxZkbSd8KQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.4.2.tgz", + "integrity": "sha512-MiH8EqYa61dAa4L+eIeSTa95XAWimaOlAHw5cNViBhdaezOLQ3FKdVQOJ3li+BRJSkm8E2p+1m/EA6AOHQ/GPw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.4.0" + "tldts-core": "^7.4.2" } }, "node_modules/tldts/node_modules/tldts-core": { @@ -31282,12 +32991,11 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -31297,16 +33005,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.60.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.0.tgz", - "integrity": "sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.1.tgz", + "integrity": "sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==", "dev": true, "license": "MIT", "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.60.1", + "@typescript-eslint/parser": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/utils": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -31653,6 +33361,24 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -32467,6 +34193,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, "node_modules/which-typed-array": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz", diff --git a/package.json b/package.json index 9c008bea..77765dae 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "css-minimizer-webpack-plugin": "8.0.0", "dotenv": "17.4.2", "eslint": "10.4.0", - "eslint-import-resolver-typescript": "4.4.4", "eslint-plugin-jest": "29.15.2", "eslint-plugin-react-hooks": "7.1.1", "globals": "17.6.0", @@ -55,8 +54,11 @@ "url": "https://github.com/rtCamp/theme-elementary.git" }, "scripts": { - "build:dev": "wp-scripts start --no-watch --experimental-modules", - "build:prod": "wp-scripts build --experimental-modules", + "build:dev": "npm-run-all build:dev:js build:blocks", + "build:dev:js": "wp-scripts start --no-watch --experimental-modules", + "build:prod": "npm-run-all build:prod:js build:blocks", + "build:prod:js": "wp-scripts build --experimental-modules", + "build:blocks": "wp-scripts build --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "init": "./bin/init.js", "lint:all": "npm-run-all --parallel lint:*", "lint:css": "wp-scripts lint-style ./src", diff --git a/webpack.config.js b/webpack.config.js index a2876323..1ed677e0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -406,7 +406,15 @@ const sharedConfig = { : undefined, plugins: [ new CleanBuildPlugin(), - ...scriptConfig.plugins.map( setCssOutputPath ), + // Strip wp-scripts' inherited CopyPlugin (its actual class is `CopyPlugin`, + // not `CopyWebpackPlugin` — that's just wp-scripts' import alias). It would + // otherwise copy block.json/render.php from src/blocks/ into the JS output + // at assets/build/js/blocks/, which is redundant — block compilation is + // owned by the dedicated `build:blocks` script and lands in + // assets/build/blocks/. Keep all other inherited plugins. + ...scriptConfig.plugins + .filter( isNotPlugin( 'CopyPlugin' ) ) + .map( setCssOutputPath ), new RemoveEmptyScriptsPlugin(), ], optimization: { From 8191673fa22d14b7ceac6017b3680d7cd7dd612c Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Thu, 4 Jun 2026 16:34:16 +0530 Subject: [PATCH 02/15] Add eslint-import-resolver --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 77765dae..e12c72b8 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "css-minimizer-webpack-plugin": "8.0.0", "dotenv": "17.4.2", "eslint": "10.4.0", + "eslint-import-resolver-typescript": "4.4.4", "eslint-plugin-jest": "29.15.2", "eslint-plugin-react-hooks": "7.1.1", "globals": "17.6.0", From f297523b462f7eb560efda15b8e291a0775f6234 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Thu, 4 Jun 2026 19:58:16 +0530 Subject: [PATCH 03/15] Add dev script for build:blocks: --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e12c72b8..9fd6d2b1 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,12 @@ "url": "https://github.com/rtCamp/theme-elementary.git" }, "scripts": { - "build:dev": "npm-run-all build:dev:js build:blocks", + "build:dev": "npm-run-all build:dev:js build:blocks:dev", "build:dev:js": "wp-scripts start --no-watch --experimental-modules", "build:prod": "npm-run-all build:prod:js build:blocks", "build:prod:js": "wp-scripts build --experimental-modules", "build:blocks": "wp-scripts build --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", + "build:blocks:dev": "wp-scripts start --no-watch --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "init": "./bin/init.js", "lint:all": "npm-run-all --parallel lint:*", "lint:css": "wp-scripts lint-style ./src", @@ -74,7 +75,9 @@ "pot": "composer run pot", "prepare": "npm run init", "pretest:php": "wp-env run cli --env-cwd=/var/www/html/wp-content/themes/${PWD##*/} composer install --no-interaction --no-scripts", - "start": "wp-scripts start --hot --experimental-modules --config webpack.config.js", + "start": "npm-run-all --parallel start:js start:blocks", + "start:js": "wp-scripts start --hot --experimental-modules --config webpack.config.js", + "start:blocks": "wp-scripts start --hot --port=8888 --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "test": "npm-run-all --parallel test:*", "test:js": "wp-scripts test-unit-js --config=tests/js/jest.config.js --passWithNoTests", "test:js:watch": "npm run test:js -- --watch", From 2de7634f9a4d0fc84f053f6b2e33dc667a95f538 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Tue, 9 Jun 2026 12:59:44 +0530 Subject: [PATCH 04/15] remove unnecessary dev server config from webpack --- webpack.config.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 1ed677e0..8413aa19 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -399,11 +399,6 @@ const sharedConfig = { filename: '[name].js', chunkFilename: '[name].js', }, - // WDS v5 requires proxy as an array; since writeToDisk: true is set we don't need it. - // allowedHosts: 'all' is needed for custom local domains (e.g. elementary.local). - devServer: scriptConfig.devServer - ? { ...scriptConfig.devServer, proxy: undefined, allowedHosts: 'all' } - : undefined, plugins: [ new CleanBuildPlugin(), // Strip wp-scripts' inherited CopyPlugin (its actual class is `CopyPlugin`, From 58eeb9defe3ea4b8c56b511eb243b22d478c190b Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Tue, 9 Jun 2026 13:09:23 +0530 Subject: [PATCH 05/15] Fix HMR not working --- .env.local.example | 4 +++ docs/hmr.md | 28 ++++++++++++++---- package.json | 14 ++++----- webpack.blocks.config.js | 61 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 webpack.blocks.config.js diff --git a/.env.local.example b/.env.local.example index e5c6fc76..9368787a 100644 --- a/.env.local.example +++ b/.env.local.example @@ -7,6 +7,10 @@ WP_HOST=yoursite.local # so PHP enqueues the client script from the correct port. BS_PORT=3000 +# Block HMR dev-server port (used by `npm run start:blocks`). +# Default: 8887. Change if port 8887 is already in use. +BLOCKS_DEV_SERVER_PORT=8887 + # SSL cert paths — only needed when your local site runs on HTTPS. # LocalWP stores certs at: # macOS: ~/Library/Application Support/Local/run/router/nginx/certs/.key / .crt diff --git a/docs/hmr.md b/docs/hmr.md index dc103c4a..5daae09a 100644 --- a/docs/hmr.md +++ b/docs/hmr.md @@ -4,10 +4,10 @@ This document explains how live reload and hot module replacement work in the th ## Overview -Running `npm start` enables two complementary tools: +Running `npm start` runs two scripts in parallel, each with a complementary tool: -- **BrowserSync** (port 3000) — live reload for the frontend via snippet mode. Your site URL stays unchanged. -- **webpack-dev-server / Fast Refresh** (port 8887) — hot module replacement for block editor React components. Block state is preserved across updates; no full page reload needed. +- **`start:theme` → BrowserSync** (port 3000) — live reload for the frontend via snippet mode. Your site URL stays unchanged. +- **`start:blocks` → webpack-dev-server / Fast Refresh** (port 8887 by default, configurable via `BLOCKS_DEV_SERVER_PORT`) — hot module replacement for block editor React components. Block state is preserved across updates; no full page reload needed. For BrowserSync: @@ -48,11 +48,19 @@ Without `SCRIPT_DEBUG`, WordPress does not support Fast Refresh. ## How It Works -1. `npm start` runs webpack in watch mode. +**Theme assets (`start:theme` + BrowserSync):** + +1. `start:theme` runs `wp-scripts start` in watch mode (no `--hot`) using `webpack.config.js`. 2. When a file changes, webpack rebuilds the affected assets in `assets/build/`. 3. BrowserSync detects the change and notifies the browser via the client script. 4. CSS changes are injected in-place. Everything else triggers a full reload. -5. Block changes are detected in editor by the webpack-dev-server run by the `--hot` option + +**Blocks (`start:blocks` + Fast Refresh):** + +5. `start:blocks` runs `wp-scripts start --hot`, which starts webpack-dev-server, using `webpack.blocks.config.js`. +6. JS/JSX changes to block components hot-swap in the editor without a full reload; block state is preserved. + +`webpack.blocks.config.js` is a thin wrapper over `@wordpress/scripts`' default config. It exists only to strip the `devServer.proxy` option: webpack-dev-server v5 (pinned via the `overrides` block in `package.json`) requires `proxy` to be an array, while wp-scripts still emits the v4 object form, which v5 rejects with `options.proxy should be an array`. The wrapper also sets the dev-server port from `BLOCKS_DEV_SERVER_PORT`. BrowserSync watches the following: @@ -94,6 +102,16 @@ define( 'ELEMENTARY_THEME_BROWSER_SYNC_URL', 'https://yoursite.local:3001/browse `ELEMENTARY_THEME_BROWSER_SYNC_URL` overrides the auto-detected URL entirely, so it also works for remote setups (ddev, reverse proxy) where the BrowserSync server is on a different host or IP. +### Block dev server port + +The block Fast Refresh dev server runs on port 8887 by default. If that port is already in use (e.g. two local sites running `start:blocks` at once), set a different port in `.env.local`: + +``` +BLOCKS_DEV_SERVER_PORT=8889 +``` + +`webpack.blocks.config.js` reads this value and applies it to the dev server. No matching `wp-config.php` constant is needed — the editor loads block scripts from disk, and the HMR client connects to the dev server directly. + ### HTTPS If your local site runs on HTTPS, also add the SSL cert paths: diff --git a/package.json b/package.json index 9fd6d2b1..2d232109 100644 --- a/package.json +++ b/package.json @@ -55,10 +55,10 @@ "url": "https://github.com/rtCamp/theme-elementary.git" }, "scripts": { - "build:dev": "npm-run-all build:dev:js build:blocks:dev", - "build:dev:js": "wp-scripts start --no-watch --experimental-modules", - "build:prod": "npm-run-all build:prod:js build:blocks", - "build:prod:js": "wp-scripts build --experimental-modules", + "build:dev": "npm-run-all build:theme:dev build:blocks:dev", + "build:theme:dev": "wp-scripts start --no-watch --experimental-modules", + "build:prod": "npm-run-all build:theme build:blocks", + "build:theme": "wp-scripts build --experimental-modules", "build:blocks": "wp-scripts build --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "build:blocks:dev": "wp-scripts start --no-watch --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "init": "./bin/init.js", @@ -75,9 +75,9 @@ "pot": "composer run pot", "prepare": "npm run init", "pretest:php": "wp-env run cli --env-cwd=/var/www/html/wp-content/themes/${PWD##*/} composer install --no-interaction --no-scripts", - "start": "npm-run-all --parallel start:js start:blocks", - "start:js": "wp-scripts start --hot --experimental-modules --config webpack.config.js", - "start:blocks": "wp-scripts start --hot --port=8888 --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", + "start": "npm-run-all --parallel start:theme start:blocks", + "start:theme": "wp-scripts start --experimental-modules --config webpack.config.js", + "start:blocks": "wp-scripts start --hot --allowed-hosts all --experimental-modules --config ./webpack.blocks.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "test": "npm-run-all --parallel test:*", "test:js": "wp-scripts test-unit-js --config=tests/js/jest.config.js --passWithNoTests", "test:js:watch": "npm run test:js -- --watch", diff --git a/webpack.blocks.config.js b/webpack.blocks.config.js new file mode 100644 index 00000000..ff8ee9ea --- /dev/null +++ b/webpack.blocks.config.js @@ -0,0 +1,61 @@ +/** + * Wrapper config for the `start:blocks` invocation. + * + * Layered on top of wp-scripts' default config to fix the dev-server issue that + * bites during `wp-scripts start --hot` for blocks in this stack: + * + * webpack-dev-server v5 (resolved at the top level for the CVE-2025-30359 / + * CVE-2025-30360 fix) is what `webpack serve` loads, but `@wordpress/scripts` + * still defines `devServer.proxy` in the webpack-dev-server v4 object form, so + * v5's schema rejects it with "options.proxy should be an array". The bundled + * `/build` rewrite has no `target`, isn't needed for block HMR, and would fail + * at runtime even if converted to the v5 array form, so we remove it. + * + * All dev-server knobs are read from `.env.local` so they can change without + * editing this file. + */ + +/** + * External dependencies + */ +require( 'dotenv' ).config( { path: '.env.local' } ); + +/** + * WordPress dependencies + */ +const config = require( '@wordpress/scripts/config/webpack.config' ); + +const DEFAULT_DEV_SERVER_PORT = 8887; +const devServerPort = + parseInt( process.env.BLOCKS_DEV_SERVER_PORT, 10 ) || + DEFAULT_DEV_SERVER_PORT; + +/** + * Apply the dev-server fixes to a single webpack config. + * + * @param {Object} singleConfig A webpack configuration object. + * @return {Object} The same config, dev-server v5 compatible. + */ +const fixDevServer = ( singleConfig ) => { + // Only the script config carries a devServer; the module config sets it to + // `false` (or omits it) and needs no changes. + if ( ! singleConfig || ! singleConfig.devServer ) { + return singleConfig; + } + + // webpack-dev-server v5 requires `proxy` to be an array; wp-scripts ships a + // v4-style object. Not needed for block HMR, so drop it. + delete singleConfig.devServer.proxy; + + // Multiple sites can run the dev server at once, so the port is read from + // .env.local (BLOCKS_DEV_SERVER_PORT) rather than hardcoded. + singleConfig.devServer.port = devServerPort; + + return singleConfig; +}; + +// `--experimental-modules` makes the stock config export an array of configs +// ([ scriptConfig, moduleConfig ]); otherwise it's a single object. +module.exports = Array.isArray( config ) + ? config.map( fixDevServer ) + : fixDevServer( config ); From 7647c76590c638652375e31974dc03fe5ef4c9c8 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Tue, 9 Jun 2026 19:01:41 +0530 Subject: [PATCH 06/15] Get BrowserSync port from .env.local file --- inc/Core/Assets.php | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index 1cab4ed9..01525db6 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -131,9 +131,42 @@ public function enqueue_assets(): void { $scheme = is_ssl() ? 'https' : 'http'; $host = wp_parse_url( home_url(), PHP_URL_HOST ); $host = $host ? $host : 'localhost'; - $bs_url = "{$scheme}://{$host}:3000/browser-sync/browser-sync-client.js"; + $port = $this->get_browser_sync_port(); + $bs_url = "{$scheme}://{$host}:{$port}/browser-sync/browser-sync-client.js"; } wp_enqueue_script( 'elementary-browser-sync', $bs_url, [], ELEMENTARY_THEME_VERSION, true ); } } + + /** + * Read the BrowserSync port from .env.local (BS_PORT), defaulting to 3000. + * + * Keeps the enqueued client URL in sync with the port webpack/BrowserSync + * actually bind to, which is read from the same .env.local on the build side. + * + * @since 1.0.0 + * + * @return int BrowserSync port. + */ + private function get_browser_sync_port(): int { + $default = 3000; + $env_file = $this->base_dir . '.env.local'; + + if ( ! is_readable( $env_file ) ) { + return $default; + } + + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Local dev only; reading a small project file, not remote. + $contents = file_get_contents( $env_file ); + + if ( false === $contents ) { + return $default; + } + + if ( preg_match( '/^\s*BS_PORT\s*=\s*(\d+)/m', $contents, $matches ) ) { + return (int) $matches[1]; + } + + return $default; + } } From dd99f6ce61da4c285d55ffed12390c4356a165c3 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Fri, 12 Jun 2026 00:05:14 +0530 Subject: [PATCH 07/15] Add validation for BS port --- .env.local.example | 5 +++-- inc/Core/Assets.php | 8 +++++++- package.json | 2 +- webpack.blocks.config.js | 35 +++++++++++++++++++++++++++++++---- webpack.config.js | 36 +++++++++++++++++++++++++++++++++--- 5 files changed, 75 insertions(+), 11 deletions(-) diff --git a/.env.local.example b/.env.local.example index 9368787a..6e86a4fc 100644 --- a/.env.local.example +++ b/.env.local.example @@ -3,8 +3,9 @@ WP_HOST=yoursite.local # BrowserSync port. Default: 3000. Change if port 3000 is already in use. -# If you change this, also define ELEMENTARY_THEME_BROWSER_SYNC_URL in wp-config.php -# so PHP enqueues the client script from the correct port. +# Both the build and PHP read this value directly, so changing it here is +# enough. Define ELEMENTARY_THEME_BROWSER_SYNC_URL only to override the full +# client URL (e.g. remote/proxy setups), not just the port. BS_PORT=3000 # Block HMR dev-server port (used by `npm run start:blocks`). diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index 01525db6..77423587 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -143,6 +143,8 @@ public function enqueue_assets(): void { * * Keeps the enqueued client URL in sync with the port webpack/BrowserSync * actually bind to, which is read from the same .env.local on the build side. + * Falls back to the default when BS_PORT is absent or not a valid TCP port + * (1–65535). * * @since 1.0.0 * @@ -164,7 +166,11 @@ private function get_browser_sync_port(): int { } if ( preg_match( '/^\s*BS_PORT\s*=\s*(\d+)/m', $contents, $matches ) ) { - return (int) $matches[1]; + $port = (int) $matches[1]; + + if ( $port >= 1 && $port <= 65535 ) { + return $port; + } } return $default; diff --git a/package.json b/package.json index 87d34c23..61d0bfda 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "pretest:php": "wp-env run cli --env-cwd=/var/www/html/wp-content/themes/${PWD##*/} composer install --no-interaction --no-scripts", "start": "npm-run-all --parallel start:theme start:blocks", "start:theme": "wp-scripts start --experimental-modules --config webpack.config.js", - "start:blocks": "wp-scripts start --hot --allowed-hosts all --experimental-modules --config ./webpack.blocks.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", + "start:blocks": "wp-scripts start --hot --experimental-modules --config ./webpack.blocks.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "test": "npm-run-all --parallel test:*", "test:js": "wp-scripts test-unit-js --config=tests/js/jest.config.js --passWithNoTests", "test:js:watch": "npm run test:js -- --watch", diff --git a/webpack.blocks.config.js b/webpack.blocks.config.js index ff8ee9ea..ae575bdd 100644 --- a/webpack.blocks.config.js +++ b/webpack.blocks.config.js @@ -18,7 +18,9 @@ /** * External dependencies */ -require( 'dotenv' ).config( { path: '.env.local' } ); +// `quiet: true` suppresses dotenv's per-run "injecting env" banner, which is +// noisy on every rebuild in watch mode. +require( 'dotenv' ).config( { path: '.env.local', quiet: true } ); /** * WordPress dependencies @@ -26,9 +28,26 @@ require( 'dotenv' ).config( { path: '.env.local' } ); const config = require( '@wordpress/scripts/config/webpack.config' ); const DEFAULT_DEV_SERVER_PORT = 8887; -const devServerPort = - parseInt( process.env.BLOCKS_DEV_SERVER_PORT, 10 ) || - DEFAULT_DEV_SERVER_PORT; + +/** + * Parse a TCP port from an env value, falling back when it is missing or not a + * valid port number (1–65535). + * + * @param {string|undefined} value Raw env value. + * @param {number} fallback Port to use when `value` is invalid. + * @return {number} A valid port. + */ +const toPort = ( value, fallback ) => { + const port = parseInt( value, 10 ); + return Number.isInteger( port ) && port >= 1 && port <= 65535 + ? port + : fallback; +}; + +const devServerPort = toPort( + process.env.BLOCKS_DEV_SERVER_PORT, + DEFAULT_DEV_SERVER_PORT +); /** * Apply the dev-server fixes to a single webpack config. @@ -51,6 +70,14 @@ const fixDevServer = ( singleConfig ) => { // .env.local (BLOCKS_DEV_SERVER_PORT) rather than hardcoded. singleConfig.devServer.port = devServerPort; + // Restrict host checks to localhost (and the configured local host) instead + // of the blanket `--allowed-hosts all`, to avoid DNS-rebinding exposure if + // the port is reachable on the network. + singleConfig.devServer.allowedHosts = [ + 'localhost', + ...( process.env.WP_HOST ? [ process.env.WP_HOST ] : [] ), + ]; + return singleConfig; }; diff --git a/webpack.config.js b/webpack.config.js index 39bcd742..a0915fce 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -15,10 +15,29 @@ const isWatch = process.argv.includes( '--watch' ) || process.argv.includes( 'watch' ) || isHot; if ( isWatch ) { - require( 'dotenv' ).config( { path: '.env.local' } ); + // `quiet: true` suppresses dotenv's per-run "injecting env" banner, which is + // noisy on every rebuild in watch mode. + require( 'dotenv' ).config( { path: '.env.local', quiet: true } ); } -const bsPort = parseInt( process.env.BS_PORT, 10 ) || 3000; +const DEFAULT_BS_PORT = 3000; + +/** + * Parse a TCP port from an env value, falling back when it is missing or not a + * valid port number (1–65535). + * + * @param {string|undefined} value Raw env value. + * @param {number} fallback Port to use when `value` is invalid. + * @return {number} A valid port. + */ +const toPort = ( value, fallback ) => { + const port = parseInt( value, 10 ); + return Number.isInteger( port ) && port >= 1 && port <= 65535 + ? port + : fallback; +}; + +const bsPort = toPort( process.env.BS_PORT, DEFAULT_BS_PORT ); /** * WordPress dependencies @@ -112,7 +131,12 @@ const BROWSER_SYNC_FILES = [ * itself is scanned recursively instead. * * If two files resolve to the same entry key, the first file is kept and a - * warning is emitted. + * warning is emitted. This covers same-name files differing only by extension + * (e.g. `foo.js` + `foo.ts`). + * + * Note: directory entries are read with `withFileTypes`, whose dirents do not + * resolve symlinks — a symlinked subdirectory reports `isDirectory() === false` + * and is silently skipped rather than walked. Use real directories under `src/`. * * @param {string} dir Base directory to scan. * @param {Object} options Options. @@ -189,6 +213,12 @@ const readAllFileEntries = ( /** * Read component entry files from src/components/{component}/{component}.{ext}. * + * Note: if more than one file matches the component basename (e.g. both + * `card.js` and `card.ts` exist), the first match returned by `readdirSync` + * wins — keep one entry file per component. Component directories are read with + * `withFileTypes`, so a symlinked component folder is skipped (reported as a + * non-directory) rather than scanned. + * * @param {string} dir Component source directory. * @param {RegExp} pattern File extension pattern to match. * @return {Object} Object mapping component entry names to file paths. From 12b6f566484f2d203ad80ec33d9b3a8a9b02f029 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 03:29:37 +0530 Subject: [PATCH 08/15] update documentation for local file access --- inc/Core/Assets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index 77423587..b453ec93 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -146,7 +146,7 @@ public function enqueue_assets(): void { * Falls back to the default when BS_PORT is absent or not a valid TCP port * (1–65535). * - * @since 1.0.0 + * THIS METHOD IS INTENDED FOR LOCAL DEVELOPMENT ENVIRONMENTS ONLY. * * @return int BrowserSync port. */ From 03eb609ffd82803c33e216386c2956c9d407025f Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 03:37:29 +0530 Subject: [PATCH 09/15] rename start command name --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 61d0bfda..0663d603 100644 --- a/package.json +++ b/package.json @@ -55,12 +55,12 @@ "url": "https://github.com/rtCamp/theme-elementary.git" }, "scripts": { - "build:dev": "npm-run-all build:theme:dev build:blocks:dev", - "build:prod": "npm-run-all build:theme build:blocks", + "build:dev": "npm-run-all build:assets:dev build:blocks:dev", + "build:prod": "npm-run-all build:assets build:blocks", "build:blocks": "wp-scripts build --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", - "build:theme": "wp-scripts build --experimental-modules", + "build:assets": "wp-scripts build --experimental-modules", "build:blocks:dev": "wp-scripts start --no-watch --experimental-modules --config ./node_modules/@wordpress/scripts/config/webpack.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", - "build:theme:dev": "wp-scripts start --no-watch --experimental-modules", + "build:assets:dev": "wp-scripts start --no-watch --experimental-modules", "init": "./bin/init.js && npm run sync-ai", "sync-ai": "node bin/sync-ai.js", "lint:all": "npm-run-all --parallel lint:*", @@ -76,8 +76,8 @@ "pot": "composer run pot", "prepare": "npm run init", "pretest:php": "wp-env run cli --env-cwd=/var/www/html/wp-content/themes/${PWD##*/} composer install --no-interaction --no-scripts", - "start": "npm-run-all --parallel start:theme start:blocks", - "start:theme": "wp-scripts start --experimental-modules --config webpack.config.js", + "start": "npm-run-all --parallel start:assets start:blocks", + "start:assets": "wp-scripts start --experimental-modules --config webpack.config.js", "start:blocks": "wp-scripts start --hot --experimental-modules --config ./webpack.blocks.config.js --webpack-src-dir=./src/blocks/ --output-path=./assets/build/blocks/", "test": "npm-run-all --parallel test:*", "test:js": "wp-scripts test-unit-js --config=tests/js/jest.config.js --passWithNoTests", From edad99f6243f78c058be859327e8ddb473187db3 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 03:45:45 +0530 Subject: [PATCH 10/15] update docs as per updated run commands --- docs/hmr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hmr.md b/docs/hmr.md index 5daae09a..3b6d40db 100644 --- a/docs/hmr.md +++ b/docs/hmr.md @@ -6,7 +6,7 @@ This document explains how live reload and hot module replacement work in the th Running `npm start` runs two scripts in parallel, each with a complementary tool: -- **`start:theme` → BrowserSync** (port 3000) — live reload for the frontend via snippet mode. Your site URL stays unchanged. +- **`start:assets` → BrowserSync** (port 3000) — live reload for the frontend via snippet mode. Your site URL stays unchanged. - **`start:blocks` → webpack-dev-server / Fast Refresh** (port 8887 by default, configurable via `BLOCKS_DEV_SERVER_PORT`) — hot module replacement for block editor React components. Block state is preserved across updates; no full page reload needed. For BrowserSync: @@ -48,9 +48,9 @@ Without `SCRIPT_DEBUG`, WordPress does not support Fast Refresh. ## How It Works -**Theme assets (`start:theme` + BrowserSync):** +**Theme assets (`start:assets` + BrowserSync):** -1. `start:theme` runs `wp-scripts start` in watch mode (no `--hot`) using `webpack.config.js`. +1. `start:assets` runs `wp-scripts start` in watch mode (no `--hot`) using `webpack.config.js`. 2. When a file changes, webpack rebuilds the affected assets in `assets/build/`. 3. BrowserSync detects the change and notifies the browser via the client script. 4. CSS changes are injected in-place. Everything else triggers a full reload. From 76a4944e24ea87f8c74547e0fb4f301e884eff00 Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 03:50:13 +0530 Subject: [PATCH 11/15] move browsersync enqueue to separate function --- inc/Core/Assets.php | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index b453ec93..739029cd 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -69,6 +69,7 @@ public function __construct() { public function register_hooks(): void { add_action( 'wp_enqueue_scripts', [ $this, 'register_assets' ] ); add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_browser_sync' ] ); add_filter( 'render_block', [ $this, 'enqueue_block_specific_assets' ], 10, 2 ); } @@ -123,19 +124,37 @@ public function enqueue_assets(): void { if ( $this->tailwind_enabled ) { wp_enqueue_style( 'elementary-theme-tailwind' ); } + } - if ( 'local' === wp_get_environment_type() && ! ELEMENTARY_THEME_DISABLE_BROWSER_SYNC ) { - if ( defined( 'ELEMENTARY_THEME_BROWSER_SYNC_URL' ) ) { - $bs_url = ELEMENTARY_THEME_BROWSER_SYNC_URL; - } else { - $scheme = is_ssl() ? 'https' : 'http'; - $host = wp_parse_url( home_url(), PHP_URL_HOST ); - $host = $host ? $host : 'localhost'; - $port = $this->get_browser_sync_port(); - $bs_url = "{$scheme}://{$host}:{$port}/browser-sync/browser-sync-client.js"; - } - wp_enqueue_script( 'elementary-browser-sync', $bs_url, [], ELEMENTARY_THEME_VERSION, true ); + /** + * Enqueue the BrowserSync client script for local live reload. + * + * Only runs in the `local` environment and when not disabled. The client URL + * is derived from the site URL and the BrowserSync port (BS_PORT in + * .env.local, default 3000), or taken verbatim from the + * ELEMENTARY_THEME_BROWSER_SYNC_URL constant when defined (for custom ports + * or remote/proxied setups). + * + * @since 1.0.0 + * + * @action wp_enqueue_scripts + */ + public function enqueue_browser_sync(): void { + if ( 'local' !== wp_get_environment_type() || ELEMENTARY_THEME_DISABLE_BROWSER_SYNC ) { + return; } + + if ( defined( 'ELEMENTARY_THEME_BROWSER_SYNC_URL' ) ) { + $bs_url = ELEMENTARY_THEME_BROWSER_SYNC_URL; + } else { + $scheme = is_ssl() ? 'https' : 'http'; + $host = wp_parse_url( home_url(), PHP_URL_HOST ); + $host = $host ? $host : 'localhost'; + $port = $this->get_browser_sync_port(); + $bs_url = "{$scheme}://{$host}:{$port}/browser-sync/browser-sync-client.js"; + } + + wp_enqueue_script( 'elementary-browser-sync', $bs_url, [], ELEMENTARY_THEME_VERSION, true ); } /** From 8c0e463fd45d6b50725ffb4ea83aec9ea30d4bcd Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 03:52:45 +0530 Subject: [PATCH 12/15] Use BS enable/disable from env file --- .env.local.example | 4 +++ docs/hmr.md | 6 ++-- functions.php | 4 --- inc/Core/Assets.php | 76 ++++++++++++++++++++++++++++++++++--------- phpstan-bootstrap.php | 1 - 5 files changed, 67 insertions(+), 24 deletions(-) diff --git a/.env.local.example b/.env.local.example index 6e86a4fc..414b952c 100644 --- a/.env.local.example +++ b/.env.local.example @@ -12,6 +12,10 @@ BS_PORT=3000 # Default: 8887. Change if port 8887 is already in use. BLOCKS_DEV_SERVER_PORT=8887 +# Disable BrowserSync client enqueue. Truthy: 1, true, yes, on (default off). +# The BrowserSync server still runs; only the frontend client is skipped. +# DISABLE_BS=true + # SSL cert paths — only needed when your local site runs on HTTPS. # LocalWP stores certs at: # macOS: ~/Library/Application Support/Local/run/router/nginx/certs/.key / .crt diff --git a/docs/hmr.md b/docs/hmr.md index 3b6d40db..241227f6 100644 --- a/docs/hmr.md +++ b/docs/hmr.md @@ -136,10 +136,10 @@ This is required to avoid mixed content errors — the BrowserSync client script ### Disabling BrowserSync -To disable BrowserSync without removing it from the webpack config, define this constant in `wp-config.php`: +To disable BrowserSync without removing it from the webpack config, set this in `.env.local`: -```php -define( 'ELEMENTARY_THEME_DISABLE_BROWSER_SYNC', true ); +``` +DISABLE_BS=true ``` This prevents PHP from enqueuing the BrowserSync client script. The BrowserSync server still starts (webpack still runs it), but the browser won't connect to it. Useful when working purely in the block editor and you don't want the BrowserSync client loading on the frontend. diff --git a/functions.php b/functions.php index 5a52d9b7..2e1a2a07 100644 --- a/functions.php +++ b/functions.php @@ -37,10 +37,6 @@ function constants(): void { if ( ! defined( 'ELEMENTARY_THEME_ENABLE_TAILWIND' ) ) { define( 'ELEMENTARY_THEME_ENABLE_TAILWIND', file_exists( get_template_directory() . '/src/css/frontend/tailwind.css' ) ); } - - if ( ! defined( 'ELEMENTARY_THEME_DISABLE_BROWSER_SYNC' ) ) { - define( 'ELEMENTARY_THEME_DISABLE_BROWSER_SYNC', false ); - } } constants(); diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index 739029cd..54965fc1 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -129,18 +129,18 @@ public function enqueue_assets(): void { /** * Enqueue the BrowserSync client script for local live reload. * - * Only runs in the `local` environment and when not disabled. The client URL - * is derived from the site URL and the BrowserSync port (BS_PORT in - * .env.local, default 3000), or taken verbatim from the - * ELEMENTARY_THEME_BROWSER_SYNC_URL constant when defined (for custom ports - * or remote/proxied setups). + * Only runs in the `local` environment and when not disabled via DISABLE_BS + * in .env.local. The client URL is derived from the site URL and the + * BrowserSync port (BS_PORT in .env.local, default 3000), or taken verbatim + * from the ELEMENTARY_THEME_BROWSER_SYNC_URL constant when defined (for + * custom ports or remote/proxied setups). * * @since 1.0.0 * * @action wp_enqueue_scripts */ public function enqueue_browser_sync(): void { - if ( 'local' !== wp_get_environment_type() || ELEMENTARY_THEME_DISABLE_BROWSER_SYNC ) { + if ( 'local' !== wp_get_environment_type() || $this->is_browser_sync_disabled() ) { return; } @@ -170,28 +170,72 @@ public function enqueue_browser_sync(): void { * @return int BrowserSync port. */ private function get_browser_sync_port(): int { - $default = 3000; + $default = 3000; + $value = $this->get_env_value( 'BS_PORT' ); + + if ( null !== $value && preg_match( '/^\d+$/', $value ) ) { + $port = (int) $value; + + if ( $port >= 1 && $port <= 65535 ) { + return $port; + } + } + + return $default; + } + + /** + * Whether BrowserSync is disabled via DISABLE_BS in .env.local. + * + * Disabling prevents PHP from enqueuing the BrowserSync client script. The + * BrowserSync server still starts (webpack still runs it), but the browser + * won't connect to it. Truthy values are `1`, `true`, `yes`, and `on` + * (case-insensitive); anything else (or an absent key) keeps it enabled. + * + * THIS METHOD IS INTENDED FOR LOCAL DEVELOPMENT ENVIRONMENTS ONLY. + * + * @return bool True when BrowserSync should be disabled. + */ + private function is_browser_sync_disabled(): bool { + $value = $this->get_env_value( 'DISABLE_BS' ); + + if ( null === $value ) { + return false; + } + + return in_array( strtolower( $value ), [ '1', 'true', 'yes', 'on' ], true ); + } + + /** + * Read a single key's value from .env.local. + * + * Returns the trimmed value (without surrounding single/double quotes) for + * the given key, or null when the file is unreadable or the key is absent. + * + * THIS METHOD IS INTENDED FOR LOCAL DEVELOPMENT ENVIRONMENTS ONLY. + * + * @param string $key Environment variable name to read. + * + * @return string|null The value, or null when not found. + */ + private function get_env_value( string $key ): ?string { $env_file = $this->base_dir . '.env.local'; if ( ! is_readable( $env_file ) ) { - return $default; + return null; } // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Local dev only; reading a small project file, not remote. $contents = file_get_contents( $env_file ); if ( false === $contents ) { - return $default; + return null; } - if ( preg_match( '/^\s*BS_PORT\s*=\s*(\d+)/m', $contents, $matches ) ) { - $port = (int) $matches[1]; - - if ( $port >= 1 && $port <= 65535 ) { - return $port; - } + if ( preg_match( '/^\s*' . preg_quote( $key, '/' ) . '\s*=\s*(.*)$/m', $contents, $matches ) ) { + return trim( $matches[1], " \t\"'" ); } - return $default; + return null; } } diff --git a/phpstan-bootstrap.php b/phpstan-bootstrap.php index 99ffe2eb..8367da2d 100644 --- a/phpstan-bootstrap.php +++ b/phpstan-bootstrap.php @@ -11,5 +11,4 @@ define( 'ELEMENTARY_THEME_PATH', __DIR__ ); define( 'ELEMENTARY_THEME_BUILD_DIR', __DIR__ . '/assets/build' ); define( 'ELEMENTARY_THEME_BUILD_URI', 'https://example.com/wp-content/themes/elementary/assets/build' ); -define( 'ELEMENTARY_THEME_DISABLE_BROWSER_SYNC', false ); define( 'ELEMENTARY_THEME_ENABLE_TAILWIND', false ); From 0379876e107c840ae02f80f16d157e3acf73a35a Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 03:56:14 +0530 Subject: [PATCH 13/15] Update docs in webpack config --- webpack.blocks.config.js | 38 +++++++++++++++++++++++++------------- webpack.config.js | 28 +++++++++++++++++----------- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/webpack.blocks.config.js b/webpack.blocks.config.js index ae575bdd..94adb4eb 100644 --- a/webpack.blocks.config.js +++ b/webpack.blocks.config.js @@ -18,8 +18,10 @@ /** * External dependencies */ -// `quiet: true` suppresses dotenv's per-run "injecting env" banner, which is -// noisy on every rebuild in watch mode. +/* + * `quiet: true` suppresses dotenv's per-run "injecting env" banner, which is + * noisy on every rebuild in watch mode. + */ require( 'dotenv' ).config( { path: '.env.local', quiet: true } ); /** @@ -56,23 +58,31 @@ const devServerPort = toPort( * @return {Object} The same config, dev-server v5 compatible. */ const fixDevServer = ( singleConfig ) => { - // Only the script config carries a devServer; the module config sets it to - // `false` (or omits it) and needs no changes. + /* + * Only the script config carries a devServer; the module config sets it to + * `false` (or omits it) and needs no changes. + */ if ( ! singleConfig || ! singleConfig.devServer ) { return singleConfig; } - // webpack-dev-server v5 requires `proxy` to be an array; wp-scripts ships a - // v4-style object. Not needed for block HMR, so drop it. + /* + * webpack-dev-server v5 requires `proxy` to be an array; wp-scripts ships a + * v4-style object. Not needed for block HMR, so drop it. + */ delete singleConfig.devServer.proxy; - // Multiple sites can run the dev server at once, so the port is read from - // .env.local (BLOCKS_DEV_SERVER_PORT) rather than hardcoded. + /* + * Multiple sites can run the dev server at once, so the port is read from + * .env.local (BLOCKS_DEV_SERVER_PORT) rather than hardcoded. + */ singleConfig.devServer.port = devServerPort; - // Restrict host checks to localhost (and the configured local host) instead - // of the blanket `--allowed-hosts all`, to avoid DNS-rebinding exposure if - // the port is reachable on the network. + /* + * Restrict host checks to localhost (and the configured local host) instead + * of the blanket `--allowed-hosts all`, to avoid DNS-rebinding exposure if + * the port is reachable on the network. + */ singleConfig.devServer.allowedHosts = [ 'localhost', ...( process.env.WP_HOST ? [ process.env.WP_HOST ] : [] ), @@ -81,8 +91,10 @@ const fixDevServer = ( singleConfig ) => { return singleConfig; }; -// `--experimental-modules` makes the stock config export an array of configs -// ([ scriptConfig, moduleConfig ]); otherwise it's a single object. +/* + * `--experimental-modules` makes the stock config export an array of configs + * ([ scriptConfig, moduleConfig ]); otherwise it's a single object. + */ module.exports = Array.isArray( config ) ? config.map( fixDevServer ) : fixDevServer( config ); diff --git a/webpack.config.js b/webpack.config.js index a0915fce..ff51da72 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -15,8 +15,10 @@ const isWatch = process.argv.includes( '--watch' ) || process.argv.includes( 'watch' ) || isHot; if ( isWatch ) { - // `quiet: true` suppresses dotenv's per-run "injecting env" banner, which is - // noisy on every rebuild in watch mode. + /* + * `quiet: true` suppresses dotenv's per-run "injecting env" banner, which is + * noisy on every rebuild in watch mode. + */ require( 'dotenv' ).config( { path: '.env.local', quiet: true } ); } @@ -490,9 +492,11 @@ const sharedConfig = { ...scriptConfig, watchOptions: { ...( scriptConfig.watchOptions || {} ), - // assets/build/** must be ignored to prevent an infinite rebuild loop: - // Tailwind v4's content detection treats build output as potential template - // files, so without this, each webpack emit triggers another rebuild. + /* + * assets/build/** must be ignored to prevent an infinite rebuild loop: + * Tailwind v4's content detection treats build output as potential template + * files, so without this, each webpack emit triggers another rebuild. + */ ignored: [ '**/node_modules/**', path.resolve( process.cwd(), 'assets', 'build', '**' ), @@ -505,12 +509,14 @@ const sharedConfig = { }, plugins: [ new CleanBuildPlugin(), - // Strip wp-scripts' inherited CopyPlugin (its actual class is `CopyPlugin`, - // not `CopyWebpackPlugin` — that's just wp-scripts' import alias). It would - // otherwise copy block.json/render.php from src/blocks/ into the JS output - // at assets/build/js/blocks/, which is redundant — block compilation is - // owned by the dedicated `build:blocks` script and lands in - // assets/build/blocks/. Keep all other inherited plugins. + /* + * Strip wp-scripts' inherited CopyPlugin (its actual class is `CopyPlugin`, + * not `CopyWebpackPlugin` — that's just wp-scripts' import alias). It would + * otherwise copy block.json/render.php from src/blocks/ into the JS output + * at assets/build/js/blocks/, which is redundant — block compilation is + * owned by the dedicated `build:blocks` script and lands in + * assets/build/blocks/. Keep all other inherited plugins. + */ ...scriptConfig.plugins .filter( isNotPlugin( 'CopyPlugin' ) ) .map( setCssOutputPath ), From ce9c5dc4f0c90b6361618d8dc7faa26d3363374b Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 04:49:42 +0530 Subject: [PATCH 14/15] fix phpcs warning --- .env.local.example | 2 +- inc/Core/Assets.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.local.example b/.env.local.example index 414b952c..00207bff 100644 --- a/.env.local.example +++ b/.env.local.example @@ -1,5 +1,5 @@ # Local site hostname (without protocol or trailing slash). -# LocalWP: elementary.local, Lando: yoursite.lndo.site, wp-env: localhost, WP Studio: localhost +# LocalWP: yoursite.local, Lando: yoursite.lndo.site, wp-env: localhost, WP Studio: localhost WP_HOST=yoursite.local # BrowserSync port. Default: 3000. Change if port 3000 is already in use. diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index 54965fc1..1ca3a590 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -225,7 +225,7 @@ private function get_env_value( string $key ): ?string { return null; } - // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Local dev only; reading a small project file, not remote. + // phpcs:ignore WordPressVIPMinimum.Performance.FetchingRemoteData.FileGetContentsUnknown -- Local dev only; reading a small project file, not remote. $contents = file_get_contents( $env_file ); if ( false === $contents ) { From 868778d1f3c97b8e3ec954526a314a25dc73ef0b Mon Sep 17 00:00:00 2001 From: pratik-londhe4 Date: Mon, 15 Jun 2026 04:53:58 +0530 Subject: [PATCH 15/15] Update BS port default to 3001 --- .env.local.example | 4 ++-- docs/hmr.md | 20 ++++++++++---------- inc/Core/Assets.php | 6 +++--- webpack.config.js | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.env.local.example b/.env.local.example index 00207bff..ffd6ae9d 100644 --- a/.env.local.example +++ b/.env.local.example @@ -2,11 +2,11 @@ # LocalWP: yoursite.local, Lando: yoursite.lndo.site, wp-env: localhost, WP Studio: localhost WP_HOST=yoursite.local -# BrowserSync port. Default: 3000. Change if port 3000 is already in use. +# BrowserSync port. Default: 3001. Change if port 3001 is already in use. # Both the build and PHP read this value directly, so changing it here is # enough. Define ELEMENTARY_THEME_BROWSER_SYNC_URL only to override the full # client URL (e.g. remote/proxy setups), not just the port. -BS_PORT=3000 +BS_PORT=3001 # Block HMR dev-server port (used by `npm run start:blocks`). # Default: 8887. Change if port 8887 is already in use. diff --git a/docs/hmr.md b/docs/hmr.md index 241227f6..4ff7952a 100644 --- a/docs/hmr.md +++ b/docs/hmr.md @@ -6,7 +6,7 @@ This document explains how live reload and hot module replacement work in the th Running `npm start` runs two scripts in parallel, each with a complementary tool: -- **`start:assets` → BrowserSync** (port 3000) — live reload for the frontend via snippet mode. Your site URL stays unchanged. +- **`start:assets` → BrowserSync** (port 3001) — live reload for the frontend via snippet mode. Your site URL stays unchanged. - **`start:blocks` → webpack-dev-server / Fast Refresh** (port 8887 by default, configurable via `BLOCKS_DEV_SERVER_PORT`) — hot module replacement for block editor React components. Block state is preserved across updates; no full page reload needed. For BrowserSync: @@ -24,7 +24,7 @@ For block editor HMR, JS/JSX changes to block components hot-swap in the editor npm start ``` -Webpack starts watching for file changes and BrowserSync starts on port 3000. Open your local site and edits will reflect automatically. +Webpack starts watching for file changes and BrowserSync starts on port 3001. Open your local site and edits will reflect automatically. --- @@ -68,7 +68,7 @@ BrowserSync watches the following: - `**/*.php` (excluding `vendor/`) - `**/*.html` -The client script is enqueued by PHP from `{scheme}://{host}:3000/browser-sync/browser-sync-client.js`. The scheme (`http` or `https`) and host are derived automatically from the WordPress site URL using `is_ssl()` and `home_url()`. +The client script is enqueued by PHP from `{scheme}://{host}:3001/browser-sync/browser-sync-client.js`. The scheme (`http` or `https`) and host are derived automatically from the WordPress site URL using `is_ssl()` and `home_url()`. BrowserSync is only added to the `scripts` webpack config. Adding it to all three configs (`scripts`, `styles`, `moduleScripts`) would start three BrowserSync instances on the same port. @@ -88,16 +88,16 @@ WP_HOST=yoursite.local ### Multiple sites / custom URL -If port 3000 is already taken (e.g. two local sites running at once), set a different port in `.env.local`: +If port 3001 is already taken (e.g. two local sites running at once), set a different port in `.env.local`: ``` -BS_PORT=3001 +BS_PORT=3002 ``` Then define the matching constant in `wp-config.php` so PHP enqueues the client from the right URL: ```php -define( 'ELEMENTARY_THEME_BROWSER_SYNC_URL', 'https://yoursite.local:3001/browser-sync/browser-sync-client.js' ); +define( 'ELEMENTARY_THEME_BROWSER_SYNC_URL', 'https://yoursite.local:3002/browser-sync/browser-sync-client.js' ); ``` `ELEMENTARY_THEME_BROWSER_SYNC_URL` overrides the auto-detected URL entirely, so it also works for remote setups (ddev, reverse proxy) where the BrowserSync server is on a different host or IP. @@ -121,7 +121,7 @@ WP_SSL_KEY=/path/to/yoursite.local.key WP_SSL_CERT=/path/to/yoursite.local.crt ``` -This is required to avoid mixed content errors — the BrowserSync client script on port 3000 must also be served over HTTPS. Since SSL certs are domain-based, the same cert your local site uses also covers port 3000. +This is required to avoid mixed content errors — the BrowserSync client script on port 3001 must also be served over HTTPS. Since SSL certs are domain-based, the same cert your local site uses also covers port 3001. **Finding cert paths in LocalWP (macOS):** @@ -149,13 +149,13 @@ This prevents PHP from enqueuing the BrowserSync client script. The BrowserSync By default, PHP constructs the client URL from the site's scheme and host: ``` -{scheme}://{host}:3000/browser-sync/browser-sync-client.js +{scheme}://{host}:3001/browser-sync/browser-sync-client.js ``` To override it entirely — for a non-standard port, a remote dev server, or a reverse proxy setup — define this constant in `wp-config.php`: ```php -define( 'ELEMENTARY_THEME_BROWSER_SYNC_URL', 'https://yoursite.local:3001/browser-sync/browser-sync-client.js' ); +define( 'ELEMENTARY_THEME_BROWSER_SYNC_URL', 'https://yoursite.local:3002/browser-sync/browser-sync-client.js' ); ``` This takes precedence over the auto-detected URL. @@ -164,6 +164,6 @@ This takes precedence over the auto-detected URL. ## Known Limitations -**BrowserSync port**: BrowserSync requires its own port (3000) separate from your local site. Snippet mode keeps the site URL unchanged — proxy mode would change the URL and break WordPress redirects and cookie domains. +**BrowserSync port**: BrowserSync requires its own port (3001) separate from your local site. Snippet mode keeps the site URL unchanged — proxy mode would change the URL and break WordPress redirects and cookie domains. **WDS host validation**: WDS runs on `localhost:8887`. For custom local hostnames (e.g. `yoursite.local`), `allowedHosts: 'all'` is set in the webpack devServer config so the HMR WebSocket connection is accepted. diff --git a/inc/Core/Assets.php b/inc/Core/Assets.php index 1ca3a590..87131170 100644 --- a/inc/Core/Assets.php +++ b/inc/Core/Assets.php @@ -131,7 +131,7 @@ public function enqueue_assets(): void { * * Only runs in the `local` environment and when not disabled via DISABLE_BS * in .env.local. The client URL is derived from the site URL and the - * BrowserSync port (BS_PORT in .env.local, default 3000), or taken verbatim + * BrowserSync port (BS_PORT in .env.local, default 3001), or taken verbatim * from the ELEMENTARY_THEME_BROWSER_SYNC_URL constant when defined (for * custom ports or remote/proxied setups). * @@ -158,7 +158,7 @@ public function enqueue_browser_sync(): void { } /** - * Read the BrowserSync port from .env.local (BS_PORT), defaulting to 3000. + * Read the BrowserSync port from .env.local (BS_PORT), defaulting to 3001. * * Keeps the enqueued client URL in sync with the port webpack/BrowserSync * actually bind to, which is read from the same .env.local on the build side. @@ -170,7 +170,7 @@ public function enqueue_browser_sync(): void { * @return int BrowserSync port. */ private function get_browser_sync_port(): int { - $default = 3000; + $default = 3001; $value = $this->get_env_value( 'BS_PORT' ); if ( null !== $value && preg_match( '/^\d+$/', $value ) ) { diff --git a/webpack.config.js b/webpack.config.js index ff51da72..e25983e0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -22,7 +22,7 @@ if ( isWatch ) { require( 'dotenv' ).config( { path: '.env.local', quiet: true } ); } -const DEFAULT_BS_PORT = 3000; +const DEFAULT_BS_PORT = 3001; /** * Parse a TCP port from an env value, falling back when it is missing or not a