diff --git a/frontend/bun.lock b/frontend/bun.lock index 605fbb9158..3f1d38df99 100644 --- a/frontend/bun.lock +++ b/frontend/bun.lock @@ -39,8 +39,8 @@ "@shikijs/themes": "^3.23.0", "@stepperize/react": "^5.1.9", "@tanstack/react-form": "^1.12.3", - "@tanstack/react-query": "^5.99.2", - "@tanstack/react-router": "^1.170.7", + "@tanstack/react-query": "5.101.4", + "@tanstack/react-router": "1.170.22", "@tanstack/react-table": "^8.21.3", "@tanstack/react-virtual": "^3.13.12", "@uiw/react-codemirror": "^4.25.10", @@ -106,9 +106,9 @@ "@rsbuild/plugin-tailwindcss": "2.0.2", "@rsbuild/plugin-yaml": "1.0.5", "@rsdoctor/rspack-plugin": "1.6.0", - "@tanstack/react-query-devtools": "^5.90.2", - "@tanstack/react-router-devtools": "^1.167.0", - "@tanstack/router-plugin": "^1.168.19", + "@tanstack/react-query-devtools": "5.101.4", + "@tanstack/react-router-devtools": "1.167.1", + "@tanstack/router-plugin": "1.168.27", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^7.0.0", "@testing-library/react": "^16.3.2", @@ -981,23 +981,23 @@ "@tanstack/form-core": ["@tanstack/form-core@1.25.0", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.3.5", "@tanstack/pacer": "^0.15.3", "@tanstack/store": "^0.7.7" } }, "sha512-OEWW2uTOFMyRmHrVEiPOn+J27ekQ/vXwRAJt9kD8U8vCt8CmpClj989OOGGSBSVJtDNxGUcWyKF8gYznnqIyaw=="], - "@tanstack/history": ["@tanstack/history@1.162.0", "", {}, "sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA=="], + "@tanstack/history": ["@tanstack/history@1.162.1", "", {}, "sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w=="], "@tanstack/pacer": ["@tanstack/pacer@0.15.4", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.3.2", "@tanstack/store": "^0.7.5" } }, "sha512-vGY+CWsFZeac3dELgB6UZ4c7OacwsLb8hvL2gLS6hTgy8Fl0Bm/aLokHaeDIP+q9F9HUZTnp360z9uv78eg8pg=="], - "@tanstack/query-core": ["@tanstack/query-core@5.99.2", "", {}, "sha512-1HunU0bXVsR1ZJMZbcOPE6VtaBJxsW809RE9xPe4Gz7MlB0GWwQvuTPhMoEmQ/hIzFKJ/DWAuttIe7BOaWx0tA=="], + "@tanstack/query-core": ["@tanstack/query-core@5.101.4", "", {}, "sha512-gNwcvOJcRbLWPOLG/2OBm+zM+Yv+MKsXKEOWC57USuZDEsI71hEErQsiEGx5wX9rzWWkfwM0fVSPoiIFSsxfiw=="], - "@tanstack/query-devtools": ["@tanstack/query-devtools@5.90.1", "", {}, "sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ=="], + "@tanstack/query-devtools": ["@tanstack/query-devtools@5.101.4", "", {}, "sha512-z5IPHnDX3aUWeTWlRKLyooBQekaCAw4xRpZqPQ390RiWTDBcTynjpPT221BArw0u2+pnQMdGvPQI9YNNubBcmA=="], "@tanstack/react-form": ["@tanstack/react-form@1.25.0", "", { "dependencies": { "@tanstack/form-core": "1.25.0", "@tanstack/react-store": "^0.7.7" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-SjKpBkjegNVW9WU+qlO8+/+kSbSEwo2zwHnrQz/yOnnJRhtdgubUt50LfeUtdzkMsbbptQ5MSZrXH03kidQjyw=="], - "@tanstack/react-query": ["@tanstack/react-query@5.99.2", "", { "dependencies": { "@tanstack/query-core": "5.99.2" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-vM91UEe45QUS9ED6OklsVL15i8qKcRqNwpWzPTVWvRPRSEgDudDgHpvyTjcdlwHcrKNa80T+xXYcchT2noPnZA=="], + "@tanstack/react-query": ["@tanstack/react-query@5.101.4", "", { "dependencies": { "@tanstack/query-core": "5.101.4" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-yRg2pfOCxIs4ZJW3XYYHU/WgtD04FHSnfHlpRT7h7pR77hwkdRG4wxbKe4aq6P0RvXUTBSQpQeadS1SUYUe+KA=="], - "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.90.2", "", { "dependencies": { "@tanstack/query-devtools": "5.90.1" }, "peerDependencies": { "@tanstack/react-query": "^5.90.2", "react": "^18 || ^19" } }, "sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ=="], + "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.101.4", "", { "dependencies": { "@tanstack/query-devtools": "5.101.4" }, "peerDependencies": { "@tanstack/react-query": "^5.101.4", "react": "^18 || ^19" } }, "sha512-VeK2gtmfj7kvRBjtxS7TKxt/6qKhn8VzabY4UiYMr7NV9CddjSRYRgeYyld+NpjAkgMV9dd+2Qdr8ah5I03NeA=="], - "@tanstack/react-router": ["@tanstack/react-router@1.170.17", "", { "dependencies": { "@tanstack/history": "1.162.0", "@tanstack/react-store": "^0.9.3", "@tanstack/router-core": "1.171.14", "isbot": "^5.1.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-ppLkjCfSMaeug9rmFRYzOd4TIqWV+yTE7tzIny7alJsSnM7w4lzEZm6eqCehG0SPetpZ0R3K+UnanSmBgOAVcQ=="], + "@tanstack/react-router": ["@tanstack/react-router@1.170.22", "", { "dependencies": { "@tanstack/history": "1.162.1", "@tanstack/react-store": "^0.9.3", "@tanstack/router-core": "1.171.19", "isbot": "^5.1.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-LMOHWpVMf9WJYcvzIn6TwaoRKpELnhJTwx47da6LHFy2SwNIwn4DBCh5sZ6SdCkMvkmwZaOVu7wWT2ppPP6a1Q=="], - "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.167.0", "", { "dependencies": { "@tanstack/router-devtools-core": "1.168.0" }, "peerDependencies": { "@tanstack/react-router": "^1.170.0", "@tanstack/router-core": "^1.170.0", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["@tanstack/router-core"] }, "sha512-nGw095EG7IHx0h5NtlEmzf6vcCTaFNPWdTSuDKazajhN0ct/v/TkekJ9J6KYUCeV1a8/2ZmToc58M+0rrOyn7w=="], + "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.167.1", "", { "dependencies": { "@tanstack/router-devtools-core": "1.168.1" }, "peerDependencies": { "@tanstack/react-router": "^1.170.19", "@tanstack/router-core": "^1.171.16", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["@tanstack/router-core"] }, "sha512-pjfGrmjj4d7naEPM7oshqFfwBoxDPNo/UxltlHH5ePbHsJ+plBhd+JaAewm1ueYOjZ0js9hckjWWDYXpCrSfKw=="], "@tanstack/react-store": ["@tanstack/react-store@0.7.7", "", { "dependencies": { "@tanstack/store": "0.7.7", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg=="], @@ -1005,13 +1005,13 @@ "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.12", "", { "dependencies": { "@tanstack/virtual-core": "3.13.12" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA=="], - "@tanstack/router-core": ["@tanstack/router-core@1.171.13", "", { "dependencies": { "@tanstack/history": "1.162.0", "cookie-es": "^3.0.0", "seroval": "^1.5.4", "seroval-plugins": "^1.5.4" } }, "sha512-+NOwEj1kO/6IGmpHRIZHasYxYWpyBQGNIZAST9aNrk9Q3YlU9SgqVnl1pbLa9qAKfeNdXQIRve0RQb/0kyDeDA=="], + "@tanstack/router-core": ["@tanstack/router-core@1.171.19", "", { "dependencies": { "@tanstack/history": "1.162.1", "cookie-es": "^3.0.0", "seroval": "^1.6.2", "seroval-plugins": "^1.6.2" } }, "sha512-uCZhgnfmuBA3PoRLIVSjUhQpJQd/HA7p0XxG1IFKnvXU9lIMZ7gIqx45hyuf9JopxXZI8k7qaz9/6PC7mZLdfQ=="], - "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.168.0", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16" }, "peerDependencies": { "@tanstack/router-core": "^1.170.0", "csstype": "^3.0.10" }, "optionalPeers": ["csstype"] }, "sha512-wQoQhlBK7nlZgqzaqdYXKWNTpdHdsaREdaPhFZVH0/Ador+F+eM3/NF2i3f2LPeS0GgKraZUQXe1Q/1+KHyEYg=="], + "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.168.1", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16" }, "peerDependencies": { "@tanstack/router-core": "^1.171.16", "csstype": "^3.0.10" }, "optionalPeers": ["csstype"] }, "sha512-qr4voa4cpSMwQvS3867xkU3AB3MtJbTuovKIy+btjJ/Faju6er9w0nDylmD+005Mk/3YKw9/iueZJl2JAB7JOA=="], - "@tanstack/router-generator": ["@tanstack/router-generator@1.167.18", "", { "dependencies": { "@babel/types": "^7.28.5", "@tanstack/router-core": "1.171.14", "@tanstack/router-utils": "1.162.2", "@tanstack/virtual-file-routes": "1.162.0", "jiti": "^2.7.0", "magic-string": "^0.30.21", "prettier": "^3.5.0", "zod": "^4.4.3" } }, "sha512-kFvM4caRds9Q3EXg64bZubJ6rbDxyV0YDSBSGvOGzmKspQPdz5Xrh0uj5T1Ov8avUUg+c761u04VQAaEzSBXRw=="], + "@tanstack/router-generator": ["@tanstack/router-generator@1.167.25", "", { "dependencies": { "@babel/types": "^7.28.5", "@tanstack/router-core": "1.171.19", "@tanstack/router-utils": "1.162.2", "@tanstack/virtual-file-routes": "1.162.0", "jiti": "^2.7.0", "magic-string": "^0.30.21", "prettier": "^3.5.0", "zod": "^4.4.3" } }, "sha512-M+S+QvGicfiH7kMkjrm6q+UMWXTdl7v9+pvMVnzA+lFm7whe8qmVOY72h/O8GGnejNn14jxdPrnLXv97NJjlWQ=="], - "@tanstack/router-plugin": ["@tanstack/router-plugin@1.168.19", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "@tanstack/router-core": "1.171.14", "@tanstack/router-generator": "1.167.18", "@tanstack/router-utils": "1.162.2", "chokidar": "^5.0.0", "unplugin": "^3.0.0", "zod": "^4.4.3" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2 || ^2.0.0", "@tanstack/react-router": "^1.170.17", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0", "vite-plugin-solid": "^2.11.10 || ^3.0.0-0", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-aFglwLc+bbPTgZlkXn3PvOwpjJAfgUyPGSuql4MP3XrqTTh6WkBiy2RYb6oaG5h0s7EKwivEuq85K3Y4V0Mt1g=="], + "@tanstack/router-plugin": ["@tanstack/router-plugin@1.168.27", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "@tanstack/router-core": "1.171.19", "@tanstack/router-generator": "1.167.25", "@tanstack/router-utils": "1.162.2", "chokidar": "^5.0.0", "unplugin": "^3.0.0", "zod": "^4.4.3" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2 || ^2.0.0", "@tanstack/react-router": "^1.170.22", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0", "vite-plugin-solid": "^2.11.10 || ^3.0.0-0", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-M/3XG6RIxid8+f5VKXILtPpapQPjIgKRKV1JxuvYJwQM811iSUzK9onrZnezUktZcHaWJN+wD7FR5HedH/WY7Q=="], "@tanstack/router-utils": ["@tanstack/router-utils@1.162.2", "", { "dependencies": { "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ansis": "^4.1.0", "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-hTWqJtqIFFdvuCl8WXNyrodp2L9zo2G37xKRrcVmVRWpAB2h+U1LuRAfS4tsFTiWOIoE/B+WDVFB8JpoEdw6jQ=="], @@ -2627,9 +2627,9 @@ "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "seroval": ["seroval@1.5.4", "", {}, "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw=="], + "seroval": ["seroval@1.6.2", "", {}, "sha512-mPT+SD2TrlB6wvte1KkYOYUkubaTbd6pZ/6Kk3C9nxzrHmCZyhxOO7XGAeL7f+yLKZglzGtM9odUVvg/EhO+vQ=="], - "seroval-plugins": ["seroval-plugins@1.5.4", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw=="], + "seroval-plugins": ["seroval-plugins@1.6.2", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-TfxuUjlbBESzUOWdTkTKqvSmav0ABym+itetDXLK6mDz8SmrpdI30aF8RTXE8Bvq+tH/1yIDkvy3W0lfQb1ipQ=="], "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], @@ -3225,14 +3225,8 @@ "@tanstack/react-router/@tanstack/react-store": ["@tanstack/react-store@0.9.3", "", { "dependencies": { "@tanstack/store": "0.9.3", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg=="], - "@tanstack/react-router/@tanstack/router-core": ["@tanstack/router-core@1.171.14", "", { "dependencies": { "@tanstack/history": "1.162.0", "cookie-es": "^3.0.0", "seroval": "^1.5.4", "seroval-plugins": "^1.5.4" } }, "sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g=="], - - "@tanstack/router-generator/@tanstack/router-core": ["@tanstack/router-core@1.171.14", "", { "dependencies": { "@tanstack/history": "1.162.0", "cookie-es": "^3.0.0", "seroval": "^1.5.4", "seroval-plugins": "^1.5.4" } }, "sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g=="], - "@tanstack/router-generator/jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], - "@tanstack/router-plugin/@tanstack/router-core": ["@tanstack/router-core@1.171.14", "", { "dependencies": { "@tanstack/history": "1.162.0", "cookie-es": "^3.0.0", "seroval": "^1.5.4", "seroval-plugins": "^1.5.4" } }, "sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g=="], - "@tanstack/router-utils/diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], diff --git a/frontend/package.json b/frontend/package.json index d975108cbd..aa59ff4458 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -80,8 +80,8 @@ "@shikijs/themes": "^3.23.0", "@stepperize/react": "^5.1.9", "@tanstack/react-form": "^1.12.3", - "@tanstack/react-query": "^5.99.2", - "@tanstack/react-router": "^1.170.7", + "@tanstack/react-query": "^5.101.4", + "@tanstack/react-router": "^1.170.22", "@tanstack/react-table": "^8.21.3", "@tanstack/react-virtual": "^3.13.12", "@uiw/react-codemirror": "^4.25.10", @@ -147,9 +147,9 @@ "@rsbuild/plugin-tailwindcss": "2.0.2", "@rsbuild/plugin-yaml": "1.0.5", "@rsdoctor/rspack-plugin": "1.6.0", - "@tanstack/react-query-devtools": "^5.90.2", - "@tanstack/react-router-devtools": "^1.167.0", - "@tanstack/router-plugin": "^1.168.19", + "@tanstack/react-query-devtools": "^5.101.4", + "@tanstack/react-router-devtools": "^1.167.1", + "@tanstack/router-plugin": "^1.168.27", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^7.0.0", "@testing-library/react": "^16.3.2", diff --git a/frontend/rsbuild.config.ts b/frontend/rsbuild.config.ts index 1d222e16d3..76259417f6 100644 --- a/frontend/rsbuild.config.ts +++ b/frontend/rsbuild.config.ts @@ -8,12 +8,13 @@ import { pluginSvgr } from '@rsbuild/plugin-svgr'; import { pluginTailwindcss } from '@rsbuild/plugin-tailwindcss'; import { pluginYaml } from '@rsbuild/plugin-yaml'; import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin'; -import { TanStackRouterRspack } from '@tanstack/router-plugin/rspack'; +import { tanstackRouter } from '@tanstack/router-plugin/rspack'; import MonacoWebpackPlugin from 'monaco-editor-webpack-plugin'; import { moduleFederationConfig } from './module-federation.config'; import { HEAP_APP_ID } from './src/heap/heap.helper'; import { HUBSPOT_PORTAL_ID } from './src/hubspot/hubspot.helper'; +import { TANSTACK_CHUNK_PATTERN, tanstackRouterConfig } from './tanstack-router.config'; import path from 'node:path'; const { publicVars, rawPublicVars } = loadEnv({ prefixes: ['REACT_APP_'] }); @@ -131,6 +132,18 @@ export default defineConfig({ // production diagnostics. removeConsole: ['log', 'warn'], }, + splitChunks: { + preset: 'default', + cacheGroups: { + tanstack: { + test: TANSTACK_CHUNK_PATTERN, + name: 'lib-tanstack', + chunks: 'all', + priority: 10, + reuseExistingChunk: true, + }, + }, + }, output: { distPath: { root: 'build', @@ -180,14 +193,7 @@ export default defineConfig({ }; const plugins = [ - TanStackRouterRspack({ - target: 'react', - autoCodeSplitting: true, - routesDirectory: './src/routes', - generatedRouteTree: './src/routeTree.gen.ts', - quoteStyle: 'single', - semicolons: true, - }), + tanstackRouter(tanstackRouterConfig), new MonacoWebpackPlugin({ languages: ['yaml', 'json', 'typescript', 'javascript', 'protobuf'], customLanguages: [ diff --git a/frontend/src/app.tsx b/frontend/src/app.tsx index 2f91099679..dff2ed4d52 100644 --- a/frontend/src/app.tsx +++ b/frontend/src/app.tsx @@ -53,6 +53,7 @@ import { applyOverrides as applyDebugFeatureFlagOverrides } from './components/d import { NotFoundPage } from './components/misc/not-found-page'; import { RoutePendingFallback } from './components/misc/route-pending-fallback'; import { addBearerTokenInterceptor, checkExpiredLicenseInterceptor, getGrpcBasePath, setup } from './config'; +import { routerDefaults } from './router-defaults'; import { routeTree } from './routeTree.gen'; import { installUISettingsSideEffects } from './state/ui'; @@ -68,6 +69,7 @@ const dataplaneTransport = createConnectTransport({ // Create router instance const router = createRouter({ routeTree, + ...routerDefaults, context: { basePath: getBasePath(), queryClient, diff --git a/frontend/src/components/layout/header.test.tsx b/frontend/src/components/layout/header.test.tsx new file mode 100644 index 0000000000..025054511c --- /dev/null +++ b/frontend/src/components/layout/header.test.tsx @@ -0,0 +1,90 @@ +/** + * Copyright 2026 Redpanda Data, Inc. + * + * Use of this software is governed by the Business Source License + * included in the file https://github.com/redpanda-data/redpanda/blob/dev/licenses/bsl.md + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0 + */ + +import { render, screen } from '@testing-library/react'; +import type { PropsWithChildren, ReactNode } from 'react'; + +const getMatchedRoutes = vi.fn(() => [[{ options: { staticData: { breadcrumbOnlyHeader: true } } }], {}, undefined]); + +vi.mock('@tanstack/react-router', () => ({ + Link: ({ children }: PropsWithChildren) => {children}, + useLocation: () => ({ pathname: '/sql-studio' }), + useMatchRoute: () => () => false, + useRouter: () => ({ getMatchedRoutes }), +})); + +vi.mock('@redpanda-data/ui', () => ({ + Button: () => null, + ColorModeSwitch: () => null, + CopyButton: () => null, +})); + +vi.mock('components/redpanda-ui/lib/utils', () => ({ + cn: (...classes: Array) => classes.filter(Boolean).join(' '), +})); + +vi.mock('lucide-react', () => ({ + ChevronLeft: () => null, +})); + +vi.mock('../../config', () => ({ + isEmbedded: () => false, + isFeatureFlagEnabled: () => false, +})); + +vi.mock('../../state/backend-api', () => ({ + api: { isRedpanda: false, userData: null }, + useApiStoreHook: (selector: (state: { userData: null }) => T) => selector({ userData: null }), +})); + +vi.mock('../../state/ui-state', () => ({ + useUIStateStore: ( + selector: (state: { + _pageTitle: string; + backLink: null; + pageBreadcrumbs: never[]; + selectedClusterName: null; + shouldHidePageHeader: boolean; + }) => T + ) => + selector({ + _pageTitle: 'Cluster details', + backLink: null, + pageBreadcrumbs: [], + selectedClusterName: null, + shouldHidePageHeader: false, + }), +})); + +vi.mock('../../utils/env', () => ({ IsDev: false })); +vi.mock('../misc/buttons/data-refresh/component', () => ({ default: () => null })); + +vi.mock('../redpanda-ui/components/breadcrumb', () => ({ + Breadcrumb: ({ children }: PropsWithChildren) => children, + BreadcrumbItem: ({ children }: PropsWithChildren) => children, + BreadcrumbLink: ({ render: content }: { render: ReactNode }) => content, + BreadcrumbList: ({ children }: PropsWithChildren) => children, + BreadcrumbSeparator: () => null, +})); + +vi.mock('../redpanda-ui/components/button', () => ({ Button: () => null })); +vi.mock('../redpanda-ui/components/separator', () => ({ Separator: () => null })); +vi.mock('../redpanda-ui/components/sidebar', () => ({ SidebarTrigger: () => null })); + +import AppPageHeader from './header'; + +describe('AppPageHeader', () => { + it('hides the title row when the matched route owns it', () => { + render(); + + expect(screen.queryByRole('heading', { name: 'Cluster details' })).not.toBeInTheDocument(); + }); +}); diff --git a/frontend/src/components/layout/header.tsx b/frontend/src/components/layout/header.tsx index 75b5e63895..43e59c7163 100644 --- a/frontend/src/components/layout/header.tsx +++ b/frontend/src/components/layout/header.tsx @@ -179,9 +179,9 @@ function useRouteOwnsTitleRow() { const router = useRouter(); const { pathname } = useLocation(); - return router - .getMatchedRoutes(pathname) - .matchedRoutes.some((route) => route.options.staticData?.breadcrumbOnlyHeader); + const [matchedRoutes] = router.getMatchedRoutes(pathname); + + return matchedRoutes.some((route) => route.options.staticData?.breadcrumbOnlyHeader); } /** diff --git a/frontend/src/components/routes/route-pending.test.tsx b/frontend/src/components/routes/route-pending.test.tsx new file mode 100644 index 0000000000..fa20f9b4fa --- /dev/null +++ b/frontend/src/components/routes/route-pending.test.tsx @@ -0,0 +1,22 @@ +/** + * Copyright 2026 Redpanda Data, Inc. + * + * Use of this software is governed by the Business Source License + * included in the file https://github.com/redpanda-data/redpanda/blob/dev/licenses/bsl.md + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0 + */ + +import { render, screen } from '@testing-library/react'; + +import { RoutePending } from './route-pending'; + +describe('RoutePending', () => { + it('announces route loading', () => { + render(); + + expect(screen.getByRole('status', { name: 'Loading page' })).toBeVisible(); + }); +}); diff --git a/frontend/src/components/routes/route-pending.tsx b/frontend/src/components/routes/route-pending.tsx index f8c0dcc7dc..d49bd2db1f 100644 --- a/frontend/src/components/routes/route-pending.tsx +++ b/frontend/src/components/routes/route-pending.tsx @@ -17,9 +17,9 @@ import { LoaderIcon } from 'components/icons'; */ export const RoutePending = () => (
-
+ Loading... -
+
); diff --git a/frontend/src/embedded-app.tsx b/frontend/src/embedded-app.tsx index 9ca609e3c6..2537d0baf7 100644 --- a/frontend/src/embedded-app.tsx +++ b/frontend/src/embedded-app.tsx @@ -52,6 +52,7 @@ import { type SetConfigArguments, setup, } from './config'; +import { routerDefaults } from './router-defaults'; import { routeTree } from './routeTree.gen'; import { appGlobal } from './state/app-global'; import { installUISettingsSideEffects } from './state/ui'; @@ -138,6 +139,7 @@ function EmbeddedApp({ basePath = '', ...p }: EmbeddedProps) { () => createRouter({ routeTree, + ...routerDefaults, context: { basePath, queryClient, diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index bd32d388d1..b89209659c 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -9,94 +9,79 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root'; -import { Route as UploadLicenseRouteImport } from './routes/upload-license'; -import { Route as TrialExpiredRouteImport } from './routes/trial-expired'; -import { Route as TransformsSetupRouteImport } from './routes/transforms-setup'; -import { Route as SqlRouteImport } from './routes/sql'; -import { Route as SecurityRouteImport } from './routes/security'; -import { Route as ReassignPartitionsRouteImport } from './routes/reassign-partitions'; -import { Route as QuotasRouteImport } from './routes/quotas'; import { Route as IndexRouteImport } from './routes/index'; -import { Route as TransformsIndexRouteImport } from './routes/transforms/index'; -import { Route as TopicsIndexRouteImport } from './routes/topics/index'; -import { Route as ShadowlinksIndexRouteImport } from './routes/shadowlinks/index'; -import { Route as SecurityIndexRouteImport } from './routes/security/index'; -import { Route as SecretsIndexRouteImport } from './routes/secrets/index'; -import { Route as SchemaRegistryIndexRouteImport } from './routes/schema-registry/index'; -import { Route as OverviewIndexRouteImport } from './routes/overview/index'; -import { Route as ObservabilityIndexRouteImport } from './routes/observability/index'; -import { Route as LoginIndexRouteImport } from './routes/login/index'; -import { Route as GroupsIndexRouteImport } from './routes/groups/index'; -import { Route as DebugBundleIndexRouteImport } from './routes/debug-bundle/index'; +import { Route as QuotasRouteImport } from './routes/quotas'; +import { Route as ReassignPartitionsRouteImport } from './routes/reassign-partitions'; +import { Route as SecurityRouteImport } from './routes/security'; +import { Route as SqlRouteImport } from './routes/sql'; +import { Route as TransformsSetupRouteImport } from './routes/transforms-setup'; +import { Route as TrialExpiredRouteImport } from './routes/trial-expired'; +import { Route as UploadLicenseRouteImport } from './routes/upload-license'; import { Route as ConnectClustersIndexRouteImport } from './routes/connect-clusters/index'; -import { Route as TransformsTransformNameRouteImport } from './routes/transforms/$transformName'; -import { Route as ShadowlinksCreateRouteImport } from './routes/shadowlinks/create'; -import { Route as SecretsCreateRouteImport } from './routes/secrets/create'; -import { Route as SchemaRegistryEditModeRouteImport } from './routes/schema-registry/edit-mode'; -import { Route as SchemaRegistryEditCompatibilityRouteImport } from './routes/schema-registry/edit-compatibility'; -import { Route as SchemaRegistryCreateRouteImport } from './routes/schema-registry/create'; -import { Route as RpConnectCreateRouteImport } from './routes/rp-connect/create'; -import { Route as OverviewBrokerIdRouteImport } from './routes/overview/$brokerId'; +import { Route as DebugBundleIndexRouteImport } from './routes/debug-bundle/index'; +import { Route as GroupsIndexRouteImport } from './routes/groups/index'; import { Route as GroupsGroupIdRouteImport } from './routes/groups/$groupId'; -import { Route as TopicsTopicNameIndexRouteImport } from './routes/topics/$topicName/index'; -import { Route as ShadowlinksNameIndexRouteImport } from './routes/shadowlinks/$name/index'; -import { Route as SecurityUsersIndexRouteImport } from './routes/security/users/index'; -import { Route as SecurityRolesIndexRouteImport } from './routes/security/roles/index'; -import { Route as SecurityPermissionsIndexRouteImport } from './routes/security/permissions/index'; -import { Route as SecurityPermissionsListIndexRouteImport } from './routes/security/permissions-list/index'; -import { Route as SecurityAclsIndexRouteImport } from './routes/security/acls/index'; -import { Route as RpConnectPipelineIdIndexRouteImport } from './routes/rp-connect/$pipelineId/index'; +import { Route as LoginIndexRouteImport } from './routes/login/index'; +import { Route as ObservabilityIndexRouteImport } from './routes/observability/index'; +import { Route as OverviewIndexRouteImport } from './routes/overview/index'; +import { Route as OverviewBrokerIdRouteImport } from './routes/overview/$brokerId'; +import { Route as RpConnectCreateRouteImport } from './routes/rp-connect/create'; +import { Route as SchemaRegistryIndexRouteImport } from './routes/schema-registry/index'; +import { Route as SchemaRegistryCreateRouteImport } from './routes/schema-registry/create'; +import { Route as SchemaRegistryEditCompatibilityRouteImport } from './routes/schema-registry/edit-compatibility'; +import { Route as SchemaRegistryEditModeRouteImport } from './routes/schema-registry/edit-mode'; +import { Route as SecretsIndexRouteImport } from './routes/secrets/index'; +import { Route as SecretsCreateRouteImport } from './routes/secrets/create'; +import { Route as SecurityIndexRouteImport } from './routes/security/index'; +import { Route as ShadowlinksIndexRouteImport } from './routes/shadowlinks/index'; +import { Route as ShadowlinksCreateRouteImport } from './routes/shadowlinks/create'; +import { Route as TopicsIndexRouteImport } from './routes/topics/index'; +import { Route as TransformsIndexRouteImport } from './routes/transforms/index'; +import { Route as TransformsTransformNameRouteImport } from './routes/transforms/$transformName'; import { Route as ConnectClustersClusterNameIndexRouteImport } from './routes/connect-clusters/$clusterName/index'; -import { Route as TopicsTopicNameProduceRecordRouteImport } from './routes/topics/$topicName/produce-record'; -import { Route as ShadowlinksNameEditRouteImport } from './routes/shadowlinks/$name/edit'; -import { Route as SecurityUsersCreateRouteImport } from './routes/security/users/create'; -import { Route as SecurityRolesCreateRouteImport } from './routes/security/roles/create'; -import { Route as SecurityAclsCreateRouteImport } from './routes/security/acls/create'; -import { Route as SecretsIdEditRouteImport } from './routes/secrets/$id/edit'; -import { Route as RpConnectSecretsCreateRouteImport } from './routes/rp-connect/secrets/create'; -import { Route as RpConnectPipelineIdEditRouteImport } from './routes/rp-connect/$pipelineId/edit'; -import { Route as LoginCallbacksProviderRouteImport } from './routes/login/callbacks/$provider'; -import { Route as DebugBundleProgressJobIdRouteImport } from './routes/debug-bundle/progress/$jobId'; -import { Route as ConnectClustersClusterNameCreateConnectorRouteImport } from './routes/connect-clusters/$clusterName/create-connector'; import { Route as ConnectClustersClusterNameConnectorRouteImport } from './routes/connect-clusters/$clusterName/$connector'; +import { Route as ConnectClustersClusterNameCreateConnectorRouteImport } from './routes/connect-clusters/$clusterName/create-connector'; +import { Route as DebugBundleProgressJobIdRouteImport } from './routes/debug-bundle/progress/$jobId'; +import { Route as LoginCallbacksProviderRouteImport } from './routes/login/callbacks/$provider'; +import { Route as RpConnectPipelineIdIndexRouteImport } from './routes/rp-connect/$pipelineId/index'; +import { Route as RpConnectPipelineIdEditRouteImport } from './routes/rp-connect/$pipelineId/edit'; +import { Route as RpConnectSecretsCreateRouteImport } from './routes/rp-connect/secrets/create'; +import { Route as SecretsIdEditRouteImport } from './routes/secrets/$id/edit'; +import { Route as SecurityAclsIndexRouteImport } from './routes/security/acls/index'; +import { Route as SecurityAclsCreateRouteImport } from './routes/security/acls/create'; +import { Route as SecurityPermissionsListIndexRouteImport } from './routes/security/permissions-list/index'; +import { Route as SecurityPermissionsIndexRouteImport } from './routes/security/permissions/index'; +import { Route as SecurityRolesIndexRouteImport } from './routes/security/roles/index'; +import { Route as SecurityRolesCreateRouteImport } from './routes/security/roles/create'; +import { Route as SecurityUsersIndexRouteImport } from './routes/security/users/index'; +import { Route as SecurityUsersCreateRouteImport } from './routes/security/users/create'; +import { Route as ShadowlinksNameIndexRouteImport } from './routes/shadowlinks/$name/index'; +import { Route as ShadowlinksNameEditRouteImport } from './routes/shadowlinks/$name/edit'; +import { Route as TopicsTopicNameIndexRouteImport } from './routes/topics/$topicName/index'; +import { Route as TopicsTopicNameProduceRecordRouteImport } from './routes/topics/$topicName/produce-record'; +import { Route as RpConnectSecretsSecretIdEditRouteImport } from './routes/rp-connect/secrets/$secretId/edit'; +import { Route as SchemaRegistryContextsContextNameCreateRouteImport } from './routes/schema-registry/contexts/$contextName/create'; +import { Route as SchemaRegistryContextsContextNameEditCompatibilityRouteImport } from './routes/schema-registry/contexts/$contextName/edit-compatibility'; +import { Route as SchemaRegistryContextsContextNameEditModeRouteImport } from './routes/schema-registry/contexts/$contextName/edit-mode'; import { Route as SchemaRegistrySubjectsSubjectNameIndexRouteImport } from './routes/schema-registry/subjects/$subjectName/index'; -import { Route as SecurityUsersUserNameDetailsRouteImport } from './routes/security/users/$userName/details'; -import { Route as SecurityRolesRoleNameUpdateRouteImport } from './routes/security/roles/$roleName/update'; -import { Route as SecurityRolesRoleNameEditRouteImport } from './routes/security/roles/$roleName/edit'; -import { Route as SecurityRolesRoleNameDetailsRouteImport } from './routes/security/roles/$roleName/details'; -import { Route as SecurityAclsAclNameUpdateRouteImport } from './routes/security/acls/$aclName/update'; -import { Route as SecurityAclsAclNameDetailsRouteImport } from './routes/security/acls/$aclName/details'; -import { Route as SchemaRegistrySubjectsSubjectNameEditModeRouteImport } from './routes/schema-registry/subjects/$subjectName/edit-mode'; -import { Route as SchemaRegistrySubjectsSubjectNameEditCompatibilityRouteImport } from './routes/schema-registry/subjects/$subjectName/edit-compatibility'; import { Route as SchemaRegistrySubjectsSubjectNameAddVersionRouteImport } from './routes/schema-registry/subjects/$subjectName/add-version'; -import { Route as SchemaRegistryContextsContextNameEditModeRouteImport } from './routes/schema-registry/contexts/$contextName/edit-mode'; -import { Route as SchemaRegistryContextsContextNameEditCompatibilityRouteImport } from './routes/schema-registry/contexts/$contextName/edit-compatibility'; -import { Route as SchemaRegistryContextsContextNameCreateRouteImport } from './routes/schema-registry/contexts/$contextName/create'; -import { Route as RpConnectSecretsSecretIdEditRouteImport } from './routes/rp-connect/secrets/$secretId/edit'; +import { Route as SchemaRegistrySubjectsSubjectNameEditCompatibilityRouteImport } from './routes/schema-registry/subjects/$subjectName/edit-compatibility'; +import { Route as SchemaRegistrySubjectsSubjectNameEditModeRouteImport } from './routes/schema-registry/subjects/$subjectName/edit-mode'; +import { Route as SecurityAclsAclNameDetailsRouteImport } from './routes/security/acls/$aclName/details'; +import { Route as SecurityAclsAclNameUpdateRouteImport } from './routes/security/acls/$aclName/update'; +import { Route as SecurityRolesRoleNameDetailsRouteImport } from './routes/security/roles/$roleName/details'; +import { Route as SecurityRolesRoleNameEditRouteImport } from './routes/security/roles/$roleName/edit'; +import { Route as SecurityRolesRoleNameUpdateRouteImport } from './routes/security/roles/$roleName/update'; +import { Route as SecurityUsersUserNameDetailsRouteImport } from './routes/security/users/$userName/details'; -const UploadLicenseRoute = UploadLicenseRouteImport.update({ - id: '/upload-license', - path: '/upload-license', - getParentRoute: () => rootRouteImport, -} as any); -const TrialExpiredRoute = TrialExpiredRouteImport.update({ - id: '/trial-expired', - path: '/trial-expired', - getParentRoute: () => rootRouteImport, -} as any); -const TransformsSetupRoute = TransformsSetupRouteImport.update({ - id: '/transforms-setup', - path: '/transforms-setup', - getParentRoute: () => rootRouteImport, -} as any); -const SqlRoute = SqlRouteImport.update({ - id: '/sql', - path: '/sql', +const IndexRoute = IndexRouteImport.update({ + id: '/', + path: '/', getParentRoute: () => rootRouteImport, } as any); -const SecurityRoute = SecurityRouteImport.update({ - id: '/security', - path: '/security', +const QuotasRoute = QuotasRouteImport.update({ + id: '/quotas', + path: '/quotas', getParentRoute: () => rootRouteImport, } as any); const ReassignPartitionsRoute = ReassignPartitionsRouteImport.update({ @@ -104,54 +89,49 @@ const ReassignPartitionsRoute = ReassignPartitionsRouteImport.update({ path: '/reassign-partitions', getParentRoute: () => rootRouteImport, } as any); -const QuotasRoute = QuotasRouteImport.update({ - id: '/quotas', - path: '/quotas', +const SecurityRoute = SecurityRouteImport.update({ + id: '/security', + path: '/security', getParentRoute: () => rootRouteImport, } as any); -const IndexRoute = IndexRouteImport.update({ - id: '/', - path: '/', +const SqlRoute = SqlRouteImport.update({ + id: '/sql', + path: '/sql', getParentRoute: () => rootRouteImport, } as any); -const TransformsIndexRoute = TransformsIndexRouteImport.update({ - id: '/transforms/', - path: '/transforms/', +const TransformsSetupRoute = TransformsSetupRouteImport.update({ + id: '/transforms-setup', + path: '/transforms-setup', getParentRoute: () => rootRouteImport, } as any); -const TopicsIndexRoute = TopicsIndexRouteImport.update({ - id: '/topics/', - path: '/topics/', +const TrialExpiredRoute = TrialExpiredRouteImport.update({ + id: '/trial-expired', + path: '/trial-expired', getParentRoute: () => rootRouteImport, } as any); -const ShadowlinksIndexRoute = ShadowlinksIndexRouteImport.update({ - id: '/shadowlinks/', - path: '/shadowlinks/', +const UploadLicenseRoute = UploadLicenseRouteImport.update({ + id: '/upload-license', + path: '/upload-license', getParentRoute: () => rootRouteImport, } as any); -const SecurityIndexRoute = SecurityIndexRouteImport.update({ - id: '/', - path: '/', - getParentRoute: () => SecurityRoute, -} as any); -const SecretsIndexRoute = SecretsIndexRouteImport.update({ - id: '/secrets/', - path: '/secrets/', +const ConnectClustersIndexRoute = ConnectClustersIndexRouteImport.update({ + id: '/connect-clusters/', + path: '/connect-clusters/', getParentRoute: () => rootRouteImport, } as any); -const SchemaRegistryIndexRoute = SchemaRegistryIndexRouteImport.update({ - id: '/schema-registry/', - path: '/schema-registry/', +const DebugBundleIndexRoute = DebugBundleIndexRouteImport.update({ + id: '/debug-bundle/', + path: '/debug-bundle/', getParentRoute: () => rootRouteImport, } as any); -const OverviewIndexRoute = OverviewIndexRouteImport.update({ - id: '/overview/', - path: '/overview/', +const GroupsIndexRoute = GroupsIndexRouteImport.update({ + id: '/groups/', + path: '/groups/', getParentRoute: () => rootRouteImport, } as any); -const ObservabilityIndexRoute = ObservabilityIndexRouteImport.update({ - id: '/observability/', - path: '/observability/', +const GroupsGroupIdRoute = GroupsGroupIdRouteImport.update({ + id: '/groups/$groupId', + path: '/groups/$groupId', getParentRoute: () => rootRouteImport, } as any); const LoginIndexRoute = LoginIndexRouteImport.update({ @@ -159,39 +139,34 @@ const LoginIndexRoute = LoginIndexRouteImport.update({ path: '/login/', getParentRoute: () => rootRouteImport, } as any); -const GroupsIndexRoute = GroupsIndexRouteImport.update({ - id: '/groups/', - path: '/groups/', - getParentRoute: () => rootRouteImport, -} as any); -const DebugBundleIndexRoute = DebugBundleIndexRouteImport.update({ - id: '/debug-bundle/', - path: '/debug-bundle/', +const ObservabilityIndexRoute = ObservabilityIndexRouteImport.update({ + id: '/observability/', + path: '/observability/', getParentRoute: () => rootRouteImport, } as any); -const ConnectClustersIndexRoute = ConnectClustersIndexRouteImport.update({ - id: '/connect-clusters/', - path: '/connect-clusters/', +const OverviewIndexRoute = OverviewIndexRouteImport.update({ + id: '/overview/', + path: '/overview/', getParentRoute: () => rootRouteImport, } as any); -const TransformsTransformNameRoute = TransformsTransformNameRouteImport.update({ - id: '/transforms/$transformName', - path: '/transforms/$transformName', +const OverviewBrokerIdRoute = OverviewBrokerIdRouteImport.update({ + id: '/overview/$brokerId', + path: '/overview/$brokerId', getParentRoute: () => rootRouteImport, } as any); -const ShadowlinksCreateRoute = ShadowlinksCreateRouteImport.update({ - id: '/shadowlinks/create', - path: '/shadowlinks/create', +const RpConnectCreateRoute = RpConnectCreateRouteImport.update({ + id: '/rp-connect/create', + path: '/rp-connect/create', getParentRoute: () => rootRouteImport, } as any); -const SecretsCreateRoute = SecretsCreateRouteImport.update({ - id: '/secrets/create', - path: '/secrets/create', +const SchemaRegistryIndexRoute = SchemaRegistryIndexRouteImport.update({ + id: '/schema-registry/', + path: '/schema-registry/', getParentRoute: () => rootRouteImport, } as any); -const SchemaRegistryEditModeRoute = SchemaRegistryEditModeRouteImport.update({ - id: '/schema-registry/edit-mode', - path: '/schema-registry/edit-mode', +const SchemaRegistryCreateRoute = SchemaRegistryCreateRouteImport.update({ + id: '/schema-registry/create', + path: '/schema-registry/create', getParentRoute: () => rootRouteImport, } as any); const SchemaRegistryEditCompatibilityRoute = @@ -200,62 +175,79 @@ const SchemaRegistryEditCompatibilityRoute = path: '/schema-registry/edit-compatibility', getParentRoute: () => rootRouteImport, } as any); -const SchemaRegistryCreateRoute = SchemaRegistryCreateRouteImport.update({ - id: '/schema-registry/create', - path: '/schema-registry/create', +const SchemaRegistryEditModeRoute = SchemaRegistryEditModeRouteImport.update({ + id: '/schema-registry/edit-mode', + path: '/schema-registry/edit-mode', getParentRoute: () => rootRouteImport, } as any); -const RpConnectCreateRoute = RpConnectCreateRouteImport.update({ - id: '/rp-connect/create', - path: '/rp-connect/create', +const SecretsIndexRoute = SecretsIndexRouteImport.update({ + id: '/secrets/', + path: '/secrets/', getParentRoute: () => rootRouteImport, } as any); -const OverviewBrokerIdRoute = OverviewBrokerIdRouteImport.update({ - id: '/overview/$brokerId', - path: '/overview/$brokerId', +const SecretsCreateRoute = SecretsCreateRouteImport.update({ + id: '/secrets/create', + path: '/secrets/create', getParentRoute: () => rootRouteImport, } as any); -const GroupsGroupIdRoute = GroupsGroupIdRouteImport.update({ - id: '/groups/$groupId', - path: '/groups/$groupId', +const SecurityIndexRoute = SecurityIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => SecurityRoute, +} as any); +const ShadowlinksIndexRoute = ShadowlinksIndexRouteImport.update({ + id: '/shadowlinks/', + path: '/shadowlinks/', getParentRoute: () => rootRouteImport, } as any); -const TopicsTopicNameIndexRoute = TopicsTopicNameIndexRouteImport.update({ - id: '/topics/$topicName/', - path: '/topics/$topicName/', +const ShadowlinksCreateRoute = ShadowlinksCreateRouteImport.update({ + id: '/shadowlinks/create', + path: '/shadowlinks/create', getParentRoute: () => rootRouteImport, } as any); -const ShadowlinksNameIndexRoute = ShadowlinksNameIndexRouteImport.update({ - id: '/shadowlinks/$name/', - path: '/shadowlinks/$name/', +const TopicsIndexRoute = TopicsIndexRouteImport.update({ + id: '/topics/', + path: '/topics/', getParentRoute: () => rootRouteImport, } as any); -const SecurityUsersIndexRoute = SecurityUsersIndexRouteImport.update({ - id: '/users/', - path: '/users/', - getParentRoute: () => SecurityRoute, +const TransformsIndexRoute = TransformsIndexRouteImport.update({ + id: '/transforms/', + path: '/transforms/', + getParentRoute: () => rootRouteImport, } as any); -const SecurityRolesIndexRoute = SecurityRolesIndexRouteImport.update({ - id: '/roles/', - path: '/roles/', - getParentRoute: () => SecurityRoute, +const TransformsTransformNameRoute = TransformsTransformNameRouteImport.update({ + id: '/transforms/$transformName', + path: '/transforms/$transformName', + getParentRoute: () => rootRouteImport, } as any); -const SecurityPermissionsIndexRoute = - SecurityPermissionsIndexRouteImport.update({ - id: '/permissions/', - path: '/permissions/', - getParentRoute: () => SecurityRoute, +const ConnectClustersClusterNameIndexRoute = + ConnectClustersClusterNameIndexRouteImport.update({ + id: '/connect-clusters/$clusterName/', + path: '/connect-clusters/$clusterName/', + getParentRoute: () => rootRouteImport, } as any); -const SecurityPermissionsListIndexRoute = - SecurityPermissionsListIndexRouteImport.update({ - id: '/permissions-list/', - path: '/permissions-list/', - getParentRoute: () => SecurityRoute, +const ConnectClustersClusterNameConnectorRoute = + ConnectClustersClusterNameConnectorRouteImport.update({ + id: '/connect-clusters/$clusterName/$connector', + path: '/connect-clusters/$clusterName/$connector', + getParentRoute: () => rootRouteImport, } as any); -const SecurityAclsIndexRoute = SecurityAclsIndexRouteImport.update({ - id: '/acls/', - path: '/acls/', - getParentRoute: () => SecurityRoute, +const ConnectClustersClusterNameCreateConnectorRoute = + ConnectClustersClusterNameCreateConnectorRouteImport.update({ + id: '/connect-clusters/$clusterName/create-connector', + path: '/connect-clusters/$clusterName/create-connector', + getParentRoute: () => rootRouteImport, + } as any); +const DebugBundleProgressJobIdRoute = + DebugBundleProgressJobIdRouteImport.update({ + id: '/debug-bundle/progress/$jobId', + path: '/debug-bundle/progress/$jobId', + getParentRoute: () => rootRouteImport, + } as any); +const LoginCallbacksProviderRoute = LoginCallbacksProviderRouteImport.update({ + id: '/login/callbacks/$provider', + path: '/login/callbacks/$provider', + getParentRoute: () => rootRouteImport, } as any); const RpConnectPipelineIdIndexRoute = RpConnectPipelineIdIndexRouteImport.update({ @@ -263,26 +255,46 @@ const RpConnectPipelineIdIndexRoute = path: '/rp-connect/$pipelineId/', getParentRoute: () => rootRouteImport, } as any); -const ConnectClustersClusterNameIndexRoute = - ConnectClustersClusterNameIndexRouteImport.update({ - id: '/connect-clusters/$clusterName/', - path: '/connect-clusters/$clusterName/', - getParentRoute: () => rootRouteImport, - } as any); -const TopicsTopicNameProduceRecordRoute = - TopicsTopicNameProduceRecordRouteImport.update({ - id: '/topics/$topicName/produce-record', - path: '/topics/$topicName/produce-record', - getParentRoute: () => rootRouteImport, - } as any); -const ShadowlinksNameEditRoute = ShadowlinksNameEditRouteImport.update({ - id: '/shadowlinks/$name/edit', - path: '/shadowlinks/$name/edit', +const RpConnectPipelineIdEditRoute = RpConnectPipelineIdEditRouteImport.update({ + id: '/rp-connect/$pipelineId/edit', + path: '/rp-connect/$pipelineId/edit', getParentRoute: () => rootRouteImport, } as any); -const SecurityUsersCreateRoute = SecurityUsersCreateRouteImport.update({ - id: '/users/create', - path: '/users/create', +const RpConnectSecretsCreateRoute = RpConnectSecretsCreateRouteImport.update({ + id: '/rp-connect/secrets/create', + path: '/rp-connect/secrets/create', + getParentRoute: () => rootRouteImport, +} as any); +const SecretsIdEditRoute = SecretsIdEditRouteImport.update({ + id: '/secrets/$id/edit', + path: '/secrets/$id/edit', + getParentRoute: () => rootRouteImport, +} as any); +const SecurityAclsIndexRoute = SecurityAclsIndexRouteImport.update({ + id: '/acls/', + path: '/acls/', + getParentRoute: () => SecurityRoute, +} as any); +const SecurityAclsCreateRoute = SecurityAclsCreateRouteImport.update({ + id: '/acls/create', + path: '/acls/create', + getParentRoute: () => SecurityRoute, +} as any); +const SecurityPermissionsListIndexRoute = + SecurityPermissionsListIndexRouteImport.update({ + id: '/permissions-list/', + path: '/permissions-list/', + getParentRoute: () => SecurityRoute, + } as any); +const SecurityPermissionsIndexRoute = + SecurityPermissionsIndexRouteImport.update({ + id: '/permissions/', + path: '/permissions/', + getParentRoute: () => SecurityRoute, + } as any); +const SecurityRolesIndexRoute = SecurityRolesIndexRouteImport.update({ + id: '/roles/', + path: '/roles/', getParentRoute: () => SecurityRoute, } as any); const SecurityRolesCreateRoute = SecurityRolesCreateRouteImport.update({ @@ -290,47 +302,59 @@ const SecurityRolesCreateRoute = SecurityRolesCreateRouteImport.update({ path: '/roles/create', getParentRoute: () => SecurityRoute, } as any); -const SecurityAclsCreateRoute = SecurityAclsCreateRouteImport.update({ - id: '/acls/create', - path: '/acls/create', +const SecurityUsersIndexRoute = SecurityUsersIndexRouteImport.update({ + id: '/users/', + path: '/users/', getParentRoute: () => SecurityRoute, } as any); -const SecretsIdEditRoute = SecretsIdEditRouteImport.update({ - id: '/secrets/$id/edit', - path: '/secrets/$id/edit', - getParentRoute: () => rootRouteImport, +const SecurityUsersCreateRoute = SecurityUsersCreateRouteImport.update({ + id: '/users/create', + path: '/users/create', + getParentRoute: () => SecurityRoute, } as any); -const RpConnectSecretsCreateRoute = RpConnectSecretsCreateRouteImport.update({ - id: '/rp-connect/secrets/create', - path: '/rp-connect/secrets/create', +const ShadowlinksNameIndexRoute = ShadowlinksNameIndexRouteImport.update({ + id: '/shadowlinks/$name/', + path: '/shadowlinks/$name/', getParentRoute: () => rootRouteImport, } as any); -const RpConnectPipelineIdEditRoute = RpConnectPipelineIdEditRouteImport.update({ - id: '/rp-connect/$pipelineId/edit', - path: '/rp-connect/$pipelineId/edit', +const ShadowlinksNameEditRoute = ShadowlinksNameEditRouteImport.update({ + id: '/shadowlinks/$name/edit', + path: '/shadowlinks/$name/edit', getParentRoute: () => rootRouteImport, } as any); -const LoginCallbacksProviderRoute = LoginCallbacksProviderRouteImport.update({ - id: '/login/callbacks/$provider', - path: '/login/callbacks/$provider', +const TopicsTopicNameIndexRoute = TopicsTopicNameIndexRouteImport.update({ + id: '/topics/$topicName/', + path: '/topics/$topicName/', getParentRoute: () => rootRouteImport, } as any); -const DebugBundleProgressJobIdRoute = - DebugBundleProgressJobIdRouteImport.update({ - id: '/debug-bundle/progress/$jobId', - path: '/debug-bundle/progress/$jobId', +const TopicsTopicNameProduceRecordRoute = + TopicsTopicNameProduceRecordRouteImport.update({ + id: '/topics/$topicName/produce-record', + path: '/topics/$topicName/produce-record', getParentRoute: () => rootRouteImport, } as any); -const ConnectClustersClusterNameCreateConnectorRoute = - ConnectClustersClusterNameCreateConnectorRouteImport.update({ - id: '/connect-clusters/$clusterName/create-connector', - path: '/connect-clusters/$clusterName/create-connector', +const RpConnectSecretsSecretIdEditRoute = + RpConnectSecretsSecretIdEditRouteImport.update({ + id: '/rp-connect/secrets/$secretId/edit', + path: '/rp-connect/secrets/$secretId/edit', getParentRoute: () => rootRouteImport, } as any); -const ConnectClustersClusterNameConnectorRoute = - ConnectClustersClusterNameConnectorRouteImport.update({ - id: '/connect-clusters/$clusterName/$connector', - path: '/connect-clusters/$clusterName/$connector', +const SchemaRegistryContextsContextNameCreateRoute = + SchemaRegistryContextsContextNameCreateRouteImport.update({ + id: '/schema-registry/contexts/$contextName/create', + path: '/schema-registry/contexts/$contextName/create', + getParentRoute: () => rootRouteImport, + } as any); +const SchemaRegistryContextsContextNameEditCompatibilityRoute = + SchemaRegistryContextsContextNameEditCompatibilityRouteImport.update({ + id: '/schema-registry/contexts/$contextName/edit-compatibility', + path: '/schema-registry/contexts/$contextName/edit-compatibility', + getParentRoute: () => rootRouteImport, + } as any); +const SchemaRegistryContextsContextNameEditModeRoute = + SchemaRegistryContextsContextNameEditModeRouteImport.update({ + id: '/schema-registry/contexts/$contextName/edit-mode', + path: '/schema-registry/contexts/$contextName/edit-mode', getParentRoute: () => rootRouteImport, } as any); const SchemaRegistrySubjectsSubjectNameIndexRoute = @@ -339,28 +363,28 @@ const SchemaRegistrySubjectsSubjectNameIndexRoute = path: '/schema-registry/subjects/$subjectName/', getParentRoute: () => rootRouteImport, } as any); -const SecurityUsersUserNameDetailsRoute = - SecurityUsersUserNameDetailsRouteImport.update({ - id: '/users/$userName/details', - path: '/users/$userName/details', - getParentRoute: () => SecurityRoute, +const SchemaRegistrySubjectsSubjectNameAddVersionRoute = + SchemaRegistrySubjectsSubjectNameAddVersionRouteImport.update({ + id: '/schema-registry/subjects/$subjectName/add-version', + path: '/schema-registry/subjects/$subjectName/add-version', + getParentRoute: () => rootRouteImport, } as any); -const SecurityRolesRoleNameUpdateRoute = - SecurityRolesRoleNameUpdateRouteImport.update({ - id: '/roles/$roleName/update', - path: '/roles/$roleName/update', - getParentRoute: () => SecurityRoute, +const SchemaRegistrySubjectsSubjectNameEditCompatibilityRoute = + SchemaRegistrySubjectsSubjectNameEditCompatibilityRouteImport.update({ + id: '/schema-registry/subjects/$subjectName/edit-compatibility', + path: '/schema-registry/subjects/$subjectName/edit-compatibility', + getParentRoute: () => rootRouteImport, } as any); -const SecurityRolesRoleNameEditRoute = - SecurityRolesRoleNameEditRouteImport.update({ - id: '/roles/$roleName/edit', - path: '/roles/$roleName/edit', - getParentRoute: () => SecurityRoute, +const SchemaRegistrySubjectsSubjectNameEditModeRoute = + SchemaRegistrySubjectsSubjectNameEditModeRouteImport.update({ + id: '/schema-registry/subjects/$subjectName/edit-mode', + path: '/schema-registry/subjects/$subjectName/edit-mode', + getParentRoute: () => rootRouteImport, } as any); -const SecurityRolesRoleNameDetailsRoute = - SecurityRolesRoleNameDetailsRouteImport.update({ - id: '/roles/$roleName/details', - path: '/roles/$roleName/details', +const SecurityAclsAclNameDetailsRoute = + SecurityAclsAclNameDetailsRouteImport.update({ + id: '/acls/$aclName/details', + path: '/acls/$aclName/details', getParentRoute: () => SecurityRoute, } as any); const SecurityAclsAclNameUpdateRoute = @@ -369,53 +393,29 @@ const SecurityAclsAclNameUpdateRoute = path: '/acls/$aclName/update', getParentRoute: () => SecurityRoute, } as any); -const SecurityAclsAclNameDetailsRoute = - SecurityAclsAclNameDetailsRouteImport.update({ - id: '/acls/$aclName/details', - path: '/acls/$aclName/details', +const SecurityRolesRoleNameDetailsRoute = + SecurityRolesRoleNameDetailsRouteImport.update({ + id: '/roles/$roleName/details', + path: '/roles/$roleName/details', getParentRoute: () => SecurityRoute, } as any); -const SchemaRegistrySubjectsSubjectNameEditModeRoute = - SchemaRegistrySubjectsSubjectNameEditModeRouteImport.update({ - id: '/schema-registry/subjects/$subjectName/edit-mode', - path: '/schema-registry/subjects/$subjectName/edit-mode', - getParentRoute: () => rootRouteImport, - } as any); -const SchemaRegistrySubjectsSubjectNameEditCompatibilityRoute = - SchemaRegistrySubjectsSubjectNameEditCompatibilityRouteImport.update({ - id: '/schema-registry/subjects/$subjectName/edit-compatibility', - path: '/schema-registry/subjects/$subjectName/edit-compatibility', - getParentRoute: () => rootRouteImport, - } as any); -const SchemaRegistrySubjectsSubjectNameAddVersionRoute = - SchemaRegistrySubjectsSubjectNameAddVersionRouteImport.update({ - id: '/schema-registry/subjects/$subjectName/add-version', - path: '/schema-registry/subjects/$subjectName/add-version', - getParentRoute: () => rootRouteImport, - } as any); -const SchemaRegistryContextsContextNameEditModeRoute = - SchemaRegistryContextsContextNameEditModeRouteImport.update({ - id: '/schema-registry/contexts/$contextName/edit-mode', - path: '/schema-registry/contexts/$contextName/edit-mode', - getParentRoute: () => rootRouteImport, - } as any); -const SchemaRegistryContextsContextNameEditCompatibilityRoute = - SchemaRegistryContextsContextNameEditCompatibilityRouteImport.update({ - id: '/schema-registry/contexts/$contextName/edit-compatibility', - path: '/schema-registry/contexts/$contextName/edit-compatibility', - getParentRoute: () => rootRouteImport, +const SecurityRolesRoleNameEditRoute = + SecurityRolesRoleNameEditRouteImport.update({ + id: '/roles/$roleName/edit', + path: '/roles/$roleName/edit', + getParentRoute: () => SecurityRoute, } as any); -const SchemaRegistryContextsContextNameCreateRoute = - SchemaRegistryContextsContextNameCreateRouteImport.update({ - id: '/schema-registry/contexts/$contextName/create', - path: '/schema-registry/contexts/$contextName/create', - getParentRoute: () => rootRouteImport, +const SecurityRolesRoleNameUpdateRoute = + SecurityRolesRoleNameUpdateRouteImport.update({ + id: '/roles/$roleName/update', + path: '/roles/$roleName/update', + getParentRoute: () => SecurityRoute, } as any); -const RpConnectSecretsSecretIdEditRoute = - RpConnectSecretsSecretIdEditRouteImport.update({ - id: '/rp-connect/secrets/$secretId/edit', - path: '/rp-connect/secrets/$secretId/edit', - getParentRoute: () => rootRouteImport, +const SecurityUsersUserNameDetailsRoute = + SecurityUsersUserNameDetailsRouteImport.update({ + id: '/users/$userName/details', + path: '/users/$userName/details', + getParentRoute: () => SecurityRoute, } as any); export interface FileRoutesByFullPath { @@ -870,25 +870,32 @@ export interface RootRouteChildren { declare module '@tanstack/react-router' { interface FileRoutesByPath { - '/upload-license': { - id: '/upload-license'; - path: '/upload-license'; - fullPath: '/upload-license'; - preLoaderRoute: typeof UploadLicenseRouteImport; + '/': { + id: '/'; + path: '/'; + fullPath: '/'; + preLoaderRoute: typeof IndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/trial-expired': { - id: '/trial-expired'; - path: '/trial-expired'; - fullPath: '/trial-expired'; - preLoaderRoute: typeof TrialExpiredRouteImport; + '/quotas': { + id: '/quotas'; + path: '/quotas'; + fullPath: '/quotas'; + preLoaderRoute: typeof QuotasRouteImport; parentRoute: typeof rootRouteImport; }; - '/transforms-setup': { - id: '/transforms-setup'; - path: '/transforms-setup'; - fullPath: '/transforms-setup'; - preLoaderRoute: typeof TransformsSetupRouteImport; + '/reassign-partitions': { + id: '/reassign-partitions'; + path: '/reassign-partitions'; + fullPath: '/reassign-partitions'; + preLoaderRoute: typeof ReassignPartitionsRouteImport; + parentRoute: typeof rootRouteImport; + }; + '/security': { + id: '/security'; + path: '/security'; + fullPath: '/security'; + preLoaderRoute: typeof SecurityRouteImport; parentRoute: typeof rootRouteImport; }; '/sql': { @@ -898,74 +905,67 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof SqlRouteImport; parentRoute: typeof rootRouteImport; }; - '/security': { - id: '/security'; - path: '/security'; - fullPath: '/security'; - preLoaderRoute: typeof SecurityRouteImport; + '/transforms-setup': { + id: '/transforms-setup'; + path: '/transforms-setup'; + fullPath: '/transforms-setup'; + preLoaderRoute: typeof TransformsSetupRouteImport; parentRoute: typeof rootRouteImport; }; - '/reassign-partitions': { - id: '/reassign-partitions'; - path: '/reassign-partitions'; - fullPath: '/reassign-partitions'; - preLoaderRoute: typeof ReassignPartitionsRouteImport; + '/trial-expired': { + id: '/trial-expired'; + path: '/trial-expired'; + fullPath: '/trial-expired'; + preLoaderRoute: typeof TrialExpiredRouteImport; parentRoute: typeof rootRouteImport; }; - '/quotas': { - id: '/quotas'; - path: '/quotas'; - fullPath: '/quotas'; - preLoaderRoute: typeof QuotasRouteImport; + '/upload-license': { + id: '/upload-license'; + path: '/upload-license'; + fullPath: '/upload-license'; + preLoaderRoute: typeof UploadLicenseRouteImport; parentRoute: typeof rootRouteImport; }; - '/': { - id: '/'; - path: '/'; - fullPath: '/'; - preLoaderRoute: typeof IndexRouteImport; + '/connect-clusters/': { + id: '/connect-clusters/'; + path: '/connect-clusters'; + fullPath: '/connect-clusters/'; + preLoaderRoute: typeof ConnectClustersIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/transforms/': { - id: '/transforms/'; - path: '/transforms'; - fullPath: '/transforms/'; - preLoaderRoute: typeof TransformsIndexRouteImport; + '/debug-bundle/': { + id: '/debug-bundle/'; + path: '/debug-bundle'; + fullPath: '/debug-bundle/'; + preLoaderRoute: typeof DebugBundleIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/topics/': { - id: '/topics/'; - path: '/topics'; - fullPath: '/topics/'; - preLoaderRoute: typeof TopicsIndexRouteImport; + '/groups/': { + id: '/groups/'; + path: '/groups'; + fullPath: '/groups/'; + preLoaderRoute: typeof GroupsIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/shadowlinks/': { - id: '/shadowlinks/'; - path: '/shadowlinks'; - fullPath: '/shadowlinks/'; - preLoaderRoute: typeof ShadowlinksIndexRouteImport; + '/groups/$groupId': { + id: '/groups/$groupId'; + path: '/groups/$groupId'; + fullPath: '/groups/$groupId'; + preLoaderRoute: typeof GroupsGroupIdRouteImport; parentRoute: typeof rootRouteImport; }; - '/security/': { - id: '/security/'; - path: '/'; - fullPath: '/security/'; - preLoaderRoute: typeof SecurityIndexRouteImport; - parentRoute: typeof SecurityRoute; - }; - '/secrets/': { - id: '/secrets/'; - path: '/secrets'; - fullPath: '/secrets/'; - preLoaderRoute: typeof SecretsIndexRouteImport; + '/login/': { + id: '/login/'; + path: '/login'; + fullPath: '/login/'; + preLoaderRoute: typeof LoginIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/schema-registry/': { - id: '/schema-registry/'; - path: '/schema-registry'; - fullPath: '/schema-registry/'; - preLoaderRoute: typeof SchemaRegistryIndexRouteImport; + '/observability/': { + id: '/observability/'; + path: '/observability'; + fullPath: '/observability/'; + preLoaderRoute: typeof ObservabilityIndexRouteImport; parentRoute: typeof rootRouteImport; }; '/overview/': { @@ -975,53 +975,53 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof OverviewIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/observability/': { - id: '/observability/'; - path: '/observability'; - fullPath: '/observability/'; - preLoaderRoute: typeof ObservabilityIndexRouteImport; + '/overview/$brokerId': { + id: '/overview/$brokerId'; + path: '/overview/$brokerId'; + fullPath: '/overview/$brokerId'; + preLoaderRoute: typeof OverviewBrokerIdRouteImport; parentRoute: typeof rootRouteImport; }; - '/login/': { - id: '/login/'; - path: '/login'; - fullPath: '/login/'; - preLoaderRoute: typeof LoginIndexRouteImport; + '/rp-connect/create': { + id: '/rp-connect/create'; + path: '/rp-connect/create'; + fullPath: '/rp-connect/create'; + preLoaderRoute: typeof RpConnectCreateRouteImport; parentRoute: typeof rootRouteImport; }; - '/groups/': { - id: '/groups/'; - path: '/groups'; - fullPath: '/groups/'; - preLoaderRoute: typeof GroupsIndexRouteImport; + '/schema-registry/': { + id: '/schema-registry/'; + path: '/schema-registry'; + fullPath: '/schema-registry/'; + preLoaderRoute: typeof SchemaRegistryIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/debug-bundle/': { - id: '/debug-bundle/'; - path: '/debug-bundle'; - fullPath: '/debug-bundle/'; - preLoaderRoute: typeof DebugBundleIndexRouteImport; + '/schema-registry/create': { + id: '/schema-registry/create'; + path: '/schema-registry/create'; + fullPath: '/schema-registry/create'; + preLoaderRoute: typeof SchemaRegistryCreateRouteImport; parentRoute: typeof rootRouteImport; }; - '/connect-clusters/': { - id: '/connect-clusters/'; - path: '/connect-clusters'; - fullPath: '/connect-clusters/'; - preLoaderRoute: typeof ConnectClustersIndexRouteImport; + '/schema-registry/edit-compatibility': { + id: '/schema-registry/edit-compatibility'; + path: '/schema-registry/edit-compatibility'; + fullPath: '/schema-registry/edit-compatibility'; + preLoaderRoute: typeof SchemaRegistryEditCompatibilityRouteImport; parentRoute: typeof rootRouteImport; }; - '/transforms/$transformName': { - id: '/transforms/$transformName'; - path: '/transforms/$transformName'; - fullPath: '/transforms/$transformName'; - preLoaderRoute: typeof TransformsTransformNameRouteImport; + '/schema-registry/edit-mode': { + id: '/schema-registry/edit-mode'; + path: '/schema-registry/edit-mode'; + fullPath: '/schema-registry/edit-mode'; + preLoaderRoute: typeof SchemaRegistryEditModeRouteImport; parentRoute: typeof rootRouteImport; }; - '/shadowlinks/create': { - id: '/shadowlinks/create'; - path: '/shadowlinks/create'; - fullPath: '/shadowlinks/create'; - preLoaderRoute: typeof ShadowlinksCreateRouteImport; + '/secrets/': { + id: '/secrets/'; + path: '/secrets'; + fullPath: '/secrets/'; + preLoaderRoute: typeof SecretsIndexRouteImport; parentRoute: typeof rootRouteImport; }; '/secrets/create': { @@ -1031,96 +1031,82 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof SecretsCreateRouteImport; parentRoute: typeof rootRouteImport; }; - '/schema-registry/edit-mode': { - id: '/schema-registry/edit-mode'; - path: '/schema-registry/edit-mode'; - fullPath: '/schema-registry/edit-mode'; - preLoaderRoute: typeof SchemaRegistryEditModeRouteImport; - parentRoute: typeof rootRouteImport; + '/security/': { + id: '/security/'; + path: '/'; + fullPath: '/security/'; + preLoaderRoute: typeof SecurityIndexRouteImport; + parentRoute: typeof SecurityRoute; }; - '/schema-registry/edit-compatibility': { - id: '/schema-registry/edit-compatibility'; - path: '/schema-registry/edit-compatibility'; - fullPath: '/schema-registry/edit-compatibility'; - preLoaderRoute: typeof SchemaRegistryEditCompatibilityRouteImport; + '/shadowlinks/': { + id: '/shadowlinks/'; + path: '/shadowlinks'; + fullPath: '/shadowlinks/'; + preLoaderRoute: typeof ShadowlinksIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/schema-registry/create': { - id: '/schema-registry/create'; - path: '/schema-registry/create'; - fullPath: '/schema-registry/create'; - preLoaderRoute: typeof SchemaRegistryCreateRouteImport; + '/shadowlinks/create': { + id: '/shadowlinks/create'; + path: '/shadowlinks/create'; + fullPath: '/shadowlinks/create'; + preLoaderRoute: typeof ShadowlinksCreateRouteImport; parentRoute: typeof rootRouteImport; }; - '/rp-connect/create': { - id: '/rp-connect/create'; - path: '/rp-connect/create'; - fullPath: '/rp-connect/create'; - preLoaderRoute: typeof RpConnectCreateRouteImport; + '/topics/': { + id: '/topics/'; + path: '/topics'; + fullPath: '/topics/'; + preLoaderRoute: typeof TopicsIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/overview/$brokerId': { - id: '/overview/$brokerId'; - path: '/overview/$brokerId'; - fullPath: '/overview/$brokerId'; - preLoaderRoute: typeof OverviewBrokerIdRouteImport; + '/transforms/': { + id: '/transforms/'; + path: '/transforms'; + fullPath: '/transforms/'; + preLoaderRoute: typeof TransformsIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/groups/$groupId': { - id: '/groups/$groupId'; - path: '/groups/$groupId'; - fullPath: '/groups/$groupId'; - preLoaderRoute: typeof GroupsGroupIdRouteImport; + '/transforms/$transformName': { + id: '/transforms/$transformName'; + path: '/transforms/$transformName'; + fullPath: '/transforms/$transformName'; + preLoaderRoute: typeof TransformsTransformNameRouteImport; parentRoute: typeof rootRouteImport; }; - '/topics/$topicName/': { - id: '/topics/$topicName/'; - path: '/topics/$topicName'; - fullPath: '/topics/$topicName/'; - preLoaderRoute: typeof TopicsTopicNameIndexRouteImport; + '/connect-clusters/$clusterName/': { + id: '/connect-clusters/$clusterName/'; + path: '/connect-clusters/$clusterName'; + fullPath: '/connect-clusters/$clusterName/'; + preLoaderRoute: typeof ConnectClustersClusterNameIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/shadowlinks/$name/': { - id: '/shadowlinks/$name/'; - path: '/shadowlinks/$name'; - fullPath: '/shadowlinks/$name/'; - preLoaderRoute: typeof ShadowlinksNameIndexRouteImport; + '/connect-clusters/$clusterName/$connector': { + id: '/connect-clusters/$clusterName/$connector'; + path: '/connect-clusters/$clusterName/$connector'; + fullPath: '/connect-clusters/$clusterName/$connector'; + preLoaderRoute: typeof ConnectClustersClusterNameConnectorRouteImport; parentRoute: typeof rootRouteImport; }; - '/security/users/': { - id: '/security/users/'; - path: '/users'; - fullPath: '/security/users/'; - preLoaderRoute: typeof SecurityUsersIndexRouteImport; - parentRoute: typeof SecurityRoute; - }; - '/security/roles/': { - id: '/security/roles/'; - path: '/roles'; - fullPath: '/security/roles/'; - preLoaderRoute: typeof SecurityRolesIndexRouteImport; - parentRoute: typeof SecurityRoute; - }; - '/security/permissions/': { - id: '/security/permissions/'; - path: '/permissions'; - fullPath: '/security/permissions/'; - preLoaderRoute: typeof SecurityPermissionsIndexRouteImport; - parentRoute: typeof SecurityRoute; + '/connect-clusters/$clusterName/create-connector': { + id: '/connect-clusters/$clusterName/create-connector'; + path: '/connect-clusters/$clusterName/create-connector'; + fullPath: '/connect-clusters/$clusterName/create-connector'; + preLoaderRoute: typeof ConnectClustersClusterNameCreateConnectorRouteImport; + parentRoute: typeof rootRouteImport; }; - '/security/permissions-list/': { - id: '/security/permissions-list/'; - path: '/permissions-list'; - fullPath: '/security/permissions-list/'; - preLoaderRoute: typeof SecurityPermissionsListIndexRouteImport; - parentRoute: typeof SecurityRoute; + '/debug-bundle/progress/$jobId': { + id: '/debug-bundle/progress/$jobId'; + path: '/debug-bundle/progress/$jobId'; + fullPath: '/debug-bundle/progress/$jobId'; + preLoaderRoute: typeof DebugBundleProgressJobIdRouteImport; + parentRoute: typeof rootRouteImport; }; - '/security/acls/': { - id: '/security/acls/'; - path: '/acls'; - fullPath: '/security/acls/'; - preLoaderRoute: typeof SecurityAclsIndexRouteImport; - parentRoute: typeof SecurityRoute; + '/login/callbacks/$provider': { + id: '/login/callbacks/$provider'; + path: '/login/callbacks/$provider'; + fullPath: '/login/callbacks/$provider'; + preLoaderRoute: typeof LoginCallbacksProviderRouteImport; + parentRoute: typeof rootRouteImport; }; '/rp-connect/$pipelineId/': { id: '/rp-connect/$pipelineId/'; @@ -1129,32 +1115,60 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof RpConnectPipelineIdIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/connect-clusters/$clusterName/': { - id: '/connect-clusters/$clusterName/'; - path: '/connect-clusters/$clusterName'; - fullPath: '/connect-clusters/$clusterName/'; - preLoaderRoute: typeof ConnectClustersClusterNameIndexRouteImport; + '/rp-connect/$pipelineId/edit': { + id: '/rp-connect/$pipelineId/edit'; + path: '/rp-connect/$pipelineId/edit'; + fullPath: '/rp-connect/$pipelineId/edit'; + preLoaderRoute: typeof RpConnectPipelineIdEditRouteImport; parentRoute: typeof rootRouteImport; }; - '/topics/$topicName/produce-record': { - id: '/topics/$topicName/produce-record'; - path: '/topics/$topicName/produce-record'; - fullPath: '/topics/$topicName/produce-record'; - preLoaderRoute: typeof TopicsTopicNameProduceRecordRouteImport; + '/rp-connect/secrets/create': { + id: '/rp-connect/secrets/create'; + path: '/rp-connect/secrets/create'; + fullPath: '/rp-connect/secrets/create'; + preLoaderRoute: typeof RpConnectSecretsCreateRouteImport; parentRoute: typeof rootRouteImport; }; - '/shadowlinks/$name/edit': { - id: '/shadowlinks/$name/edit'; - path: '/shadowlinks/$name/edit'; - fullPath: '/shadowlinks/$name/edit'; - preLoaderRoute: typeof ShadowlinksNameEditRouteImport; + '/secrets/$id/edit': { + id: '/secrets/$id/edit'; + path: '/secrets/$id/edit'; + fullPath: '/secrets/$id/edit'; + preLoaderRoute: typeof SecretsIdEditRouteImport; parentRoute: typeof rootRouteImport; }; - '/security/users/create': { - id: '/security/users/create'; - path: '/users/create'; - fullPath: '/security/users/create'; - preLoaderRoute: typeof SecurityUsersCreateRouteImport; + '/security/acls/': { + id: '/security/acls/'; + path: '/acls'; + fullPath: '/security/acls/'; + preLoaderRoute: typeof SecurityAclsIndexRouteImport; + parentRoute: typeof SecurityRoute; + }; + '/security/acls/create': { + id: '/security/acls/create'; + path: '/acls/create'; + fullPath: '/security/acls/create'; + preLoaderRoute: typeof SecurityAclsCreateRouteImport; + parentRoute: typeof SecurityRoute; + }; + '/security/permissions-list/': { + id: '/security/permissions-list/'; + path: '/permissions-list'; + fullPath: '/security/permissions-list/'; + preLoaderRoute: typeof SecurityPermissionsListIndexRouteImport; + parentRoute: typeof SecurityRoute; + }; + '/security/permissions/': { + id: '/security/permissions/'; + path: '/permissions'; + fullPath: '/security/permissions/'; + preLoaderRoute: typeof SecurityPermissionsIndexRouteImport; + parentRoute: typeof SecurityRoute; + }; + '/security/roles/': { + id: '/security/roles/'; + path: '/roles'; + fullPath: '/security/roles/'; + preLoaderRoute: typeof SecurityRolesIndexRouteImport; parentRoute: typeof SecurityRoute; }; '/security/roles/create': { @@ -1164,60 +1178,74 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof SecurityRolesCreateRouteImport; parentRoute: typeof SecurityRoute; }; - '/security/acls/create': { - id: '/security/acls/create'; - path: '/acls/create'; - fullPath: '/security/acls/create'; - preLoaderRoute: typeof SecurityAclsCreateRouteImport; + '/security/users/': { + id: '/security/users/'; + path: '/users'; + fullPath: '/security/users/'; + preLoaderRoute: typeof SecurityUsersIndexRouteImport; parentRoute: typeof SecurityRoute; }; - '/secrets/$id/edit': { - id: '/secrets/$id/edit'; - path: '/secrets/$id/edit'; - fullPath: '/secrets/$id/edit'; - preLoaderRoute: typeof SecretsIdEditRouteImport; + '/security/users/create': { + id: '/security/users/create'; + path: '/users/create'; + fullPath: '/security/users/create'; + preLoaderRoute: typeof SecurityUsersCreateRouteImport; + parentRoute: typeof SecurityRoute; + }; + '/shadowlinks/$name/': { + id: '/shadowlinks/$name/'; + path: '/shadowlinks/$name'; + fullPath: '/shadowlinks/$name/'; + preLoaderRoute: typeof ShadowlinksNameIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/rp-connect/secrets/create': { - id: '/rp-connect/secrets/create'; - path: '/rp-connect/secrets/create'; - fullPath: '/rp-connect/secrets/create'; - preLoaderRoute: typeof RpConnectSecretsCreateRouteImport; + '/shadowlinks/$name/edit': { + id: '/shadowlinks/$name/edit'; + path: '/shadowlinks/$name/edit'; + fullPath: '/shadowlinks/$name/edit'; + preLoaderRoute: typeof ShadowlinksNameEditRouteImport; parentRoute: typeof rootRouteImport; }; - '/rp-connect/$pipelineId/edit': { - id: '/rp-connect/$pipelineId/edit'; - path: '/rp-connect/$pipelineId/edit'; - fullPath: '/rp-connect/$pipelineId/edit'; - preLoaderRoute: typeof RpConnectPipelineIdEditRouteImport; + '/topics/$topicName/': { + id: '/topics/$topicName/'; + path: '/topics/$topicName'; + fullPath: '/topics/$topicName/'; + preLoaderRoute: typeof TopicsTopicNameIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/login/callbacks/$provider': { - id: '/login/callbacks/$provider'; - path: '/login/callbacks/$provider'; - fullPath: '/login/callbacks/$provider'; - preLoaderRoute: typeof LoginCallbacksProviderRouteImport; + '/topics/$topicName/produce-record': { + id: '/topics/$topicName/produce-record'; + path: '/topics/$topicName/produce-record'; + fullPath: '/topics/$topicName/produce-record'; + preLoaderRoute: typeof TopicsTopicNameProduceRecordRouteImport; parentRoute: typeof rootRouteImport; }; - '/debug-bundle/progress/$jobId': { - id: '/debug-bundle/progress/$jobId'; - path: '/debug-bundle/progress/$jobId'; - fullPath: '/debug-bundle/progress/$jobId'; - preLoaderRoute: typeof DebugBundleProgressJobIdRouteImport; + '/rp-connect/secrets/$secretId/edit': { + id: '/rp-connect/secrets/$secretId/edit'; + path: '/rp-connect/secrets/$secretId/edit'; + fullPath: '/rp-connect/secrets/$secretId/edit'; + preLoaderRoute: typeof RpConnectSecretsSecretIdEditRouteImport; parentRoute: typeof rootRouteImport; }; - '/connect-clusters/$clusterName/create-connector': { - id: '/connect-clusters/$clusterName/create-connector'; - path: '/connect-clusters/$clusterName/create-connector'; - fullPath: '/connect-clusters/$clusterName/create-connector'; - preLoaderRoute: typeof ConnectClustersClusterNameCreateConnectorRouteImport; + '/schema-registry/contexts/$contextName/create': { + id: '/schema-registry/contexts/$contextName/create'; + path: '/schema-registry/contexts/$contextName/create'; + fullPath: '/schema-registry/contexts/$contextName/create'; + preLoaderRoute: typeof SchemaRegistryContextsContextNameCreateRouteImport; parentRoute: typeof rootRouteImport; }; - '/connect-clusters/$clusterName/$connector': { - id: '/connect-clusters/$clusterName/$connector'; - path: '/connect-clusters/$clusterName/$connector'; - fullPath: '/connect-clusters/$clusterName/$connector'; - preLoaderRoute: typeof ConnectClustersClusterNameConnectorRouteImport; + '/schema-registry/contexts/$contextName/edit-compatibility': { + id: '/schema-registry/contexts/$contextName/edit-compatibility'; + path: '/schema-registry/contexts/$contextName/edit-compatibility'; + fullPath: '/schema-registry/contexts/$contextName/edit-compatibility'; + preLoaderRoute: typeof SchemaRegistryContextsContextNameEditCompatibilityRouteImport; + parentRoute: typeof rootRouteImport; + }; + '/schema-registry/contexts/$contextName/edit-mode': { + id: '/schema-registry/contexts/$contextName/edit-mode'; + path: '/schema-registry/contexts/$contextName/edit-mode'; + fullPath: '/schema-registry/contexts/$contextName/edit-mode'; + preLoaderRoute: typeof SchemaRegistryContextsContextNameEditModeRouteImport; parentRoute: typeof rootRouteImport; }; '/schema-registry/subjects/$subjectName/': { @@ -1227,32 +1255,32 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameIndexRouteImport; parentRoute: typeof rootRouteImport; }; - '/security/users/$userName/details': { - id: '/security/users/$userName/details'; - path: '/users/$userName/details'; - fullPath: '/security/users/$userName/details'; - preLoaderRoute: typeof SecurityUsersUserNameDetailsRouteImport; - parentRoute: typeof SecurityRoute; + '/schema-registry/subjects/$subjectName/add-version': { + id: '/schema-registry/subjects/$subjectName/add-version'; + path: '/schema-registry/subjects/$subjectName/add-version'; + fullPath: '/schema-registry/subjects/$subjectName/add-version'; + preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameAddVersionRouteImport; + parentRoute: typeof rootRouteImport; }; - '/security/roles/$roleName/update': { - id: '/security/roles/$roleName/update'; - path: '/roles/$roleName/update'; - fullPath: '/security/roles/$roleName/update'; - preLoaderRoute: typeof SecurityRolesRoleNameUpdateRouteImport; - parentRoute: typeof SecurityRoute; + '/schema-registry/subjects/$subjectName/edit-compatibility': { + id: '/schema-registry/subjects/$subjectName/edit-compatibility'; + path: '/schema-registry/subjects/$subjectName/edit-compatibility'; + fullPath: '/schema-registry/subjects/$subjectName/edit-compatibility'; + preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameEditCompatibilityRouteImport; + parentRoute: typeof rootRouteImport; }; - '/security/roles/$roleName/edit': { - id: '/security/roles/$roleName/edit'; - path: '/roles/$roleName/edit'; - fullPath: '/security/roles/$roleName/edit'; - preLoaderRoute: typeof SecurityRolesRoleNameEditRouteImport; - parentRoute: typeof SecurityRoute; + '/schema-registry/subjects/$subjectName/edit-mode': { + id: '/schema-registry/subjects/$subjectName/edit-mode'; + path: '/schema-registry/subjects/$subjectName/edit-mode'; + fullPath: '/schema-registry/subjects/$subjectName/edit-mode'; + preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameEditModeRouteImport; + parentRoute: typeof rootRouteImport; }; - '/security/roles/$roleName/details': { - id: '/security/roles/$roleName/details'; - path: '/roles/$roleName/details'; - fullPath: '/security/roles/$roleName/details'; - preLoaderRoute: typeof SecurityRolesRoleNameDetailsRouteImport; + '/security/acls/$aclName/details': { + id: '/security/acls/$aclName/details'; + path: '/acls/$aclName/details'; + fullPath: '/security/acls/$aclName/details'; + preLoaderRoute: typeof SecurityAclsAclNameDetailsRouteImport; parentRoute: typeof SecurityRoute; }; '/security/acls/$aclName/update': { @@ -1262,61 +1290,33 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof SecurityAclsAclNameUpdateRouteImport; parentRoute: typeof SecurityRoute; }; - '/security/acls/$aclName/details': { - id: '/security/acls/$aclName/details'; - path: '/acls/$aclName/details'; - fullPath: '/security/acls/$aclName/details'; - preLoaderRoute: typeof SecurityAclsAclNameDetailsRouteImport; + '/security/roles/$roleName/details': { + id: '/security/roles/$roleName/details'; + path: '/roles/$roleName/details'; + fullPath: '/security/roles/$roleName/details'; + preLoaderRoute: typeof SecurityRolesRoleNameDetailsRouteImport; parentRoute: typeof SecurityRoute; }; - '/schema-registry/subjects/$subjectName/edit-mode': { - id: '/schema-registry/subjects/$subjectName/edit-mode'; - path: '/schema-registry/subjects/$subjectName/edit-mode'; - fullPath: '/schema-registry/subjects/$subjectName/edit-mode'; - preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameEditModeRouteImport; - parentRoute: typeof rootRouteImport; - }; - '/schema-registry/subjects/$subjectName/edit-compatibility': { - id: '/schema-registry/subjects/$subjectName/edit-compatibility'; - path: '/schema-registry/subjects/$subjectName/edit-compatibility'; - fullPath: '/schema-registry/subjects/$subjectName/edit-compatibility'; - preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameEditCompatibilityRouteImport; - parentRoute: typeof rootRouteImport; - }; - '/schema-registry/subjects/$subjectName/add-version': { - id: '/schema-registry/subjects/$subjectName/add-version'; - path: '/schema-registry/subjects/$subjectName/add-version'; - fullPath: '/schema-registry/subjects/$subjectName/add-version'; - preLoaderRoute: typeof SchemaRegistrySubjectsSubjectNameAddVersionRouteImport; - parentRoute: typeof rootRouteImport; - }; - '/schema-registry/contexts/$contextName/edit-mode': { - id: '/schema-registry/contexts/$contextName/edit-mode'; - path: '/schema-registry/contexts/$contextName/edit-mode'; - fullPath: '/schema-registry/contexts/$contextName/edit-mode'; - preLoaderRoute: typeof SchemaRegistryContextsContextNameEditModeRouteImport; - parentRoute: typeof rootRouteImport; - }; - '/schema-registry/contexts/$contextName/edit-compatibility': { - id: '/schema-registry/contexts/$contextName/edit-compatibility'; - path: '/schema-registry/contexts/$contextName/edit-compatibility'; - fullPath: '/schema-registry/contexts/$contextName/edit-compatibility'; - preLoaderRoute: typeof SchemaRegistryContextsContextNameEditCompatibilityRouteImport; - parentRoute: typeof rootRouteImport; + '/security/roles/$roleName/edit': { + id: '/security/roles/$roleName/edit'; + path: '/roles/$roleName/edit'; + fullPath: '/security/roles/$roleName/edit'; + preLoaderRoute: typeof SecurityRolesRoleNameEditRouteImport; + parentRoute: typeof SecurityRoute; }; - '/schema-registry/contexts/$contextName/create': { - id: '/schema-registry/contexts/$contextName/create'; - path: '/schema-registry/contexts/$contextName/create'; - fullPath: '/schema-registry/contexts/$contextName/create'; - preLoaderRoute: typeof SchemaRegistryContextsContextNameCreateRouteImport; - parentRoute: typeof rootRouteImport; + '/security/roles/$roleName/update': { + id: '/security/roles/$roleName/update'; + path: '/roles/$roleName/update'; + fullPath: '/security/roles/$roleName/update'; + preLoaderRoute: typeof SecurityRolesRoleNameUpdateRouteImport; + parentRoute: typeof SecurityRoute; }; - '/rp-connect/secrets/$secretId/edit': { - id: '/rp-connect/secrets/$secretId/edit'; - path: '/rp-connect/secrets/$secretId/edit'; - fullPath: '/rp-connect/secrets/$secretId/edit'; - preLoaderRoute: typeof RpConnectSecretsSecretIdEditRouteImport; - parentRoute: typeof rootRouteImport; + '/security/users/$userName/details': { + id: '/security/users/$userName/details'; + path: '/users/$userName/details'; + fullPath: '/security/users/$userName/details'; + preLoaderRoute: typeof SecurityUsersUserNameDetailsRouteImport; + parentRoute: typeof SecurityRoute; }; } } diff --git a/frontend/src/router-defaults.test.ts b/frontend/src/router-defaults.test.ts new file mode 100644 index 0000000000..114187bcc9 --- /dev/null +++ b/frontend/src/router-defaults.test.ts @@ -0,0 +1,25 @@ +/** + * Copyright 2026 Redpanda Data, Inc. + * + * Use of this software is governed by the Business Source License + * included in the file https://github.com/redpanda-data/redpanda/blob/dev/licenses/bsl.md + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0 + */ + +import { RouteError } from './components/routes/route-error'; +import { RoutePending } from './components/routes/route-pending'; +import { routerDefaults } from './router-defaults'; + +describe('routerDefaults', () => { + it('preloads on intent while TanStack Query owns caching and route boundaries', () => { + expect(routerDefaults).toEqual({ + defaultErrorComponent: RouteError, + defaultPendingComponent: RoutePending, + defaultPreload: 'intent', + defaultPreloadStaleTime: 0, + }); + }); +}); diff --git a/frontend/src/router-defaults.ts b/frontend/src/router-defaults.ts new file mode 100644 index 0000000000..e9525e0965 --- /dev/null +++ b/frontend/src/router-defaults.ts @@ -0,0 +1,20 @@ +/** + * Copyright 2026 Redpanda Data, Inc. + * + * Use of this software is governed by the Business Source License + * included in the file https://github.com/redpanda-data/redpanda/blob/dev/licenses/bsl.md + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0 + */ + +import { RouteError } from './components/routes/route-error'; +import { RoutePending } from './components/routes/route-pending'; + +export const routerDefaults = { + defaultPreload: 'intent', + defaultPreloadStaleTime: 0, + defaultPendingComponent: RoutePending, + defaultErrorComponent: RouteError, +} as const; diff --git a/frontend/src/tanstack-router-config.test.ts b/frontend/src/tanstack-router-config.test.ts new file mode 100644 index 0000000000..6cddbf0548 --- /dev/null +++ b/frontend/src/tanstack-router-config.test.ts @@ -0,0 +1,33 @@ +/** + * Copyright 2026 Redpanda Data, Inc. + * + * Use of this software is governed by the Business Source License + * included in the file https://github.com/redpanda-data/redpanda/blob/dev/licenses/bsl.md + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0 + */ + +import { TANSTACK_CHUNK_PATTERN, tanstackRouterConfig } from '../tanstack-router.config'; + +describe('tanstackRouterConfig', () => { + it('configures file-based React routes with automatic code splitting', () => { + expect(tanstackRouterConfig).toMatchObject({ + autoCodeSplitting: true, + generatedRouteTree: './src/routeTree.gen.ts', + quoteStyle: 'single', + routeFileIgnorePattern: String.raw`\.(?:test|spec)\.[cm]?[jt]sx?$`, + routeFileIgnorePrefix: '-', + routesDirectory: './src/routes', + semicolons: true, + target: 'react', + }); + }); + + it('matches TanStack packages across operating systems', () => { + expect(TANSTACK_CHUNK_PATTERN.test('/app/node_modules/@tanstack/react-router/dist/index.js')).toBe(true); + expect(TANSTACK_CHUNK_PATTERN.test(String.raw`C:\app\node_modules\@tanstack\react-query\dist\index.js`)).toBe(true); + expect(TANSTACK_CHUNK_PATTERN.test('/app/node_modules/@redpanda-data/ui/dist/index.js')).toBe(false); + }); +}); diff --git a/frontend/tanstack-router.config.ts b/frontend/tanstack-router.config.ts new file mode 100644 index 0000000000..6ded78e358 --- /dev/null +++ b/frontend/tanstack-router.config.ts @@ -0,0 +1,25 @@ +/** + * Copyright 2026 Redpanda Data, Inc. + * + * Use of this software is governed by the Business Source License + * included in the file https://github.com/redpanda-data/redpanda/blob/dev/licenses/bsl.md + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0 + */ + +import type { Config } from '@tanstack/router-plugin/rspack'; + +export const TANSTACK_CHUNK_PATTERN = /[\\/]node_modules[\\/]@tanstack[\\/]/; + +export const tanstackRouterConfig = { + target: 'react', + autoCodeSplitting: true, + routesDirectory: './src/routes', + generatedRouteTree: './src/routeTree.gen.ts', + routeFileIgnorePrefix: '-', + routeFileIgnorePattern: String.raw`\.(?:test|spec)\.[cm]?[jt]sx?$`, + quoteStyle: 'single', + semicolons: true, +} satisfies Partial; diff --git a/frontend/vitest.config.integration.mts b/frontend/vitest.config.integration.mts index 2101fcf218..425f1cc75f 100644 --- a/frontend/vitest.config.integration.mts +++ b/frontend/vitest.config.integration.mts @@ -6,6 +6,7 @@ import envCompatible from 'vite-plugin-env-compatible'; import tsconfigPaths from 'vite-tsconfig-paths'; import { defineConfig } from 'vitest/config'; +import { tanstackRouterConfig } from './tanstack-router.config'; import { sharedAliases } from './vitest.shared.mts'; const ENV_PREFIX = 'REACT_APP_'; @@ -89,14 +90,7 @@ export default defineConfig(({ mode }) => { }, }, plugins: [ - tanstackRouter({ - target: 'react', - autoCodeSplitting: true, - routesDirectory: './src/routes', - generatedRouteTree: './src/routeTree.gen.ts', - quoteStyle: 'single', - semicolons: true, - }), + tanstackRouter(tanstackRouterConfig), react(), envCompatible({ prefix: ENV_PREFIX }), tsconfigPaths({ diff --git a/frontend/yarn.lock b/frontend/yarn.lock index ab8ce3d08a..6ed0f9c683 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3382,10 +3382,10 @@ "@tanstack/pacer" "^0.15.3" "@tanstack/store" "^0.7.7" -"@tanstack/history@1.162.0": - version "1.162.0" - resolved "https://registry.npmjs.org/@tanstack/history/-/history-1.162.0.tgz" - integrity sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA== +"@tanstack/history@1.162.1": + version "1.162.1" + resolved "https://registry.npmjs.org/@tanstack/history/-/history-1.162.1.tgz" + integrity sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w== "@tanstack/pacer@^0.15.3": version "0.15.4" @@ -3395,15 +3395,15 @@ "@tanstack/devtools-event-client" "^0.3.2" "@tanstack/store" "^0.7.5" -"@tanstack/query-core@5.99.2", "@tanstack/query-core@>=5.62.0": - version "5.99.2" - resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.99.2.tgz" - integrity sha512-1HunU0bXVsR1ZJMZbcOPE6VtaBJxsW809RE9xPe4Gz7MlB0GWwQvuTPhMoEmQ/hIzFKJ/DWAuttIe7BOaWx0tA== +"@tanstack/query-core@5.101.4", "@tanstack/query-core@>=5.62.0": + version "5.101.4" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.101.4.tgz" + integrity sha512-gNwcvOJcRbLWPOLG/2OBm+zM+Yv+MKsXKEOWC57USuZDEsI71hEErQsiEGx5wX9rzWWkfwM0fVSPoiIFSsxfiw== -"@tanstack/query-devtools@5.90.1": - version "5.90.1" - resolved "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.90.1.tgz" - integrity sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ== +"@tanstack/query-devtools@5.101.4": + version "5.101.4" + resolved "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.101.4.tgz" + integrity sha512-z5IPHnDX3aUWeTWlRKLyooBQekaCAw4xRpZqPQ390RiWTDBcTynjpPT221BArw0u2+pnQMdGvPQI9YNNubBcmA== "@tanstack/react-form@^1.12.3": version "1.25.0" @@ -3413,36 +3413,36 @@ "@tanstack/form-core" "1.25.0" "@tanstack/react-store" "^0.7.7" -"@tanstack/react-query@>=5.62.0", "@tanstack/react-query@^5.90.2", "@tanstack/react-query@^5.99.2": - version "5.99.2" - resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.99.2.tgz" - integrity sha512-vM91UEe45QUS9ED6OklsVL15i8qKcRqNwpWzPTVWvRPRSEgDudDgHpvyTjcdlwHcrKNa80T+xXYcchT2noPnZA== +"@tanstack/react-query@>=5.62.0", "@tanstack/react-query@^5.101.4": + version "5.101.4" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.4.tgz" + integrity sha512-yRg2pfOCxIs4ZJW3XYYHU/WgtD04FHSnfHlpRT7h7pR77hwkdRG4wxbKe4aq6P0RvXUTBSQpQeadS1SUYUe+KA== dependencies: - "@tanstack/query-core" "5.99.2" + "@tanstack/query-core" "5.101.4" -"@tanstack/react-query-devtools@^5.90.2": - version "5.90.2" - resolved "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.90.2.tgz" - integrity sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ== +"@tanstack/react-query-devtools@^5.101.4": + version "5.101.4" + resolved "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.101.4.tgz" + integrity sha512-VeK2gtmfj7kvRBjtxS7TKxt/6qKhn8VzabY4UiYMr7NV9CddjSRYRgeYyld+NpjAkgMV9dd+2Qdr8ah5I03NeA== dependencies: - "@tanstack/query-devtools" "5.90.1" + "@tanstack/query-devtools" "5.101.4" -"@tanstack/react-router@^1", "@tanstack/react-router@^1.170.0", "@tanstack/react-router@^1.170.17", "@tanstack/react-router@^1.170.7": - version "1.170.17" - resolved "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.17.tgz" - integrity sha512-ppLkjCfSMaeug9rmFRYzOd4TIqWV+yTE7tzIny7alJsSnM7w4lzEZm6eqCehG0SPetpZ0R3K+UnanSmBgOAVcQ== +"@tanstack/react-router@^1", "@tanstack/react-router@^1.170.19", "@tanstack/react-router@^1.170.22": + version "1.170.22" + resolved "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.22.tgz" + integrity sha512-LMOHWpVMf9WJYcvzIn6TwaoRKpELnhJTwx47da6LHFy2SwNIwn4DBCh5sZ6SdCkMvkmwZaOVu7wWT2ppPP6a1Q== dependencies: - "@tanstack/history" "1.162.0" + "@tanstack/history" "1.162.1" "@tanstack/react-store" "^0.9.3" - "@tanstack/router-core" "1.171.14" + "@tanstack/router-core" "1.171.19" isbot "^5.1.22" -"@tanstack/react-router-devtools@^1.167.0": - version "1.167.0" - resolved "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.167.0.tgz" - integrity sha512-nGw095EG7IHx0h5NtlEmzf6vcCTaFNPWdTSuDKazajhN0ct/v/TkekJ9J6KYUCeV1a8/2ZmToc58M+0rrOyn7w== +"@tanstack/react-router-devtools@^1.167.1": + version "1.167.1" + resolved "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.167.1.tgz" + integrity sha512-pjfGrmjj4d7naEPM7oshqFfwBoxDPNo/UxltlHH5ePbHsJ+plBhd+JaAewm1ueYOjZ0js9hckjWWDYXpCrSfKw== dependencies: - "@tanstack/router-devtools-core" "1.168.0" + "@tanstack/router-devtools-core" "1.168.1" "@tanstack/react-store@^0.7.7": version "0.7.7" @@ -3474,41 +3474,31 @@ dependencies: "@tanstack/virtual-core" "3.13.12" -"@tanstack/router-core@^1.170.0": - version "1.171.13" - resolved "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.13.tgz" - integrity sha512-+NOwEj1kO/6IGmpHRIZHasYxYWpyBQGNIZAST9aNrk9Q3YlU9SgqVnl1pbLa9qAKfeNdXQIRve0RQb/0kyDeDA== - dependencies: - "@tanstack/history" "1.162.0" - cookie-es "^3.0.0" - seroval "^1.5.4" - seroval-plugins "^1.5.4" - -"@tanstack/router-core@1.171.14": - version "1.171.14" - resolved "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.14.tgz" - integrity sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g== +"@tanstack/router-core@1.171.19", "@tanstack/router-core@^1.171.16": + version "1.171.19" + resolved "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.19.tgz" + integrity sha512-uCZhgnfmuBA3PoRLIVSjUhQpJQd/HA7p0XxG1IFKnvXU9lIMZ7gIqx45hyuf9JopxXZI8k7qaz9/6PC7mZLdfQ== dependencies: - "@tanstack/history" "1.162.0" + "@tanstack/history" "1.162.1" cookie-es "^3.0.0" - seroval "^1.5.4" - seroval-plugins "^1.5.4" + seroval "^1.6.2" + seroval-plugins "^1.6.2" -"@tanstack/router-devtools-core@1.168.0": - version "1.168.0" - resolved "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.168.0.tgz" - integrity sha512-wQoQhlBK7nlZgqzaqdYXKWNTpdHdsaREdaPhFZVH0/Ador+F+eM3/NF2i3f2LPeS0GgKraZUQXe1Q/1+KHyEYg== +"@tanstack/router-devtools-core@1.168.1": + version "1.168.1" + resolved "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.168.1.tgz" + integrity sha512-qr4voa4cpSMwQvS3867xkU3AB3MtJbTuovKIy+btjJ/Faju6er9w0nDylmD+005Mk/3YKw9/iueZJl2JAB7JOA== dependencies: clsx "^2.1.1" goober "^2.1.16" -"@tanstack/router-generator@1.167.18": - version "1.167.18" - resolved "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.167.18.tgz" - integrity sha512-kFvM4caRds9Q3EXg64bZubJ6rbDxyV0YDSBSGvOGzmKspQPdz5Xrh0uj5T1Ov8avUUg+c761u04VQAaEzSBXRw== +"@tanstack/router-generator@1.167.25": + version "1.167.25" + resolved "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.167.25.tgz" + integrity sha512-M+S+QvGicfiH7kMkjrm6q+UMWXTdl7v9+pvMVnzA+lFm7whe8qmVOY72h/O8GGnejNn14jxdPrnLXv97NJjlWQ== dependencies: "@babel/types" "^7.28.5" - "@tanstack/router-core" "1.171.14" + "@tanstack/router-core" "1.171.19" "@tanstack/router-utils" "1.162.2" "@tanstack/virtual-file-routes" "1.162.0" jiti "^2.7.0" @@ -3516,16 +3506,16 @@ prettier "^3.5.0" zod "^4.4.3" -"@tanstack/router-plugin@^1.168.19": - version "1.168.19" - resolved "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.168.19.tgz" - integrity sha512-aFglwLc+bbPTgZlkXn3PvOwpjJAfgUyPGSuql4MP3XrqTTh6WkBiy2RYb6oaG5h0s7EKwivEuq85K3Y4V0Mt1g== +"@tanstack/router-plugin@^1.168.27": + version "1.168.27" + resolved "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.168.27.tgz" + integrity sha512-M/3XG6RIxid8+f5VKXILtPpapQPjIgKRKV1JxuvYJwQM811iSUzK9onrZnezUktZcHaWJN+wD7FR5HedH/WY7Q== dependencies: "@babel/core" "^7.28.5" "@babel/template" "^7.27.2" "@babel/types" "^7.28.5" - "@tanstack/router-core" "1.171.14" - "@tanstack/router-generator" "1.167.18" + "@tanstack/router-core" "1.171.19" + "@tanstack/router-generator" "1.167.25" "@tanstack/router-utils" "1.162.2" chokidar "^5.0.0" unplugin "^3.0.0" @@ -10488,15 +10478,15 @@ semver@^7.8.5: resolved "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz" integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== -seroval@^1.0, seroval@^1.5.4: - version "1.5.4" - resolved "https://registry.npmjs.org/seroval/-/seroval-1.5.4.tgz" - integrity sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw== +seroval@^1.0, seroval@^1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/seroval/-/seroval-1.6.2.tgz" + integrity sha512-mPT+SD2TrlB6wvte1KkYOYUkubaTbd6pZ/6Kk3C9nxzrHmCZyhxOO7XGAeL7f+yLKZglzGtM9odUVvg/EhO+vQ== -seroval-plugins@^1.5.4: - version "1.5.4" - resolved "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.4.tgz" - integrity sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw== +seroval-plugins@^1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.6.2.tgz" + integrity sha512-TfxuUjlbBESzUOWdTkTKqvSmav0ABym+itetDXLK6mDz8SmrpdI30aF8RTXE8Bvq+tH/1yIDkvy3W0lfQb1ipQ== set-cookie-parser@^2.6.0: version "2.7.2"