astock-agent/frontend/.next/server/app/recommendations/page.js
2026-04-07 23:21:47 +08:00

205 lines
154 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(() => {
var exports = {};
exports.id = "app/recommendations/page";
exports.ids = ["app/recommendations/page"];
exports.modules = {
/***/ "../../client/components/action-async-storage.external":
/*!*******************************************************************************!*\
!*** external "next/dist/client/components/action-async-storage.external.js" ***!
\*******************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = require("next/dist/client/components/action-async-storage.external.js");
/***/ }),
/***/ "../../client/components/request-async-storage.external":
/*!********************************************************************************!*\
!*** external "next/dist/client/components/request-async-storage.external.js" ***!
\********************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = require("next/dist/client/components/request-async-storage.external.js");
/***/ }),
/***/ "../../client/components/static-generation-async-storage.external":
/*!******************************************************************************************!*\
!*** external "next/dist/client/components/static-generation-async-storage.external.js" ***!
\******************************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = require("next/dist/client/components/static-generation-async-storage.external.js");
/***/ }),
/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js":
/*!*************************************************************************!*\
!*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***!
\*************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js");
/***/ }),
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Frecommendations%2Fpage&page=%2Frecommendations%2Fpage&appPaths=%2Frecommendations%2Fpage&pagePath=private-next-app-dir%2Frecommendations%2Fpage.tsx&appDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Frecommendations%2Fpage&page=%2Frecommendations%2Fpage&appPaths=%2Frecommendations%2Fpage&pagePath=private-next-app-dir%2Frecommendations%2Fpage.tsx&appDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?d969\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\n 'recommendations',\n {\n children: ['__PAGE__', {}, {\n page: [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/app/recommendations/page.tsx */ \"(rsc)/./src/app/recommendations/page.tsx\")), \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\"],\n \n }]\n },\n {\n \n \n }\n ]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/app/layout.tsx */ \"(rsc)/./src/app/layout.tsx\")), \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [\"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\"];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/recommendations/page\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/recommendations/page\",\n pathname: \"/recommendations\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZyZWNvbW1lbmRhdGlvbnMlMkZwYWdlJnBhZ2U9JTJGcmVjb21tZW5kYXRpb25zJTJGcGFnZSZhcHBQYXRocz0lMkZyZWNvbW1lbmRhdGlvbnMlMkZwYWdlJnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGcmVjb21tZW5kYXRpb25zJTJGcGFnZS50c3gmYXBwRGlyPSUyRlVzZXJzJTJGYWFyb24lMkZzb3VyY2VfY29kZSUyRmFzdG9jay1hZ2VudCUyRmZyb250ZW5kJTJGc3JjJTJGYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj0lMkZVc2VycyUyRmFhcm9uJTJGc291cmNlX2NvZGUlMkZhc3RvY2stYWdlbnQlMkZmcm9udGVuZCZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGFBQWEsc0JBQXNCO0FBQ2lFO0FBQ3JDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyx1QkFBdUIsZ0xBQW9IO0FBQzNJO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EseUJBQXlCLG9KQUFzRztBQUMvSCxvQkFBb0IsME5BQWdGO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUN1QjtBQUM2RDtBQUNwRiw2QkFBNkIsbUJBQW1CO0FBQ2hEO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUN1RDtBQUN2RDtBQUNPLHdCQUF3Qiw4R0FBa0I7QUFDakQ7QUFDQSxjQUFjLHlFQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXN0b2NrLWFnZW50LWZyb250ZW5kLz9hMWFmIl0sInNvdXJjZXNDb250ZW50IjpbIlwiVFVSQk9QQUNLIHsgdHJhbnNpdGlvbjogbmV4dC1zc3IgfVwiO1xuaW1wb3J0IHsgQXBwUGFnZVJvdXRlTW9kdWxlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvYXBwLXBhZ2UvbW9kdWxlLmNvbXBpbGVkXCI7XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZFwiO1xuLy8gV2UgaW5qZWN0IHRoZSB0cmVlIGFuZCBwYWdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgdHJlZSA9IHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJycsXG4gICAgICAgIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJ3JlY29tbWVuZGF0aW9ucycsXG4gICAgICAgIHtcbiAgICAgICAgY2hpbGRyZW46IFsnX19QQUdFX18nLCB7fSwge1xuICAgICAgICAgIHBhZ2U6IFsoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9hYXJvbi9zb3VyY2VfY29kZS9hc3RvY2stYWdlbnQvZnJvbnRlbmQvc3JjL2FwcC9yZWNvbW1lbmRhdGlvbnMvcGFnZS50c3hcIiksIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9zcmMvYXBwL3JlY29tbWVuZGF0aW9ucy9wYWdlLnRzeFwiXSxcbiAgICAgICAgICBcbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgfVxuICAgICAgXVxuICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAnbGF5b3V0JzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9zcmMvYXBwL2xheW91dC50c3hcIiksIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9zcmMvYXBwL2xheW91dC50c3hcIl0sXG4nbm90LWZvdW5kJzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiKSwgXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCJdLFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0uY2hpbGRyZW47XG5jb25zdCBwYWdlcyA9IFtcIi9Vc2Vycy9hYXJvbi9zb3VyY2VfY29kZS9hc3RvY2stYWdlbnQvZnJvbnRlbmQvc3JjL2FwcC9yZWNvbW1lbmRhdGlvbnMvcGFnZS50c3hcIl07XG5leHBvcnQgeyB0cmVlLCBwYWdlcyB9O1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxFcnJvciB9IGZyb20gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnlcIjtcbmNvbnN0IF9fbmV4dF9hcHBfcmVxdWlyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfX1xuY29uc3QgX19uZXh0X2FwcF9sb2FkX2NodW5rX18gPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoKVxuZXhwb3J0IGNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBcIi9yZWNvbW1lbmRhdGlvbnMvcGFnZVwiO1xuZXhwb3J0IGNvbnN0IF9fbmV4dF9hcHBfXyA9IHtcbiAgICByZXF1aXJlOiBfX25leHRfYXBwX3JlcXVpcmVfXyxcbiAgICBsb2FkQ2h1bms6IF9fbmV4dF9hcHBfbG9hZF9jaHVua19fXG59O1xuZXhwb3J0ICogZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvYXBwLXJlbmRlci9lbnRyeS1iYXNlXCI7XG4vLyBDcmVhdGUgYW5kIGV4cG9ydCB0aGUgcm91dGUgbW9kdWxlIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbmV4cG9ydCBjb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBBcHBQYWdlUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBwYWdlOiBcIi9yZWNvbW1lbmRhdGlvbnMvcGFnZVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvcmVjb21tZW5kYXRpb25zXCIsXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAgICAgICAgYnVuZGxlUGF0aDogXCJcIixcbiAgICAgICAgZmlsZW5hbWU6IFwiXCIsXG4gICAgICAgIGFwcFBhdGhzOiBbXVxuICAgIH0sXG4gICAgdXNlcmxhbmQ6IHtcbiAgICAgICAgbG9hZGVyVHJlZTogdHJlZVxuICAgIH1cbn0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcGFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Frecommendations%2Fpage&page=%2Frecommendations%2Fpage&appPaths=%2Frecommendations%2Fpage&pagePath=private-next-app-dir%2Frecommendations%2Fpage.tsx&appDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n");
/***/ }),
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
\**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(ssr)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGYWFyb24lMkZzb3VyY2VfY29kZSUyRmFzdG9jay1hZ2VudCUyRmZyb250ZW5kJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGYXBwLXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRmFhcm9uJTJGc291cmNlX2NvZGUlMkZhc3RvY2stYWdlbnQlMkZmcm9udGVuZCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGYWFyb24lMkZzb3VyY2VfY29kZSUyRmFzdG9jay1hZ2VudCUyRmZyb250ZW5kJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZhYXJvbiUyRnNvdXJjZV9jb2RlJTJGYXN0b2NrLWFnZW50JTJGZnJvbnRlbmQlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZsYXlvdXQtcm91dGVyLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGYWFyb24lMkZzb3VyY2VfY29kZSUyRmFzdG9jay1hZ2VudCUyRmZyb250ZW5kJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGYWFyb24lMkZzb3VyY2VfY29kZSUyRmFzdG9jay1hZ2VudCUyRmZyb250ZW5kJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQTBJO0FBQzFJO0FBQ0Esb09BQTJJO0FBQzNJO0FBQ0EsME9BQThJO0FBQzlJO0FBQ0Esd09BQTZJO0FBQzdJO0FBQ0Esa1BBQWtKO0FBQ2xKO0FBQ0Esc1FBQTRKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXN0b2NrLWFnZW50LWZyb250ZW5kLz8zMTdlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXIuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9hYXJvbi9zb3VyY2VfY29kZS9hc3RvY2stYWdlbnQvZnJvbnRlbmQvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvYWFyb24vc291cmNlX2NvZGUvYXN0b2NrLWFnZW50L2Zyb250ZW5kL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbGF5b3V0LXJvdXRlci5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL2Fhcm9uL3NvdXJjZV9jb2RlL2FzdG9jay1hZ2VudC9mcm9udGVuZC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
/***/ }),
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
/*!**************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
\**************************************************************************************************************************************************************************************************************************************************/
/***/ (() => {
/***/ }),
/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp%2Frecommendations%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!":
/*!*****************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp%2Frecommendations%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***!
\*****************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/app/recommendations/page.tsx */ \"(ssr)/./src/app/recommendations/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGYWFyb24lMkZzb3VyY2VfY29kZSUyRmFzdG9jay1hZ2VudCUyRmZyb250ZW5kJTJGc3JjJTJGYXBwJTJGcmVjb21tZW5kYXRpb25zJTJGcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPXRydWUhIiwibWFwcGluZ3MiOiJBQUFBLGdMQUFvSCIsInNvdXJjZXMiOlsid2VicGFjazovL2FzdG9jay1hZ2VudC1mcm9udGVuZC8/ZTFlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9hYXJvbi9zb3VyY2VfY29kZS9hc3RvY2stYWdlbnQvZnJvbnRlbmQvc3JjL2FwcC9yZWNvbW1lbmRhdGlvbnMvcGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp%2Frecommendations%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n");
/***/ }),
/***/ "(ssr)/./src/app/recommendations/page.tsx":
/*!******************************************!*\
!*** ./src/app/recommendations/page.tsx ***!
\******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RecommendationsPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/api */ \"(ssr)/./src/lib/api.ts\");\n/* harmony import */ var _components_stock_card__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/stock-card */ \"(ssr)/./src/components/stock-card.tsx\");\n/* harmony import */ var _hooks_use_websocket__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/hooks/use-websocket */ \"(ssr)/./src/hooks/use-websocket.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nfunction RecommendationsPage() {\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [llmEnabled, setLlmEnabled] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async ()=>{\n try {\n const [result, health] = await Promise.all([\n (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.fetchAPI)(\"/api/recommendations/latest\"),\n (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.fetchAPI)(\"/api/health\")\n ]);\n setData(result);\n setLlmEnabled(health.llm_enabled);\n } catch (e) {\n console.error(\"加载推荐失败:\", e);\n }\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n loadData();\n }, [\n loadData\n ]);\n (0,_hooks_use_websocket__WEBPACK_IMPORTED_MODULE_4__.useWebSocket)((0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n loadData();\n }, [\n loadData\n ]));\n const recs = data?.recommendations ?? [];\n const filtered = filter === \"all\" ? recs : filter === \"buy\" ? recs.filter((r)=>r.signal === \"BUY\") : recs.filter((r)=>r.level === filter);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 md:px-8 pt-6 pb-20 md:pb-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-5 animate-fade-in-up\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-lg font-bold tracking-tight\",\n children: \"推荐列表\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 50,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-text-muted mt-0.5\",\n children: [\n \"共 \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-mono tabular-nums\",\n children: filtered.length\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 52,\n columnNumber: 15\n }, this),\n \" 只\"\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 51,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 49,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 48,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 mb-5 overflow-x-auto pb-1 animate-fade-in-up delay-75\",\n children: [\n {\n key: \"all\",\n label: \"全部\"\n },\n {\n key: \"buy\",\n label: \"买入信号\"\n },\n {\n key: \"强烈推荐\",\n label: \"强烈推荐\"\n },\n {\n key: \"推荐\",\n label: \"推荐\"\n },\n {\n key: \"观望\",\n label: \"观望\"\n }\n ].map(({ key, label })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setFilter(key),\n className: `text-xs px-4 py-1.5 rounded-xl whitespace-nowrap transition-all duration-200 font-medium ${filter === key ? \"bg-gradient-to-r from-amber-500/25 to-amber-600/20 text-amber-400 border border-amber-500/15\" : \"bg-white/[0.03] text-text-muted hover:text-text-secondary hover:bg-white/[0.06] border border-transparent\"}`,\n children: label\n }, key, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 66,\n columnNumber: 11\n }, this))\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 58,\n columnNumber: 7\n }, this),\n filtered.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass-card-static p-12 text-center animate-fade-in-up\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-text-muted text-sm mb-1\",\n children: [\n \"暂无\",\n filter === \"all\" ? \"\" : \"符合条件的\",\n \"推荐\"\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 82,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-text-muted/50 text-xs\",\n children: \"尝试切换筛选条件或触发新的扫描\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 83,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 81,\n columnNumber: 9\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\",\n children: filtered.map((rec, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-fade-in-up\",\n style: {\n animationDelay: `${i * 60}ms`\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_stock_card__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n rec: rec,\n showLLMLoading: llmEnabled\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, this)\n }, rec.ts_code, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 88,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 86,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx\",\n lineNumber: 46,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7Ozs7QUFRakMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hc3RvY2stYWdlbnQtZnJvbnRlbmQvLi9zcmMvYXBwL3JlY29tbWVuZGF0aW9ucy9wYWdlLnRzeD80OWE1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgZmV0Y2hBUEkgfSBmcm9tIFwiQC9saWIvYXBpXCI7XG5pbXBvcnQgdHlwZSB7IExhdGVzdFJlc3VsdCB9IGZyb20gXCJAL2xpYi9hcGlcIjtcbmltcG9ydCBTdG9ja0NhcmQgZnJvbSBcIkAvY29tcG9uZW50cy9zdG9jay1jYXJkXCI7XG5pbXBvcnQgeyB1c2VXZWJTb2NrZXQgfSBmcm9tIFwiQC9ob29rcy91c2Utd2Vic29ja2V0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlY29tbWVuZGF0aW9uc1BhZ2UoKSB7XG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPExhdGVzdFJlc3VsdCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZmlsdGVyLCBzZXRGaWx0ZXJdID0gdXNlU3RhdGU8c3RyaW5nPihcImFsbFwiKTtcbiAgY29uc3QgW2xsbUVuYWJsZWQsIHNldExsbUVuYWJsZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGxvYWREYXRhID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbcmVzdWx0LCBoZWFsdGhdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBmZXRjaEFQSTxMYXRlc3RSZXN1bHQ+KFwiL2FwaS9yZWNvbW1lbmRhdGlvbnMvbGF0ZXN0XCIpLFxuICAgICAgICBmZXRjaEFQSTx7IGxsbV9lbmFibGVkOiBib29sZWFuIH0+KFwiL2FwaS9oZWFsdGhcIiksXG4gICAgICBdKTtcbiAgICAgIHNldERhdGEocmVzdWx0KTtcbiAgICAgIHNldExsbUVuYWJsZWQoaGVhbHRoLmxsbV9lbmFibGVkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwi5Yqg6L295o6o6I2Q5aSx6LSlOlwiLCBlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWREYXRhKCk7XG4gIH0sIFtsb2FkRGF0YV0pO1xuXG4gIHVzZVdlYlNvY2tldChcbiAgICB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBsb2FkRGF0YSgpO1xuICAgIH0sIFtsb2FkRGF0YV0pXG4gICk7XG5cbiAgY29uc3QgcmVjcyA9IGRhdGE/LnJlY29tbWVuZGF0aW9ucyA/PyBbXTtcbiAgY29uc3QgZmlsdGVyZWQgPVxuICAgIGZpbHRlciA9PT0gXCJhbGxcIlxuICAgICAgPyByZWNzXG4gICAgICA6IGZpbHRlciA9PT0gXCJidXlcIlxuICAgICAgPyByZWNzLmZpbHRlcigocikgPT4gci5zaWduYWwgPT09IFwiQlVZXCIpXG4gICAgICA6IHJlY3MuZmlsdGVyKChyKSA9PiByLmxldmVsID09PSBmaWx0ZXIpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0byBweC00IG1kOnB4LTggcHQtNiBwYi0yMCBtZDpwYi0xMFwiPlxuICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTUgYW5pbWF0ZS1mYWRlLWluLXVwXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0XCI+5o6o6I2Q5YiX6KGoPC9oMT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtdGV4dC1tdXRlZCBtdC0wLjVcIj5cbiAgICAgICAgICAgIOWFsSA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+e2ZpbHRlcmVkLmxlbmd0aH08L3NwYW4+IOWPqlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEZpbHRlciB0YWJzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIG1iLTUgb3ZlcmZsb3cteC1hdXRvIHBiLTEgYW5pbWF0ZS1mYWRlLWluLXVwIGRlbGF5LTc1XCI+XG4gICAgICAgIHtbXG4gICAgICAgICAgeyBrZXk6IFwiYWxsXCIsIGxhYmVsOiBcIuWFqOmDqFwiIH0sXG4gICAgICAgICAgeyBrZXk6IFwiYnV5XCIsIGxhYmVsOiBcIuS5sOWFpeS/oeWPt1wiIH0sXG4gICAgICAgICAgeyBrZXk6IFwi5by654OI5o6o6I2QXCIsIGxhYmVsOiBcIuW8uueDiOaOqOiNkFwiIH0sXG4gICAgICAgICAgeyBrZXk6IFwi5o6o6I2QXCIsIGxhYmVsOiBcIuaOqOiNkFwiIH0sXG4gICAgICAgICAgeyBrZXk6IFwi6KeC5pybXCIsIGxhYmVsOiBcIuinguacm1wiIH0sXG4gICAgICAgIF0ubWFwKCh7IGtleSwgbGFiZWwgfSkgPT4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RmlsdGVyKGtleSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2B0ZXh0LXhzIHB4LTQgcHktMS41IHJvdW5kZWQteGwgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGZvbnQtbWVkaXVtICR7XG4gICAgICAgICAgICAgIGZpbHRlciA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyBcImJnLWdyYWRpZW50LXRvLXIgZnJvbS1hbWJlci01MDAvMjUgdG8tYW1iZXItNjAwLzIwIHRleHQtYW1iZXItNDAwIGJvcmRlciBib3JkZXItYW1iZXItNTAwLzE1XCJcbiAgICAgICAgICAgICAgICA6IFwiYmctd2hpdGUvWzAuMDNdIHRleHQtdGV4dC1tdXRlZCBob3Zlcjp0ZXh0LXRleHQtc2Vjb25kYXJ5IGhvdmVyOmJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAge2ZpbHRlcmVkLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJnbGFzcy1jYXJkLXN0YXRpYyBwLTEyIHRleHQtY2VudGVyIGFuaW1hdGUtZmFkZS1pbi11cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC10ZXh0LW11dGVkIHRleHQtc20gbWItMVwiPuaaguaXoHtmaWx0ZXIgPT09IFwiYWxsXCIgPyBcIlwiIDogXCLnrKblkIjmnaHku7bnmoRcIn3mjqjojZA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtdGV4dC1tdXRlZC81MCB0ZXh0LXhzXCI+5bCd6K+V5YiH5o2i562b6YCJ5p2h5Lu25oiW6Kem5Y+R5paw55qE5omr5o+PPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC00XCI+XG4gICAgICAgICAge2ZpbHRlcmVkLm1hcCgocmVjLCBpKSA9PiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17cmVjLnRzX2NvZGV9IGNsYXNzTmFtZT1cImFuaW1hdGUtZmFkZS1pbi11cFwiIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiBgJHtpICogNjB9bXNgIH19PlxuICAgICAgICAgICAgICA8U3RvY2tDYXJkIHJlYz17cmVjfSBzaG93TExNTG9hZGluZz17bGxtRW5hYmxlZH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImZldGNoQVBJIiwiU3RvY2tDYXJkIiwidXNlV2ViU29ja2V0IiwiUmVjb21tZW5kYXRpb25zUGFnZSIsImRhdGEiLCJzZXREYXRhIiwiZmlsdGVyIiwic2V0RmlsdGVyIiwibGxtRW5hYmxlZCIsInNldExsbUVuYWJsZWQiLCJsb2FkRGF0YSIsInJlc3VsdCIsImhlYWx0aCIsIlByb21pc2UiLCJhbGwiLCJsbG1fZW5hYmxlZCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJyZWNzIiwicmVjb21tZW5kYXRpb25zIiwiZmlsdGVyZWQiLCJyIiwic2lnbmFsIiwibGV2ZWwiLCJkaXYiLCJjbGFzc05hbWUiLCJoMSIsInAiLCJzcGFuIiwibGVuZ3RoIiwia2V5IiwibGFiZWwiLCJtYXAiLCJidXR0b24iLCJvbkNsaWNrIiwicmVjIiwiaSIsInN0eWxlIiwiYW5pbWF0aW9uRGVsYXkiLCJzaG93TExNTG9hZGluZyIsInRzX2NvZGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./src/app/recommendations/page.tsx\n");
/***/ }),
/***/ "(ssr)/./src/components/stock-card.tsx":
/*!***************************************!*\
!*** ./src/components/stock-card.tsx ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StockCard)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/utils */ \"(ssr)/./src/lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction StockCard({ rec, showLLMLoading = false }) {\n const badge = (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.getLevelBadge)(rec.level);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: `/stock/${rec.ts_code}`,\n className: \"block glass-card p-5 group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-sm tracking-tight\",\n children: rec.name\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 18,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `text-xs px-2 py-0.5 rounded-full font-medium ${badge.bg} ${badge.text}`,\n children: rec.level\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 19,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 17,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-text-muted mt-1 font-mono tabular-nums\",\n children: [\n rec.ts_code,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-text-muted/40 mx-1\",\n children: \"\\xb7\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 24,\n columnNumber: 27\n }, this),\n \" \",\n rec.sector\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 23,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 16,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-right\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `text-xl font-bold font-mono tabular-nums tracking-tight ${(0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.getScoreColor)(rec.score)}`,\n children: rec.score\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 28,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `text-xs font-semibold tracking-wider ${(0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.getSignalColor)(rec.signal)}`,\n children: rec.signal === \"BUY\" ? \"买入\" : rec.signal === \"SELL\" ? \"卖出\" : \"持有\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 31,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 27,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 15,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-4 gap-2 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ScoreBar, {\n label: \"市场\",\n value: rec.market_temp_score\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 39,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ScoreBar, {\n label: \"板块\",\n value: rec.sector_score\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 40,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ScoreBar, {\n label: \"资金\",\n value: rec.capital_score\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 41,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ScoreBar, {\n label: \"技术\",\n value: rec.technical_score\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 42,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 38,\n columnNumber: 7\n }, this),\n rec.entry_price && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between text-xs mb-3 bg-white/[0.03] rounded-xl px-4 py-2.5 border border-white/[0.04]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-text-muted\",\n children: \"买入 \"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400 font-mono tabular-nums\",\n children: rec.entry_price\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 50,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 48,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-text-muted\",\n children: \"目标 \"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 53,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-400 font-mono tabular-nums\",\n children: rec.target_price\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 54,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 52,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-text-muted\",\n children: \"止损 \"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 57,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-emerald-400 font-mono tabular-nums\",\n children: rec.stop_loss\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 58,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 56,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1.5\",\n children: rec.reasons.map((r, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-text-secondary flex items-start gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-1 h-1 rounded-full bg-amber-500/60 mt-[7px] shrink-0\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 67,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"leading-relaxed\",\n children: r\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 68,\n columnNumber: 13\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 66,\n columnNumber: 11\n }, this))\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 64,\n columnNumber: 7\n }, this),\n rec.llm_analysis ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 bg-accent-cyan/[0.06] border border-accent-cyan/[0.12] rounded-xl px-4 py-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-accent-cyan/80 font-semibold tracking-wider mb-1.5\",\n children: \"AI 分析\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 76,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-text-secondary leading-relaxed\",\n children: rec.llm_analysis\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 77,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 75,\n columnNumber: 9\n }, this) : showLLMLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-xs text-text-muted flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-3 h-3 border border-accent-cyan/30 border-t-accent-cyan/80 rounded-full animate-spin\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 83,\n columnNumber: 11\n }, this),\n \"AI 分析中...\"\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 82,\n columnNumber: 9\n }, this) : null,\n rec.risk_note && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-xs text-amber-500/60 bg-amber-500/[0.04] border border-amber-500/[0.08] rounded-lg px-3 py-1.5\",\n children: rec.risk_note\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 90,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 flex items-center gap-1 text-xs text-text-muted opacity-0 group-hover:opacity-100 transition-opacity duration-300\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"查看详情\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 97,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"10\",\n height: \"10\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M5 12h14M12 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 99,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 98,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 96,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 10,\n columnNumber: 5\n }, this);\n}\nfunction ScoreBar({ label, value }) {\n const width = Math.min(value, 100);\n const gradientClass = value >= 70 ? \"score-bar-gradient-high\" : value >= 50 ? \"score-bar-gradient-mid\" : \"score-bar-gradient-low\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between text-xs text-text-muted mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: label\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 112,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-mono tabular-nums\",\n children: value.toFixed(0)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 113,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 111,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1.5 bg-white/[0.04] rounded-full overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-full rounded-full transition-all duration-700 ease-out ${gradientClass}`,\n style: {\n width: `${width}%`\n }\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 116,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 115,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/components/stock-card.tsx\",\n lineNumber: 110,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Olsid2VicGFjazovL2FzdG9jay1hZ2VudC1mcm9udGVuZC8uL3NyYy9jb21wb25lbnRzL3N0b2NrLWNhcmQudHN4PzE4Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IGdldExldmVsQmFkZ2UsIGdldFNpZ25hbENvbG9yLCBnZXRTY29yZUNvbG9yIH0gZnJvbSBcIkAvbGliL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uRGF0YSB9IGZyb20gXCJAL2xpYi9hcGlcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3RvY2tDYXJkKHsgcmVjLCBzaG93TExNTG9hZGluZyA9IGZhbHNlIH06IHsgcmVjOiBSZWNvbW1lbmRhdGlvbkRhdGE7IHNob3dMTE1Mb2FkaW5nPzogYm9vbGVhbiB9KSB7XG4gIGNvbnN0IGJhZGdlID0gZ2V0TGV2ZWxCYWRnZShyZWMubGV2ZWwpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e2Avc3RvY2svJHtyZWMudHNfY29kZX1gfVxuICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgZ2xhc3MtY2FyZCBwLTUgZ3JvdXBcIlxuICAgID5cbiAgICAgIHsvKiBIZWFkZXI6IE5hbWUgKyBTY29yZSAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gbWItM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSB0cmFja2luZy10aWdodFwiPntyZWMubmFtZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2B0ZXh0LXhzIHB4LTIgcHktMC41IHJvdW5kZWQtZnVsbCBmb250LW1lZGl1bSAke2JhZGdlLmJnfSAke2JhZGdlLnRleHR9YH0+XG4gICAgICAgICAgICAgIHtyZWMubGV2ZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtdGV4dC1tdXRlZCBtdC0xIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXNcIj5cbiAgICAgICAgICAgIHtyZWMudHNfY29kZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC10ZXh0LW11dGVkLzQwIG14LTFcIj7Ctzwvc3Bhbj4ge3JlYy5zZWN0b3J9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHRleHQteGwgZm9udC1ib2xkIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgdHJhY2tpbmctdGlnaHQgJHtnZXRTY29yZUNvbG9yKHJlYy5zY29yZSl9YH0+XG4gICAgICAgICAgICB7cmVjLnNjb3JlfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVyICR7Z2V0U2lnbmFsQ29sb3IocmVjLnNpZ25hbCl9YH0+XG4gICAgICAgICAgICB7cmVjLnNpZ25hbCA9PT0gXCJCVVlcIiA/IFwi5Lmw5YWlXCIgOiByZWMuc2lnbmFsID09PSBcIlNFTExcIiA/IFwi5Y2W5Ye6XCIgOiBcIuaMgeaciVwifVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRm91ciBkaW1lbnNpb24gc2NvcmUgYmFycyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNCBnYXAtMiBtYi00XCI+XG4gICAgICAgIDxTY29yZUJhciBsYWJlbD1cIuW4guWculwiIHZhbHVlPXtyZWMubWFya2V0X3RlbXBfc2NvcmV9IC8+XG4gICAgICAgIDxTY29yZUJhciBsYWJlbD1cIuadv+Wdl1wiIHZhbHVlPXtyZWMuc2VjdG9yX3Njb3JlfSAvPlxuICAgICAgICA8U2NvcmVCYXIgbGFiZWw9XCLotYTph5FcIiB2YWx1ZT17cmVjLmNhcGl0YWxfc2NvcmV9IC8+XG4gICAgICAgIDxTY29yZUJhciBsYWJlbD1cIuaKgOacr1wiIHZhbHVlPXtyZWMudGVjaG5pY2FsX3Njb3JlfSAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBQcmljZSByZWZlcmVuY2UgKi99XG4gICAgICB7cmVjLmVudHJ5X3ByaWNlICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXhzIG1iLTMgYmctd2hpdGUvWzAuMDNdIHJvdW5kZWQteGwgcHgtNCBweS0yLjUgYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNF1cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC10ZXh0LW11dGVkXCI+5Lmw5YWlIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTQwMCBmb250LW1vbm8gdGFidWxhci1udW1zXCI+e3JlYy5lbnRyeV9wcmljZX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtdGV4dC1tdXRlZFwiPuebruaghyA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTQwMCBmb250LW1vbm8gdGFidWxhci1udW1zXCI+e3JlYy50YXJnZXRfcHJpY2V9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXRleHQtbXV0ZWRcIj7mraLmjZ8gPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1lbWVyYWxkLTQwMCBmb250LW1vbm8gdGFidWxhci1udW1zXCI+e3JlYy5zdG9wX2xvc3N9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBSZWFzb25zICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTEuNVwiPlxuICAgICAgICB7cmVjLnJlYXNvbnMubWFwKChyLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdiBrZXk9e2l9IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC10ZXh0LXNlY29uZGFyeSBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3LTEgaC0xIHJvdW5kZWQtZnVsbCBiZy1hbWJlci01MDAvNjAgbXQtWzdweF0gc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGVhZGluZy1yZWxheGVkXCI+e3J9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQUkgQW5hbHlzaXMgKi99XG4gICAgICB7cmVjLmxsbV9hbmFseXNpcyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIGJnLWFjY2VudC1jeWFuL1swLjA2XSBib3JkZXIgYm9yZGVyLWFjY2VudC1jeWFuL1swLjEyXSByb3VuZGVkLXhsIHB4LTQgcHktM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWFjY2VudC1jeWFuLzgwIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctd2lkZXIgbWItMS41XCI+QUkg5YiG5p6QPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtdGV4dC1zZWNvbmRhcnkgbGVhZGluZy1yZWxheGVkXCI+XG4gICAgICAgICAgICB7cmVjLmxsbV9hbmFseXNpc31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogc2hvd0xMTUxvYWRpbmcgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyB0ZXh0LXhzIHRleHQtdGV4dC1tdXRlZCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlubGluZS1ibG9jayB3LTMgaC0zIGJvcmRlciBib3JkZXItYWNjZW50LWN5YW4vMzAgYm9yZGVyLXQtYWNjZW50LWN5YW4vODAgcm91bmRlZC1mdWxsIGFuaW1hdGUtc3BpblwiIC8+XG4gICAgICAgICAgQUkg5YiG5p6Q5LitLi4uXG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IG51bGx9XG5cbiAgICAgIHsvKiBSaXNrIG5vdGUgKi99XG4gICAgICB7cmVjLnJpc2tfbm90ZSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyB0ZXh0LXhzIHRleHQtYW1iZXItNTAwLzYwIGJnLWFtYmVyLTUwMC9bMC4wNF0gYm9yZGVyIGJvcmRlci1hbWJlci01MDAvWzAuMDhdIHJvdW5kZWQtbGcgcHgtMyBweS0xLjVcIj5cbiAgICAgICAgICB7cmVjLnJpc2tfbm90ZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogSG92ZXIgaW5kaWNhdG9yICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgdGV4dC10ZXh0LW11dGVkIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwXCI+XG4gICAgICAgIDxzcGFuPuafpeeci+ivpuaDhTwvc3Bhbj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD1cIjJcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk01IDEyaDE0TTEyIDVsNyA3LTcgN1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApO1xufVxuXG5mdW5jdGlvbiBTY29yZUJhcih7IGxhYmVsLCB2YWx1ZSB9OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfSkge1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWluKHZhbHVlLCAxMDApO1xuICBjb25zdCBncmFkaWVudENsYXNzID0gdmFsdWUgPj0gNzAgPyBcInNjb3JlLWJhci1ncmFkaWVudC1oaWdoXCIgOiB2YWx1ZSA+PSA1MCA/IFwic2NvcmUtYmFyLWdyYWRpZW50LW1pZFwiIDogXCJzY29yZS1iYXItZ3JhZGllbnQtbG93XCI7XG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdGV4dC14cyB0ZXh0LXRleHQtbXV0ZWQgbWItMVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntsYWJlbH08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0YWJ1bGFyLW51bXNcIj57dmFsdWUudG9GaXhlZCgwKX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC0xLjUgYmctd2hpdGUvWzAuMDRdIHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17YGgtZnVsbCByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNzAwIGVhc2Utb3V0ICR7Z3JhZGllbnRDbGFzc31gfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgJHt3aWR0aH0lYCB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiZ2V0TGV2ZWxCYWRnZSIsImdldFNpZ25hbENvbG9yIiwiZ2V0U2NvcmVDb2xvciIsIlN0b2NrQ2FyZCIsInJlYyIsInNob3dMTE1Mb2FkaW5nIiwiYmFkZ2UiLCJsZXZlbCIsImEiLCJocmVmIiwidHNfY29kZSIsImNsYXNzTmFtZSIsImRpdiIsInNwYW4iLCJuYW1lIiwiYmciLCJ0ZXh0Iiwic2VjdG9yIiwic2NvcmUiLCJzaWduYWwiLCJTY29yZUJhciIsImxhYmVsIiwidmFsdWUiLCJtYXJrZXRfdGVtcF9zY29yZSIsInNlY3Rvcl9zY29yZSIsImNhcGl0YWxfc2NvcmUiLCJ0ZWNobmljYWxfc2NvcmUiLCJlbnRyeV9wcmljZSIsInRhcmdldF9wcmljZSIsInN0b3BfbG9zcyIsInJlYXNvbnMiLCJtYXAiLCJyIiwiaSIsImxsbV9hbmFseXNpcyIsInJpc2tfbm90ZSIsInN2ZyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInBhdGgiLCJkIiwiTWF0aCIsIm1pbiIsImdyYWRpZW50Q2xhc3MiLCJ0b0ZpeGVkIiwic3R5bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./src/components/stock-card.tsx\n");
/***/ }),
/***/ "(ssr)/./src/hooks/use-websocket.ts":
/*!************************************!*\
!*** ./src/hooks/use-websocket.ts ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useWebSocket: () => (/* binding */ useWebSocket)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* __next_internal_client_entry_do_not_use__ useWebSocket auto */ \nfunction useWebSocket(onMessage) {\n const [connected, setConnected] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const wsRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const reconnectTimer = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const connect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n const protocol = window.location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const ws = new WebSocket(`${protocol}//${window.location.host}/ws`);\n ws.onopen = ()=>{\n setConnected(true);\n // 心跳\n const heartbeat = setInterval(()=>{\n if (ws.readyState === WebSocket.OPEN) ws.send(\"ping\");\n }, 30000);\n ws.addEventListener(\"close\", ()=>clearInterval(heartbeat));\n };\n ws.onmessage = (event)=>{\n if (event.data === \"pong\") return;\n try {\n const data = JSON.parse(event.data);\n onMessage?.(data);\n } catch {\n // ignore\n }\n };\n ws.onclose = ()=>{\n setConnected(false);\n reconnectTimer.current = setTimeout(connect, 5000);\n };\n ws.onerror = ()=>ws.close();\n wsRef.current = ws;\n }, [\n onMessage\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n connect();\n return ()=>{\n clearTimeout(reconnectTimer.current);\n wsRef.current?.close();\n };\n }, [\n connect\n ]);\n return {\n connected\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9zcmMvaG9va3MvdXNlLXdlYnNvY2tldC50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7a0VBRWlFO0FBTzFELFNBQVNJLGFBQWFDLFNBQXFDO0lBQ2hFLE1BQU0sQ0FBQ0MsV0FBV0MsYUFBYSxHQUFHTCwrQ0FBUUEsQ0FBQztJQUMzQyxNQUFNTSxRQUFRUCw2Q0FBTUEsQ0FBbUI7SUFDdkMsTUFBTVEsaUJBQWlCUiw2Q0FBTUE7SUFFN0IsTUFBTVMsVUFBVVAsa0RBQVdBLENBQUM7UUFDMUIsTUFBTVEsV0FBV0MsT0FBT0MsUUFBUSxDQUFDRixRQUFRLEtBQUssV0FBVyxTQUFTO1FBQ2xFLE1BQU1HLEtBQUssSUFBSUMsVUFBVSxDQUFDLEVBQUVKLFNBQVMsRUFBRSxFQUFFQyxPQUFPQyxRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFbEVGLEdBQUdHLE1BQU0sR0FBRztZQUNWVixhQUFhO1lBQ2IsS0FBSztZQUNMLE1BQU1XLFlBQVlDLFlBQVk7Z0JBQzVCLElBQUlMLEdBQUdNLFVBQVUsS0FBS0wsVUFBVU0sSUFBSSxFQUFFUCxHQUFHUSxJQUFJLENBQUM7WUFDaEQsR0FBRztZQUNIUixHQUFHUyxnQkFBZ0IsQ0FBQyxTQUFTLElBQU1DLGNBQWNOO1FBQ25EO1FBRUFKLEdBQUdXLFNBQVMsR0FBRyxDQUFDQztZQUNkLElBQUlBLE1BQU1DLElBQUksS0FBSyxRQUFRO1lBQzNCLElBQUk7Z0JBQ0YsTUFBTUEsT0FBT0MsS0FBS0MsS0FBSyxDQUFDSCxNQUFNQyxJQUFJO2dCQUNsQ3RCLFlBQVlzQjtZQUNkLEVBQUUsT0FBTTtZQUNOLFNBQVM7WUFDWDtRQUNGO1FBRUFiLEdBQUdnQixPQUFPLEdBQUc7WUFDWHZCLGFBQWE7WUFDYkUsZUFBZXNCLE9BQU8sR0FBR0MsV0FBV3RCLFNBQVM7UUFDL0M7UUFFQUksR0FBR21CLE9BQU8sR0FBRyxJQUFNbkIsR0FBR29CLEtBQUs7UUFDM0IxQixNQUFNdUIsT0FBTyxHQUFHakI7SUFDbEIsR0FBRztRQUFDVDtLQUFVO0lBRWRMLGdEQUFTQSxDQUFDO1FBQ1JVO1FBQ0EsT0FBTztZQUNMeUIsYUFBYTFCLGVBQWVzQixPQUFPO1lBQ25DdkIsTUFBTXVCLE9BQU8sRUFBRUc7UUFDakI7SUFDRixHQUFHO1FBQUN4QjtLQUFRO0lBRVosT0FBTztRQUFFSjtJQUFVO0FBQ3JCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXN0b2NrLWFnZW50LWZyb250ZW5kLy4vc3JjL2hvb2tzL3VzZS13ZWJzb2NrZXQudHM/NzkzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgV1NNZXNzYWdlIHtcbiAgdHlwZTogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlV2ViU29ja2V0KG9uTWVzc2FnZT86IChkYXRhOiBXU01lc3NhZ2UpID0+IHZvaWQpIHtcbiAgY29uc3QgW2Nvbm5lY3RlZCwgc2V0Q29ubmVjdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qgd3NSZWYgPSB1c2VSZWY8V2ViU29ja2V0IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlY29ubmVjdFRpbWVyID0gdXNlUmVmPE5vZGVKUy5UaW1lb3V0PigpO1xuXG4gIGNvbnN0IGNvbm5lY3QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIgPyBcIndzczpcIiA6IFwid3M6XCI7XG4gICAgY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0KGAke3Byb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vd3NgKTtcblxuICAgIHdzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgIHNldENvbm5lY3RlZCh0cnVlKTtcbiAgICAgIC8vIOW/g+i3s1xuICAgICAgY29uc3QgaGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHdzLnNlbmQoXCJwaW5nXCIpO1xuICAgICAgfSwgMzAwMDApO1xuICAgICAgd3MuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsICgpID0+IGNsZWFySW50ZXJ2YWwoaGVhcnRiZWF0KSk7XG4gICAgfTtcblxuICAgIHdzLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IFwicG9uZ1wiKSByZXR1cm47XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgICAgb25NZXNzYWdlPy4oZGF0YSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHdzLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICBzZXRDb25uZWN0ZWQoZmFsc2UpO1xuICAgICAgcmVjb25uZWN0VGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoY29ubmVjdCwgNTAwMCk7XG4gICAgfTtcblxuICAgIHdzLm9uZXJyb3IgPSAoKSA9PiB3cy5jbG9zZSgpO1xuICAgIHdzUmVmLmN1cnJlbnQgPSB3cztcbiAgfSwgW29uTWVzc2FnZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29ubmVjdCgpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIuY3VycmVudCk7XG4gICAgICB3c1JlZi5jdXJyZW50Py5jbG9zZSgpO1xuICAgIH07XG4gIH0sIFtjb25uZWN0XSk7XG5cbiAgcmV0dXJuIHsgY29ubmVjdGVkIH07XG59XG4iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsInVzZVdlYlNvY2tldCIsIm9uTWVzc2FnZSIsImNvbm5lY3RlZCIsInNldENvbm5lY3RlZCIsIndzUmVmIiwicmVjb25uZWN0VGltZXIiLCJjb25uZWN0IiwicHJvdG9jb2wiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIndzIiwiV2ViU29ja2V0IiwiaG9zdCIsIm9ub3BlbiIsImhlYXJ0YmVhdCIsInNldEludGVydmFsIiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJzZW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsZWFySW50ZXJ2YWwiLCJvbm1lc3NhZ2UiLCJldmVudCIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJvbmNsb3NlIiwiY3VycmVudCIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiY2xvc2UiLCJjbGVhclRpbWVvdXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./src/hooks/use-websocket.ts\n");
/***/ }),
/***/ "(ssr)/./src/lib/api.ts":
/*!************************!*\
!*** ./src/lib/api.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ fetchAPI: () => (/* binding */ fetchAPI),\n/* harmony export */ postAPI: () => (/* binding */ postAPI),\n/* harmony export */ streamChat: () => (/* binding */ streamChat)\n/* harmony export */ });\nconst API_BASE = \"\";\nasync function fetchAPI(path) {\n const res = await fetch(`${API_BASE}${path}`);\n if (!res.ok) throw new Error(`API error: ${res.status}`);\n return res.json();\n}\nasync function postAPI(path, body) {\n const res = await fetch(`${API_BASE}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: body ? JSON.stringify(body) : undefined\n });\n if (!res.ok) throw new Error(`API error: ${res.status}`);\n return res.json();\n}\nasync function* streamChat(messages) {\n const res = await fetch(`${API_BASE}/api/chat/stream`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n messages\n })\n });\n if (!res.ok) throw new Error(`Chat API error: ${res.status}`);\n if (!res.body) throw new Error(\"No response body\");\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n while(true){\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, {\n stream: true\n });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n for (const line of lines){\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") return;\n try {\n const parsed = JSON.parse(data);\n yield parsed;\n } catch {\n // ignore malformed lines\n }\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9zcmMvbGliL2FwaS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxXQUFXO0FBRVYsZUFBZUMsU0FBWUMsSUFBWTtJQUM1QyxNQUFNQyxNQUFNLE1BQU1DLE1BQU0sQ0FBQyxFQUFFSixTQUFTLEVBQUVFLEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUNDLElBQUlFLEVBQUUsRUFBRSxNQUFNLElBQUlDLE1BQU0sQ0FBQyxXQUFXLEVBQUVILElBQUlJLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELE9BQU9KLElBQUlLLElBQUk7QUFDakI7QUFFTyxlQUFlQyxRQUFXUCxJQUFZLEVBQUVRLElBQWM7SUFDM0QsTUFBTVAsTUFBTSxNQUFNQyxNQUFNLENBQUMsRUFBRUosU0FBUyxFQUFFRSxLQUFLLENBQUMsRUFBRTtRQUM1Q1MsUUFBUTtRQUNSQyxTQUFTO1lBQUUsZ0JBQWdCO1FBQW1CO1FBQzlDRixNQUFNQSxPQUFPRyxLQUFLQyxTQUFTLENBQUNKLFFBQVFLO0lBQ3RDO0lBQ0EsSUFBSSxDQUFDWixJQUFJRSxFQUFFLEVBQUUsTUFBTSxJQUFJQyxNQUFNLENBQUMsV0FBVyxFQUFFSCxJQUFJSSxNQUFNLENBQUMsQ0FBQztJQUN2RCxPQUFPSixJQUFJSyxJQUFJO0FBQ2pCO0FBcUVPLGdCQUFnQlEsV0FDckJDLFFBQXVCO0lBRXZCLE1BQU1kLE1BQU0sTUFBTUMsTUFBTSxDQUFDLEVBQUVKLFNBQVMsZ0JBQWdCLENBQUMsRUFBRTtRQUNyRFcsUUFBUTtRQUNSQyxTQUFTO1lBQUUsZ0JBQWdCO1FBQW1CO1FBQzlDRixNQUFNRyxLQUFLQyxTQUFTLENBQUM7WUFBRUc7UUFBUztJQUNsQztJQUVBLElBQUksQ0FBQ2QsSUFBSUUsRUFBRSxFQUFFLE1BQU0sSUFBSUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFSCxJQUFJSSxNQUFNLENBQUMsQ0FBQztJQUM1RCxJQUFJLENBQUNKLElBQUlPLElBQUksRUFBRSxNQUFNLElBQUlKLE1BQU07SUFFL0IsTUFBTVksU0FBU2YsSUFBSU8sSUFBSSxDQUFDUyxTQUFTO0lBQ2pDLE1BQU1DLFVBQVUsSUFBSUM7SUFDcEIsSUFBSUMsU0FBUztJQUViLE1BQU8sS0FBTTtRQUNYLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBRyxNQUFNTixPQUFPTyxJQUFJO1FBQ3pDLElBQUlGLE1BQU07UUFFVkQsVUFBVUYsUUFBUU0sTUFBTSxDQUFDRixPQUFPO1lBQUVHLFFBQVE7UUFBSztRQUMvQyxNQUFNQyxRQUFRTixPQUFPTyxLQUFLLENBQUM7UUFDM0JQLFNBQVNNLE1BQU1FLEdBQUcsTUFBTTtRQUV4QixLQUFLLE1BQU1DLFFBQVFILE1BQU87WUFDeEIsSUFBSUcsS0FBS0MsVUFBVSxDQUFDLFdBQVc7Z0JBQzdCLE1BQU1DLE9BQU9GLEtBQUtHLEtBQUssQ0FBQyxHQUFHQyxJQUFJO2dCQUMvQixJQUFJRixTQUFTLFVBQVU7Z0JBQ3ZCLElBQUk7b0JBQ0YsTUFBTUcsU0FBU3ZCLEtBQUt3QixLQUFLLENBQUNKO29CQUMxQixNQUFNRztnQkFDUixFQUFFLE9BQU07Z0JBQ04seUJBQXlCO2dCQUMzQjtZQUNGO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXN0b2NrLWFnZW50LWZyb250ZW5kLy4vc3JjL2xpYi9hcGkudHM/MmZhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBBUElfQkFTRSA9IFwiXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEFQSTxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0V9JHtwYXRofWApO1xuICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGBBUEkgZXJyb3I6ICR7cmVzLnN0YXR1c31gKTtcbiAgcmV0dXJuIHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0QVBJPFQ+KHBhdGg6IHN0cmluZywgYm9keT86IHVua25vd24pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0V9JHtwYXRofWAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICBib2R5OiBib2R5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiB1bmRlZmluZWQsXG4gIH0pO1xuICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGBBUEkgZXJyb3I6ICR7cmVzLnN0YXR1c31gKTtcbiAgcmV0dXJuIHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2V0VGVtcGVyYXR1cmVEYXRhIHtcbiAgdHJhZGVfZGF0ZTogc3RyaW5nO1xuICB0ZW1wZXJhdHVyZTogbnVtYmVyO1xuICB1cF9jb3VudDogbnVtYmVyO1xuICBkb3duX2NvdW50OiBudW1iZXI7XG4gIGxpbWl0X3VwX2NvdW50OiBudW1iZXI7XG4gIGxpbWl0X2Rvd25fY291bnQ/OiBudW1iZXI7XG4gIG1heF9zdHJlYWs/OiBudW1iZXI7XG4gIGJyb2tlbl9yYXRlPzogbnVtYmVyO1xuICBpbmRleF9hYm92ZV9tYTIwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleE92ZXJ2aWV3IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIGNsb3NlOiBudW1iZXI7XG4gIHBjdF9jaGc6IG51bWJlcjtcbiAgdm9sdW1lOiBudW1iZXI7XG4gIHJlYWx0aW1lOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29tbWVuZGF0aW9uRGF0YSB7XG4gIHRzX2NvZGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzZWN0b3I6IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbiAgbGV2ZWw6IHN0cmluZztcbiAgc2lnbmFsOiBzdHJpbmc7XG4gIG1hcmtldF90ZW1wX3Njb3JlOiBudW1iZXI7XG4gIHNlY3Rvcl9zY29yZTogbnVtYmVyO1xuICBjYXBpdGFsX3Njb3JlOiBudW1iZXI7XG4gIHRlY2huaWNhbF9zY29yZTogbnVtYmVyO1xuICBlbnRyeV9wcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgdGFyZ2V0X3ByaWNlOiBudW1iZXIgfCBudWxsO1xuICBzdG9wX2xvc3M6IG51bWJlciB8IG51bGw7XG4gIHJlYXNvbnM6IHN0cmluZ1tdO1xuICByaXNrX25vdGU6IHN0cmluZztcbiAgbGxtX2FuYWx5c2lzPzogc3RyaW5nO1xuICBzY2FuX3Nlc3Npb246IHN0cmluZztcbiAgY3JlYXRlZF9hdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWN0b3JEYXRhIHtcbiAgc2VjdG9yX2NvZGU6IHN0cmluZztcbiAgc2VjdG9yX25hbWU6IHN0cmluZztcbiAgcGN0X2NoYW5nZTogbnVtYmVyO1xuICBjYXBpdGFsX2luZmxvdzogbnVtYmVyO1xuICBsaW1pdF91cF9jb3VudDogbnVtYmVyO1xuICBkYXlzX2NvbnRpbnVvdXM6IG51bWJlcjtcbiAgaGVhdF9zY29yZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhdGVzdFJlc3VsdCB7XG4gIG1hcmtldF90ZW1wZXJhdHVyZTogTWFya2V0VGVtcGVyYXR1cmVEYXRhIHwgbnVsbDtcbiAgcmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0TWVzc2FnZSB7XG4gIHJvbGU6IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIjtcbiAgY29udGVudDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUV2ZW50IHtcbiAgdHlwZTogXCJjb250ZW50XCIgfCBcInN0YXR1c1wiO1xuICBjb250ZW50OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogc3RyZWFtQ2hhdChcbiAgbWVzc2FnZXM6IENoYXRNZXNzYWdlW11cbik6IEFzeW5jR2VuZXJhdG9yPFN0cmVhbUV2ZW50LCB2b2lkLCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0V9L2FwaS9jaGF0L3N0cmVhbWAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VzIH0pLFxuICB9KTtcblxuICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGBDaGF0IEFQSSBlcnJvcjogJHtyZXMuc3RhdHVzfWApO1xuICBpZiAoIXJlcy5ib2R5KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXNwb25zZSBib2R5XCIpO1xuXG4gIGNvbnN0IHJlYWRlciA9IHJlcy5ib2R5LmdldFJlYWRlcigpO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGxldCBidWZmZXIgPSBcIlwiO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICBpZiAoZG9uZSkgYnJlYWs7XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KFwiXFxuXCIpO1xuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8IFwiXCI7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJkYXRhOiBcIikpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxpbmUuc2xpY2UoNikudHJpbSgpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gXCJbRE9ORV1cIikgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YSkgYXMgU3RyZWFtRXZlbnQ7XG4gICAgICAgICAgeWllbGQgcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmUgbWFsZm9ybWVkIGxpbmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBUElfQkFTRSIsImZldGNoQVBJIiwicGF0aCIsInJlcyIsImZldGNoIiwib2siLCJFcnJvciIsInN0YXR1cyIsImpzb24iLCJwb3N0QVBJIiwiYm9keSIsIm1ldGhvZCIsImhlYWRlcnMiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwic3RyZWFtQ2hhdCIsIm1lc3NhZ2VzIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwiZGVjb2RlciIsIlRleHREZWNvZGVyIiwiYnVmZmVyIiwiZG9uZSIsInZhbHVlIiwicmVhZCIsImRlY29kZSIsInN0cmVhbSIsImxpbmVzIiwic3BsaXQiLCJwb3AiLCJsaW5lIiwic3RhcnRzV2l0aCIsImRhdGEiLCJzbGljZSIsInRyaW0iLCJwYXJzZWQiLCJwYXJzZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./src/lib/api.ts\n");
/***/ }),
/***/ "(ssr)/./src/lib/utils.ts":
/*!**************************!*\
!*** ./src/lib/utils.ts ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cn: () => (/* binding */ cn),\n/* harmony export */ formatNumber: () => (/* binding */ formatNumber),\n/* harmony export */ getLevelBadge: () => (/* binding */ getLevelBadge),\n/* harmony export */ getScoreColor: () => (/* binding */ getScoreColor),\n/* harmony export */ getSignalColor: () => (/* binding */ getSignalColor),\n/* harmony export */ getTempColor: () => (/* binding */ getTempColor),\n/* harmony export */ getTempLabel: () => (/* binding */ getTempLabel)\n/* harmony export */ });\nfunction cn(...classes) {\n return classes.filter(Boolean).join(\" \");\n}\nfunction formatNumber(n) {\n if (Math.abs(n) >= 10000) return (n / 10000).toFixed(2) + \"亿\";\n if (Math.abs(n) >= 1) return n.toFixed(2) + \"万\";\n return n.toFixed(2);\n}\nfunction getScoreColor(score) {\n if (score >= 80) return \"text-red-400\";\n if (score >= 60) return \"text-orange-400\";\n if (score >= 40) return \"text-yellow-400\";\n return \"text-gray-400\";\n}\nfunction getLevelBadge(level) {\n switch(level){\n case \"强烈推荐\":\n return {\n bg: \"bg-red-500/20\",\n text: \"text-red-400\"\n };\n case \"推荐\":\n return {\n bg: \"bg-orange-500/20\",\n text: \"text-orange-400\"\n };\n case \"观望\":\n return {\n bg: \"bg-yellow-500/20\",\n text: \"text-yellow-400\"\n };\n default:\n return {\n bg: \"bg-gray-500/20\",\n text: \"text-gray-400\"\n };\n }\n}\nfunction getSignalColor(signal) {\n if (signal === \"BUY\") return \"text-red-400\";\n if (signal === \"SELL\") return \"text-green-400\";\n return \"text-gray-400\";\n}\nfunction getTempColor(temp) {\n if (temp >= 70) return \"#ff6b6b\";\n if (temp >= 50) return \"#f59e0b\";\n if (temp >= 30) return \"#fbbf24\";\n return \"#34d399\";\n}\nfunction getTempLabel(temp) {\n if (temp >= 70) return \"火热\";\n if (temp >= 50) return \"温和\";\n if (temp >= 30) return \"偏冷\";\n return \"冰点\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9zcmMvbGliL3V0aWxzLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBTyxTQUFTQSxHQUFHLEdBQUdDLE9BQThDO0lBQ2xFLE9BQU9BLFFBQVFDLE1BQU0sQ0FBQ0MsU0FBU0MsSUFBSSxDQUFDO0FBQ3RDO0FBRU8sU0FBU0MsYUFBYUMsQ0FBUztJQUNwQyxJQUFJQyxLQUFLQyxHQUFHLENBQUNGLE1BQU0sT0FBTyxPQUFPLENBQUNBLElBQUksS0FBSSxFQUFHRyxPQUFPLENBQUMsS0FBSztJQUMxRCxJQUFJRixLQUFLQyxHQUFHLENBQUNGLE1BQU0sR0FBRyxPQUFPQSxFQUFFRyxPQUFPLENBQUMsS0FBSztJQUM1QyxPQUFPSCxFQUFFRyxPQUFPLENBQUM7QUFDbkI7QUFFTyxTQUFTQyxjQUFjQyxLQUFhO0lBQ3pDLElBQUlBLFNBQVMsSUFBSSxPQUFPO0lBQ3hCLElBQUlBLFNBQVMsSUFBSSxPQUFPO0lBQ3hCLElBQUlBLFNBQVMsSUFBSSxPQUFPO0lBQ3hCLE9BQU87QUFDVDtBQUVPLFNBQVNDLGNBQWNDLEtBQWE7SUFDekMsT0FBUUE7UUFDTixLQUFLO1lBQ0gsT0FBTztnQkFBRUMsSUFBSTtnQkFBaUJDLE1BQU07WUFBZTtRQUNyRCxLQUFLO1lBQ0gsT0FBTztnQkFBRUQsSUFBSTtnQkFBb0JDLE1BQU07WUFBa0I7UUFDM0QsS0FBSztZQUNILE9BQU87Z0JBQUVELElBQUk7Z0JBQW9CQyxNQUFNO1lBQWtCO1FBQzNEO1lBQ0UsT0FBTztnQkFBRUQsSUFBSTtnQkFBa0JDLE1BQU07WUFBZ0I7SUFDekQ7QUFDRjtBQUVPLFNBQVNDLGVBQWVDLE1BQWM7SUFDM0MsSUFBSUEsV0FBVyxPQUFPLE9BQU87SUFDN0IsSUFBSUEsV0FBVyxRQUFRLE9BQU87SUFDOUIsT0FBTztBQUNUO0FBRU8sU0FBU0MsYUFBYUMsSUFBWTtJQUN2QyxJQUFJQSxRQUFRLElBQUksT0FBTztJQUN2QixJQUFJQSxRQUFRLElBQUksT0FBTztJQUN2QixJQUFJQSxRQUFRLElBQUksT0FBTztJQUN2QixPQUFPO0FBQ1Q7QUFFTyxTQUFTQyxhQUFhRCxJQUFZO0lBQ3ZDLElBQUlBLFFBQVEsSUFBSSxPQUFPO0lBQ3ZCLElBQUlBLFFBQVEsSUFBSSxPQUFPO0lBQ3ZCLElBQUlBLFFBQVEsSUFBSSxPQUFPO0lBQ3ZCLE9BQU87QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL2FzdG9jay1hZ2VudC1mcm9udGVuZC8uL3NyYy9saWIvdXRpbHMudHM/N2MxYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY24oLi4uY2xhc3NlczogKHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkIHwgbnVsbClbXSkge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKE1hdGguYWJzKG4pID49IDEwMDAwKSByZXR1cm4gKG4gLyAxMDAwMCkudG9GaXhlZCgyKSArIFwi5Lq/XCI7XG4gIGlmIChNYXRoLmFicyhuKSA+PSAxKSByZXR1cm4gbi50b0ZpeGVkKDIpICsgXCLkuIdcIjtcbiAgcmV0dXJuIG4udG9GaXhlZCgyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjb3JlQ29sb3Ioc2NvcmU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChzY29yZSA+PSA4MCkgcmV0dXJuIFwidGV4dC1yZWQtNDAwXCI7XG4gIGlmIChzY29yZSA+PSA2MCkgcmV0dXJuIFwidGV4dC1vcmFuZ2UtNDAwXCI7XG4gIGlmIChzY29yZSA+PSA0MCkgcmV0dXJuIFwidGV4dC15ZWxsb3ctNDAwXCI7XG4gIHJldHVybiBcInRleHQtZ3JheS00MDBcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsQmFkZ2UobGV2ZWw6IHN0cmluZyk6IHsgYmc6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0ge1xuICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgY2FzZSBcIuW8uueDiOaOqOiNkFwiOlxuICAgICAgcmV0dXJuIHsgYmc6IFwiYmctcmVkLTUwMC8yMFwiLCB0ZXh0OiBcInRleHQtcmVkLTQwMFwiIH07XG4gICAgY2FzZSBcIuaOqOiNkFwiOlxuICAgICAgcmV0dXJuIHsgYmc6IFwiYmctb3JhbmdlLTUwMC8yMFwiLCB0ZXh0OiBcInRleHQtb3JhbmdlLTQwMFwiIH07XG4gICAgY2FzZSBcIuinguacm1wiOlxuICAgICAgcmV0dXJuIHsgYmc6IFwiYmcteWVsbG93LTUwMC8yMFwiLCB0ZXh0OiBcInRleHQteWVsbG93LTQwMFwiIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IGJnOiBcImJnLWdyYXktNTAwLzIwXCIsIHRleHQ6IFwidGV4dC1ncmF5LTQwMFwiIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hbENvbG9yKHNpZ25hbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHNpZ25hbCA9PT0gXCJCVVlcIikgcmV0dXJuIFwidGV4dC1yZWQtNDAwXCI7XG4gIGlmIChzaWduYWwgPT09IFwiU0VMTFwiKSByZXR1cm4gXCJ0ZXh0LWdyZWVuLTQwMFwiO1xuICByZXR1cm4gXCJ0ZXh0LWdyYXktNDAwXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wQ29sb3IodGVtcDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHRlbXAgPj0gNzApIHJldHVybiBcIiNmZjZiNmJcIjtcbiAgaWYgKHRlbXAgPj0gNTApIHJldHVybiBcIiNmNTllMGJcIjtcbiAgaWYgKHRlbXAgPj0gMzApIHJldHVybiBcIiNmYmJmMjRcIjtcbiAgcmV0dXJuIFwiIzM0ZDM5OVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcExhYmVsKHRlbXA6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh0ZW1wID49IDcwKSByZXR1cm4gXCLngavng61cIjtcbiAgaWYgKHRlbXAgPj0gNTApIHJldHVybiBcIua4qeWSjFwiO1xuICBpZiAodGVtcCA+PSAzMCkgcmV0dXJuIFwi5YGP5Ya3XCI7XG4gIHJldHVybiBcIuWGsOeCuVwiO1xufVxuIl0sIm5hbWVzIjpbImNuIiwiY2xhc3NlcyIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwiZm9ybWF0TnVtYmVyIiwibiIsIk1hdGgiLCJhYnMiLCJ0b0ZpeGVkIiwiZ2V0U2NvcmVDb2xvciIsInNjb3JlIiwiZ2V0TGV2ZWxCYWRnZSIsImxldmVsIiwiYmciLCJ0ZXh0IiwiZ2V0U2lnbmFsQ29sb3IiLCJzaWduYWwiLCJnZXRUZW1wQ29sb3IiLCJ0ZW1wIiwiZ2V0VGVtcExhYmVsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./src/lib/utils.ts\n");
/***/ }),
/***/ "(rsc)/./src/app/globals.css":
/*!*****************************!*\
!*** ./src/app/globals.css ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"aa0465df8293\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9zcmMvYXBwL2dsb2JhbHMuY3NzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZSxjQUFjO0FBQzdCLElBQUksS0FBVSxFQUFFLEVBQXVCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXN0b2NrLWFnZW50LWZyb250ZW5kLy4vc3JjL2FwcC9nbG9iYWxzLmNzcz9mZTNiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiYWEwNDY1ZGY4MjkzXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./src/app/globals.css\n");
/***/ }),
/***/ "(rsc)/./src/app/layout.tsx":
/*!****************************!*\
!*** ./src/app/layout.tsx ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout),\n/* harmony export */ metadata: () => (/* binding */ metadata),\n/* harmony export */ viewport: () => (/* binding */ viewport)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(rsc)/./src/app/globals.css\");\n\n\nconst metadata = {\n title: \"Dragon AI Agent\",\n description: \"基于资金驱动的四层漏斗模型盘中实时分析推荐A股\"\n};\nconst viewport = {\n width: \"device-width\",\n initialScale: 1,\n maximumScale: 1,\n userScalable: false\n};\nfunction RootLayout({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"zh-CN\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: \"min-h-screen bg-bg-primary text-text-primary font-display\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex min-h-screen\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"px-6 pt-7 pb-5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm\",\n children: \"D\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 31,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-sm font-semibold tracking-tight\",\n children: \"Dragon AI Agent\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 35,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-text-muted mt-0.5 font-light tracking-wide\",\n children: \"资金驱动 \\xb7 四层漏斗模型\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 36,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 34,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 30,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 29,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 42,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"flex-1 py-5 px-3 space-y-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(SideNavItem, {\n href: \"/\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(DashboardIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 46,\n columnNumber: 43\n }, void 0),\n label: \"总览\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 46,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(SideNavItem, {\n href: \"/recommendations\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(TargetIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 47,\n columnNumber: 58\n }, void 0),\n label: \"推荐列表\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 47,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(SideNavItem, {\n href: \"/sectors\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(FireIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 48,\n columnNumber: 50\n }, void 0),\n label: \"板块分析\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 48,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(SideNavItem, {\n href: \"/chat\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ChatIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 49,\n columnNumber: 47\n }, void 0),\n label: \"AI 对话\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 49,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 45,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"px-6 py-5 border-t border-white/[0.04]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-text-muted leading-relaxed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1.5 mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-1 h-1 rounded-full bg-emerald-500\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Tushare Pro + 腾讯行情\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 57,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 55,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-1 h-1 rounded-full bg-accent-cyan\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"AI 引擎: DeepSeek\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 61,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 54,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 53,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 27,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen\",\n children: children\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 68,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(MobileNav, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 74,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 23,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 22,\n columnNumber: 5\n }, this);\n}\nfunction MobileNav() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"fixed bottom-0 left-0 right-0 md:hidden z-50 bg-bg-secondary/95 backdrop-blur-xl border-t border-white/[0.04]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-around py-2 pb-[max(0.5rem,env(safe-area-inset-bottom))]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(MobileNavItem, {\n href: \"/\",\n label: \"总览\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(DashboardIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 85,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 84,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(MobileNavItem, {\n href: \"/recommendations\",\n label: \"推荐\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(TargetIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 88,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 87,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(MobileNavItem, {\n href: \"/sectors\",\n label: \"板块\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(FireIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 91,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 90,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(MobileNavItem, {\n href: \"/chat\",\n label: \"对话\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ChatIcon, {}, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 94,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 93,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 83,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 82,\n columnNumber: 5\n }, this);\n}\nfunction MobileNavItem({ href, label, children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: href,\n className: \"flex flex-col items-center gap-1 text-text-muted hover:text-text-primary transition-colors active:scale-95\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-lg\",\n children: children\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 107,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-medium\",\n children: label\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 108,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 103,\n columnNumber: 5\n }, this);\n}\nfunction SideNavItem({ href, icon, label }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: href,\n className: \"flex items-center gap-3 px-4 py-2.5 rounded-xl text-sm text-text-secondary hover:text-text-primary hover:bg-white/[0.04] transition-all duration-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-base opacity-70\",\n children: icon\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 119,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: label\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 120,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 115,\n columnNumber: 5\n }, this);\n}\n/* SVG Icons - clean, minimal */ function DashboardIcon() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.8\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"3\",\n y: \"3\",\n width: \"7\",\n height: \"7\",\n rx: \"1.5\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 129,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"14\",\n y: \"3\",\n width: \"7\",\n height: \"7\",\n rx: \"1.5\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 130,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"3\",\n y: \"14\",\n width: \"7\",\n height: \"7\",\n rx: \"1.5\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 131,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"14\",\n y: \"14\",\n width: \"7\",\n height: \"7\",\n rx: \"1.5\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 132,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 128,\n columnNumber: 5\n }, this);\n}\nfunction TargetIcon() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.8\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 140,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"6\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 141,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"2\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 142,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 139,\n columnNumber: 5\n }, this);\n}\nfunction FireIcon() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.8\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 2c.5 2.5-.5 5-2 7 1 0 2.5.5 3 2.5.5-2 2-3 3-4-1 3-1 6-4 8.5-1.5 1-3.5 1.5-5 1-1.5-.5-2.5-2-2.5-3.5 0-3 3-5 5-7.5C10 5 11 3.5 12 2z\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 150,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 149,\n columnNumber: 5\n }, this);\n}\nfunction ChatIcon() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.8\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 158,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx\",\n lineNumber: 157,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixRQUFPO1FBQUtDLFNBQVE7UUFBWUMsTUFBSztRQUFPQyxRQUFPO1FBQWVDLGFBQVk7UUFBTUMsZUFBYztRQUFRQyxnQkFBZTtrQkFDdkksNEVBQUNTO1lBQUtDLEdBQUU7Ozs7Ozs7Ozs7O0FBR2Q7QUFFQSxTQUFTdkI7SUFDUCxxQkFDRSw4REFBQ007UUFBSTVCLE9BQU07UUFBSzZCLFFBQU87UUFBS0MsU0FBUTtRQUFZQyxNQUFLO1FBQU9DLFFBQU87UUFBZUMsYUFBWTtRQUFNQyxlQUFjO1FBQVFDLGdCQUFlO2tCQUN2SSw0RUFBQ1M7WUFBS0MsR0FBRTs7Ozs7Ozs7Ozs7QUFHZCIsInNvdXJjZXMiOlsid2VicGFjazovL2FzdG9jay1hZ2VudC1mcm9udGVuZC8uL3NyYy9hcHAvbGF5b3V0LnRzeD81N2E5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWV0YWRhdGEsIFZpZXdwb3J0IH0gZnJvbSBcIm5leHRcIjtcbmltcG9ydCBcIi4vZ2xvYmFscy5jc3NcIjtcblxuZXhwb3J0IGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YSA9IHtcbiAgdGl0bGU6IFwiRHJhZ29uIEFJIEFnZW50XCIsXG4gIGRlc2NyaXB0aW9uOiBcIuWfuuS6jui1hOmHkempseWKqOeahOWbm+Wxgua8j+aWl+aooeWei++8jOebmOS4reWunuaXtuWIhuaekOaOqOiNkEHogqFcIixcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydDogVmlld3BvcnQgPSB7XG4gIHdpZHRoOiBcImRldmljZS13aWR0aFwiLFxuICBpbml0aWFsU2NhbGU6IDEsXG4gIG1heGltdW1TY2FsZTogMSxcbiAgdXNlclNjYWxhYmxlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvb3RMYXlvdXQoe1xuICBjaGlsZHJlbixcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8aHRtbCBsYW5nPVwiemgtQ05cIj5cbiAgICAgIDxib2R5IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1iZy1wcmltYXJ5IHRleHQtdGV4dC1wcmltYXJ5IGZvbnQtZGlzcGxheVwiPlxuICAgICAgICB7LyogRGVza3RvcDogc2lkZWJhciArIG1haW4gKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtaW4taC1zY3JlZW5cIj5cbiAgICAgICAgICB7LyogRGVza3RvcCBzaWRlYmFyICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBmbGV4LWNvbCB3LTYwIGdsYXNzLXNpZGViYXIgZml4ZWQgaW5zZXQteS0wIGxlZnQtMCB6LTQwXCI+XG4gICAgICAgICAgICB7LyogQnJhbmQgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB4LTYgcHQtNyBwYi01XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggcm91bmRlZC1sZyBiZy1ncmFkaWVudC10by1iciBmcm9tLWFtYmVyLTUwMCB0by1hbWJlci02MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1zbSBmb250LWJvbGQgdGV4dC13aGl0ZSBzaGFkb3ctZ2xvdy1zbVwiPlxuICAgICAgICAgICAgICAgICAgRFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+RHJhZ29uIEFJIEFnZW50PC9oMT5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC10ZXh0LW11dGVkIG10LTAuNSBmb250LWxpZ2h0IHRyYWNraW5nLXdpZGVcIj7otYTph5HpqbHliqggwrcg5Zub5bGC5ryP5paX5qih5Z6LPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogRGl2aWRlciAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtNSBoLXB4IGJnLWdyYWRpZW50LXRvLXIgZnJvbS10cmFuc3BhcmVudCB2aWEtd2hpdGUvWzAuMDZdIHRvLXRyYW5zcGFyZW50XCIgLz5cblxuICAgICAgICAgICAgey8qIE5hdiAqL31cbiAgICAgICAgICAgIDxuYXYgY2xhc3NOYW1lPVwiZmxleC0xIHB5LTUgcHgtMyBzcGFjZS15LTFcIj5cbiAgICAgICAgICAgICAgPFNpZGVOYXZJdGVtIGhyZWY9XCIvXCIgaWNvbj17PERhc2hib2FyZEljb24gLz59IGxhYmVsPVwi5oC76KeIXCIgLz5cbiAgICAgICAgICAgICAgPFNpZGVOYXZJdGVtIGhyZWY9XCIvcmVjb21tZW5kYXRpb25zXCIgaWNvbj17PFRhcmdldEljb24gLz59IGxhYmVsPVwi5o6o6I2Q5YiX6KGoXCIgLz5cbiAgICAgICAgICAgICAgPFNpZGVOYXZJdGVtIGhyZWY9XCIvc2VjdG9yc1wiIGljb249ezxGaXJlSWNvbiAvPn0gbGFiZWw9XCLmnb/lnZfliIbmnpBcIiAvPlxuICAgICAgICAgICAgICA8U2lkZU5hdkl0ZW0gaHJlZj1cIi9jaGF0XCIgaWNvbj17PENoYXRJY29uIC8+fSBsYWJlbD1cIkFJIOWvueivnVwiIC8+XG4gICAgICAgICAgICA8L25hdj5cblxuICAgICAgICAgICAgey8qIEZvb3RlciAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHgtNiBweS01IGJvcmRlci10IGJvcmRlci13aGl0ZS9bMC4wNF1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtdGV4dC1tdXRlZCBsZWFkaW5nLXJlbGF4ZWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidy0xIGgtMSByb3VuZGVkLWZ1bGwgYmctZW1lcmFsZC01MDBcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+VHVzaGFyZSBQcm8gKyDohb7orq/ooYzmg4U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3LTEgaC0xIHJvdW5kZWQtZnVsbCBiZy1hY2NlbnQtY3lhblwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5BSSDlvJXmk446IERlZXBTZWVrPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG5cbiAgICAgICAgICB7LyogTWFpbiBjb250ZW50IGFyZWEgKi99XG4gICAgICAgICAgPG1haW4gY2xhc3NOYW1lPVwiZmxleC0xIG1kOm1sLTYwIHBiLTE2IG1kOnBiLTAgbWluLWgtc2NyZWVuXCI+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9tYWluPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogTW9iaWxlIGJvdHRvbSBuYXYgKi99XG4gICAgICAgIDxNb2JpbGVOYXYgLz5cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gICk7XG59XG5cbmZ1bmN0aW9uIE1vYmlsZU5hdigpIHtcbiAgcmV0dXJuIChcbiAgICA8bmF2IGNsYXNzTmFtZT1cImZpeGVkIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIG1kOmhpZGRlbiB6LTUwIGJnLWJnLXNlY29uZGFyeS85NSBiYWNrZHJvcC1ibHVyLXhsIGJvcmRlci10IGJvcmRlci13aGl0ZS9bMC4wNF1cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWFyb3VuZCBweS0yIHBiLVttYXgoMC41cmVtLGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSldXCI+XG4gICAgICAgIDxNb2JpbGVOYXZJdGVtIGhyZWY9XCIvXCIgbGFiZWw9XCLmgLvop4hcIj5cbiAgICAgICAgICA8RGFzaGJvYXJkSWNvbiAvPlxuICAgICAgICA8L01vYmlsZU5hdkl0ZW0+XG4gICAgICAgIDxNb2JpbGVOYXZJdGVtIGhyZWY9XCIvcmVjb21tZW5kYXRpb25zXCIgbGFiZWw9XCLmjqjojZBcIj5cbiAgICAgICAgICA8VGFyZ2V0SWNvbiAvPlxuICAgICAgICA8L01vYmlsZU5hdkl0ZW0+XG4gICAgICAgIDxNb2JpbGVOYXZJdGVtIGhyZWY9XCIvc2VjdG9yc1wiIGxhYmVsPVwi5p2/5Z2XXCI+XG4gICAgICAgICAgPEZpcmVJY29uIC8+XG4gICAgICAgIDwvTW9iaWxlTmF2SXRlbT5cbiAgICAgICAgPE1vYmlsZU5hdkl0ZW0gaHJlZj1cIi9jaGF0XCIgbGFiZWw9XCLlr7nor51cIj5cbiAgICAgICAgICA8Q2hhdEljb24gLz5cbiAgICAgICAgPC9Nb2JpbGVOYXZJdGVtPlxuICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIE1vYmlsZU5hdkl0ZW0oeyBocmVmLCBsYWJlbCwgY2hpbGRyZW4gfTogeyBocmVmOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtocmVmfVxuICAgICAgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC10ZXh0LW11dGVkIGhvdmVyOnRleHQtdGV4dC1wcmltYXJ5IHRyYW5zaXRpb24tY29sb3JzIGFjdGl2ZTpzY2FsZS05NVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZ1wiPntjaGlsZHJlbn08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtXCI+e2xhYmVsfTwvc3Bhbj5cbiAgICA8L2E+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNpZGVOYXZJdGVtKHsgaHJlZiwgaWNvbiwgbGFiZWwgfTogeyBocmVmOiBzdHJpbmc7IGljb246IFJlYWN0LlJlYWN0Tm9kZTsgbGFiZWw6IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBweC00IHB5LTIuNSByb3VuZGVkLXhsIHRleHQtc20gdGV4dC10ZXh0LXNlY29uZGFyeSBob3Zlcjp0ZXh0LXRleHQtcHJpbWFyeSBob3ZlcjpiZy13aGl0ZS9bMC4wNF0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugb3BhY2l0eS03MFwiPntpY29ufTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2xhYmVsfTwvc3Bhbj5cbiAgICA8L2E+XG4gICk7XG59XG5cbi8qIFNWRyBJY29ucyAtIGNsZWFuLCBtaW5pbWFsICovXG5mdW5jdGlvbiBEYXNoYm9hcmRJY29uKCkge1xuICByZXR1cm4gKFxuICAgIDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCIxLjhcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCI+XG4gICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiN1wiIHJ4PVwiMS41XCIgLz5cbiAgICAgIDxyZWN0IHg9XCIxNFwiIHk9XCIzXCIgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiN1wiIHJ4PVwiMS41XCIgLz5cbiAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjE0XCIgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiN1wiIHJ4PVwiMS41XCIgLz5cbiAgICAgIDxyZWN0IHg9XCIxNFwiIHk9XCIxNFwiIHdpZHRoPVwiN1wiIGhlaWdodD1cIjdcIiByeD1cIjEuNVwiIC8+XG4gICAgPC9zdmc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRhcmdldEljb24oKSB7XG4gIHJldHVybiAoXG4gICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD1cIjEuOFwiIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiAvPlxuICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCI2XCIgLz5cbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMlwiIC8+XG4gICAgPC9zdmc+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZpcmVJY29uKCkge1xuICByZXR1cm4gKFxuICAgIDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCIxLjhcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCI+XG4gICAgICA8cGF0aCBkPVwiTTEyIDJjLjUgMi41LS41IDUtMiA3IDEgMCAyLjUuNSAzIDIuNS41LTIgMi0zIDMtNC0xIDMtMSA2LTQgOC41LTEuNSAxLTMuNSAxLjUtNSAxLTEuNS0uNS0yLjUtMi0yLjUtMy41IDAtMyAzLTUgNS03LjVDMTAgNSAxMSAzLjUgMTIgMnpcIiAvPlxuICAgIDwvc3ZnPlxuICApO1xufVxuXG5mdW5jdGlvbiBDaGF0SWNvbigpIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZVdpZHRoPVwiMS44XCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgPHBhdGggZD1cIk0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnpcIiAvPlxuICAgIDwvc3ZnPlxuICApO1xufVxuIl0sIm5hbWVzIjpbIm1ldGFkYXRhIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInZpZXdwb3J0Iiwid2lkdGgiLCJpbml0aWFsU2NhbGUiLCJtYXhpbXVtU2NhbGUiLCJ1c2VyU2NhbGFibGUiLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJodG1sIiwibGFuZyIsImJvZHkiLCJjbGFzc05hbWUiLCJkaXYiLCJhc2lkZSIsImgxIiwicCIsIm5hdiIsIlNpZGVOYXZJdGVtIiwiaHJlZiIsImljb24iLCJEYXNoYm9hcmRJY29uIiwibGFiZWwiLCJUYXJnZXRJY29uIiwiRmlyZUljb24iLCJDaGF0SWNvbiIsInNwYW4iLCJtYWluIiwiTW9iaWxlTmF2IiwiTW9iaWxlTmF2SXRlbSIsImEiLCJzdmciLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwicmVjdCIsIngiLCJ5IiwicngiLCJjaXJjbGUiLCJjeCIsImN5IiwiciIsInBhdGgiLCJkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./src/app/layout.tsx\n");
/***/ }),
/***/ "(rsc)/./src/app/recommendations/page.tsx":
/*!******************************************!*\
!*** ./src/app/recommendations/page.tsx ***!
\******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`/Users/aaron/source_code/astock-agent/frontend/src/app/recommendations/page.tsx#default`));
/***/ })
};
;
// load runtime
var __webpack_require__ = require("../../webpack-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Frecommendations%2Fpage&page=%2Frecommendations%2Fpage&appPaths=%2Frecommendations%2Fpage&pagePath=private-next-app-dir%2Frecommendations%2Fpage.tsx&appDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Faaron%2Fsource_code%2Fastock-agent%2Ffrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
module.exports = __webpack_exports__;
})();