From b52a9befeec7fd2015f7794cc5b3636636addda0 Mon Sep 17 00:00:00 2001 From: shenjianZ Date: Sat, 21 Jun 2025 08:46:45 +0800 Subject: [PATCH] data-collector fixed --- data-collector/stock_crawler.log | 374 ++++++++++++- data-collector/stock_crawler.py | 147 ++++- .../assets/aiService-C9Fe_Phd-d1533d53.js | 40 ++ docs/dist/assets/index-64e04f5b.css | 1 + docs/dist/assets/main-f65d595e.js | 420 +++++++++++++++ docs/dist/config/ai.json | 59 +++ docs/dist/config/site.en.yaml | 133 +++++ docs/dist/config/site.yaml | 164 ++++++ docs/dist/docs/en/guide.md | 83 +++ docs/dist/docs/en/guide/backend.md | 500 ++++++++++++++++++ docs/dist/docs/en/guide/data-collector.md | 179 +++++++ docs/dist/docs/en/guide/frontend.md | 205 +++++++ docs/dist/docs/en/guide/spark-processor.md | 330 ++++++++++++ docs/dist/docs/en/index.md | 64 +++ docs/dist/docs/zh-cn/guide.md | 87 +++ docs/dist/docs/zh-cn/guide/backend.md | 280 ++++++++++ docs/dist/docs/zh-cn/guide/data-collector.md | 179 +++++++ docs/dist/docs/zh-cn/guide/frontend.md | 248 +++++++++ docs/dist/docs/zh-cn/guide/spark-processor.md | 422 +++++++++++++++ docs/dist/docs/zh-cn/index.md | 58 ++ docs/dist/images/logo.png | Bin 0 -> 12463 bytes docs/dist/images/placeholder.md | 25 + docs/dist/index.html | 16 + docs/package-lock.json | 8 +- docs/package.json | 2 +- docs/public/config/site.en.yaml | 61 ++- docs/public/config/site.yaml | 55 +- docs/新建 文本文档.txt | 14 + 28 files changed, 4097 insertions(+), 57 deletions(-) create mode 100644 docs/dist/assets/aiService-C9Fe_Phd-d1533d53.js create mode 100644 docs/dist/assets/index-64e04f5b.css create mode 100644 docs/dist/assets/main-f65d595e.js create mode 100644 docs/dist/config/ai.json create mode 100644 docs/dist/config/site.en.yaml create mode 100644 docs/dist/config/site.yaml create mode 100644 docs/dist/docs/en/guide.md create mode 100644 docs/dist/docs/en/guide/backend.md create mode 100644 docs/dist/docs/en/guide/data-collector.md create mode 100644 docs/dist/docs/en/guide/frontend.md create mode 100644 docs/dist/docs/en/guide/spark-processor.md create mode 100644 docs/dist/docs/en/index.md create mode 100644 docs/dist/docs/zh-cn/guide.md create mode 100644 docs/dist/docs/zh-cn/guide/backend.md create mode 100644 docs/dist/docs/zh-cn/guide/data-collector.md create mode 100644 docs/dist/docs/zh-cn/guide/frontend.md create mode 100644 docs/dist/docs/zh-cn/guide/spark-processor.md create mode 100644 docs/dist/docs/zh-cn/index.md create mode 100644 docs/dist/images/logo.png create mode 100644 docs/dist/images/placeholder.md create mode 100644 docs/dist/index.html create mode 100644 docs/新建 文本文档.txt diff --git a/data-collector/stock_crawler.log b/data-collector/stock_crawler.log index 6933ab4..0434bf5 100644 --- a/data-collector/stock_crawler.log +++ b/data-collector/stock_crawler.log @@ -1,17 +1,357 @@ -2025-06-04 18:03:49,612 - INFO - 数据库连接成功 -2025-06-04 18:03:49,613 - INFO - 股票数据采集器启动 -2025-06-04 18:03:49,613 - INFO - 定时任务已启动,每 5 分钟采集一次 -2025-06-04 18:03:49,613 - INFO - 开始执行股票数据采集...image.png -2025-06-04 18:03:49,706 - INFO - 成功获取股票 sz300630 数据: 普利退 -2025-06-04 18:03:50,248 - INFO - 成功获取股票 sh600998 数据: 九州通 -2025-06-04 18:03:50,791 - INFO - 成功获取股票 sh600371 数据: 万向德农 -2025-06-04 18:03:51,331 - INFO - 成功获取股票 sz000876 数据: 新 希 望 -2025-06-04 18:03:51,873 - INFO - 成功获取股票 sz002714 数据: 牧原股份 -2025-06-04 18:03:52,414 - INFO - 成功获取股票 sh600519 数据: 贵州茅台 -2025-06-04 18:03:52,956 - INFO - 成功获取股票 sz000858 数据: 五 粮 液 -2025-06-04 18:03:53,498 - INFO - 成功获取股票 sh600887 数据: 伊利股份 -2025-06-04 18:03:54,038 - INFO - 成功获取股票 sz002304 数据: 洋河股份 -2025-06-04 18:03:54,580 - INFO - 成功获取股票 sh600036 数据: 招商银行 -2025-06-04 18:03:55,081 - INFO - 本次采集完成,共获取 10 只股票数据 -2025-06-04 18:03:55,106 - INFO - 成功保存 10 条股票数据到数据库 -2025-06-04 18:03:55,106 - INFO - 数据采集完成,共处理 10 只股票 +2025-06-18 08:46:19,433 - INFO - 数据库连接成功 +2025-06-18 08:46:19,433 - INFO - 股票数据采集器启动 +2025-06-18 08:46:19,434 - INFO - 定时任务已启动,每 5 分钟采集一次 +2025-06-18 08:46:19,434 - INFO - 开始执行股票数据采集... +2025-06-18 08:46:19,537 - INFO - 成功获取股票 sz300189 数据: 神农种业 +2025-06-18 08:46:20,127 - INFO - 成功获取股票 sz000713 数据: 丰乐种业 +2025-06-18 08:46:20,719 - INFO - 成功获取股票 sh600313 数据: 农发种业 +2025-06-18 08:46:21,393 - INFO - 成功获取股票 bj837403 数据: 康农种业 +2025-06-18 08:46:22,105 - INFO - 成功获取股票 sz200505 数据: 京粮B +2025-06-18 08:46:22,754 - INFO - 成功获取股票 sz300268 数据: *ST佳沃 +2025-06-18 08:46:23,483 - INFO - 成功获取股票 sz000930 数据: 中粮科技 +2025-06-18 08:46:24,082 - INFO - 成功获取股票 sz002299 数据: 圣农发展 +2025-06-18 08:46:24,703 - INFO - 成功获取股票 sh600371 数据: 万向德农 +2025-06-18 08:46:25,297 - INFO - 成功获取股票 sh600598 数据: 北大荒 +2025-06-18 08:46:25,902 - INFO - 成功获取股票 sh603609 数据: 禾丰股份 +2025-06-18 08:46:26,508 - INFO - 成功获取股票 bj831087 数据: 秋乐种业 +2025-06-18 08:46:27,113 - INFO - 成功获取股票 sh603363 数据: 傲农生物 +2025-06-18 08:46:27,721 - INFO - 成功获取股票 sh603336 数据: 宏辉果蔬 +2025-06-18 08:46:28,304 - INFO - 成功获取股票 sh600354 数据: 敦煌种业 +2025-06-18 08:46:28,890 - INFO - 成功获取股票 sz002385 数据: 大北农 +2025-06-18 08:46:29,466 - INFO - 成功获取股票 sz000048 数据: 京基智农 +2025-06-18 08:46:30,061 - INFO - 成功获取股票 sh600251 数据: 冠农股份 +2025-06-18 08:46:30,673 - INFO - 成功获取股票 sz002321 数据: 华英农业 +2025-06-18 08:46:31,278 - INFO - 成功获取股票 sz000505 数据: 京粮控股 +2025-06-18 08:46:31,875 - INFO - 成功获取股票 sz001366 数据: 播恩集团 +2025-06-18 08:46:32,492 - INFO - 成功获取股票 sz002772 数据: 众兴菌业 +2025-06-18 08:46:33,083 - INFO - 成功获取股票 sz002041 数据: 登海种业 +2025-06-18 08:46:33,672 - INFO - 成功获取股票 sh600127 数据: 金健米业 +2025-06-18 08:46:34,277 - INFO - 成功获取股票 sz002548 数据: 金新农 +2025-06-18 08:46:34,865 - INFO - 成功获取股票 sh605296 数据: 神农集团 +2025-06-18 08:46:35,464 - INFO - 成功获取股票 sh600359 数据: 新农开发 +2025-06-18 08:46:36,062 - INFO - 成功获取股票 sh601952 数据: 苏垦农发 +2025-06-18 08:46:36,661 - INFO - 成功获取股票 sh600975 数据: 新五丰 +2025-06-18 08:46:37,270 - INFO - 成功获取股票 sz300505 数据: 川金诺 +2025-06-18 08:46:37,859 - INFO - 成功获取股票 sh600141 数据: 兴发集团 +2025-06-18 08:46:38,459 - INFO - 成功获取股票 sz000893 数据: 亚钾国际 +2025-06-18 08:46:39,058 - INFO - 成功获取股票 sh600691 数据: 阳煤化工 +2025-06-18 08:46:39,645 - INFO - 成功获取股票 sh600470 数据: 六国化工 +2025-06-18 08:46:40,233 - INFO - 成功获取股票 sh000912 数据: 300消费 +2025-06-18 08:46:40,839 - INFO - 成功获取股票 sz000408 数据: 藏格矿业 +2025-06-18 08:46:41,437 - INFO - 成功获取股票 sz000902 数据: 新洋丰 +2025-06-18 08:46:42,043 - INFO - 成功获取股票 sz002539 数据: 云图控股 +2025-06-18 08:46:42,655 - INFO - 成功获取股票 sz002599 数据: 盛通股份 +2025-06-18 08:46:43,236 - INFO - 成功获取股票 sz002545 数据: 东方铁塔 +2025-06-18 08:46:43,847 - INFO - 成功获取股票 sz300387 数据: 富邦科技 +2025-06-18 08:46:44,446 - INFO - 成功获取股票 sz002274 数据: 华昌化工 +2025-06-18 08:46:45,050 - INFO - 成功获取股票 sz002470 数据: 金正大 +2025-06-18 08:46:45,655 - INFO - 成功获取股票 sz002538 数据: 司尔特 +2025-06-18 08:46:46,247 - INFO - 成功获取股票 sz000731 数据: 四川美丰 +2025-06-18 08:46:46,834 - INFO - 成功获取股票 sh600078 数据: 澄星股份 +2025-06-18 08:46:47,422 - INFO - 成功获取股票 sh600227 数据: 赤天化 +2025-06-18 08:46:48,026 - INFO - 成功获取股票 sh603395 数据: 红四方 +2025-06-18 08:46:48,628 - INFO - 成功获取股票 sz002588 数据: 史丹利 +2025-06-18 08:46:49,206 - INFO - 成功获取股票 sz000422 数据: 湖北宜化 +2025-06-18 08:46:49,787 - INFO - 成功获取股票 sz002556 数据: 辉隆股份 +2025-06-18 08:46:50,401 - INFO - 成功获取股票 sz002312 数据: 川发龙蟒 +2025-06-18 08:46:50,982 - INFO - 成功获取股票 sz002170 数据: 芭田股份 +2025-06-18 08:46:51,597 - INFO - 成功获取股票 sz000792 数据: 盐湖股份 +2025-06-18 08:46:52,201 - INFO - 成功获取股票 sh600096 数据: 云天化 +2025-06-18 08:46:52,782 - INFO - 成功获取股票 sz001231 数据: 农心科技 +2025-06-18 08:46:53,372 - INFO - 成功获取股票 sz002731 数据: 萃华珠宝 +2025-06-18 08:46:53,979 - INFO - 成功获取股票 sz200553 数据: 安道麦B +2025-06-18 08:46:54,584 - INFO - 成功获取股票 sh603810 数据: 丰山集团 +2025-06-18 08:46:55,183 - INFO - 成功获取股票 sh603970 数据: 中农立华 +2025-06-18 08:46:55,800 - INFO - 成功获取股票 sz301035 数据: 润丰股份 +2025-06-18 08:46:56,414 - INFO - 成功获取股票 sz002868 数据: *ST绿康 +2025-06-18 08:46:57,026 - INFO - 成功获取股票 sz003042 数据: 中农联合 +2025-06-18 08:46:57,619 - INFO - 成功获取股票 sz002391 数据: 长青股份 +2025-06-18 08:46:58,222 - INFO - 成功获取股票 bj870866 数据: 绿亨科技 +2025-06-18 08:46:58,805 - INFO - 成功获取股票 sz301665 数据: 泰禾股份 +2025-06-18 08:46:59,412 - INFO - 成功获取股票 sh600486 数据: 扬农化工 +2025-06-18 08:46:59,913 - INFO - 本次采集完成,共获取 67 只股票数据 +2025-06-18 08:46:59,925 - INFO - 插入股票 sz300189 数据 +2025-06-18 08:46:59,928 - INFO - 插入股票 sz000713 数据 +2025-06-18 08:46:59,930 - INFO - 插入股票 sh600313 数据 +2025-06-18 08:46:59,932 - INFO - 插入股票 bj837403 数据 +2025-06-18 08:46:59,934 - INFO - 插入股票 sz200505 数据 +2025-06-18 08:46:59,936 - INFO - 插入股票 sz300268 数据 +2025-06-18 08:46:59,939 - INFO - 插入股票 sz000930 数据 +2025-06-18 08:46:59,941 - INFO - 插入股票 sz002299 数据 +2025-06-18 08:46:59,943 - INFO - 插入股票 sh600371 数据 +2025-06-18 08:46:59,946 - INFO - 插入股票 sh600598 数据 +2025-06-18 08:46:59,947 - INFO - 插入股票 sh603609 数据 +2025-06-18 08:46:59,949 - INFO - 插入股票 bj831087 数据 +2025-06-18 08:46:59,951 - INFO - 插入股票 sh603363 数据 +2025-06-18 08:46:59,953 - INFO - 插入股票 sh603336 数据 +2025-06-18 08:46:59,955 - INFO - 插入股票 sh600354 数据 +2025-06-18 08:46:59,956 - INFO - 插入股票 sz002385 数据 +2025-06-18 08:46:59,959 - INFO - 插入股票 sz000048 数据 +2025-06-18 08:46:59,961 - INFO - 插入股票 sh600251 数据 +2025-06-18 08:46:59,963 - INFO - 插入股票 sz002321 数据 +2025-06-18 08:46:59,964 - INFO - 插入股票 sz000505 数据 +2025-06-18 08:46:59,966 - INFO - 插入股票 sz001366 数据 +2025-06-18 08:46:59,968 - INFO - 插入股票 sz002772 数据 +2025-06-18 08:46:59,969 - INFO - 插入股票 sz002041 数据 +2025-06-18 08:46:59,970 - INFO - 插入股票 sh600127 数据 +2025-06-18 08:46:59,972 - INFO - 插入股票 sz002548 数据 +2025-06-18 08:46:59,974 - INFO - 插入股票 sh605296 数据 +2025-06-18 08:46:59,976 - INFO - 插入股票 sh600359 数据 +2025-06-18 08:46:59,977 - INFO - 插入股票 sh601952 数据 +2025-06-18 08:46:59,978 - INFO - 插入股票 sh600975 数据 +2025-06-18 08:46:59,980 - INFO - 插入股票 sz300505 数据 +2025-06-18 08:46:59,982 - INFO - 插入股票 sh600141 数据 +2025-06-18 08:46:59,984 - INFO - 插入股票 sz000893 数据 +2025-06-18 08:46:59,985 - INFO - 插入股票 sh600691 数据 +2025-06-18 08:46:59,987 - INFO - 插入股票 sh600470 数据 +2025-06-18 08:46:59,988 - INFO - 插入股票 sh000912 数据 +2025-06-18 08:46:59,990 - INFO - 插入股票 sz000408 数据 +2025-06-18 08:46:59,992 - INFO - 插入股票 sz000902 数据 +2025-06-18 08:46:59,993 - INFO - 插入股票 sz002539 数据 +2025-06-18 08:46:59,995 - INFO - 插入股票 sz002599 数据 +2025-06-18 08:46:59,997 - INFO - 插入股票 sz002545 数据 +2025-06-18 08:46:59,998 - INFO - 插入股票 sz300387 数据 +2025-06-18 08:47:00,000 - INFO - 插入股票 sz002274 数据 +2025-06-18 08:47:00,002 - INFO - 插入股票 sz002470 数据 +2025-06-18 08:47:00,003 - INFO - 插入股票 sz002538 数据 +2025-06-18 08:47:00,004 - INFO - 插入股票 sz000731 数据 +2025-06-18 08:47:00,005 - INFO - 插入股票 sh600078 数据 +2025-06-18 08:47:00,007 - INFO - 插入股票 sh600227 数据 +2025-06-18 08:47:00,009 - INFO - 插入股票 sh603395 数据 +2025-06-18 08:47:00,010 - INFO - 插入股票 sz002588 数据 +2025-06-18 08:47:00,012 - INFO - 插入股票 sz000422 数据 +2025-06-18 08:47:00,014 - INFO - 插入股票 sz002556 数据 +2025-06-18 08:47:00,015 - INFO - 插入股票 sz002312 数据 +2025-06-18 08:47:00,017 - INFO - 插入股票 sz002170 数据 +2025-06-18 08:47:00,019 - INFO - 插入股票 sz000792 数据 +2025-06-18 08:47:00,021 - INFO - 插入股票 sh600096 数据 +2025-06-18 08:47:00,022 - INFO - 插入股票 sz001231 数据 +2025-06-18 08:47:00,024 - INFO - 插入股票 sz002731 数据 +2025-06-18 08:47:00,026 - INFO - 插入股票 sz200553 数据 +2025-06-18 08:47:00,028 - INFO - 插入股票 sh603810 数据 +2025-06-18 08:47:00,031 - INFO - 插入股票 sh603970 数据 +2025-06-18 08:47:00,032 - INFO - 插入股票 sz301035 数据 +2025-06-18 08:47:00,034 - INFO - 插入股票 sz002868 数据 +2025-06-18 08:47:00,035 - INFO - 插入股票 sz003042 数据 +2025-06-18 08:47:00,037 - INFO - 插入股票 sz002391 数据 +2025-06-18 08:47:00,038 - INFO - 插入股票 bj870866 数据 +2025-06-18 08:47:00,040 - INFO - 插入股票 sz301665 数据 +2025-06-18 08:47:00,042 - INFO - 插入股票 sh600486 数据 +2025-06-18 08:47:00,048 - INFO - 成功处理 67 条股票数据到数据库 +2025-06-18 08:47:00,049 - INFO - 数据采集完成,共处理 67 只股票 +2025-06-18 08:51:20,157 - INFO - 开始执行股票数据采集... +2025-06-18 08:51:20,278 - INFO - 成功获取股票 sz300189 数据: 神农种业 +2025-06-18 08:51:20,886 - INFO - 成功获取股票 sz000713 数据: 丰乐种业 +2025-06-18 08:51:21,481 - INFO - 成功获取股票 sh600313 数据: 农发种业 +2025-06-18 08:51:22,094 - INFO - 成功获取股票 bj837403 数据: 康农种业 +2025-06-18 08:51:22,722 - INFO - 成功获取股票 sz200505 数据: 京粮B +2025-06-18 08:51:23,375 - INFO - 成功获取股票 sz300268 数据: *ST佳沃 +2025-06-18 08:51:23,978 - INFO - 成功获取股票 sz000930 数据: 中粮科技 +2025-06-18 08:51:24,672 - INFO - 成功获取股票 sz002299 数据: 圣农发展 +2025-06-18 08:51:25,277 - INFO - 成功获取股票 sh600371 数据: 万向德农 +2025-06-18 08:51:25,906 - INFO - 成功获取股票 sh600598 数据: 北大荒 +2025-06-18 08:51:26,508 - INFO - 成功获取股票 sh603609 数据: 禾丰股份 +2025-06-18 08:51:27,112 - INFO - 成功获取股票 bj831087 数据: 秋乐种业 +2025-06-18 08:51:27,692 - INFO - 成功获取股票 sh603363 数据: 傲农生物 +2025-06-18 08:51:28,282 - INFO - 成功获取股票 sh603336 数据: 宏辉果蔬 +2025-06-18 08:51:28,897 - INFO - 成功获取股票 sh600354 数据: 敦煌种业 +2025-06-18 08:51:29,502 - INFO - 成功获取股票 sz002385 数据: 大北农 +2025-06-18 08:51:30,081 - INFO - 成功获取股票 sz000048 数据: 京基智农 +2025-06-18 08:51:30,671 - INFO - 成功获取股票 sh600251 数据: 冠农股份 +2025-06-18 08:51:31,266 - INFO - 成功获取股票 sz002321 数据: 华英农业 +2025-06-18 08:51:31,860 - INFO - 成功获取股票 sz000505 数据: 京粮控股 +2025-06-18 08:51:32,465 - INFO - 成功获取股票 sz001366 数据: 播恩集团 +2025-06-18 08:51:33,063 - INFO - 成功获取股票 sz002772 数据: 众兴菌业 +2025-06-18 08:51:33,669 - INFO - 成功获取股票 sz002041 数据: 登海种业 +2025-06-18 08:51:34,269 - INFO - 成功获取股票 sh600127 数据: 金健米业 +2025-06-18 08:51:34,875 - INFO - 成功获取股票 sz002548 数据: 金新农 +2025-06-18 08:51:35,457 - INFO - 成功获取股票 sh605296 数据: 神农集团 +2025-06-18 08:51:36,061 - INFO - 成功获取股票 sh600359 数据: 新农开发 +2025-06-18 08:51:36,660 - INFO - 成功获取股票 sh601952 数据: 苏垦农发 +2025-06-18 08:51:37,246 - INFO - 成功获取股票 sh600975 数据: 新五丰 +2025-06-18 08:51:37,832 - INFO - 成功获取股票 sz300505 数据: 川金诺 +2025-06-18 08:51:38,432 - INFO - 成功获取股票 sh600141 数据: 兴发集团 +2025-06-18 08:51:39,032 - INFO - 成功获取股票 sz000893 数据: 亚钾国际 +2025-06-18 08:51:39,630 - INFO - 成功获取股票 sh600691 数据: 阳煤化工 +2025-06-18 08:51:40,229 - INFO - 成功获取股票 sh600470 数据: 六国化工 +2025-06-18 08:51:40,814 - INFO - 成功获取股票 sh000912 数据: 300消费 +2025-06-18 08:51:41,407 - INFO - 成功获取股票 sz000408 数据: 藏格矿业 +2025-06-18 08:51:41,988 - INFO - 成功获取股票 sz000902 数据: 新洋丰 +2025-06-18 08:51:42,574 - INFO - 成功获取股票 sz002539 数据: 云图控股 +2025-06-18 08:51:43,175 - INFO - 成功获取股票 sz002599 数据: 盛通股份 +2025-06-18 08:51:43,752 - INFO - 成功获取股票 sz002545 数据: 东方铁塔 +2025-06-18 08:51:44,359 - INFO - 成功获取股票 sz300387 数据: 富邦科技 +2025-06-18 08:51:44,952 - INFO - 成功获取股票 sz002274 数据: 华昌化工 +2025-06-18 08:51:45,558 - INFO - 成功获取股票 sz002470 数据: 金正大 +2025-06-18 08:51:46,159 - INFO - 成功获取股票 sz002538 数据: 司尔特 +2025-06-18 08:51:46,749 - INFO - 成功获取股票 sz000731 数据: 四川美丰 +2025-06-18 08:51:47,345 - INFO - 成功获取股票 sh600078 数据: 澄星股份 +2025-06-18 08:51:47,924 - INFO - 成功获取股票 sh600227 数据: 赤天化 +2025-06-18 08:51:48,524 - INFO - 成功获取股票 sh603395 数据: 红四方 +2025-06-18 08:51:49,116 - INFO - 成功获取股票 sz002588 数据: 史丹利 +2025-06-18 08:51:49,718 - INFO - 成功获取股票 sz000422 数据: 湖北宜化 +2025-06-18 08:51:50,306 - INFO - 成功获取股票 sz002556 数据: 辉隆股份 +2025-06-18 08:51:50,888 - INFO - 成功获取股票 sz002312 数据: 川发龙蟒 +2025-06-18 08:51:51,496 - INFO - 成功获取股票 sz002170 数据: 芭田股份 +2025-06-18 08:51:52,089 - INFO - 成功获取股票 sz000792 数据: 盐湖股份 +2025-06-18 08:51:52,674 - INFO - 成功获取股票 sh600096 数据: 云天化 +2025-06-18 08:51:53,275 - INFO - 成功获取股票 sz001231 数据: 农心科技 +2025-06-18 08:51:53,875 - INFO - 成功获取股票 sz002731 数据: 萃华珠宝 +2025-06-18 08:51:54,481 - INFO - 成功获取股票 sz200553 数据: 安道麦B +2025-06-18 08:51:55,089 - INFO - 成功获取股票 sh603810 数据: 丰山集团 +2025-06-18 08:51:55,690 - INFO - 成功获取股票 sh603970 数据: 中农立华 +2025-06-18 08:51:56,283 - INFO - 成功获取股票 sz301035 数据: 润丰股份 +2025-06-18 08:51:56,889 - INFO - 成功获取股票 sz002868 数据: *ST绿康 +2025-06-18 08:51:57,486 - INFO - 成功获取股票 sz003042 数据: 中农联合 +2025-06-18 08:51:58,097 - INFO - 成功获取股票 sz002391 数据: 长青股份 +2025-06-18 08:51:58,694 - INFO - 成功获取股票 bj870866 数据: 绿亨科技 +2025-06-18 08:51:59,298 - INFO - 成功获取股票 sz301665 数据: 泰禾股份 +2025-06-18 08:51:59,895 - INFO - 成功获取股票 sh600486 数据: 扬农化工 +2025-06-18 08:52:00,396 - INFO - 本次采集完成,共获取 67 只股票数据 +2025-06-18 08:52:00,399 - ERROR - 保存数据到数据库失败: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 16 +2025-06-18 08:52:00,401 - INFO - 数据采集完成,共处理 67 只股票 +2025-06-18 08:53:22,391 - INFO - 收到停止信号,正在关闭... +2025-06-18 08:53:22,391 - INFO - 股票数据采集器已停止 +2025-06-18 08:53:24,484 - INFO - 数据库连接成功 +2025-06-18 08:53:24,484 - INFO - 股票数据采集器启动 +2025-06-18 08:53:24,485 - INFO - 定时任务已启动,每 5 分钟采集一次 +2025-06-18 08:53:24,486 - INFO - 开始执行股票数据采集... +2025-06-18 08:53:24,579 - INFO - 成功获取股票 sz300189 数据: 神农种业 +2025-06-18 08:53:25,181 - INFO - 成功获取股票 sz000713 数据: 丰乐种业 +2025-06-18 08:53:25,792 - INFO - 成功获取股票 sh600313 数据: 农发种业 +2025-06-18 08:53:26,396 - INFO - 成功获取股票 bj837403 数据: 康农种业 +2025-06-18 08:53:27,000 - INFO - 成功获取股票 sz200505 数据: 京粮B +2025-06-18 08:53:27,606 - INFO - 成功获取股票 sz300268 数据: *ST佳沃 +2025-06-18 08:53:28,218 - INFO - 成功获取股票 sz000930 数据: 中粮科技 +2025-06-18 08:53:28,819 - INFO - 成功获取股票 sz002299 数据: 圣农发展 +2025-06-18 08:53:29,422 - INFO - 成功获取股票 sh600371 数据: 万向德农 +2025-06-18 08:53:30,013 - INFO - 成功获取股票 sh600598 数据: 北大荒 +2025-06-18 08:53:30,597 - INFO - 成功获取股票 sh603609 数据: 禾丰股份 +2025-06-18 08:53:31,176 - INFO - 成功获取股票 bj831087 数据: 秋乐种业 +2025-06-18 08:53:31,771 - INFO - 成功获取股票 sh603363 数据: 傲农生物 +2025-06-18 08:53:32,366 - INFO - 成功获取股票 sh603336 数据: 宏辉果蔬 +2025-06-18 08:53:32,958 - INFO - 成功获取股票 sh600354 数据: 敦煌种业 +2025-06-18 08:53:33,568 - INFO - 成功获取股票 sz002385 数据: 大北农 +2025-06-18 08:53:34,176 - INFO - 成功获取股票 sz000048 数据: 京基智农 +2025-06-18 08:53:34,785 - INFO - 成功获取股票 sh600251 数据: 冠农股份 +2025-06-18 08:53:35,430 - INFO - 成功获取股票 sz002321 数据: 华英农业 +2025-06-18 08:53:36,098 - INFO - 成功获取股票 sz000505 数据: 京粮控股 +2025-06-18 08:53:36,715 - INFO - 成功获取股票 sz001366 数据: 播恩集团 +2025-06-18 08:53:37,300 - INFO - 成功获取股票 sz002772 数据: 众兴菌业 +2025-06-18 08:53:37,894 - INFO - 成功获取股票 sz002041 数据: 登海种业 +2025-06-18 08:53:38,524 - INFO - 成功获取股票 sh600127 数据: 金健米业 +2025-06-18 08:53:39,134 - INFO - 成功获取股票 sz002548 数据: 金新农 +2025-06-18 08:53:39,715 - INFO - 成功获取股票 sh605296 数据: 神农集团 +2025-06-18 08:53:40,328 - INFO - 成功获取股票 sh600359 数据: 新农开发 +2025-06-18 08:53:40,929 - INFO - 成功获取股票 sh601952 数据: 苏垦农发 +2025-06-18 08:53:41,542 - INFO - 成功获取股票 sh600975 数据: 新五丰 +2025-06-18 08:53:42,141 - INFO - 成功获取股票 sz300505 数据: 川金诺 +2025-06-18 08:53:42,736 - INFO - 成功获取股票 sh600141 数据: 兴发集团 +2025-06-18 08:53:43,341 - INFO - 成功获取股票 sz000893 数据: 亚钾国际 +2025-06-18 08:53:43,931 - INFO - 成功获取股票 sh600691 数据: 阳煤化工 +2025-06-18 08:53:44,532 - INFO - 成功获取股票 sh600470 数据: 六国化工 +2025-06-18 08:53:45,129 - INFO - 成功获取股票 sh000912 数据: 300消费 +2025-06-18 08:53:45,734 - INFO - 成功获取股票 sz000408 数据: 藏格矿业 +2025-06-18 08:53:46,337 - INFO - 成功获取股票 sz000902 数据: 新洋丰 +2025-06-18 08:53:46,928 - INFO - 成功获取股票 sz002539 数据: 云图控股 +2025-06-18 08:53:47,530 - INFO - 成功获取股票 sz002599 数据: 盛通股份 +2025-06-18 08:53:48,133 - INFO - 成功获取股票 sz002545 数据: 东方铁塔 +2025-06-18 08:53:48,727 - INFO - 成功获取股票 sz300387 数据: 富邦科技 +2025-06-18 08:53:49,329 - INFO - 成功获取股票 sz002274 数据: 华昌化工 +2025-06-18 08:53:49,935 - INFO - 成功获取股票 sz002470 数据: 金正大 +2025-06-18 08:53:50,535 - INFO - 成功获取股票 sz002538 数据: 司尔特 +2025-06-18 08:53:51,118 - INFO - 成功获取股票 sz000731 数据: 四川美丰 +2025-06-18 08:53:51,711 - INFO - 成功获取股票 sh600078 数据: 澄星股份 +2025-06-18 08:53:52,317 - INFO - 成功获取股票 sh600227 数据: 赤天化 +2025-06-18 08:53:52,907 - INFO - 成功获取股票 sh603395 数据: 红四方 +2025-06-18 08:53:53,495 - INFO - 成功获取股票 sz002588 数据: 史丹利 +2025-06-18 08:53:54,099 - INFO - 成功获取股票 sz000422 数据: 湖北宜化 +2025-06-18 08:53:54,679 - INFO - 成功获取股票 sz002556 数据: 辉隆股份 +2025-06-18 08:53:55,282 - INFO - 成功获取股票 sz002312 数据: 川发龙蟒 +2025-06-18 08:53:55,888 - INFO - 成功获取股票 sz002170 数据: 芭田股份 +2025-06-18 08:53:56,505 - INFO - 成功获取股票 sz000792 数据: 盐湖股份 +2025-06-18 08:53:57,112 - INFO - 成功获取股票 sh600096 数据: 云天化 +2025-06-18 08:53:57,699 - INFO - 成功获取股票 sz001231 数据: 农心科技 +2025-06-18 08:53:58,300 - INFO - 成功获取股票 sz002731 数据: 萃华珠宝 +2025-06-18 08:53:58,884 - INFO - 成功获取股票 sz200553 数据: 安道麦B +2025-06-18 08:53:59,488 - INFO - 成功获取股票 sh603810 数据: 丰山集团 +2025-06-18 08:54:00,099 - INFO - 成功获取股票 sh603970 数据: 中农立华 +2025-06-18 08:54:00,690 - INFO - 成功获取股票 sz301035 数据: 润丰股份 +2025-06-18 08:54:01,284 - INFO - 成功获取股票 sz002868 数据: *ST绿康 +2025-06-18 08:54:01,889 - INFO - 成功获取股票 sz003042 数据: 中农联合 +2025-06-18 08:54:02,476 - INFO - 成功获取股票 sz002391 数据: 长青股份 +2025-06-18 08:54:03,079 - INFO - 成功获取股票 bj870866 数据: 绿亨科技 +2025-06-18 08:54:03,683 - INFO - 成功获取股票 sz301665 数据: 泰禾股份 +2025-06-18 08:54:04,295 - INFO - 成功获取股票 sh600486 数据: 扬农化工 +2025-06-18 08:54:04,796 - INFO - 本次采集完成,共获取 67 只股票数据 +2025-06-18 08:54:04,803 - INFO - 更新股票 sz300189 数据 +2025-06-18 08:54:04,806 - INFO - 更新股票 sz000713 数据 +2025-06-18 08:54:04,807 - INFO - 更新股票 sh600313 数据 +2025-06-18 08:54:04,809 - INFO - 更新股票 bj837403 数据 +2025-06-18 08:54:04,812 - INFO - 更新股票 sz200505 数据 +2025-06-18 08:54:04,813 - INFO - 更新股票 sz300268 数据 +2025-06-18 08:54:04,815 - INFO - 更新股票 sz000930 数据 +2025-06-18 08:54:04,817 - INFO - 更新股票 sz002299 数据 +2025-06-18 08:54:04,819 - INFO - 更新股票 sh600371 数据 +2025-06-18 08:54:04,820 - INFO - 更新股票 sh600598 数据 +2025-06-18 08:54:04,821 - INFO - 更新股票 sh603609 数据 +2025-06-18 08:54:04,822 - INFO - 更新股票 bj831087 数据 +2025-06-18 08:54:04,824 - INFO - 更新股票 sh603363 数据 +2025-06-18 08:54:04,826 - INFO - 更新股票 sh603336 数据 +2025-06-18 08:54:04,829 - INFO - 更新股票 sh600354 数据 +2025-06-18 08:54:04,831 - INFO - 更新股票 sz002385 数据 +2025-06-18 08:54:04,832 - INFO - 更新股票 sz000048 数据 +2025-06-18 08:54:04,833 - INFO - 更新股票 sh600251 数据 +2025-06-18 08:54:04,835 - INFO - 更新股票 sz002321 数据 +2025-06-18 08:54:04,836 - INFO - 更新股票 sz000505 数据 +2025-06-18 08:54:04,837 - INFO - 更新股票 sz001366 数据 +2025-06-18 08:54:04,839 - INFO - 更新股票 sz002772 数据 +2025-06-18 08:54:04,840 - INFO - 更新股票 sz002041 数据 +2025-06-18 08:54:04,841 - INFO - 更新股票 sh600127 数据 +2025-06-18 08:54:04,842 - INFO - 更新股票 sz002548 数据 +2025-06-18 08:54:04,845 - INFO - 更新股票 sh605296 数据 +2025-06-18 08:54:04,847 - INFO - 更新股票 sh600359 数据 +2025-06-18 08:54:04,848 - INFO - 更新股票 sh601952 数据 +2025-06-18 08:54:04,849 - INFO - 更新股票 sh600975 数据 +2025-06-18 08:54:04,851 - INFO - 更新股票 sz300505 数据 +2025-06-18 08:54:04,852 - INFO - 更新股票 sh600141 数据 +2025-06-18 08:54:04,853 - INFO - 更新股票 sz000893 数据 +2025-06-18 08:54:04,855 - INFO - 更新股票 sh600691 数据 +2025-06-18 08:54:04,856 - INFO - 更新股票 sh600470 数据 +2025-06-18 08:54:04,857 - INFO - 更新股票 sh000912 数据 +2025-06-18 08:54:04,859 - INFO - 更新股票 sz000408 数据 +2025-06-18 08:54:04,862 - INFO - 更新股票 sz000902 数据 +2025-06-18 08:54:04,864 - INFO - 更新股票 sz002539 数据 +2025-06-18 08:54:04,866 - INFO - 更新股票 sz002599 数据 +2025-06-18 08:54:04,867 - INFO - 更新股票 sz002545 数据 +2025-06-18 08:54:04,868 - INFO - 更新股票 sz300387 数据 +2025-06-18 08:54:04,869 - INFO - 更新股票 sz002274 数据 +2025-06-18 08:54:04,872 - INFO - 更新股票 sz002470 数据 +2025-06-18 08:54:04,873 - INFO - 更新股票 sz002538 数据 +2025-06-18 08:54:04,874 - INFO - 更新股票 sz000731 数据 +2025-06-18 08:54:04,876 - INFO - 更新股票 sh600078 数据 +2025-06-18 08:54:04,878 - INFO - 更新股票 sh600227 数据 +2025-06-18 08:54:04,879 - INFO - 更新股票 sh603395 数据 +2025-06-18 08:54:04,881 - INFO - 更新股票 sz002588 数据 +2025-06-18 08:54:04,882 - INFO - 更新股票 sz000422 数据 +2025-06-18 08:54:04,883 - INFO - 更新股票 sz002556 数据 +2025-06-18 08:54:04,884 - INFO - 更新股票 sz002312 数据 +2025-06-18 08:54:04,885 - INFO - 更新股票 sz002170 数据 +2025-06-18 08:54:04,887 - INFO - 更新股票 sz000792 数据 +2025-06-18 08:54:04,888 - INFO - 更新股票 sh600096 数据 +2025-06-18 08:54:04,889 - INFO - 更新股票 sz001231 数据 +2025-06-18 08:54:04,891 - INFO - 更新股票 sz002731 数据 +2025-06-18 08:54:04,893 - INFO - 更新股票 sz200553 数据 +2025-06-18 08:54:04,895 - INFO - 更新股票 sh603810 数据 +2025-06-18 08:54:04,897 - INFO - 更新股票 sh603970 数据 +2025-06-18 08:54:04,898 - INFO - 更新股票 sz301035 数据 +2025-06-18 08:54:04,900 - INFO - 更新股票 sz002868 数据 +2025-06-18 08:54:04,901 - INFO - 更新股票 sz003042 数据 +2025-06-18 08:54:04,903 - INFO - 更新股票 sz002391 数据 +2025-06-18 08:54:04,904 - INFO - 更新股票 bj870866 数据 +2025-06-18 08:54:04,905 - INFO - 更新股票 sz301665 数据 +2025-06-18 08:54:04,906 - INFO - 更新股票 sh600486 数据 +2025-06-18 08:54:04,912 - INFO - 成功处理 67 条股票数据到数据库 +2025-06-18 08:54:04,912 - INFO - 数据采集完成,共处理 67 只股票 +2025-06-18 08:54:30,695 - INFO - 收到停止信号,正在关闭... +2025-06-18 08:54:30,696 - INFO - 股票数据采集器已停止 diff --git a/data-collector/stock_crawler.py b/data-collector/stock_crawler.py index 937c087..10f18f2 100644 --- a/data-collector/stock_crawler.py +++ b/data-collector/stock_crawler.py @@ -41,16 +41,75 @@ class StockCrawler: # 农业类股票代码列表(示例) self.agricultural_stocks = [ - 'sz300630', # 普利制药 - 'sh600998', # 九州通 - 'sh600371', # 万向钱潮 - 'sz000876', # 新希望 - 'sz002714', # 牧原股份 - 'sh600519', # 贵州茅台 - 'sz000858', # 五粮液 - 'sh600887', # 伊利股份 - 'sz002304', # 洋河股份 - 'sh600036', # 招商银行 + 'sz300189', # 神农种业 + 'sz000713', # 丰乐钟业 + 'sh600313', # 农发种业 + 'bj837403', # 康农种业 + 'sz200505', # 京粮B + 'sz300268', # st佳沃 + 'sz000930', # 中粮科技 + 'sz002299', # 圣农发展 + 'sh600371', # 万向德农 + 'sh600598', # 北大荒 + 'sh603609', # 禾丰股份 + 'bj831087', + 'sh603363', + 'sh603336', + 'sh600354', + 'sz002385', + 'sz000048', + 'sh600251', + 'sz002321', + 'sz000505', + 'sz001366', + 'sz002772', + 'sz002041', + 'sh600127', + 'sz002548', + 'sh605296', + 'sh600359', + 'sh601952', + 'sh600975', + # 新增股票代码 + 'sz300505', + 'sh600141', + 'sz000893', + 'sh600691', + 'sh600470', + 'sh000912', + 'sz000408', + 'sz000902', + 'sz002539', + 'sz002599', + 'sz002545', + 'sz300387', + 'sz002274', + 'sz002470', + 'sz002538', + 'sz000731', + 'sh600078', + 'sh600227', + 'sh603395', + 'sz002588', + 'sz000422', + 'sz002556', + 'sz002312', + 'sz002170', + 'sz000792', + 'sh600096', + # 农药兽药类股票 + 'sz001231', + 'sz002731', + 'sz200553', + 'sh603810', + 'sh603970', + 'sz301035', + 'sz002868', + 'sz003042', + 'sz002391', + 'bj870866', + 'sz301665', + 'sh600486', ] # 初始化数据库连接 @@ -212,25 +271,59 @@ class StockCrawler: try: cursor = self.db_connection.cursor() - # 构建插入SQL - insert_sql = """ - INSERT INTO stock_data ( - stock_code, stock_name, open_price, close_price, high_price, low_price, - volume, turnover, change_percent, change_amount, pe_ratio, pb_ratio, - market_cap, float_market_cap, trade_date, create_time - ) VALUES ( - %(stock_code)s, %(stock_name)s, %(open_price)s, %(current_price)s, - %(high_price)s, %(low_price)s, %(volume)s, %(turnover)s, - %(change_percent)s, %(change_amount)s, %(pe_ratio)s, %(pb_ratio)s, - %(market_cap)s, %(float_market_cap)s, NOW(), NOW() - ) - """ + # 获取当前日期 + today = datetime.now().strftime('%Y-%m-%d') + + for stock_data in stock_data_list: + # 查询今天是否已有该股票数据 + check_sql = """ + SELECT COUNT(*) FROM stock_data + WHERE stock_code = %s AND DATE(trade_date) = %s + """ + cursor.execute(check_sql, (stock_data['stock_code'], today)) + count = cursor.fetchone()[0] + + if count > 0: + # 已有数据,使用UPDATE更新 + update_sql = """ + UPDATE stock_data SET + stock_name = %(stock_name)s, + open_price = %(open_price)s, + close_price = %(current_price)s, + high_price = %(high_price)s, + low_price = %(low_price)s, + volume = %(volume)s, + turnover = %(turnover)s, + change_percent = %(change_percent)s, + change_amount = %(change_amount)s, + pe_ratio = %(pe_ratio)s, + pb_ratio = %(pb_ratio)s, + market_cap = %(market_cap)s, + float_market_cap = %(float_market_cap)s, + update_time = NOW() + WHERE stock_code = %(stock_code)s AND DATE(trade_date) = %(date)s + """ + cursor.execute(update_sql, {**stock_data, 'date': today}) + logger.info(f"更新股票 {stock_data['stock_code']} 数据") + else: + # 无数据,使用INSERT插入 + insert_sql = """ + INSERT INTO stock_data ( + stock_code, stock_name, open_price, close_price, high_price, low_price, + volume, turnover, change_percent, change_amount, pe_ratio, pb_ratio, + market_cap, float_market_cap, trade_date, create_time + ) VALUES ( + %(stock_code)s, %(stock_name)s, %(open_price)s, %(current_price)s, + %(high_price)s, %(low_price)s, %(volume)s, %(turnover)s, + %(change_percent)s, %(change_amount)s, %(pe_ratio)s, %(pb_ratio)s, + %(market_cap)s, %(float_market_cap)s, NOW(), NOW() + ) + """ + cursor.execute(insert_sql, stock_data) + logger.info(f"插入股票 {stock_data['stock_code']} 数据") - # 批量插入数据 - cursor.executemany(insert_sql, stock_data_list) self.db_connection.commit() - - logger.info(f"成功保存 {len(stock_data_list)} 条股票数据到数据库") + logger.info(f"成功处理 {len(stock_data_list)} 条股票数据到数据库") except Exception as e: logger.error(f"保存数据到数据库失败: {e}") diff --git a/docs/dist/assets/aiService-C9Fe_Phd-d1533d53.js b/docs/dist/assets/aiService-C9Fe_Phd-d1533d53.js new file mode 100644 index 0000000..e3aede9 --- /dev/null +++ b/docs/dist/assets/aiService-C9Fe_Phd-d1533d53.js @@ -0,0 +1,40 @@ +import{j as Un,u as Wn,G as Fn}from"./main-f65d595e.js";function v(s,e,t,n,r){if(typeof e=="function"?s!==e||!0:!e.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(s,t),t}function a(s,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?s!==e||!n:!e.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(s):n?n.value:e.get(s)}let _s=function(){const{crypto:s}=globalThis;if(s!=null&&s.randomUUID)return _s=s.randomUUID.bind(s),s.randomUUID();const e=new Uint8Array(1),t=s?()=>s.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^t()&15>>+n/4).toString(16))};function ft(s){return typeof s=="object"&&s!==null&&("name"in s&&s.name==="AbortError"||"message"in s&&String(s.message).includes("FetchRequestCanceledException"))}const mt=s=>{if(s instanceof Error)return s;if(typeof s=="object"&&s!==null){try{if(Object.prototype.toString.call(s)==="[object Error]"){const e=new Error(s.message,s.cause?{cause:s.cause}:{});return s.stack&&(e.stack=s.stack),s.cause&&!e.cause&&(e.cause=s.cause),s.name&&(e.name=s.name),e}}catch{}try{return new Error(JSON.stringify(s))}catch{}}return new Error(s)};class w extends Error{}class D extends w{constructor(e,t,n,r){super(`${D.makeMessage(e,t,n)}`),this.status=e,this.headers=r,this.requestID=r==null?void 0:r.get("x-request-id"),this.error=t;const o=t;this.code=o==null?void 0:o.code,this.param=o==null?void 0:o.param,this.type=o==null?void 0:o.type}static makeMessage(e,t,n){const r=t!=null&&t.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||"(no status code or body)"}static generate(e,t,n,r){if(!e||!r)return new Ye({message:n,cause:mt(t)});const o=t==null?void 0:t.error;return e===400?new vs(e,o,n,r):e===401?new bs(e,o,n,r):e===403?new xs(e,o,n,r):e===404?new Ss(e,o,n,r):e===409?new $s(e,o,n,r):e===422?new As(e,o,n,r):e===429?new Is(e,o,n,r):e>=500?new Os(e,o,n,r):new D(e,o,n,r)}}class H extends D{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class Ye extends D{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class It extends Ye{constructor({message:e}={}){super({message:e??"Request timed out."})}}class vs extends D{}class bs extends D{}class xs extends D{}class Ss extends D{}class $s extends D{}class As extends D{}class Is extends D{}class Os extends D{}class Rs extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class ks extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}const Xn=/^[a-z][a-z0-9+.-]*:/i,Hn=s=>Xn.test(s);function Jn(s){return typeof s!="object"?{}:s??{}}function Kn(s){if(!s)return!0;for(const e in s)return!1;return!0}function Vn(s,e){return Object.prototype.hasOwnProperty.call(s,e)}function it(s){return s!=null&&typeof s=="object"&&!Array.isArray(s)}const zn=(s,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new w(`${s} must be an integer`);if(e<0)throw new w(`${s} must be a positive integer`);return e},Gn=s=>{try{return JSON.parse(s)}catch{return}},Ie=s=>new Promise(e=>setTimeout(e,s)),He={off:0,error:200,warn:300,info:400,debug:500},zt=(s,e,t)=>{if(s){if(Vn(He,s))return s;q(t).warn(`${e} was set to ${JSON.stringify(s)}, expected one of ${JSON.stringify(Object.keys(He))}`)}};function fe(){}function Ee(s,e,t){return!e||He[s]>He[t]?fe:e[s].bind(e)}const Qn={error:fe,warn:fe,info:fe,debug:fe};let Gt=new WeakMap;function q(s){const e=s.logger,t=s.logLevel??"off";if(!e)return Qn;const n=Gt.get(e);if(n&&n[0]===t)return n[1];const r={error:Ee("error",e,t),warn:Ee("warn",e,t),info:Ee("info",e,t),debug:Ee("debug",e,t)};return Gt.set(e,[t,r]),r}const se=s=>(s.options&&(s.options={...s.options},delete s.options.headers),s.headers&&(s.headers=Object.fromEntries((s.headers instanceof Headers?[...s.headers]:Object.entries(s.headers)).map(([e,t])=>[e,e.toLowerCase()==="authorization"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in s&&(s.retryOfRequestLogID&&(s.retryOf=s.retryOfRequestLogID),delete s.retryOfRequestLogID),s),ce="5.0.1",Yn=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";function Zn(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}const er=()=>{var s;const e=Zn();if(e==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ce,"X-Stainless-OS":Yt(Deno.build.os),"X-Stainless-Arch":Qt(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:((s=Deno.version)==null?void 0:s.deno)??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ce,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(e==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ce,"X-Stainless-OS":Yt(globalThis.process.platform??"unknown"),"X-Stainless-Arch":Qt(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=tr();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ce,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":ce,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function tr(){if(typeof navigator>"u"||!navigator)return null;const s=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:e,pattern:t}of s){const n=t.exec(navigator.userAgent);if(n){const r=n[1]||0,o=n[2]||0,i=n[3]||0;return{browser:e,version:`${r}.${o}.${i}`}}}return null}const Qt=s=>s==="x32"?"x32":s==="x86_64"||s==="x64"?"x64":s==="arm"?"arm":s==="aarch64"||s==="arm64"?"arm64":s?`other:${s}`:"unknown",Yt=s=>(s=s.toLowerCase(),s.includes("ios")?"iOS":s==="android"?"Android":s==="darwin"?"MacOS":s==="win32"?"Windows":s==="freebsd"?"FreeBSD":s==="openbsd"?"OpenBSD":s==="linux"?"Linux":s?`Other:${s}`:"Unknown");let Zt;const sr=()=>Zt??(Zt=er());function nr(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Es(...s){const e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...s)}function Ps(s){let e=Symbol.asyncIterator in s?s[Symbol.asyncIterator]():s[Symbol.iterator]();return Es({start(){},async pull(t){const{done:n,value:r}=await e.next();n?t.close():t.enqueue(r)},async cancel(){var t;await((t=e.return)==null?void 0:t.call(e))}})}function Cs(s){if(s[Symbol.asyncIterator])return s;const e=s.getReader();return{async next(){try{const t=await e.read();return t!=null&&t.done&&e.releaseLock(),t}catch(t){throw e.releaseLock(),t}},async return(){const t=e.cancel();return e.releaseLock(),await t,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function rr(s){var e,t;if(s===null||typeof s!="object")return;if(s[Symbol.asyncIterator]){await((t=(e=s[Symbol.asyncIterator]()).return)==null?void 0:t.call(e));return}const n=s.getReader(),r=n.cancel();n.releaseLock(),await r}const or=({headers:s,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)}),gt="RFC3986",yt={RFC1738:s=>String(s).replace(/%20/g,"+"),RFC3986:s=>String(s)},ir="RFC1738",ar=Array.isArray,V=(()=>{const s=[];for(let e=0;e<256;++e)s.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return s})(),at=1024,lr=(s,e,t,n,r)=>{if(s.length===0)return s;let o=s;if(typeof s=="symbol"?o=Symbol.prototype.toString.call(s):typeof s!="string"&&(o=String(s)),t==="iso-8859-1")return escape(o).replace(/%u[0-9a-f]{4}/gi,function(l){return"%26%23"+parseInt(l.slice(2),16)+"%3B"});let i="";for(let l=0;l=at?o.slice(l,l+at):o,d=[];for(let m=0;m=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||r===ir&&(u===40||u===41)){d[d.length]=c.charAt(m);continue}if(u<128){d[d.length]=V[u];continue}if(u<2048){d[d.length]=V[192|u>>6]+V[128|u&63];continue}if(u<55296||u>=57344){d[d.length]=V[224|u>>12]+V[128|u>>6&63]+V[128|u&63];continue}m+=1,u=65536+((u&1023)<<10|c.charCodeAt(m)&1023),d[d.length]=V[240|u>>18]+V[128|u>>12&63]+V[128|u>>6&63]+V[128|u&63]}i+=d.join("")}return i};function cr(s){return!s||typeof s!="object"?!1:!!(s.constructor&&s.constructor.isBuffer&&s.constructor.isBuffer(s))}function es(s,e){if(ar(s)){const t=[];for(let n=0;n"u"&&(A=0)}if(typeof d=="function"?f=d(e,f):f instanceof Date?f=g==null?void 0:g(f):t==="comma"&&z(f)&&(f=es(f,function(I){return I instanceof Date?g==null?void 0:g(I):I})),f===null){if(o)return c&&!$?c(e,j.encoder,b,"key",S):e;f=""}if(pr(f)||cr(f)){if(c){const I=$?e:c(e,j.encoder,b,"key",S);return[(p==null?void 0:p(I))+"="+(p==null?void 0:p(c(f,j.encoder,b,"value",S)))]}return[(p==null?void 0:p(e))+"="+(p==null?void 0:p(String(f)))]}const R=[];if(typeof f>"u")return R;let T;if(t==="comma"&&z(f))$&&c&&(f=es(f,c)),T=[{value:f.length>0?f.join(",")||null:void 0}];else if(z(d))T=d;else{const I=Object.keys(f);T=m?I.sort(m):I}const P=l?String(e).replace(/\./g,"%2E"):String(e),J=n&&z(f)&&f.length===1?P+"[]":P;if(r&&z(f)&&f.length===0)return J+"[]";for(let I=0;I"u"?s.encodeDotInKeys?!0:j.allowDots:!!s.allowDots;return{addQueryPrefix:typeof s.addQueryPrefix=="boolean"?s.addQueryPrefix:j.addQueryPrefix,allowDots:i,allowEmptyArrays:typeof s.allowEmptyArrays=="boolean"?!!s.allowEmptyArrays:j.allowEmptyArrays,arrayFormat:o,charset:e,charsetSentinel:typeof s.charsetSentinel=="boolean"?s.charsetSentinel:j.charsetSentinel,commaRoundTrip:!!s.commaRoundTrip,delimiter:typeof s.delimiter>"u"?j.delimiter:s.delimiter,encode:typeof s.encode=="boolean"?s.encode:j.encode,encodeDotInKeys:typeof s.encodeDotInKeys=="boolean"?s.encodeDotInKeys:j.encodeDotInKeys,encoder:typeof s.encoder=="function"?s.encoder:j.encoder,encodeValuesOnly:typeof s.encodeValuesOnly=="boolean"?s.encodeValuesOnly:j.encodeValuesOnly,filter:r,format:t,formatter:n,serializeDate:typeof s.serializeDate=="function"?s.serializeDate:j.serializeDate,skipNulls:typeof s.skipNulls=="boolean"?s.skipNulls:j.skipNulls,sort:typeof s.sort=="function"?s.sort:null,strictNullHandling:typeof s.strictNullHandling=="boolean"?s.strictNullHandling:j.strictNullHandling}}function mr(s,e={}){let t=s;const n=fr(e);let r,o;typeof n.filter=="function"?(o=n.filter,t=o("",t)):z(n.filter)&&(o=n.filter,r=o);const i=[];if(typeof t!="object"||t===null)return"";const l=Ts[n.arrayFormat],c=l==="comma"&&n.commaRoundTrip;r||(r=Object.keys(t)),n.sort&&r.sort(n.sort);const d=new WeakMap;for(let g=0;g0?u+m:""}function gr(s){let e=0;for(const r of s)e+=r.length;const t=new Uint8Array(e);let n=0;for(const r of s)t.set(r,n),n+=r.length;return t}let ts;function Ot(s){let e;return(ts??(e=new globalThis.TextEncoder,ts=e.encode.bind(e)))(s)}let ss;function ns(s){let e;return(ss??(e=new globalThis.TextDecoder,ss=e.decode.bind(e)))(s)}var U,W;class Ze{constructor(){U.set(this,void 0),W.set(this,void 0),v(this,U,new Uint8Array),v(this,W,null)}decode(e){if(e==null)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?Ot(e):e;v(this,U,gr([a(this,U,"f"),t]));const n=[];let r;for(;(r=yr(a(this,U,"f"),a(this,W,"f")))!=null;){if(r.carriage&&a(this,W,"f")==null){v(this,W,r.index);continue}if(a(this,W,"f")!=null&&(r.index!==a(this,W,"f")+1||r.carriage)){n.push(ns(a(this,U,"f").subarray(0,a(this,W,"f")-1))),v(this,U,a(this,U,"f").subarray(a(this,W,"f"))),v(this,W,null);continue}const o=a(this,W,"f")!==null?r.preceding-1:r.preceding,i=ns(a(this,U,"f").subarray(0,o));n.push(i),v(this,U,a(this,U,"f").subarray(r.index)),v(this,W,null)}return n}flush(){return a(this,U,"f").length?this.decode(` +`):[]}}U=new WeakMap,W=new WeakMap;Ze.NEWLINE_CHARS=new Set([` +`,"\r"]);Ze.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function yr(s,e){for(let t=e??0;t({next:()=>{if(o.length===0){const i=n.next();e.push(i),t.push(i)}return o.shift()}});return[new Q(()=>r(e),this.controller),new Q(()=>r(t),this.controller)]}toReadableStream(){const e=this;let t;return Es({async start(){t=e[Symbol.asyncIterator]()},async pull(n){try{const{value:r,done:o}=await t.next();if(o)return n.close();const i=Ot(JSON.stringify(r)+` +`);n.enqueue(i)}catch(r){n.error(r)}},async cancel(){var n;await((n=t.return)==null?void 0:n.call(t))}})}}async function*_r(s,e){if(!s.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new w("Attempted to iterate over a response with no body");const t=new br,n=new Ze,r=Cs(s.body);for await(const o of vr(r))for(const i of n.decode(o)){const l=t.decode(i);l&&(yield l)}for(const o of n.flush()){const i=t.decode(o);i&&(yield i)}}async function*vr(s){let e=new Uint8Array;for await(const t of s){if(t==null)continue;const n=t instanceof ArrayBuffer?new Uint8Array(t):typeof t=="string"?Ot(t):t;let r=new Uint8Array(e.length+n.length);r.set(e),r.set(n,e.length),e=r;let o;for(;(o=wr(e))!==-1;)yield e.slice(0,o),e=e.slice(o)}e.length>0&&(yield e)}class br{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const o={event:this.event,data:this.data.join(` +`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],o}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,n,r]=xr(e,":");return r.startsWith(" ")&&(r=r.substring(1)),t==="event"?this.event=r:t==="data"&&this.data.push(r),null}}function xr(s,e){const t=s.indexOf(e);return t!==-1?[s.substring(0,t),e,s.substring(t+e.length)]:[s,"",""]}async function Ls(s,e){const{response:t,requestLogID:n,retryOfRequestLogID:r,startTime:o}=e,i=await(async()=>{var l;if(e.options.stream)return q(s).debug("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller):Q.fromSSEResponse(t,e.controller);if(t.status===204)return null;if(e.options.__binaryResponse)return t;const c=t.headers.get("content-type"),d=(l=c==null?void 0:c.split(";")[0])==null?void 0:l.trim();if(d!=null&&d.includes("application/json")||d!=null&&d.endsWith("+json")){const m=await t.json();return Ms(m,t)}return await t.text()})();return q(s).debug(`[${n}] response parsed`,se({retryOfRequestLogID:r,url:t.url,status:t.status,body:i,durationMs:Date.now()-o})),i}function Ms(s,e){return!s||typeof s!="object"||Array.isArray(s)?s:Object.defineProperty(s,"_request_id",{value:e.headers.get("x-request-id"),enumerable:!1})}var me;class et extends Promise{constructor(e,t,n=Ls){super(r=>{r(null)}),this.responsePromise=t,this.parseResponse=n,me.set(this,void 0),v(this,me,e)}_thenUnwrap(e){return new et(a(this,me,"f"),this.responsePromise,async(t,n)=>Ms(e(await this.parseResponse(t,n),n),n.response))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(e=>this.parseResponse(a(this,me,"f"),e))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}me=new WeakMap;var Pe;class Ds{constructor(e,t,n,r){Pe.set(this,void 0),v(this,Pe,e),this.options=r,this.response=t,this.body=n}hasNextPage(){return this.getPaginatedItems().length?this.nextPageRequestOptions()!=null:!1}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await a(this,Pe,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Pe=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Sr extends et{constructor(e,t,n){super(e,t,async(r,o)=>new n(r,o.response,await Ls(r,o),o.options))}async*[Symbol.asyncIterator](){const e=await this;for await(const t of e)yield t}}class tt extends Ds{constructor(e,t,n,r){super(e,t,n,r),this.data=n.data||[],this.object=n.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class C extends Ds{constructor(e,t,n,r){super(e,t,n,r),this.data=n.data||[],this.has_more=n.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return this.has_more===!1?!1:super.hasNextPage()}nextPageRequestOptions(){var e;const t=this.getPaginatedItems(),n=(e=t[t.length-1])==null?void 0:e.id;return n?{...this.options,query:{...Jn(this.options.query),after:n}}:null}}const qs=()=>{var s;if(typeof File>"u"){const{process:e}=globalThis,t=typeof((s=e==null?void 0:e.versions)==null?void 0:s.node)=="string"&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function xe(s,e,t){return qs(),new File(s,e??"unknown_file",t)}function Me(s){return(typeof s=="object"&&s!==null&&("name"in s&&s.name&&String(s.name)||"url"in s&&s.url&&String(s.url)||"filename"in s&&s.filename&&String(s.filename)||"path"in s&&s.path&&String(s.path))||"").split(/[\\/]/).pop()||void 0}const Bs=s=>s!=null&&typeof s=="object"&&typeof s[Symbol.asyncIterator]=="function",ie=async(s,e)=>({...s,body:await Ar(s.body,e)}),rs=new WeakMap;function $r(s){const e=typeof s=="function"?s:s.fetch,t=rs.get(e);if(t)return t;const n=(async()=>{try{const r="Response"in e?e.Response:(await e("data:,")).constructor,o=new FormData;return o.toString()!==await new r(o).text()}catch{return!0}})();return rs.set(e,n),n}const Ar=async(s,e)=>{if(!await $r(e))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const t=new FormData;return await Promise.all(Object.entries(s||{}).map(([n,r])=>wt(t,n,r))),t},Ir=s=>s instanceof Blob&&"name"in s,wt=async(s,e,t)=>{if(t!==void 0){if(t==null)throw new TypeError(`Received null for "${e}"; to pass null in FormData, you must use the string 'null'`);if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")s.append(e,String(t));else if(t instanceof Response)s.append(e,xe([await t.blob()],Me(t)));else if(Bs(t))s.append(e,xe([await new Response(Ps(t)).blob()],Me(t)));else if(Ir(t))s.append(e,t,Me(t));else if(Array.isArray(t))await Promise.all(t.map(n=>wt(s,e+"[]",n)));else if(typeof t=="object")await Promise.all(Object.entries(t).map(([n,r])=>wt(s,`${e}[${n}]`,r)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${t} instead`)}},Us=s=>s!=null&&typeof s=="object"&&typeof s.size=="number"&&typeof s.type=="string"&&typeof s.text=="function"&&typeof s.slice=="function"&&typeof s.arrayBuffer=="function",Or=s=>s!=null&&typeof s=="object"&&typeof s.name=="string"&&typeof s.lastModified=="number"&&Us(s),Rr=s=>s!=null&&typeof s=="object"&&typeof s.url=="string"&&typeof s.blob=="function";async function kr(s,e,t){if(qs(),s=await s,Or(s))return s instanceof File?s:xe([await s.arrayBuffer()],s.name);if(Rr(s)){const r=await s.blob();return e||(e=new URL(s.url).pathname.split(/[\\/]/).pop()),xe(await _t(r),e,t)}const n=await _t(s);if(e||(e=Me(s)),!(t!=null&&t.type)){const r=n.find(o=>typeof o=="object"&&"type"in o&&o.type);typeof r=="string"&&(t={...t,type:r})}return xe(n,e,t)}async function _t(s){var e;let t=[];if(typeof s=="string"||ArrayBuffer.isView(s)||s instanceof ArrayBuffer)t.push(s);else if(Us(s))t.push(s instanceof Blob?s:await s.arrayBuffer());else if(Bs(s))for await(const n of s)t.push(...await _t(n));else{const n=(e=s==null?void 0:s.constructor)==null?void 0:e.name;throw new Error(`Unexpected data type: ${typeof s}${n?`; constructor: ${n}`:""}${Er(s)}`)}return t}function Er(s){return typeof s!="object"||s===null?"":`; props: [${Object.getOwnPropertyNames(s).map(e=>`"${e}"`).join(", ")}]`}class x{constructor(e){this._client=e}}function Ws(s){return s.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Pr=(s=Ws)=>function(e,...t){if(e.length===1)return e[0];let n=!1;const r=e.reduce((d,m,u)=>(/[?#]/.test(m)&&(n=!0),d+m+(u===t.length?"":(n?encodeURIComponent:s)(String(t[u])))),""),o=r.split(/[?#]/,1)[0],i=[],l=new RegExp("(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)","gi");let c;for(;(c=l.exec(o))!==null;)i.push({start:c.index,length:c[0].length});if(i.length>0){let d=0;const m=i.reduce((u,g)=>{const S=" ".repeat(g.start-d),p="^".repeat(g.length);return d=g.start+g.length,u+S+p},"");throw new w(`Path parameters result in path with invalid segments: +${r} +${m}`)}return r},h=Pr(Ws);let Fs=class extends x{list(s,e={},t){return this._client.getAPIList(h`/chat/completions/${s}/messages`,C,{query:e,...t})}};function Cr(s){return typeof s.parse=="function"}const Je=s=>(s==null?void 0:s.role)==="assistant",Xs=s=>(s==null?void 0:s.role)==="tool";var vt,De,qe,ge,ye,Be,we,Z,_e,Ke,Ve,ue,Hs;class Rt{constructor(){vt.add(this),this.controller=new AbortController,De.set(this,void 0),qe.set(this,()=>{}),ge.set(this,()=>{}),ye.set(this,void 0),Be.set(this,()=>{}),we.set(this,()=>{}),Z.set(this,{}),_e.set(this,!1),Ke.set(this,!1),Ve.set(this,!1),ue.set(this,!1),v(this,De,new Promise((e,t)=>{v(this,qe,e,"f"),v(this,ge,t,"f")})),v(this,ye,new Promise((e,t)=>{v(this,Be,e,"f"),v(this,we,t,"f")})),a(this,De,"f").catch(()=>{}),a(this,ye,"f").catch(()=>{})}_run(e){setTimeout(()=>{e().then(()=>{this._emitFinal(),this._emit("end")},a(this,vt,"m",Hs).bind(this))},0)}_connected(){this.ended||(a(this,qe,"f").call(this),this._emit("connect"))}get ended(){return a(this,_e,"f")}get errored(){return a(this,Ke,"f")}get aborted(){return a(this,Ve,"f")}abort(){this.controller.abort()}on(e,t){return(a(this,Z,"f")[e]||(a(this,Z,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=a(this,Z,"f")[e];if(!n)return this;const r=n.findIndex(o=>o.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(a(this,Z,"f")[e]||(a(this,Z,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{v(this,ue,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){v(this,ue,!0),await a(this,ye,"f")}_emit(e,...t){if(a(this,_e,"f"))return;e==="end"&&(v(this,_e,!0),a(this,Be,"f").call(this));const n=a(this,Z,"f")[e];if(n&&(a(this,Z,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!a(this,ue,"f")&&!(n!=null&&n.length)&&Promise.reject(r),a(this,ge,"f").call(this,r),a(this,we,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!a(this,ue,"f")&&!(n!=null&&n.length)&&Promise.reject(r),a(this,ge,"f").call(this,r),a(this,we,"f").call(this,r),this._emit("end")}}_emitFinal(){}}De=new WeakMap,qe=new WeakMap,ge=new WeakMap,ye=new WeakMap,Be=new WeakMap,we=new WeakMap,Z=new WeakMap,_e=new WeakMap,Ke=new WeakMap,Ve=new WeakMap,ue=new WeakMap,vt=new WeakSet,Hs=function(s){if(v(this,Ke,!0),s instanceof Error&&s.name==="AbortError"&&(s=new H),s instanceof H)return v(this,Ve,!0),this._emit("abort",s);if(s instanceof w)return this._emit("error",s);if(s instanceof Error){const e=new w(s.message);return e.cause=s,this._emit("error",e)}return this._emit("error",new w(String(s)))};function kt(s){return(s==null?void 0:s.$brand)==="auto-parseable-response-format"}function Oe(s){return(s==null?void 0:s.$brand)==="auto-parseable-tool"}function Tr(s,e){return!e||!Js(e)?{...s,choices:s.choices.map(t=>({...t,message:{...t.message,parsed:null,...t.message.tool_calls?{tool_calls:t.message.tool_calls}:void 0}}))}:Et(s,e)}function Et(s,e){const t=s.choices.map(n=>{var r;if(n.finish_reason==="length")throw new Rs;if(n.finish_reason==="content_filter")throw new ks;return{...n,message:{...n.message,...n.message.tool_calls?{tool_calls:((r=n.message.tool_calls)==null?void 0:r.map(o=>jr(e,o)))??void 0}:void 0,parsed:n.message.content&&!n.message.refusal?Nr(e,n.message.content):null}}});return{...s,choices:t}}function Nr(s,e){var t,n;return((t=s.response_format)==null?void 0:t.type)!=="json_schema"?null:((n=s.response_format)==null?void 0:n.type)==="json_schema"?"$parseRaw"in s.response_format?s.response_format.$parseRaw(e):JSON.parse(e):null}function jr(s,e){var t;const n=(t=s.tools)==null?void 0:t.find(r=>{var o;return((o=r.function)==null?void 0:o.name)===e.function.name});return{...e,function:{...e.function,parsed_arguments:Oe(n)?n.$parseRaw(e.function.arguments):n!=null&&n.function.strict?JSON.parse(e.function.arguments):null}}}function Lr(s,e){var t;if(!s)return!1;const n=(t=s.tools)==null?void 0:t.find(r=>{var o;return((o=r.function)==null?void 0:o.name)===e.function.name});return Oe(n)||(n==null?void 0:n.function.strict)||!1}function Js(s){var e;return kt(s.response_format)?!0:((e=s.tools)==null?void 0:e.some(t=>Oe(t)||t.type==="function"&&t.function.strict===!0))??!1}function Mr(s){for(const e of s??[]){if(e.type!=="function")throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${e.type}\``);if(e.function.strict!==!0)throw new w(`The \`${e.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}var B,bt,ze,xt,St,$t,Ks,Vs;const Dr=10;class zs extends Rt{constructor(){super(...arguments),B.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){var t;this._chatCompletions.push(e),this._emit("chatCompletion",e);const n=(t=e.choices[0])==null?void 0:t.message;return n&&this._addMessage(n),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t){if(this._emit("message",e),Xs(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(Je(e)&&e.tool_calls)for(const n of e.tool_calls)n.type==="function"&&this._emit("functionToolCall",n.function)}}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),a(this,B,"m",bt).call(this)}async finalMessage(){return await this.done(),a(this,B,"m",ze).call(this)}async finalFunctionToolCall(){return await this.done(),a(this,B,"m",xt).call(this)}async finalFunctionToolCallResult(){return await this.done(),a(this,B,"m",St).call(this)}async totalUsage(){return await this.done(),a(this,B,"m",$t).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=a(this,B,"m",ze).call(this);t&&this._emit("finalMessage",t);const n=a(this,B,"m",bt).call(this);n&&this._emit("finalContent",n);const r=a(this,B,"m",xt).call(this);r&&this._emit("finalFunctionToolCall",r);const o=a(this,B,"m",St).call(this);o!=null&&this._emit("finalFunctionToolCallResult",o),this._chatCompletions.some(i=>i.usage)&&this._emit("totalUsage",a(this,B,"m",$t).call(this))}async _createChatCompletion(e,t,n){const r=n==null?void 0:n.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),a(this,B,"m",Ks).call(this,t);const o=await e.chat.completions.create({...t,stream:!1},{...n,signal:this.controller.signal});return this._connected(),this._addChatCompletion(Et(o,t))}async _runChatCompletion(e,t,n){for(const r of t.messages)this._addMessage(r,!1);return await this._createChatCompletion(e,t,n)}async _runTools(e,t,n){var r,o,i;const l="tool",{tool_choice:c="auto",stream:d,...m}=t,u=typeof c!="string"&&((r=c==null?void 0:c.function)==null?void 0:r.name),{maxChatCompletions:g=Dr}=n||{},S=t.tools.map(b=>{if(Oe(b)){if(!b.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:b.$callback,name:b.function.name,description:b.function.description||"",parameters:b.function.parameters,parse:b.$parseRaw,strict:!0}}}return b}),p={};for(const b of S)b.type==="function"&&(p[b.function.name||b.function.function.name]=b.function);const $="tools"in t?S.map(b=>b.type==="function"?{type:"function",function:{name:b.function.name||b.function.function.name,parameters:b.function.parameters,description:b.function.description,strict:b.function.strict}}:b):void 0;for(const b of t.messages)this._addMessage(b,!1);for(let b=0;bJSON.stringify(X)).join(", ")}. Please try again`;this._addMessage({role:l,tool_call_id:_,content:I});continue}let T;try{T=Cr(R)?await R.parse(k):k}catch(I){const X=I instanceof Error?I.message:String(I);this._addMessage({role:l,tool_call_id:_,content:X});continue}const P=await R.function(T,this),J=a(this,B,"m",Vs).call(this,P);if(this._addMessage({role:l,tool_call_id:_,content:J}),u)return}}}}B=new WeakSet,bt=function(){return a(this,B,"m",ze).call(this).content??null},ze=function(){let s=this.messages.length;for(;s-- >0;){const e=this.messages[s];if(Je(e))return{...e,content:e.content??null,refusal:e.refusal??null}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},xt=function(){var s,e;for(let t=this.messages.length-1;t>=0;t--){const n=this.messages[t];if(Je(n)&&(s=n==null?void 0:n.tool_calls)!=null&&s.length)return(e=n.tool_calls.at(-1))==null?void 0:e.function}},St=function(){for(let s=this.messages.length-1;s>=0;s--){const e=this.messages[s];if(Xs(e)&&e.content!=null&&typeof e.content=="string"&&this.messages.some(t=>{var n;return t.role==="assistant"&&((n=t.tool_calls)==null?void 0:n.some(r=>r.type==="function"&&r.id===e.tool_call_id))}))return e.content}},$t=function(){const s={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:e}of this._chatCompletions)e&&(s.completion_tokens+=e.completion_tokens,s.prompt_tokens+=e.prompt_tokens,s.total_tokens+=e.total_tokens);return s},Ks=function(s){if(s.n!=null&&s.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Vs=function(s){return typeof s=="string"?s:s===void 0?"undefined":JSON.stringify(s)};class Pt extends zs{static runTools(e,t,n){const r=new Pt,o={...n,headers:{...n==null?void 0:n.headers,"X-Stainless-Helper-Method":"runTools"}};return r._run(()=>r._runTools(e,t,o)),r}_addMessage(e,t=!0){super._addMessage(e,t),Je(e)&&e.content&&this._emit("content",e.content)}}const Gs=1,Qs=2,Ys=4,Zs=8,en=16,tn=32,sn=64,nn=128,rn=256,on=nn|rn,an=en|tn|on|sn,ln=Gs|Qs|an,cn=Ys|Zs,qr=ln|cn,L={STR:Gs,NUM:Qs,ARR:Ys,OBJ:Zs,NULL:en,BOOL:tn,NAN:sn,INFINITY:nn,MINUS_INFINITY:rn,INF:on,SPECIAL:an,ATOM:ln,COLLECTION:cn,ALL:qr};class Br extends Error{}class Ur extends Error{}function Wr(s,e=L.ALL){if(typeof s!="string")throw new TypeError(`expecting str, got ${typeof s}`);if(!s.trim())throw new Error(`${s} is empty`);return Fr(s.trim(),e)}const Fr=(s,e)=>{const t=s.length;let n=0;const r=g=>{throw new Br(`${g} at position ${n}`)},o=g=>{throw new Ur(`${g} at position ${n}`)},i=()=>(u(),n>=t&&r("Unexpected end of input"),s[n]==='"'?l():s[n]==="{"?c():s[n]==="["?d():s.substring(n,n+4)==="null"||L.NULL&e&&t-n<4&&"null".startsWith(s.substring(n))?(n+=4,null):s.substring(n,n+4)==="true"||L.BOOL&e&&t-n<4&&"true".startsWith(s.substring(n))?(n+=4,!0):s.substring(n,n+5)==="false"||L.BOOL&e&&t-n<5&&"false".startsWith(s.substring(n))?(n+=5,!1):s.substring(n,n+8)==="Infinity"||L.INFINITY&e&&t-n<8&&"Infinity".startsWith(s.substring(n))?(n+=8,1/0):s.substring(n,n+9)==="-Infinity"||L.MINUS_INFINITY&e&&1{const g=n;let S=!1;for(n++;n{n++,u();const g={};try{for(;s[n]!=="}";){if(u(),n>=t&&L.OBJ&e)return g;const S=l();u(),n++;try{const p=i();Object.defineProperty(g,S,{value:p,writable:!0,enumerable:!0,configurable:!0})}catch(p){if(L.OBJ&e)return g;throw p}u(),s[n]===","&&n++}}catch{if(L.OBJ&e)return g;r("Expected '}' at end of object")}return n++,g},d=()=>{n++;const g=[];try{for(;s[n]!=="]";)g.push(i()),u(),s[n]===","&&n++}catch{if(L.ARR&e)return g;r("Expected ']' at end of array")}return n++,g},m=()=>{if(n===0){s==="-"&&L.NUM&e&&r("Not sure what '-' is");try{return JSON.parse(s)}catch(S){if(L.NUM&e)try{return s[s.length-1]==="."?JSON.parse(s.substring(0,s.lastIndexOf("."))):JSON.parse(s.substring(0,s.lastIndexOf("e")))}catch{}o(String(S))}}const g=n;for(s[n]==="-"&&n++;s[n]&&!",]}".includes(s[n]);)n++;n==t&&!(L.NUM&e)&&r("Unterminated number literal");try{return JSON.parse(s.substring(g,n))}catch{s.substring(g,n)==="-"&&L.NUM&e&&r("Not sure what '-' is");try{return JSON.parse(s.substring(g,s.lastIndexOf("e")))}catch(S){o(String(S))}}},u=()=>{for(;nWr(s,L.ALL^L.NUM);var N,Y,ae,ee,ct,Ce,ut,dt,ht,Te,pt,is;class Ae extends zs{constructor(e){super(),N.add(this),Y.set(this,void 0),ae.set(this,void 0),ee.set(this,void 0),v(this,Y,e),v(this,ae,[])}get currentChatCompletionSnapshot(){return a(this,ee,"f")}static fromReadableStream(e){const t=new Ae(null);return t._run(()=>t._fromReadableStream(e)),t}static createChatCompletion(e,t,n){const r=new Ae(t);return r._run(()=>r._runChatCompletion(e,{...t,stream:!0},{...n,headers:{...n==null?void 0:n.headers,"X-Stainless-Helper-Method":"stream"}})),r}async _createChatCompletion(e,t,n){var r;super._createChatCompletion;const o=n==null?void 0:n.signal;o&&(o.aborted&&this.controller.abort(),o.addEventListener("abort",()=>this.controller.abort())),a(this,N,"m",ct).call(this);const i=await e.chat.completions.create({...t,stream:!0},{...n,signal:this.controller.signal});this._connected();for await(const l of i)a(this,N,"m",ut).call(this,l);if((r=i.controller.signal)!=null&&r.aborted)throw new H;return this._addChatCompletion(a(this,N,"m",Te).call(this))}async _fromReadableStream(e,t){var n;const r=t==null?void 0:t.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),a(this,N,"m",ct).call(this),this._connected();const o=Q.fromReadableStream(e,this.controller);let i;for await(const l of o)i&&i!==l.id&&this._addChatCompletion(a(this,N,"m",Te).call(this)),a(this,N,"m",ut).call(this,l),i=l.id;if((n=o.controller.signal)!=null&&n.aborted)throw new H;return this._addChatCompletion(a(this,N,"m",Te).call(this))}[(Y=new WeakMap,ae=new WeakMap,ee=new WeakMap,N=new WeakSet,ct=function(){this.ended||v(this,ee,void 0)},Ce=function(e){let t=a(this,ae,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},a(this,ae,"f")[e.index]=t,t)},ut=function(e){var t,n,r,o,i,l,c,d,m,u,g,S,p,$,b;if(this.ended)return;const E=a(this,N,"m",is).call(this,e);this._emit("chunk",e,E);for(const f of e.choices){const _=E.choices[f.index];f.delta.content!=null&&((t=_.message)==null?void 0:t.role)==="assistant"&&(n=_.message)!=null&&n.content&&(this._emit("content",f.delta.content,_.message.content),this._emit("content.delta",{delta:f.delta.content,snapshot:_.message.content,parsed:_.message.parsed})),f.delta.refusal!=null&&((r=_.message)==null?void 0:r.role)==="assistant"&&(o=_.message)!=null&&o.refusal&&this._emit("refusal.delta",{delta:f.delta.refusal,snapshot:_.message.refusal}),((i=f.logprobs)==null?void 0:i.content)!=null&&((l=_.message)==null?void 0:l.role)==="assistant"&&this._emit("logprobs.content.delta",{content:(c=f.logprobs)==null?void 0:c.content,snapshot:((d=_.logprobs)==null?void 0:d.content)??[]}),((m=f.logprobs)==null?void 0:m.refusal)!=null&&((u=_.message)==null?void 0:u.role)==="assistant"&&this._emit("logprobs.refusal.delta",{refusal:(g=f.logprobs)==null?void 0:g.refusal,snapshot:((S=_.logprobs)==null?void 0:S.refusal)??[]});const A=a(this,N,"m",Ce).call(this,_);_.finish_reason&&(a(this,N,"m",ht).call(this,_),A.current_tool_call_index!=null&&a(this,N,"m",dt).call(this,_,A.current_tool_call_index));for(const k of f.delta.tool_calls??[])A.current_tool_call_index!==k.index&&(a(this,N,"m",ht).call(this,_),A.current_tool_call_index!=null&&a(this,N,"m",dt).call(this,_,A.current_tool_call_index)),A.current_tool_call_index=k.index;for(const k of f.delta.tool_calls??[]){const R=(p=_.message.tool_calls)==null?void 0:p[k.index];R!=null&&R.type&&((R==null?void 0:R.type)==="function"?this._emit("tool_calls.function.arguments.delta",{name:($=R.function)==null?void 0:$.name,index:k.index,arguments:R.function.arguments,parsed_arguments:R.function.parsed_arguments,arguments_delta:((b=k.function)==null?void 0:b.arguments)??""}):R==null||R.type)}}},dt=function(e,t){var n,r,o;if(a(this,N,"m",Ce).call(this,e).done_tool_calls.has(t))return;const i=(n=e.message.tool_calls)==null?void 0:n[t];if(!i)throw new Error("no tool call snapshot");if(!i.type)throw new Error("tool call snapshot missing `type`");if(i.type==="function"){const l=(o=(r=a(this,Y,"f"))==null?void 0:r.tools)==null?void 0:o.find(c=>c.type==="function"&&c.function.name===i.function.name);this._emit("tool_calls.function.arguments.done",{name:i.function.name,index:t,arguments:i.function.arguments,parsed_arguments:Oe(l)?l.$parseRaw(i.function.arguments):l!=null&&l.function.strict?JSON.parse(i.function.arguments):null})}else i.type},ht=function(e){var t,n;const r=a(this,N,"m",Ce).call(this,e);if(e.message.content&&!r.content_done){r.content_done=!0;const o=a(this,N,"m",pt).call(this);this._emit("content.done",{content:e.message.content,parsed:o?o.$parseRaw(e.message.content):null})}e.message.refusal&&!r.refusal_done&&(r.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),(t=e.logprobs)!=null&&t.content&&!r.logprobs_content_done&&(r.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),(n=e.logprobs)!=null&&n.refusal&&!r.logprobs_refusal_done&&(r.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Te=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=a(this,ee,"f");if(!e)throw new w("request ended without sending any chunks");return v(this,ee,void 0),v(this,ae,[]),Xr(e,a(this,Y,"f"))},pt=function(){var e;const t=(e=a(this,Y,"f"))==null?void 0:e.response_format;return kt(t)?t:null},is=function(e){var t,n,r,o;let i=a(this,ee,"f");const{choices:l,...c}=e;i?Object.assign(i,c):i=v(this,ee,{...c,choices:[]});for(const{delta:d,finish_reason:m,index:u,logprobs:g=null,...S}of e.choices){let p=i.choices[u];if(p||(p=i.choices[u]={finish_reason:m,index:u,message:{},logprobs:g,...S}),g)if(!p.logprobs)p.logprobs=Object.assign({},g);else{const{content:k,refusal:R,...T}=g;Object.assign(p.logprobs,T),k&&((t=p.logprobs).content??(t.content=[]),p.logprobs.content.push(...k)),R&&((n=p.logprobs).refusal??(n.refusal=[]),p.logprobs.refusal.push(...R))}if(m&&(p.finish_reason=m,a(this,Y,"f")&&Js(a(this,Y,"f")))){if(m==="length")throw new Rs;if(m==="content_filter")throw new ks}if(Object.assign(p,S),!d)continue;const{content:$,refusal:b,function_call:E,role:f,tool_calls:_,...A}=d;if(Object.assign(p.message,A),b&&(p.message.refusal=(p.message.refusal||"")+b),f&&(p.message.role=f),E&&(p.message.function_call?(E.name&&(p.message.function_call.name=E.name),E.arguments&&((r=p.message.function_call).arguments??(r.arguments=""),p.message.function_call.arguments+=E.arguments)):p.message.function_call=E),$&&(p.message.content=(p.message.content||"")+$,!p.message.refusal&&a(this,N,"m",pt).call(this)&&(p.message.parsed=os(p.message.content))),_){p.message.tool_calls||(p.message.tool_calls=[]);for(const{index:k,id:R,type:T,function:P,...J}of _){const I=(o=p.message.tool_calls)[k]??(o[k]={});Object.assign(I,J),R&&(I.id=R),T&&(I.type=T),P&&(I.function??(I.function={name:P.name??"",arguments:""})),P!=null&&P.name&&(I.function.name=P.name),P!=null&&P.arguments&&(I.function.arguments+=P.arguments,Lr(a(this,Y,"f"),I)&&(I.function.parsed_arguments=os(I.function.arguments)))}}}return i},Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("chunk",r=>{const o=t.shift();o?o.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const o of t)o.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const o of t)o.reject(r);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((r,o)=>t.push({resolve:r,reject:o})).then(r=>r?{value:r,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new Q(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Xr(s,e){const{id:t,choices:n,created:r,model:o,system_fingerprint:i,...l}=s,c={...l,id:t,choices:n.map(({message:d,finish_reason:m,index:u,logprobs:g,...S})=>{if(!m)throw new w(`missing finish_reason for choice ${u}`);const{content:p=null,function_call:$,tool_calls:b,...E}=d,f=d.role;if(!f)throw new w(`missing role for choice ${u}`);if($){const{arguments:_,name:A}=$;if(_==null)throw new w(`missing function_call.arguments for choice ${u}`);if(!A)throw new w(`missing function_call.name for choice ${u}`);return{...S,message:{content:p,function_call:{arguments:_,name:A},role:f,refusal:d.refusal??null},finish_reason:m,index:u,logprobs:g}}return b?{...S,index:u,finish_reason:m,logprobs:g,message:{...E,role:f,content:p,refusal:d.refusal??null,tool_calls:b.map((_,A)=>{const{function:k,type:R,id:T,...P}=_,{arguments:J,name:I,...X}=k||{};if(T==null)throw new w(`missing choices[${u}].tool_calls[${A}].id +${Ne(s)}`);if(R==null)throw new w(`missing choices[${u}].tool_calls[${A}].type +${Ne(s)}`);if(I==null)throw new w(`missing choices[${u}].tool_calls[${A}].function.name +${Ne(s)}`);if(J==null)throw new w(`missing choices[${u}].tool_calls[${A}].function.arguments +${Ne(s)}`);return{...P,id:T,type:R,function:{...X,name:I,arguments:J}}})}}:{...S,message:{...E,content:p,role:f,refusal:d.refusal??null},finish_reason:m,index:u,logprobs:g}}),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return Tr(c,e)}function Ne(s){return JSON.stringify(s)}class Ge extends Ae{static fromReadableStream(e){const t=new Ge(null);return t._run(()=>t._fromReadableStream(e)),t}static runTools(e,t,n){const r=new Ge(t),o={...n,headers:{...n==null?void 0:n.headers,"X-Stainless-Helper-Method":"runTools"}};return r._run(()=>r._runTools(e,t,o)),r}}let Ct=class extends x{constructor(){super(...arguments),this.messages=new Fs(this._client)}create(s,e){return this._client.post("/chat/completions",{body:s,...e,stream:s.stream??!1})}retrieve(s,e){return this._client.get(h`/chat/completions/${s}`,e)}update(s,e,t){return this._client.post(h`/chat/completions/${s}`,{body:e,...t})}list(s={},e){return this._client.getAPIList("/chat/completions",C,{query:s,...e})}delete(s,e){return this._client.delete(h`/chat/completions/${s}`,e)}parse(s,e){return Mr(s.tools),this._client.chat.completions.create(s,{...e,headers:{...e==null?void 0:e.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap(t=>Et(t,s))}runTools(s,e){return s.stream?Ge.runTools(this._client,s,e):Pt.runTools(this._client,s,e)}stream(s,e){return Ae.createChatCompletion(this._client,s,e)}};Ct.Messages=Fs;class Tt extends x{constructor(){super(...arguments),this.completions=new Ct(this._client)}}Tt.Completions=Ct;const un=Symbol("brand.privateNullableHeaders"),as=Array.isArray;function*Hr(s){if(!s)return;if(un in s){const{values:n,nulls:r}=s;yield*n.entries();for(const o of r)yield[o,null];return}let e=!1,t;s instanceof Headers?t=s.entries():as(s)?t=s:(e=!0,t=Object.entries(s??{}));for(let n of t){const r=n[0];if(typeof r!="string")throw new TypeError("expected header name to be a string");const o=as(n[1])?n[1]:[n[1]];let i=!1;for(const l of o)l!==void 0&&(e&&!i&&(i=!0,yield[r,null]),yield[r,l])}}const y=s=>{const e=new Headers,t=new Set;for(const n of s){const r=new Set;for(const[o,i]of Hr(n)){const l=o.toLowerCase();r.has(l)||(e.delete(o),r.add(l)),i===null?(e.delete(o),t.add(l)):(e.append(o,i),t.delete(l))}}return{[un]:!0,values:e,nulls:t}};class dn extends x{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:y([{Accept:"application/octet-stream"},t==null?void 0:t.headers]),__binaryResponse:!0})}}class hn extends x{create(e,t){return this._client.post("/audio/transcriptions",ie({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class pn extends x{create(e,t){return this._client.post("/audio/translations",ie({body:e,...t,__metadata:{model:e.model}},this._client))}}class Re extends x{constructor(){super(...arguments),this.transcriptions=new hn(this._client),this.translations=new pn(this._client),this.speech=new dn(this._client)}}Re.Transcriptions=hn;Re.Translations=pn;Re.Speech=dn;class fn extends x{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(h`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",C,{query:e,...t})}cancel(e,t){return this._client.post(h`/batches/${e}/cancel`,t)}}class mn extends x{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}retrieve(e,t){return this._client.get(h`/assistants/${e}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(e,t,n){return this._client.post(h`/assistants/${e}`,{body:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}list(e={},t){return this._client.getAPIList("/assistants",C,{query:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}delete(e,t){return this._client.delete(h`/assistants/${e}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}}class gn extends x{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}}class yn extends x{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}}class st extends x{constructor(){super(...arguments),this.sessions=new gn(this._client),this.transcriptionSessions=new yn(this._client)}}st.Sessions=gn;st.TranscriptionSessions=yn;class wn extends x{create(e,t,n){return this._client.post(h`/threads/${e}/messages`,{body:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}retrieve(e,t,n){const{thread_id:r}=t;return this._client.get(h`/threads/${r}/messages/${e}`,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}update(e,t,n){const{thread_id:r,...o}=t;return this._client.post(h`/threads/${r}/messages/${e}`,{body:o,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}list(e,t={},n){return this._client.getAPIList(h`/threads/${e}/messages`,C,{query:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}delete(e,t,n){const{thread_id:r}=t;return this._client.delete(h`/threads/${r}/messages/${e}`,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}}class _n extends x{retrieve(e,t,n){const{thread_id:r,run_id:o,...i}=t;return this._client.get(h`/threads/${r}/runs/${o}/steps/${e}`,{query:i,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}list(e,t,n){const{thread_id:r,...o}=t;return this._client.getAPIList(h`/threads/${r}/runs/${e}/steps`,C,{query:o,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}}const Jr=s=>{if(typeof Buffer<"u"){const e=Buffer.from(s,"base64");return Array.from(new Float32Array(e.buffer,e.byteOffset,e.length/Float32Array.BYTES_PER_ELEMENT))}else{const e=atob(s),t=e.length,n=new Uint8Array(t);for(let r=0;r{var e,t,n,r,o;if(typeof globalThis.process<"u")return((t=(e=globalThis.process.env)==null?void 0:e[s])==null?void 0:t.trim())??void 0;if(typeof globalThis.Deno<"u")return(o=(r=(n=globalThis.Deno.env)==null?void 0:n.get)==null?void 0:r.call(n,s))==null?void 0:o.trim()};var M,re,At,G,Ue,K,oe,de,ne,Qe,F,We,Fe,Se,ve,be,ls,cs,us,ds,hs,ps,fs;class $e extends Rt{constructor(){super(...arguments),M.add(this),At.set(this,[]),G.set(this,{}),Ue.set(this,{}),K.set(this,void 0),oe.set(this,void 0),de.set(this,void 0),ne.set(this,void 0),Qe.set(this,void 0),F.set(this,void 0),We.set(this,void 0),Fe.set(this,void 0),Se.set(this,void 0)}[(At=new WeakMap,G=new WeakMap,Ue=new WeakMap,K=new WeakMap,oe=new WeakMap,de=new WeakMap,ne=new WeakMap,Qe=new WeakMap,F=new WeakMap,We=new WeakMap,Fe=new WeakMap,Se=new WeakMap,M=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("event",r=>{const o=t.shift();o?o.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const o of t)o.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const o of t)o.reject(r);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((r,o)=>t.push({resolve:r,reject:o})).then(r=>r?{value:r,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new re;return t._run(()=>t._fromReadableStream(e)),t}async _fromReadableStream(e,t){var n;const r=t==null?void 0:t.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),this._connected();const o=Q.fromReadableStream(e,this.controller);for await(const i of o)a(this,M,"m",ve).call(this,i);if((n=o.controller.signal)!=null&&n.aborted)throw new H;return this._addRun(a(this,M,"m",be).call(this))}toReadableStream(){return new Q(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,n,r){const o=new re;return o._run(()=>o._runToolAssistantStream(e,t,n,{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),o}async _createToolAssistantStream(e,t,n,r){var o;const i=r==null?void 0:r.signal;i&&(i.aborted&&this.controller.abort(),i.addEventListener("abort",()=>this.controller.abort()));const l={...n,stream:!0},c=await e.submitToolOutputs(t,l,{...r,signal:this.controller.signal});this._connected();for await(const d of c)a(this,M,"m",ve).call(this,d);if((o=c.controller.signal)!=null&&o.aborted)throw new H;return this._addRun(a(this,M,"m",be).call(this))}static createThreadAssistantStream(e,t,n){const r=new re;return r._run(()=>r._threadAssistantStream(e,t,{...n,headers:{...n==null?void 0:n.headers,"X-Stainless-Helper-Method":"stream"}})),r}static createAssistantStream(e,t,n,r){const o=new re;return o._run(()=>o._runAssistantStream(e,t,n,{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),o}currentEvent(){return a(this,We,"f")}currentRun(){return a(this,Fe,"f")}currentMessageSnapshot(){return a(this,K,"f")}currentRunStepSnapshot(){return a(this,Se,"f")}async finalRunSteps(){return await this.done(),Object.values(a(this,G,"f"))}async finalMessages(){return await this.done(),Object.values(a(this,Ue,"f"))}async finalRun(){if(await this.done(),!a(this,oe,"f"))throw Error("Final run was not received.");return a(this,oe,"f")}async _createThreadAssistantStream(e,t,n){var r;const o=n==null?void 0:n.signal;o&&(o.aborted&&this.controller.abort(),o.addEventListener("abort",()=>this.controller.abort()));const i={...t,stream:!0},l=await e.createAndRun(i,{...n,signal:this.controller.signal});this._connected();for await(const c of l)a(this,M,"m",ve).call(this,c);if((r=l.controller.signal)!=null&&r.aborted)throw new H;return this._addRun(a(this,M,"m",be).call(this))}async _createAssistantStream(e,t,n,r){var o;const i=r==null?void 0:r.signal;i&&(i.aborted&&this.controller.abort(),i.addEventListener("abort",()=>this.controller.abort()));const l={...n,stream:!0},c=await e.create(t,l,{...r,signal:this.controller.signal});this._connected();for await(const d of c)a(this,M,"m",ve).call(this,d);if((o=c.controller.signal)!=null&&o.aborted)throw new H;return this._addRun(a(this,M,"m",be).call(this))}static accumulateDelta(e,t){for(const[n,r]of Object.entries(t)){if(!e.hasOwnProperty(n)){e[n]=r;continue}let o=e[n];if(o==null){e[n]=r;continue}if(n==="index"||n==="type"){e[n]=r;continue}if(typeof o=="string"&&typeof r=="string")o+=r;else if(typeof o=="number"&&typeof r=="number")o+=r;else if(it(o)&&it(r))o=this.accumulateDelta(o,r);else if(Array.isArray(o)&&Array.isArray(r)){if(o.every(i=>typeof i=="string"||typeof i=="number")){o.push(...r);continue}for(const i of r){if(!it(i))throw new Error(`Expected array delta entry to be an object but got: ${i}`);const l=i.index;if(l==null)throw console.error(i),new Error("Expected array delta entry to have an `index` property");if(typeof l!="number")throw new Error(`Expected array delta entry \`index\` property to be a number but got ${l}`);const c=o[l];c==null?o.push(i):o[l]=this.accumulateDelta(c,i)}continue}else throw Error(`Unhandled record type: ${n}, deltaValue: ${r}, accValue: ${o}`);e[n]=o}return e}_addRun(e){return e}async _threadAssistantStream(e,t,n){return await this._createThreadAssistantStream(t,e,n)}async _runAssistantStream(e,t,n,r){return await this._createAssistantStream(t,e,n,r)}async _runToolAssistantStream(e,t,n,r){return await this._createToolAssistantStream(t,e,n,r)}}re=$e,ve=function(s){if(!this.ended)switch(v(this,We,s),a(this,M,"m",us).call(this,s),s.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":a(this,M,"m",fs).call(this,s);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":a(this,M,"m",cs).call(this,s);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":a(this,M,"m",ls).call(this,s);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},be=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!a(this,oe,"f"))throw Error("Final run has not been received");return a(this,oe,"f")},ls=function(s){const[e,t]=a(this,M,"m",hs).call(this,s,a(this,K,"f"));v(this,K,e),a(this,Ue,"f")[e.id]=e;for(const n of t){const r=e.content[n.index];(r==null?void 0:r.type)=="text"&&this._emit("textCreated",r.text)}switch(s.event){case"thread.message.created":this._emit("messageCreated",s.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",s.data.delta,e),s.data.delta.content)for(const n of s.data.delta.content){if(n.type=="text"&&n.text){let r=n.text,o=e.content[n.index];if(o&&o.type=="text")this._emit("textDelta",r,o.text);else throw Error("The snapshot associated with this text delta is not text or missing")}if(n.index!=a(this,de,"f")){if(a(this,ne,"f"))switch(a(this,ne,"f").type){case"text":this._emit("textDone",a(this,ne,"f").text,a(this,K,"f"));break;case"image_file":this._emit("imageFileDone",a(this,ne,"f").image_file,a(this,K,"f"));break}v(this,de,n.index)}v(this,ne,e.content[n.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(a(this,de,"f")!==void 0){const n=s.data.content[a(this,de,"f")];if(n)switch(n.type){case"image_file":this._emit("imageFileDone",n.image_file,a(this,K,"f"));break;case"text":this._emit("textDone",n.text,a(this,K,"f"));break}}a(this,K,"f")&&this._emit("messageDone",s.data),v(this,K,void 0)}},cs=function(s){const e=a(this,M,"m",ds).call(this,s);switch(v(this,Se,e),s.event){case"thread.run.step.created":this._emit("runStepCreated",s.data);break;case"thread.run.step.delta":const t=s.data.delta;if(t.step_details&&t.step_details.type=="tool_calls"&&t.step_details.tool_calls&&e.step_details.type=="tool_calls")for(const n of t.step_details.tool_calls)n.index==a(this,Qe,"f")?this._emit("toolCallDelta",n,e.step_details.tool_calls[n.index]):(a(this,F,"f")&&this._emit("toolCallDone",a(this,F,"f")),v(this,Qe,n.index),v(this,F,e.step_details.tool_calls[n.index]),a(this,F,"f")&&this._emit("toolCallCreated",a(this,F,"f")));this._emit("runStepDelta",s.data.delta,e);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":v(this,Se,void 0),s.data.step_details.type=="tool_calls"&&a(this,F,"f")&&(this._emit("toolCallDone",a(this,F,"f")),v(this,F,void 0)),this._emit("runStepDone",s.data,e);break}},us=function(s){a(this,At,"f").push(s),this._emit("event",s)},ds=function(s){switch(s.event){case"thread.run.step.created":return a(this,G,"f")[s.data.id]=s.data,s.data;case"thread.run.step.delta":let e=a(this,G,"f")[s.data.id];if(!e)throw Error("Received a RunStepDelta before creation of a snapshot");let t=s.data;if(t.delta){const n=re.accumulateDelta(e,t.delta);a(this,G,"f")[s.data.id]=n}return a(this,G,"f")[s.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":a(this,G,"f")[s.data.id]=s.data;break}if(a(this,G,"f")[s.data.id])return a(this,G,"f")[s.data.id];throw new Error("No snapshot available")},hs=function(s,e){let t=[];switch(s.event){case"thread.message.created":return[s.data,t];case"thread.message.delta":if(!e)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=s.data;if(n.delta.content)for(const r of n.delta.content)if(r.index in e.content){let o=e.content[r.index];e.content[r.index]=a(this,M,"m",ps).call(this,r,o)}else e.content[r.index]=r,t.push(r);return[e,t];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(e)return[e,t];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},ps=function(s,e){return re.accumulateDelta(e,s)},fs=function(s){switch(v(this,Fe,s.data),s.event){case"thread.run.created":break;case"thread.run.queued":break;case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":v(this,oe,s.data),a(this,F,"f")&&(this._emit("toolCallDone",a(this,F,"f")),v(this,F,void 0));break}};let Nt=class extends x{constructor(){super(...arguments),this.steps=new _n(this._client)}create(s,e,t){const{include:n,...r}=e;return this._client.post(h`/threads/${s}/runs`,{query:{include:n},body:r,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers]),stream:e.stream??!1})}retrieve(s,e,t){const{thread_id:n}=e;return this._client.get(h`/threads/${n}/runs/${s}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(s,e,t){const{thread_id:n,...r}=e;return this._client.post(h`/threads/${n}/runs/${s}`,{body:r,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}list(s,e={},t){return this._client.getAPIList(h`/threads/${s}/runs`,C,{query:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}cancel(s,e,t){const{thread_id:n}=e;return this._client.post(h`/threads/${n}/runs/${s}/cancel`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}async createAndPoll(s,e,t){const n=await this.create(s,e,t);return await this.poll(n.id,{thread_id:s},t)}createAndStream(s,e,t){return $e.createAssistantStream(s,this._client.beta.threads.runs,e,t)}async poll(s,e,t){var n;const r=y([t==null?void 0:t.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":((n=t==null?void 0:t.pollIntervalMs)==null?void 0:n.toString())??void 0}]);for(;;){const{data:o,response:i}=await this.retrieve(s,e,{...t,headers:{...t==null?void 0:t.headers,...r}}).withResponse();switch(o.status){case"queued":case"in_progress":case"cancelling":let l=5e3;if(t!=null&&t.pollIntervalMs)l=t.pollIntervalMs;else{const c=i.headers.get("openai-poll-after-ms");if(c){const d=parseInt(c);isNaN(d)||(l=d)}}await Ie(l);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return o}}}stream(s,e,t){return $e.createAssistantStream(s,this._client.beta.threads.runs,e,t)}submitToolOutputs(s,e,t){const{thread_id:n,...r}=e;return this._client.post(h`/threads/${n}/runs/${s}/submit_tool_outputs`,{body:r,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers]),stream:e.stream??!1})}async submitToolOutputsAndPoll(s,e,t){const n=await this.submitToolOutputs(s,e,t);return await this.poll(n.id,e,t)}submitToolOutputsStream(s,e,t){return $e.createToolAssistantStream(s,this._client.beta.threads.runs,e,t)}};Nt.Steps=_n;class nt extends x{constructor(){super(...arguments),this.runs=new Nt(this._client),this.messages=new wn(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}retrieve(e,t){return this._client.get(h`/threads/${e}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(e,t,n){return this._client.post(h`/threads/${e}`,{body:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}delete(e,t){return this._client.delete(h`/threads/${e}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const n=await this.createAndRun(e,t);return await this.runs.poll(n.id,{thread_id:n.thread_id},t)}createAndRunStream(e,t){return $e.createThreadAssistantStream(e,this._client.beta.threads,t)}}nt.Runs=Nt;nt.Messages=wn;class ke extends x{constructor(){super(...arguments),this.realtime=new st(this._client),this.assistants=new mn(this._client),this.threads=new nt(this._client)}}ke.Realtime=st;ke.Assistants=mn;ke.Threads=nt;class vn extends x{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class bn extends x{retrieve(e,t,n){const{container_id:r}=t;return this._client.get(h`/containers/${r}/files/${e}/content`,{...n,headers:y([{Accept:"application/binary"},n==null?void 0:n.headers]),__binaryResponse:!0})}}let jt=class extends x{constructor(){super(...arguments),this.content=new bn(this._client)}create(s,e,t){return this._client.post(h`/containers/${s}/files`,ie({body:e,...t},this._client))}retrieve(s,e,t){const{container_id:n}=e;return this._client.get(h`/containers/${n}/files/${s}`,t)}list(s,e={},t){return this._client.getAPIList(h`/containers/${s}/files`,C,{query:e,...t})}delete(s,e,t){const{container_id:n}=e;return this._client.delete(h`/containers/${n}/files/${s}`,{...t,headers:y([{Accept:"*/*"},t==null?void 0:t.headers])})}};jt.Content=bn;class Lt extends x{constructor(){super(...arguments),this.files=new jt(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(h`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",C,{query:e,...t})}delete(e,t){return this._client.delete(h`/containers/${e}`,{...t,headers:y([{Accept:"*/*"},t==null?void 0:t.headers])})}}Lt.Files=jt;class xn extends x{create(e,t){const n=!!e.encoding_format;let r=n?e.encoding_format:"base64";n&&q(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const o=this._client.post("/embeddings",{body:{...e,encoding_format:r},...t});return n?o:(q(this._client).debug("embeddings/decoding base64 embeddings from base64"),o._thenUnwrap(i=>(i&&i.data&&i.data.forEach(l=>{const c=l.embedding;l.embedding=Jr(c)}),i)))}}class Sn extends x{retrieve(e,t,n){const{eval_id:r,run_id:o}=t;return this._client.get(h`/evals/${r}/runs/${o}/output_items/${e}`,n)}list(e,t,n){const{eval_id:r,...o}=t;return this._client.getAPIList(h`/evals/${r}/runs/${e}/output_items`,C,{query:o,...n})}}class Mt extends x{constructor(){super(...arguments),this.outputItems=new Sn(this._client)}create(e,t,n){return this._client.post(h`/evals/${e}/runs`,{body:t,...n})}retrieve(e,t,n){const{eval_id:r}=t;return this._client.get(h`/evals/${r}/runs/${e}`,n)}list(e,t={},n){return this._client.getAPIList(h`/evals/${e}/runs`,C,{query:t,...n})}delete(e,t,n){const{eval_id:r}=t;return this._client.delete(h`/evals/${r}/runs/${e}`,n)}cancel(e,t,n){const{eval_id:r}=t;return this._client.post(h`/evals/${r}/runs/${e}`,n)}}Mt.OutputItems=Sn;class Dt extends x{constructor(){super(...arguments),this.runs=new Mt(this._client)}create(e,t){return this._client.post("/evals",{body:e,...t})}retrieve(e,t){return this._client.get(h`/evals/${e}`,t)}update(e,t,n){return this._client.post(h`/evals/${e}`,{body:t,...n})}list(e={},t){return this._client.getAPIList("/evals",C,{query:e,...t})}delete(e,t){return this._client.delete(h`/evals/${e}`,t)}}Dt.Runs=Mt;let $n=class extends x{create(s,e){return this._client.post("/files",ie({body:s,...e},this._client))}retrieve(s,e){return this._client.get(h`/files/${s}`,e)}list(s={},e){return this._client.getAPIList("/files",C,{query:s,...e})}delete(s,e){return this._client.delete(h`/files/${s}`,e)}content(s,e){return this._client.get(h`/files/${s}/content`,{...e,headers:y([{Accept:"application/binary"},e==null?void 0:e.headers]),__binaryResponse:!0})}async waitForProcessing(s,{pollInterval:e=5e3,maxWait:t=30*60*1e3}={}){const n=new Set(["processed","error","deleted"]),r=Date.now();let o=await this.retrieve(s);for(;!o.status||!n.has(o.status);)if(await Ie(e),o=await this.retrieve(s),Date.now()-r>t)throw new It({message:`Giving up on waiting for file ${s} to finish processing after ${t} milliseconds.`});return o}};class An extends x{}let In=class extends x{run(s,e){return this._client.post("/fine_tuning/alpha/graders/run",{body:s,...e})}validate(s,e){return this._client.post("/fine_tuning/alpha/graders/validate",{body:s,...e})}};class qt extends x{constructor(){super(...arguments),this.graders=new In(this._client)}}qt.Graders=In;class On extends x{create(e,t,n){return this._client.getAPIList(h`/fine_tuning/checkpoints/${e}/permissions`,tt,{body:t,method:"post",...n})}retrieve(e,t={},n){return this._client.get(h`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...n})}delete(e,t,n){const{fine_tuned_model_checkpoint:r}=t;return this._client.delete(h`/fine_tuning/checkpoints/${r}/permissions/${e}`,n)}}let Bt=class extends x{constructor(){super(...arguments),this.permissions=new On(this._client)}};Bt.Permissions=On;class Rn extends x{list(e,t={},n){return this._client.getAPIList(h`/fine_tuning/jobs/${e}/checkpoints`,C,{query:t,...n})}}class Ut extends x{constructor(){super(...arguments),this.checkpoints=new Rn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(h`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",C,{query:e,...t})}cancel(e,t){return this._client.post(h`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},n){return this._client.getAPIList(h`/fine_tuning/jobs/${e}/events`,C,{query:t,...n})}pause(e,t){return this._client.post(h`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(h`/fine_tuning/jobs/${e}/resume`,t)}}Ut.Checkpoints=Rn;class he extends x{constructor(){super(...arguments),this.methods=new An(this._client),this.jobs=new Ut(this._client),this.checkpoints=new Bt(this._client),this.alpha=new qt(this._client)}}he.Methods=An;he.Jobs=Ut;he.Checkpoints=Bt;he.Alpha=qt;class kn extends x{}class Wt extends x{constructor(){super(...arguments),this.graderModels=new kn(this._client)}}Wt.GraderModels=kn;class En extends x{createVariation(e,t){return this._client.post("/images/variations",ie({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",ie({body:e,...t},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t})}}class Pn extends x{retrieve(e,t){return this._client.get(h`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",tt,e)}delete(e,t){return this._client.delete(h`/models/${e}`,t)}}class Cn extends x{create(e,t){return this._client.post("/moderations",{body:e,...t})}}function Kr(s,e){return!e||!zr(e)?{...s,output_parsed:null,output:s.output.map(t=>t.type==="function_call"?{...t,parsed_arguments:null}:t.type==="message"?{...t,content:t.content.map(n=>({...n,parsed:null}))}:t)}:Tn(s,e)}function Tn(s,e){const t=s.output.map(r=>{if(r.type==="function_call")return{...r,parsed_arguments:Yr(e,r)};if(r.type==="message"){const o=r.content.map(i=>i.type==="output_text"?{...i,parsed:Vr(e,i.text)}:i);return{...r,content:o}}return r}),n=Object.assign({},s,{output:t});return Object.getOwnPropertyDescriptor(s,"output_text")||Nn(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const r of n.output)if(r.type==="message"){for(const o of r.content)if(o.type==="output_text"&&o.parsed!==null)return o.parsed}return null}}),n}function Vr(s,e){var t,n,r,o;return((n=(t=s.text)==null?void 0:t.format)==null?void 0:n.type)!=="json_schema"?null:"$parseRaw"in((r=s.text)==null?void 0:r.format)?((o=s.text)==null?void 0:o.format).$parseRaw(e):JSON.parse(e)}function zr(s){var e;return!!kt((e=s.text)==null?void 0:e.format)}function Gr(s){return(s==null?void 0:s.$brand)==="auto-parseable-tool"}function Qr(s,e){return s.find(t=>t.type==="function"&&t.name===e)}function Yr(s,e){const t=Qr(s.tools??[],e.name);return{...e,...e,parsed_arguments:Gr(t)?t.$parseRaw(e.arguments):t!=null&&t.strict?JSON.parse(e.arguments):null}}function Nn(s){const e=[];for(const t of s.output)if(t.type==="message")for(const n of t.content)n.type==="output_text"&&e.push(n.text);s.output_text=e.join("")}var le,je,te,Le,ms,gs,ys,ws;class Ft extends Rt{constructor(e){super(),le.add(this),je.set(this,void 0),te.set(this,void 0),Le.set(this,void 0),v(this,je,e)}static createResponse(e,t,n){const r=new Ft(t);return r._run(()=>r._createOrRetrieveResponse(e,t,{...n,headers:{...n==null?void 0:n.headers,"X-Stainless-Helper-Method":"stream"}})),r}async _createOrRetrieveResponse(e,t,n){var r;const o=n==null?void 0:n.signal;o&&(o.aborted&&this.controller.abort(),o.addEventListener("abort",()=>this.controller.abort())),a(this,le,"m",ms).call(this);let i,l=null;"response_id"in t?(i=await e.responses.retrieve(t.response_id,{stream:!0},{...n,signal:this.controller.signal,stream:!0}),l=t.starting_after??null):i=await e.responses.create({...t,stream:!0},{...n,signal:this.controller.signal}),this._connected();for await(const c of i)a(this,le,"m",gs).call(this,c,l);if((r=i.controller.signal)!=null&&r.aborted)throw new H;return a(this,le,"m",ys).call(this)}[(je=new WeakMap,te=new WeakMap,Le=new WeakMap,le=new WeakSet,ms=function(){this.ended||v(this,te,void 0)},gs=function(e,t){if(this.ended)return;const n=(o,i)=>{(t==null||i.sequence_number>t)&&this._emit(o,i)},r=a(this,le,"m",ws).call(this,e);switch(n("event",e),e.type){case"response.output_text.delta":{const o=r.output[e.output_index];if(!o)throw new w(`missing output at index ${e.output_index}`);if(o.type==="message"){const i=o.content[e.content_index];if(!i)throw new w(`missing content at index ${e.content_index}`);if(i.type!=="output_text")throw new w(`expected content to be 'output_text', got ${i.type}`);n("response.output_text.delta",{...e,snapshot:i.text})}break}case"response.function_call_arguments.delta":{const o=r.output[e.output_index];if(!o)throw new w(`missing output at index ${e.output_index}`);o.type==="function_call"&&n("response.function_call_arguments.delta",{...e,snapshot:o.arguments});break}default:n(e.type,e);break}},ys=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=a(this,te,"f");if(!e)throw new w("request ended without sending any events");v(this,te,void 0);const t=Zr(e,a(this,je,"f"));return v(this,Le,t),t},ws=function(e){let t=a(this,te,"f");if(!t){if(e.type!=="response.created")throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=v(this,te,e.response),t}switch(e.type){case"response.output_item.added":{t.output.push(e.item);break}case"response.content_part.added":{const n=t.output[e.output_index];if(!n)throw new w(`missing output at index ${e.output_index}`);n.type==="message"&&n.content.push(e.part);break}case"response.output_text.delta":{const n=t.output[e.output_index];if(!n)throw new w(`missing output at index ${e.output_index}`);if(n.type==="message"){const r=n.content[e.content_index];if(!r)throw new w(`missing content at index ${e.content_index}`);if(r.type!=="output_text")throw new w(`expected content to be 'output_text', got ${r.type}`);r.text+=e.delta}break}case"response.function_call_arguments.delta":{const n=t.output[e.output_index];if(!n)throw new w(`missing output at index ${e.output_index}`);n.type==="function_call"&&(n.arguments+=e.delta);break}case"response.completed":{v(this,te,e.response);break}}return t},Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("event",r=>{const o=t.shift();o?o.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const o of t)o.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const o of t)o.reject(r);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((r,o)=>t.push({resolve:r,reject:o})).then(r=>r?{value:r,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=a(this,Le,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}function Zr(s,e){return Kr(s,e)}class jn extends x{list(e,t={},n){return this._client.getAPIList(h`/responses/${e}/input_items`,C,{query:t,...n})}}class Xt extends x{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap(n=>("object"in n&&n.object==="response"&&Nn(n),n))}retrieve(e,t={},n){return this._client.get(h`/responses/${e}`,{query:t,...n,stream:(t==null?void 0:t.stream)??!1})}delete(e,t){return this._client.delete(h`/responses/${e}`,{...t,headers:y([{Accept:"*/*"},t==null?void 0:t.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap(n=>Tn(n,e))}stream(e,t){return Ft.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(h`/responses/${e}/cancel`,{...t,headers:y([{Accept:"*/*"},t==null?void 0:t.headers])})}}Xt.InputItems=jn;class Ln extends x{create(e,t,n){return this._client.post(h`/uploads/${e}/parts`,ie({body:t,...n},this._client))}}class Ht extends x{constructor(){super(...arguments),this.parts=new Ln(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(h`/uploads/${e}/cancel`,t)}complete(e,t,n){return this._client.post(h`/uploads/${e}/complete`,{body:t,...n})}}Ht.Parts=Ln;const eo=async s=>{const e=await Promise.allSettled(s),t=e.filter(r=>r.status==="rejected");if(t.length){for(const r of t)console.error(r.reason);throw new Error(`${t.length} promise(s) failed - see the above errors`)}const n=[];for(const r of e)r.status==="fulfilled"&&n.push(r.value);return n};class Mn extends x{create(e,t,n){return this._client.post(h`/vector_stores/${e}/file_batches`,{body:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}retrieve(e,t,n){const{vector_store_id:r}=t;return this._client.get(h`/vector_stores/${r}/file_batches/${e}`,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}cancel(e,t,n){const{vector_store_id:r}=t;return this._client.post(h`/vector_stores/${r}/file_batches/${e}/cancel`,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}async createAndPoll(e,t,n){const r=await this.create(e,t);return await this.poll(e,r.id,n)}listFiles(e,t,n){const{vector_store_id:r,...o}=t;return this._client.getAPIList(h`/vector_stores/${r}/file_batches/${e}/files`,C,{query:o,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}async poll(e,t,n){var r;const o=y([n==null?void 0:n.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":((r=n==null?void 0:n.pollIntervalMs)==null?void 0:r.toString())??void 0}]);for(;;){const{data:i,response:l}=await this.retrieve(t,{vector_store_id:e},{...n,headers:o}).withResponse();switch(i.status){case"in_progress":let c=5e3;if(n!=null&&n.pollIntervalMs)c=n.pollIntervalMs;else{const d=l.headers.get("openai-poll-after-ms");if(d){const m=parseInt(d);isNaN(m)||(c=m)}}await Ie(c);break;case"failed":case"cancelled":case"completed":return i}}}async uploadAndPoll(e,{files:t,fileIds:n=[]},r){if(t==null||t.length==0)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const o=(r==null?void 0:r.maxConcurrency)??5,i=Math.min(o,t.length),l=this._client,c=t.values(),d=[...n];async function m(g){for(let S of g){const p=await l.files.create({file:S,purpose:"assistants"},r);d.push(p.id)}}const u=Array(i).fill(c).map(m);return await eo(u),await this.createAndPoll(e,{file_ids:d})}}class Dn extends x{create(e,t,n){return this._client.post(h`/vector_stores/${e}/files`,{body:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}retrieve(e,t,n){const{vector_store_id:r}=t;return this._client.get(h`/vector_stores/${r}/files/${e}`,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}update(e,t,n){const{vector_store_id:r,...o}=t;return this._client.post(h`/vector_stores/${r}/files/${e}`,{body:o,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}list(e,t={},n){return this._client.getAPIList(h`/vector_stores/${e}/files`,C,{query:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}delete(e,t,n){const{vector_store_id:r}=t;return this._client.delete(h`/vector_stores/${r}/files/${e}`,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}async createAndPoll(e,t,n){const r=await this.create(e,t,n);return await this.poll(e,r.id,n)}async poll(e,t,n){var r;const o=y([n==null?void 0:n.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":((r=n==null?void 0:n.pollIntervalMs)==null?void 0:r.toString())??void 0}]);for(;;){const i=await this.retrieve(t,{vector_store_id:e},{...n,headers:o}).withResponse(),l=i.data;switch(l.status){case"in_progress":let c=5e3;if(n!=null&&n.pollIntervalMs)c=n.pollIntervalMs;else{const d=i.response.headers.get("openai-poll-after-ms");if(d){const m=parseInt(d);isNaN(m)||(c=m)}}await Ie(c);break;case"failed":case"completed":return l}}}async upload(e,t,n){const r=await this._client.files.create({file:t,purpose:"assistants"},n);return this.create(e,{file_id:r.id},n)}async uploadAndPoll(e,t,n){const r=await this.upload(e,t,n);return await this.poll(e,r.id,n)}content(e,t,n){const{vector_store_id:r}=t;return this._client.getAPIList(h`/vector_stores/${r}/files/${e}/content`,tt,{...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}}class rt extends x{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Mn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}retrieve(e,t){return this._client.get(h`/vector_stores/${e}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(e,t,n){return this._client.post(h`/vector_stores/${e}`,{body:t,...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",C,{query:e,...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}delete(e,t){return this._client.delete(h`/vector_stores/${e}`,{...t,headers:y([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}search(e,t,n){return this._client.getAPIList(h`/vector_stores/${e}/search`,tt,{body:t,method:"post",...n,headers:y([{"OpenAI-Beta":"assistants=v2"},n==null?void 0:n.headers])})}}rt.Files=Dn;rt.FileBatches=Mn;var Jt,Xe;class O{constructor({baseURL:e=pe("OPENAI_BASE_URL"),apiKey:t=pe("OPENAI_API_KEY"),organization:n=pe("OPENAI_ORG_ID")??null,project:r=pe("OPENAI_PROJECT_ID")??null,...o}={}){if(Xe.set(this,void 0),this.completions=new vn(this),this.chat=new Tt(this),this.embeddings=new xn(this),this.files=new $n(this),this.images=new En(this),this.audio=new Re(this),this.moderations=new Cn(this),this.models=new Pn(this),this.fineTuning=new he(this),this.graders=new Wt(this),this.vectorStores=new rt(this),this.beta=new ke(this),this.batches=new fn(this),this.uploads=new Ht(this),this.responses=new Xt(this),this.evals=new Dt(this),this.containers=new Lt(this),t===void 0)throw new w("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).");const i={apiKey:t,organization:n,project:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&Yn())throw new w(`It looks like you're running in a browser-like environment. + +This is disabled by default, as it risks exposing your secret API credentials to attackers. +If you understand the risks and have appropriate mitigations in place, +you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., + +new OpenAI({ apiKey, dangerouslyAllowBrowser: true }); + +https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety +`);this.baseURL=i.baseURL,this.timeout=i.timeout??Jt.DEFAULT_TIMEOUT,this.logger=i.logger??console;const l="warn";this.logLevel=l,this.logLevel=zt(i.logLevel,"ClientOptions.logLevel",this)??zt(pe("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??l,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??nr(),v(this,Xe,or),this._options=i,this.apiKey=t,this.organization=n,this.project=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}authHeaders(e){return y([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return mr(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${ce}`}defaultIdempotencyKey(){return`stainless-node-retry-${_s()}`}makeStatusError(e,t,n,r){return D.generate(e,t,n,r)}buildURL(e,t){const n=Hn(e)?new URL(e):new URL(this.baseURL+(this.baseURL.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),r=this.defaultQuery();return Kn(r)||(t={...r,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(n.search=this.stringifyQuery(t)),n.toString()}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then(r=>({method:e,path:t,...r})))}request(e,t=null){return new et(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){var r,o;const i=await e,l=i.maxRetries??this.maxRetries;t==null&&(t=l),await this.prepareOptions(i);const{req:c,url:d,timeout:m}=this.buildRequest(i,{retryCount:l-t});await this.prepareRequest(c,{url:d,options:i});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),g=n===void 0?"":`, retryOf: ${n}`,S=Date.now();if(q(this).debug(`[${u}] sending request`,se({retryOfRequestLogID:n,method:i.method,url:d,options:i,headers:c.headers})),(r=i.signal)!=null&&r.aborted)throw new H;const p=new AbortController,$=await this.fetchWithTimeout(d,c,m,p).catch(mt),b=Date.now();if($ instanceof Error){const _=`retrying, ${t} attempts remaining`;if((o=i.signal)!=null&&o.aborted)throw new H;const A=ft($)||/timed? ?out/i.test(String($)+("cause"in $?String($.cause):""));if(t)return q(this).info(`[${u}] connection ${A?"timed out":"failed"} - ${_}`),q(this).debug(`[${u}] connection ${A?"timed out":"failed"} (${_})`,se({retryOfRequestLogID:n,url:d,durationMs:b-S,message:$.message})),this.retryRequest(i,t,n??u);throw q(this).info(`[${u}] connection ${A?"timed out":"failed"} - error; no more retries left`),q(this).debug(`[${u}] connection ${A?"timed out":"failed"} (error; no more retries left)`,se({retryOfRequestLogID:n,url:d,durationMs:b-S,message:$.message})),A?new It:new Ye({cause:$})}const E=[...$.headers.entries()].filter(([_])=>_==="x-request-id").map(([_,A])=>", "+_+": "+JSON.stringify(A)).join(""),f=`[${u}${g}${E}] ${c.method} ${d} ${$.ok?"succeeded":"failed"} with status ${$.status} in ${b-S}ms`;if(!$.ok){const _=this.shouldRetry($);if(t&&_){const P=`retrying, ${t} attempts remaining`;return await rr($.body),q(this).info(`${f} - ${P}`),q(this).debug(`[${u}] response error (${P})`,se({retryOfRequestLogID:n,url:$.url,status:$.status,headers:$.headers,durationMs:b-S})),this.retryRequest(i,t,n??u,$.headers)}const A=_?"error; no more retries left":"error; not retryable";q(this).info(`${f} - ${A}`);const k=await $.text().catch(P=>mt(P).message),R=Gn(k),T=R?void 0:k;throw q(this).debug(`[${u}] response error (${A})`,se({retryOfRequestLogID:n,url:$.url,status:$.status,headers:$.headers,message:T,durationMs:Date.now()-S})),this.makeStatusError($.status,R,T,$.headers)}return q(this).info(f),q(this).debug(`[${u}] response start`,se({retryOfRequestLogID:n,url:$.url,status:$.status,headers:$.headers,durationMs:b-S})),{response:$,options:i,controller:p,requestLogID:u,retryOfRequestLogID:n,startTime:S}}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}requestAPIList(e,t){const n=this.makeRequest(t,null,void 0);return new Sr(this,n,e)}async fetchWithTimeout(e,t,n,r){const{signal:o,method:i,...l}=t||{};o&&o.addEventListener("abort",()=>r.abort());const c=setTimeout(()=>r.abort(),n),d=globalThis.ReadableStream&&l.body instanceof globalThis.ReadableStream||typeof l.body=="object"&&l.body!==null&&Symbol.asyncIterator in l.body,m={signal:r.signal,...d?{duplex:"half"}:{},method:"GET",...l};i&&(m.method=i.toUpperCase());try{return await this.fetch.call(void 0,e,m)}finally{clearTimeout(c)}}shouldRetry(e){const t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,n,r){let o;const i=r==null?void 0:r.get("retry-after-ms");if(i){const c=parseFloat(i);Number.isNaN(c)||(o=c)}const l=r==null?void 0:r.get("retry-after");if(l&&!o){const c=parseFloat(l);Number.isNaN(c)?o=Date.parse(l)-Date.now():o=c*1e3}if(!(o&&0<=o&&o<60*1e3)){const c=e.maxRetries??this.maxRetries;o=this.calculateDefaultRetryTimeoutMillis(t,c)}return await Ie(o),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){const n=t-e,r=Math.min(.5*Math.pow(2,n),8),o=1-Math.random()*.25;return r*o*1e3}buildRequest(e,{retryCount:t=0}={}){const n={...e},{method:r,path:o,query:i}=n,l=this.buildURL(o,i);"timeout"in n&&zn("timeout",n.timeout),n.timeout=n.timeout??this.timeout;const{bodyHeaders:c,body:d}=this.buildBody({options:n}),m=this.buildHeaders({options:e,method:r,bodyHeaders:c,retryCount:t});return{req:{method:r,headers:m,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&d instanceof globalThis.ReadableStream&&{duplex:"half"},...d&&{body:d},...this.fetchOptions??{},...n.fetchOptions??{}},url:l,timeout:n.timeout}}buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:r}){let o={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=e.idempotencyKey);const i=y([o,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(r),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...sr(),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(i),i.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const n=y([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||typeof e=="string"&&n.values.has("content-type")||e instanceof Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:typeof e=="object"&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&typeof e.next=="function")?{bodyHeaders:void 0,body:Ps(e)}:a(this,Xe,"f").call(this,{body:e,headers:n})}}Jt=O,Xe=new WeakMap;O.OpenAI=Jt;O.DEFAULT_TIMEOUT=6e5;O.OpenAIError=w;O.APIError=D;O.APIConnectionError=Ye;O.APIConnectionTimeoutError=It;O.APIUserAbortError=H;O.NotFoundError=Ss;O.ConflictError=$s;O.RateLimitError=Is;O.BadRequestError=vs;O.AuthenticationError=bs;O.InternalServerError=Os;O.PermissionDeniedError=xs;O.UnprocessableEntityError=As;O.toFile=kr;O.Completions=vn;O.Chat=Tt;O.Embeddings=xn;O.Files=$n;O.Images=En;O.Audio=Re;O.Moderations=Cn;O.Models=Pn;O.FineTuning=he;O.Graders=Wt;O.VectorStores=rt;O.Beta=ke;O.Batches=fn;O.Uploads=Ht;O.Responses=Xt;O.Evals=Dt;O.Containers=Lt;class to{constructor(){this.clients=new Map}getClient(e,t){var n;const r=`${e}-${t.baseUrl}-${(n=t.apiKey)==null?void 0:n.slice(-8)}`;if(!this.clients.has(r)){let o;switch(e){case"openai":case"deepseek":case"deepseek-v3":case"deepseek-reasoner":case"custom":o=new O({baseURL:t.baseUrl,apiKey:t.apiKey,dangerouslyAllowBrowser:!0});break;case"claude":o=new O({baseURL:t.baseUrl,apiKey:t.apiKey,dangerouslyAllowBrowser:!0,defaultHeaders:{"anthropic-version":"2023-06-01","content-type":"application/json"}});break;case"gemini":o=new O({baseURL:t.baseUrl,apiKey:t.apiKey,dangerouslyAllowBrowser:!0});break;default:throw new Error(`不支持的AI提供商: ${e}`)}this.clients.set(r,o)}return this.clients.get(r)}async sendMessage(e,t={}){var n,r;try{const o=Un(),i=Wn();if(!i.apiKey)throw new Error("未配置API密钥");const l=this.getClient(o.provider,i),c=[{role:"system",content:await this.getSystemPrompt(t)},{role:"user",content:e}];if(t.history&&t.history.length>0){const m=t.history.slice(-4).map(u=>({role:u.type==="user"?"user":"assistant",content:u.text}));c.splice(1,0,...m)}const d=(r=(n=(await l.chat.completions.create({model:i.modelId,messages:c,max_tokens:i.maxTokens,temperature:i.temperature,stream:!1})).choices[0])==null?void 0:n.message)==null?void 0:r.content;if(!d)throw new Error("AI响应为空");return d}catch(o){throw console.error("❌ AI调用失败:",o),this.handleError(o)}}async getSystemPrompt(e={}){let t=(await Fn()).systemPrompt;return(!t||t.trim()==="")&&(t=`你是Vue Docs UI文档网站的AI助手。你的任务是帮助用户理解文档内容,回答技术问题,并提供有用的指导。 + +请遵循以下原则: +1. 提供准确、有用的技术信息 +2. 保持友好、专业的语调 +3. 如果不确定答案,请诚实地说明 +4. 尽量给出具体的代码示例或步骤 +5. 使用中文回答问题 + +你特别擅长回答关于: +- Vue.js 开发 +- 组件库使用 +- 文档编写和维护 +- 前端开发最佳实践 +- 技术概念解释`),e.currentPage?`${t} + +当前用户正在查看页面:${e.currentPage}`:e.documentContent?`${t} + +相关文档内容: +${e.documentContent.slice(0,1e3)}`:t}async testConnection(){try{return{success:!0,message:"连接测试成功",response:await this.sendMessage("你好,请回复一个简短的测试消息。",{})}}catch(e){return{success:!1,message:e.message}}}handleError(e){var t,n;return e.code==="invalid_api_key"?new Error("API密钥无效,请检查配置"):e.code==="insufficient_quota"?new Error("API配额不足,请检查账户余额"):e.code==="rate_limit_exceeded"?new Error("请求频率过高,请稍后重试"):e.code==="model_not_found"?new Error("指定的模型不存在,请检查模型配置"):(t=e.message)!=null&&t.includes("fetch")?new Error("网络连接失败,请检查网络和API端点"):(n=e.message)!=null&&n.includes("CORS")?new Error("跨域请求被阻止,请检查API配置"):new Error(`AI调用失败: ${e.message}`)}clearClients(){this.clients.clear()}}const qn=new to,no=(s,e)=>qn.sendMessage(s,e),ro=()=>qn.testConnection();export{qn as default,no as sendAIMessage,ro as testAIConnection}; diff --git a/docs/dist/assets/index-64e04f5b.css b/docs/dist/assets/index-64e04f5b.css new file mode 100644 index 0000000..52c92ea --- /dev/null +++ b/docs/dist/assets/index-64e04f5b.css @@ -0,0 +1 @@ +.language-switcher[data-v-1ebf0c47]{position:relative;display:inline-block}.language-btn[data-v-1ebf0c47]{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;background:none;border:none;color:var(--text-color-light);border-radius:6px;cursor:pointer;transition:all .2s ease;font-size:.875rem;height:40px;min-width:80px}.language-btn[data-v-1ebf0c47]:hover{color:var(--primary-color);background-color:var(--bg-color-hover)}.language-btn .current-flag[data-v-1ebf0c47]{font-size:1rem;line-height:1}.language-btn .current-name[data-v-1ebf0c47]{font-weight:500;white-space:nowrap}@media (max-width: 640px){.language-btn .current-name[data-v-1ebf0c47]{display:none}}.language-btn .dropdown-icon[data-v-1ebf0c47]{transition:transform .2s ease}.language-btn .dropdown-icon.rotate[data-v-1ebf0c47]{transform:rotate(180deg)}.language-dropdown[data-v-1ebf0c47]{position:absolute;top:calc(100% + .5rem);right:0;min-width:180px;background:var(--bg-color);border:1px solid var(--border-color);border-radius:8px;box-shadow:0 8px 32px #0000001f;z-index:1000;overflow:hidden}.dark .language-dropdown[data-v-1ebf0c47]{box-shadow:0 8px 32px #0000004d}.dropdown-header[data-v-1ebf0c47]{padding:.75rem;border-bottom:1px solid var(--border-color);font-size:.75rem;font-weight:600;color:var(--text-color-light);text-transform:uppercase;letter-spacing:.05em}.language-list[data-v-1ebf0c47]{list-style:none;margin:0;padding:.5rem 0}.language-item.active .language-option[data-v-1ebf0c47]{background-color:var(--primary-color);color:#fff}.language-item.active .language-option .locale-flag[data-v-1ebf0c47],.language-item.active .language-option .locale-name[data-v-1ebf0c47],.language-item.active .language-option .check-icon[data-v-1ebf0c47]{color:#fff}.language-option[data-v-1ebf0c47]{display:flex;align-items:center;gap:.75rem;width:100%;padding:.625rem 1rem;border:none;background:none;color:var(--text-color);cursor:pointer;transition:all .2s ease;text-align:left;font-size:.875rem}.language-option[data-v-1ebf0c47]:hover{background-color:var(--bg-color-hover);color:var(--primary-color)}.language-option[data-v-1ebf0c47]:has(.check-icon):hover{background-color:var(--primary-color);color:#fff}.language-option .locale-flag[data-v-1ebf0c47]{font-size:1rem;line-height:1}.language-option .locale-name[data-v-1ebf0c47]{flex:1;font-weight:500}.language-option .check-icon[data-v-1ebf0c47]{color:var(--primary-color);opacity:.8}.dropdown-enter-active[data-v-1ebf0c47],.dropdown-leave-active[data-v-1ebf0c47]{transition:all .2s ease;transform-origin:top}.dropdown-enter-from[data-v-1ebf0c47],.dropdown-leave-to[data-v-1ebf0c47]{opacity:0;transform:scaleY(.8) translateY(-8px)}.dropdown-enter-to[data-v-1ebf0c47],.dropdown-leave-from[data-v-1ebf0c47]{opacity:1;transform:scaleY(1) translateY(0)}@media (max-width: 640px){.language-dropdown[data-v-1ebf0c47]{right:-1rem;min-width:160px}.language-btn[data-v-1ebf0c47]{min-width:60px;padding:.5rem}}.theme-switcher[data-v-55b2f18a]{position:relative;display:inline-block}.theme-button[data-v-55b2f18a]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--bg-color-secondary);border:1px solid var(--border-color);border-radius:var(--border-radius);color:var(--text-color);cursor:pointer;transition:all .2s ease}.theme-button[data-v-55b2f18a]:hover,.theme-button.active[data-v-55b2f18a]{background:var(--bg-color-hover);border-color:var(--primary-color)}.theme-button .theme-label[data-v-55b2f18a]{font-size:.875rem;font-weight:500}.theme-button .rotated[data-v-55b2f18a]{transform:rotate(180deg)}.theme-dropdown[data-v-55b2f18a]{position:absolute;top:100%;right:0;margin-top:.5rem;min-width:280px;background:var(--bg-color);border:1px solid var(--border-color);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg);z-index:1000;overflow:hidden;transition:all .2s ease;animation:slideIn-55b2f18a .15s ease-out}@keyframes slideIn-55b2f18a{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.theme-options[data-v-55b2f18a]{padding:.5rem}.theme-option[data-v-55b2f18a]{display:flex;align-items:center;gap:.75rem;padding:.75rem;border-radius:var(--border-radius);cursor:pointer;transition:all .2s ease}.theme-option[data-v-55b2f18a]:hover,.theme-option.active[data-v-55b2f18a]{background:var(--bg-color-hover)}.theme-option.active .theme-name[data-v-55b2f18a]{color:var(--primary-color);font-weight:600}.theme-preview[data-v-55b2f18a]{display:flex;gap:.25rem;flex-shrink:0}.color-dot[data-v-55b2f18a]{width:12px;height:12px;border-radius:50%;border:1px solid var(--border-color)}.theme-info[data-v-55b2f18a]{flex:1;min-width:0}.theme-name[data-v-55b2f18a]{font-size:.875rem;font-weight:500;color:var(--text-color);margin-bottom:.125rem}.theme-desc[data-v-55b2f18a]{font-size:.75rem;color:var(--text-color-muted)}.check-icon[data-v-55b2f18a]{color:var(--primary-color);flex-shrink:0}.theme-modes[data-v-55b2f18a]{border-top:1px solid var(--border-color);padding:.5rem}.mode-button[data-v-55b2f18a]{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .75rem;background:transparent;border:1px solid var(--border-color);border-radius:var(--border-radius);color:var(--text-color);cursor:pointer;transition:all .2s ease;font-size:.875rem}.mode-button[data-v-55b2f18a]:hover{background:var(--bg-color-hover);border-color:var(--primary-color)}.mode-button.active[data-v-55b2f18a]{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.backdrop[data-v-55b2f18a]{position:fixed;top:0;left:0;right:0;bottom:0;z-index:999}@media (max-width: 768px){.theme-dropdown[data-v-55b2f18a]{right:0;left:auto;min-width:240px;max-width:calc(100vw - 2rem);transform:translate(0)}.theme-switcher.align-left .theme-dropdown[data-v-55b2f18a]{right:auto;left:0}.theme-switcher.align-right .theme-dropdown[data-v-55b2f18a]{right:0;left:auto}.theme-button[data-v-55b2f18a]{padding:.5rem}.theme-button .theme-label[data-v-55b2f18a]{display:none}}@media (max-width: 768px) and (max-width: 480px){.theme-dropdown[data-v-55b2f18a]{min-width:200px;max-width:calc(100vw - 1rem)}}.header-nav[data-v-1e4645ae]{position:sticky;top:0;z-index:1000;background:#fffffff2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border-color);height:var(--header-height);width:100%}.dark .header-nav[data-v-1e4645ae]{background:#0f172af2}.nav-container[data-v-1e4645ae]{display:flex;align-items:center;justify-content:space-between;max-width:100%;height:100%;padding:0 2rem}@media (max-width: 768px){.nav-container[data-v-1e4645ae]{padding:0 1rem}}.nav-brand[data-v-1e4645ae]{display:flex;align-items:center;flex-shrink:0}.nav-brand .brand-link[data-v-1e4645ae]{display:flex;align-items:center;text-decoration:none;color:var(--text-color);font-weight:600}.nav-brand .brand-link .brand-logo[data-v-1e4645ae]{display:flex;align-items:center;margin-right:.5rem}.nav-brand .brand-link .brand-logo .logo-image[data-v-1e4645ae]{height:32px;width:auto;max-width:40px;object-fit:contain;border-radius:4px}.nav-brand .brand-link .brand-logo .logo-text[data-v-1e4645ae]{font-size:1.5rem}.nav-brand .brand-link .brand-title[data-v-1e4645ae]{font-size:1.2rem}@media (max-width: 480px){.nav-brand .brand-link .brand-title[data-v-1e4645ae]{display:none}}.nav-menu[data-v-1e4645ae]{flex:1;display:flex;justify-content:center}@media (max-width: 768px){.nav-menu[data-v-1e4645ae]{display:none}}.nav-items[data-v-1e4645ae]{display:flex;list-style:none;margin:0;padding:0;gap:.5rem}.nav-item .nav-link[data-v-1e4645ae]{display:flex;align-items:center;padding:.5rem 1rem;text-decoration:none;color:var(--text-color-light);font-weight:500;border-radius:6px;transition:all .2s ease;position:relative}.nav-item .nav-link[data-v-1e4645ae]:hover,.nav-item .nav-link.active[data-v-1e4645ae]{color:var(--primary-color);background-color:var(--bg-color-hover)}.nav-item .nav-link.active[data-v-1e4645ae]:after{content:"";position:absolute;bottom:-1px;left:50%;transform:translate(-50%);width:80%;height:2px;background-color:var(--primary-color);border-radius:1px}.nav-item .nav-link .nav-icon[data-v-1e4645ae]{margin-right:.5rem;display:flex;align-items:center}.nav-actions[data-v-1e4645ae]{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.nav-actions button[data-v-1e4645ae]{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:none;color:var(--text-color-light);border-radius:6px;cursor:pointer;transition:all .2s ease;position:relative}.nav-actions button[data-v-1e4645ae]:hover{color:var(--primary-color);background-color:var(--bg-color-hover)}.nav-actions .search-btn[data-v-1e4645ae]{display:flex}@media (max-width: 640px){.nav-actions .ai-btn[data-v-1e4645ae]{display:none}}@media (max-width: 640px){.nav-actions .theme-switcher .theme-button .theme-label[data-v-1e4645ae]{display:none}}.nav-actions .language-switcher[data-v-1e4645ae]{display:flex;align-items:center}@media (min-width: 769px){.nav-actions .mobile-menu-btn[data-v-1e4645ae]{display:none}}@media (max-width: 768px){.nav-actions .mobile-menu-btn[data-v-1e4645ae]{display:flex!important;background-color:var(--bg-color-secondary);border:1px solid var(--border-color);width:44px;height:44px}.nav-actions .mobile-menu-btn[data-v-1e4645ae]:hover{background-color:var(--primary-color);color:#fff;border-color:var(--primary-color)}}@media (max-width: 768px){.header-nav[data-v-1e4645ae]{display:block;position:sticky;background:#fff;border-bottom:1px solid #e2e8f0}}.sidebar-nav[data-v-8d878718]{width:100%;max-width:var(--sidebar-width);background-color:var(--bg-color);border-right:1px solid var(--border-color);overflow-y:auto;overflow-x:hidden;height:100%;position:relative}@media (max-width: 768px){.sidebar-nav[data-v-8d878718]{position:fixed;top:var(--header-height);left:-100%;z-index:999;transition:left .3s ease;width:280px;max-width:280px;height:calc(100vh - var(--header-height))}.sidebar-nav.mobile-open[data-v-8d878718]{left:0}}.sidebar-content[data-v-8d878718]{padding:1.5rem 0}.nav-sections .nav-section[data-v-8d878718]{margin-bottom:.25rem}.section-link[data-v-8d878718]{display:flex;align-items:center;justify-content:flex-start;padding:.75rem 1rem;text-decoration:none;color:var(--text-color);font-weight:500;transition:all .2s ease;border-left:3px solid transparent;text-align:left}.section-link[data-v-8d878718]:hover{background-color:var(--bg-color-secondary);color:var(--primary-color)}.section-link.active[data-v-8d878718]{background-color:#3b82f61a;color:var(--primary-color);border-left-color:var(--primary-color)}.section-link.section-header[data-v-8d878718]{cursor:pointer}.section-link.section-header[data-v-8d878718]:hover{background-color:var(--bg-color-secondary)}.section-link .section-title[data-v-8d878718]{flex:1;font-size:.95rem;text-align:left}.section-link .chevron-icon[data-v-8d878718]{margin-left:auto;transition:transform .2s ease;color:var(--text-color-light)}.section-link .chevron-icon.expanded[data-v-8d878718]{transform:rotate(180deg)}.section-children[data-v-8d878718]{background-color:var(--bg-color-secondary);border-left:3px solid var(--border-color);margin-left:0}.section-children .child-link[data-v-8d878718]{display:block;padding:.5rem 1rem .5rem 2rem;text-decoration:none;color:var(--text-color-light);font-size:.875rem;transition:all .2s ease;border-left:3px solid transparent;text-align:left}.section-children .child-link[data-v-8d878718]:hover{background-color:#3b82f60d;color:var(--primary-color)}.section-children .child-link.active[data-v-8d878718]{background-color:#3b82f61a;color:var(--primary-color);border-left-color:var(--primary-color)}.section-children .child-link .child-title[data-v-8d878718]{display:block;line-height:1.4;text-align:left}.children-slide-enter-active[data-v-8d878718],.children-slide-leave-active[data-v-8d878718]{transition:all .3s ease;overflow:hidden}.children-slide-enter-from[data-v-8d878718]{opacity:0;max-height:0}.children-slide-enter-to[data-v-8d878718],.children-slide-leave-from[data-v-8d878718]{opacity:1;max-height:500px}.children-slide-leave-to[data-v-8d878718]{opacity:0;max-height:0}.sidebar-nav[data-v-8d878718]::-webkit-scrollbar{width:6px}.sidebar-nav[data-v-8d878718]::-webkit-scrollbar-track{background:transparent}.sidebar-nav[data-v-8d878718]::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.sidebar-nav[data-v-8d878718]::-webkit-scrollbar-thumb:hover{background:var(--text-color-light)}.table-of-contents[data-v-fab21543]{position:sticky;top:calc(var(--header-height, 60px) + 2rem);width:240px;max-height:calc(100vh - var(--header-height, 60px) - 4rem);background:var(--bg-color);border:1px solid var(--border-color);border-radius:8px;overflow-y:auto;flex-shrink:0}@media (max-width: 1024px){.table-of-contents[data-v-fab21543]{display:none}}.toc-header[data-v-fab21543]{padding:1.5rem 1rem .5rem;border-bottom:1px solid var(--border-color)}.toc-header h3[data-v-fab21543]{font-size:.875rem;font-weight:600;color:var(--text-color);margin:0;text-transform:uppercase;letter-spacing:.5px}.toc-nav[data-v-fab21543]{padding:1rem 0}.toc-empty[data-v-fab21543]{padding:1rem;text-align:center}.toc-empty p[data-v-fab21543]{color:var(--text-color-light);font-size:.875rem;margin:0}.toc-item[data-v-fab21543]{margin-bottom:2px}.toc-link[data-v-fab21543]{display:block;padding:.375rem 1rem;color:var(--text-color-light);text-decoration:none;font-size:.875rem;line-height:1.4;border-left:2px solid transparent;transition:all .2s ease}.toc-link[data-v-fab21543]:hover{color:var(--primary-color);background:#3b82f60d}.toc-link.active[data-v-fab21543]{color:var(--primary-color);border-left-color:var(--primary-color);background:#3b82f61a;font-weight:500}.toc-level-1 .toc-link[data-v-fab21543]{padding-left:1rem;font-weight:500}.toc-level-2 .toc-link[data-v-fab21543]{padding-left:1.5rem;font-size:.8rem}.toc-level-3 .toc-link[data-v-fab21543]{padding-left:2rem;font-size:.75rem}.toc-level-4 .toc-link[data-v-fab21543]{padding-left:2.5rem;font-size:.75rem}.toc-level-5 .toc-link[data-v-fab21543]{padding-left:3rem;font-size:.75rem}.toc-level-6 .toc-link[data-v-fab21543]{padding-left:3.5rem;font-size:.75rem}.table-of-contents[data-v-fab21543]::-webkit-scrollbar{width:4px}.table-of-contents[data-v-fab21543]::-webkit-scrollbar-track{background:transparent}.table-of-contents[data-v-fab21543]::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:2px}.table-of-contents[data-v-fab21543]::-webkit-scrollbar-thumb:hover{background:var(--text-color-light)}.ai-assistant[data-v-7cb4e82d]{position:fixed;bottom:2rem;right:2rem;z-index:1000}@media (max-width: 768px){.ai-assistant[data-v-7cb4e82d]{bottom:1rem;right:1rem;z-index:1002}}.ai-trigger-btn[data-v-7cb4e82d]{width:56px;height:56px;border-radius:50%;background:var(--primary-color);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #00000026;transition:all .3s ease;position:relative;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ai-trigger-btn[data-v-7cb4e82d]:hover{transform:translateY(-2px);box-shadow:0 6px 20px #0003}@media (max-width: 768px){.ai-trigger-btn[data-v-7cb4e82d]{width:60px;height:60px}.ai-trigger-btn[data-v-7cb4e82d]:before{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px;border-radius:50%}.ai-trigger-btn[data-v-7cb4e82d]:active{transform:scale(.95)}}.ai-trigger-btn .notification-dot[data-v-7cb4e82d]{position:absolute;top:8px;right:8px;width:12px;height:12px;background:#f44;border-radius:50%;border:2px solid white}@media (max-width: 768px){.ai-trigger-btn .notification-dot[data-v-7cb4e82d]{top:10px;right:10px;width:14px;height:14px}}.ai-panel[data-v-7cb4e82d]{position:fixed;bottom:70px;right:0;min-width:300px;min-height:400px;max-width:90vw;max-height:90vh;background:var(--bg-color);border:1px solid var(--border-color);border-radius:12px;box-shadow:0 8px 32px #0000001f;display:flex;flex-direction:column;overflow:hidden;z-index:1001;transition:box-shadow .2s ease}.ai-panel[data-v-7cb4e82d]:hover{box-shadow:0 12px 40px #00000026}@media (max-width: 768px){.ai-panel[data-v-7cb4e82d]{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw!important;height:100vh!important;max-width:100vw;max-height:100vh;border-radius:0;transform:none!important;z-index:1003;animation:slideInFromBottom-7cb4e82d .3s ease-out}}@media (max-width: 480px){.ai-panel[data-v-7cb4e82d]{min-width:unset}}.ai-header[data-v-7cb4e82d]{display:flex;align-items:center;justify-content:space-between;padding:1rem;background:var(--bg-color-secondary);border-bottom:1px solid var(--border-color);cursor:grab;-webkit-user-select:none;user-select:none}.ai-header[data-v-7cb4e82d]:active{cursor:grabbing}@media (max-width: 768px){.ai-header[data-v-7cb4e82d]{padding:1rem;cursor:default}.ai-header .drag-hint[data-v-7cb4e82d]{display:none}}.ai-title[data-v-7cb4e82d]{display:flex;align-items:center;gap:.5rem;font-weight:600;color:var(--text-color)}.ai-title .drag-hint[data-v-7cb4e82d]{font-size:.75rem;color:var(--text-color-light);margin-left:.5rem;opacity:.7}.ai-actions[data-v-7cb4e82d]{display:flex;gap:.5rem}.ai-actions button[data-v-7cb4e82d]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;color:var(--text-color-light);border-radius:6px;cursor:pointer;transition:all .2s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ai-actions button[data-v-7cb4e82d]:hover{background:var(--bg-color-hover);color:var(--text-color)}@media (max-width: 768px){.ai-actions button[data-v-7cb4e82d]{width:44px;height:44px}.ai-actions button[data-v-7cb4e82d]:before{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;border-radius:6px}.ai-actions button[data-v-7cb4e82d]:active{background:var(--bg-color-hover);transform:scale(.95)}}.ai-settings[data-v-7cb4e82d]{padding:1rem;flex:1;overflow-y:auto}@media (max-width: 768px){.ai-settings[data-v-7cb4e82d]{padding:1.5rem;touch-action:manipulation;-webkit-tap-highlight-color:transparent;min-height:400px}}.setting-group[data-v-7cb4e82d]{margin-bottom:1rem}.setting-group label[data-v-7cb4e82d]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--text-color);font-size:.9rem}.setting-group select[data-v-7cb4e82d],.setting-group input[data-v-7cb4e82d]{width:100%;padding:.75rem;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-color);color:var(--text-color);font-size:.9rem}.setting-group select[data-v-7cb4e82d]:focus,.setting-group input[data-v-7cb4e82d]:focus{outline:none;border-color:var(--primary-color)}@media (max-width: 768px){.setting-group select[data-v-7cb4e82d],.setting-group input[data-v-7cb4e82d]{padding:1rem;font-size:16px;min-height:48px;-webkit-tap-highlight-color:transparent}}.setting-actions[data-v-7cb4e82d]{display:flex;gap:.5rem;margin-top:1rem}@media (max-width: 768px){.setting-actions[data-v-7cb4e82d]{flex-direction:column;gap:.75rem}}.setting-actions button[data-v-7cb4e82d]{flex:1;display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem;border:none;border-radius:6px;cursor:pointer;font-size:.9rem;transition:all .2s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.setting-actions button[data-v-7cb4e82d]:disabled{opacity:.6;cursor:not-allowed}@media (max-width: 768px){.setting-actions button[data-v-7cb4e82d]{padding:1rem;font-size:1rem;min-height:48px}.setting-actions button[data-v-7cb4e82d]:active:not(:disabled){transform:scale(.98)}}.setting-actions .test-btn[data-v-7cb4e82d]{background:var(--bg-color-secondary);color:var(--text-color)}.setting-actions .test-btn[data-v-7cb4e82d]:hover:not(:disabled){background:var(--bg-color-hover)}.setting-actions .save-btn[data-v-7cb4e82d]{background:var(--primary-color);color:#fff}.setting-actions .save-btn[data-v-7cb4e82d]:hover:not(:disabled){background:var(--primary-color-dark)}.test-result[data-v-7cb4e82d]{margin-top:.5rem;padding:.75rem;border-radius:6px;font-size:.9rem}.test-result.success[data-v-7cb4e82d]{background:#22c55e1a;color:#22c55e;border:1px solid rgba(34,197,94,.2)}.test-result.error[data-v-7cb4e82d]{background:#ef44441a;color:#ef4444;border:1px solid rgba(239,68,68,.2)}.ai-chat[data-v-7cb4e82d]{display:flex;flex-direction:column;flex:1;min-height:0}.chat-messages[data-v-7cb4e82d]{flex:1;overflow-y:auto;overflow-x:hidden;padding:1rem;display:flex;flex-direction:column;gap:1rem;scroll-behavior:smooth}.chat-messages[data-v-7cb4e82d]::-webkit-scrollbar{width:6px}.chat-messages[data-v-7cb4e82d]::-webkit-scrollbar-track{background:transparent}.chat-messages[data-v-7cb4e82d]::-webkit-scrollbar-thumb{background:#0003;border-radius:3px}.chat-messages[data-v-7cb4e82d]::-webkit-scrollbar-thumb:hover{background:#0000004d}.dark .chat-messages[data-v-7cb4e82d]::-webkit-scrollbar-thumb{background:#fff3}.dark .chat-messages[data-v-7cb4e82d]::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.message[data-v-7cb4e82d]{display:flex}.message.user[data-v-7cb4e82d]{justify-content:flex-end}.message.user .message-content[data-v-7cb4e82d]{background:var(--primary-color);color:#fff;max-width:80%}.message.ai[data-v-7cb4e82d]{justify-content:flex-start}.message.ai .message-content[data-v-7cb4e82d]{background:var(--bg-color-secondary);color:var(--text-color);max-width:85%}.message.loading .message-content[data-v-7cb4e82d]{background:var(--bg-color-secondary);color:var(--text-color)}.message-content[data-v-7cb4e82d]{padding:.75rem 1rem;border-radius:12px;word-wrap:break-word}.message-content[data-v-7cb4e82d] h1,.message-content[data-v-7cb4e82d] h2,.message-content[data-v-7cb4e82d] h3,.message-content[data-v-7cb4e82d] h4,.message-content[data-v-7cb4e82d] h5,.message-content[data-v-7cb4e82d] h6{margin:.5rem 0 .25rem;font-weight:600;line-height:1.3}.message-content[data-v-7cb4e82d] p{margin:.5rem 0;line-height:1.5}.message-content[data-v-7cb4e82d] ul,.message-content[data-v-7cb4e82d] ol{margin:.5rem 0;padding-left:1.5rem}.message-content[data-v-7cb4e82d] ul li,.message-content[data-v-7cb4e82d] ol li{margin:.25rem 0;line-height:1.4}.message-content[data-v-7cb4e82d] code{background:var(--code-bg-color);padding:.125rem .25rem;border-radius:3px;font-size:.875rem;font-family:Consolas,Monaco,monospace}.message-content[data-v-7cb4e82d] pre{background:var(--code-bg-color);padding:.75rem;border-radius:6px;overflow-x:auto;margin:.5rem 0}.message-content[data-v-7cb4e82d] pre code{background:none;padding:0}.message-content[data-v-7cb4e82d] blockquote{border-left:3px solid var(--primary-color);padding-left:.75rem;margin:.5rem 0;font-style:italic;color:var(--text-color-light)}.message-content[data-v-7cb4e82d] strong{font-weight:600;color:var(--text-color)}.message-content[data-v-7cb4e82d] em{font-style:italic}.message-content[data-v-7cb4e82d] a{color:var(--primary-color);text-decoration:none}.message-content[data-v-7cb4e82d] a:hover{text-decoration:underline}.message-content[data-v-7cb4e82d] table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:.875rem}.message-content[data-v-7cb4e82d] table th,.message-content[data-v-7cb4e82d] table td{border:1px solid var(--border-color);padding:.5rem;text-align:left}.message-content[data-v-7cb4e82d] table th{background:var(--bg-color-secondary);font-weight:600}.message-text[data-v-7cb4e82d]{margin-bottom:.25rem}.message-time[data-v-7cb4e82d]{font-size:.75rem;opacity:.7}.loading-dots[data-v-7cb4e82d]{display:flex;gap:.25rem}.loading-dots span[data-v-7cb4e82d]{width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse-7cb4e82d 1.4s ease-in-out infinite both}.loading-dots span[data-v-7cb4e82d]:nth-child(1){animation-delay:-.32s}.loading-dots span[data-v-7cb4e82d]:nth-child(2){animation-delay:-.16s}.loading-dots span[data-v-7cb4e82d]:nth-child(3){animation-delay:0}@keyframes pulse-7cb4e82d{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.chat-input[data-v-7cb4e82d]{padding:1rem;border-top:1px solid var(--border-color)}@media (max-width: 768px){.chat-input[data-v-7cb4e82d]{padding:1rem;position:sticky;bottom:0;background:var(--bg-color);z-index:10}}.input-wrapper[data-v-7cb4e82d]{display:flex;gap:.5rem;align-items:flex-end}.input-wrapper textarea[data-v-7cb4e82d]{flex:1;min-height:40px;max-height:100px;padding:.75rem;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-color);color:var(--text-color);resize:none;font-family:inherit;font-size:.9rem}.input-wrapper textarea[data-v-7cb4e82d]:focus{outline:none;border-color:var(--primary-color)}.input-wrapper textarea[data-v-7cb4e82d]:disabled{opacity:.6;cursor:not-allowed}@media (max-width: 768px){.input-wrapper textarea[data-v-7cb4e82d]{padding:1rem;font-size:16px;min-height:48px;max-height:120px;-webkit-tap-highlight-color:transparent;-webkit-appearance:none}}.input-wrapper .send-btn[data-v-7cb4e82d]{width:40px;height:40px;border:none;background:var(--primary-color);color:#fff;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.input-wrapper .send-btn[data-v-7cb4e82d]:hover:not(:disabled){background:var(--primary-color-dark)}.input-wrapper .send-btn[data-v-7cb4e82d]:disabled{opacity:.6;cursor:not-allowed}@media (max-width: 768px){.input-wrapper .send-btn[data-v-7cb4e82d]{width:48px;height:48px;border-radius:12px;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.input-wrapper .send-btn[data-v-7cb4e82d]:active:not(:disabled){transform:scale(.95)}}.config-notice[data-v-7cb4e82d]{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;padding:.5rem;background:#eab3081a;color:#eab308;border-radius:6px;font-size:.85rem}@keyframes slideInFromBottom-7cb4e82d{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.resize-handles[data-v-7cb4e82d]{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}@media (max-width: 768px){.resize-handles[data-v-7cb4e82d]{display:none}}.resize-handle[data-v-7cb4e82d]{position:absolute;pointer-events:all;background:transparent}.resize-handle[data-v-7cb4e82d]:after{content:"";position:absolute;background:var(--primary-color);opacity:0;transition:opacity .2s ease}.resize-handle[data-v-7cb4e82d]:hover:after{opacity:.5}.resize-handle-n[data-v-7cb4e82d]{top:-3px;left:8px;right:8px;height:6px;cursor:n-resize}.resize-handle-n[data-v-7cb4e82d]:after{top:2px;left:0;right:0;height:2px}.resize-handle-s[data-v-7cb4e82d]{bottom:-3px;left:8px;right:8px;height:6px;cursor:s-resize}.resize-handle-s[data-v-7cb4e82d]:after{bottom:2px;left:0;right:0;height:2px}.resize-handle-w[data-v-7cb4e82d]{left:-3px;top:8px;bottom:8px;width:6px;cursor:w-resize}.resize-handle-w[data-v-7cb4e82d]:after{left:2px;top:0;bottom:0;width:2px}.resize-handle-e[data-v-7cb4e82d]{right:-3px;top:8px;bottom:8px;width:6px;cursor:e-resize}.resize-handle-e[data-v-7cb4e82d]:after{right:2px;top:0;bottom:0;width:2px}.resize-handle-nw[data-v-7cb4e82d]{top:-3px;left:-3px;width:12px;height:12px;cursor:nw-resize}.resize-handle-nw[data-v-7cb4e82d]:after{top:2px;left:2px;width:8px;height:8px;border-radius:50%}.resize-handle-ne[data-v-7cb4e82d]{top:-3px;right:-3px;width:12px;height:12px;cursor:ne-resize}.resize-handle-ne[data-v-7cb4e82d]:after{top:2px;right:2px;width:8px;height:8px;border-radius:50%}.resize-handle-sw[data-v-7cb4e82d]{bottom:-3px;left:-3px;width:12px;height:12px;cursor:sw-resize}.resize-handle-sw[data-v-7cb4e82d]:after{bottom:2px;left:2px;width:8px;height:8px;border-radius:50%}.resize-handle-se[data-v-7cb4e82d]{bottom:-3px;right:-3px;width:12px;height:12px;cursor:se-resize}.resize-handle-se[data-v-7cb4e82d]:after{bottom:2px;right:2px;width:8px;height:8px;border-radius:50%}.search-modal-overlay[data-v-194cf630]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:flex-start;justify-content:center;padding:10vh 1rem 1rem;animation:fadeIn-194cf630 .2s ease-out}@keyframes fadeIn-194cf630{0%{opacity:0}to{opacity:1}}.search-modal[data-v-194cf630]{width:100%;max-width:600px;max-height:80vh;background:var(--bg-color);border-radius:12px;box-shadow:0 20px 40px #0003;overflow:hidden;animation:slideIn-194cf630 .3s ease-out}@keyframes slideIn-194cf630{0%{opacity:0;transform:translateY(-20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.search-header[data-v-194cf630]{display:flex;align-items:center;padding:1rem;border-bottom:1px solid var(--border-color);gap:1rem;background:var(--bg-color);position:sticky;top:0;z-index:10}.search-input-wrapper[data-v-194cf630]{flex:1;position:relative;display:flex;align-items:center}.search-input-wrapper .search-icon[data-v-194cf630]{position:absolute;left:1rem;top:50%;transform:translateY(-50%);color:var(--text-color-light);z-index:1}.search-input[data-v-194cf630]{width:100%;height:48px;padding:.75rem 4rem .75rem 3rem;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-color-secondary);color:var(--text-color);font-size:1rem;line-height:1.5}.search-input[data-v-194cf630]:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #3b82f61a}.search-input[data-v-194cf630]::placeholder{color:var(--text-color-light)}.search-shortcut[data-v-194cf630]{position:absolute;right:1rem;top:50%;transform:translateY(-50%);padding:.25rem .5rem;background:var(--bg-color-hover);border:1px solid var(--border-color);border-radius:4px;font-size:.75rem;color:var(--text-color-light);z-index:1}.close-btn[data-v-194cf630]{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;background:none;color:var(--text-color-light);cursor:pointer;border-radius:6px;transition:all .2s ease;flex-shrink:0}.close-btn[data-v-194cf630]:hover{background:var(--bg-color-hover);color:var(--text-color)}@media (max-width: 768px){.close-btn[data-v-194cf630]{width:36px;height:36px}.close-btn[data-v-194cf630]:active{background:var(--bg-color-hover);transform:scale(.95)}}.search-content[data-v-194cf630]{max-height:50vh;overflow-y:auto;padding:1rem}.search-loading[data-v-194cf630]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--text-color-light)}.loading-spinner[data-v-194cf630]{width:20px;height:20px;border:2px solid var(--border-color);border-top:2px solid var(--primary-color);border-radius:50%;animation:spin-194cf630 1s linear infinite}@keyframes spin-194cf630{to{transform:rotate(360deg)}}.no-results[data-v-194cf630]{text-align:center;padding:3rem 1rem;color:var(--text-color-light)}.no-results .no-results-icon[data-v-194cf630]{margin-bottom:1rem;opacity:.5}.no-results h3[data-v-194cf630]{margin:0 0 .5rem;color:var(--text-color)}.no-results p[data-v-194cf630]{margin:0;font-size:.9rem}.results-count[data-v-194cf630]{font-size:.85rem;color:var(--text-color-light);margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--border-color)}.search-result-item[data-v-194cf630]{padding:.75rem;border-radius:8px;cursor:pointer;transition:all .2s ease;margin-bottom:.5rem}.search-result-item[data-v-194cf630]:hover,.search-result-item.active[data-v-194cf630]{background:var(--bg-color-hover)}.search-result-item.active[data-v-194cf630]{border-left:3px solid var(--primary-color)}.result-title[data-v-194cf630]{display:flex;align-items:center;gap:.5rem;font-weight:500;color:var(--text-color);margin-bottom:.25rem}.result-title .result-icon[data-v-194cf630]{color:var(--text-color-light)}.result-title[data-v-194cf630] mark{background:var(--primary-color);color:#fff;padding:.125rem .25rem;border-radius:3px}.result-path[data-v-194cf630]{font-size:.8rem;color:var(--text-color-light);margin-bottom:.25rem}.result-content[data-v-194cf630]{font-size:.85rem;color:var(--text-color-light);line-height:1.4}.result-content[data-v-194cf630] mark{background:#3b82f633;color:var(--primary-color);padding:.125rem .25rem;border-radius:3px}.search-suggestions[data-v-194cf630]{text-align:center;padding:2rem 1rem}.search-suggestions h3[data-v-194cf630]{margin:0 0 1rem;color:var(--text-color)}.suggestion-tags[data-v-194cf630]{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center}.suggestion-tag[data-v-194cf630]{padding:.5rem 1rem;background:var(--bg-color-secondary);border:1px solid var(--border-color);border-radius:20px;color:var(--text-color);cursor:pointer;transition:all .2s ease;font-size:.9rem}.suggestion-tag[data-v-194cf630]:hover{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.search-footer[data-v-194cf630]{padding:.75rem 1rem;border-top:1px solid var(--border-color);background:var(--bg-color-secondary)}.search-tips[data-v-194cf630]{display:flex;align-items:center;gap:1rem;font-size:.8rem;color:var(--text-color-light)}.search-tips kbd[data-v-194cf630]{padding:.125rem .375rem;background:var(--bg-color);border:1px solid var(--border-color);border-radius:3px;font-size:.75rem;margin:0 .25rem}@media (max-width: 768px){.search-modal-overlay[data-v-194cf630]{padding:5vh .5rem 1rem}.search-modal[data-v-194cf630]{max-height:90vh}.search-header[data-v-194cf630]{padding:.75rem;gap:.75rem}.search-input-wrapper .search-icon[data-v-194cf630]{left:.75rem}.search-input[data-v-194cf630]{height:44px;padding:.625rem 3.5rem .625rem 2.75rem;font-size:16px}.search-shortcut[data-v-194cf630]{right:.75rem;padding:.2rem .4rem;font-size:.7rem}.search-content[data-v-194cf630]{padding:.75rem;max-height:60vh}.search-tips[data-v-194cf630]{font-size:.75rem;gap:.5rem}}.reading-progress-container[data-v-4e387aed]{position:fixed;top:var(--header-height, 64px);left:0;right:0;z-index:999;transition:all .3s ease}@media (min-width: 769px){.reading-progress-container:hover .reading-info[data-v-4e387aed]{opacity:1;transform:translateY(0)}}.progress-bar[data-v-4e387aed]{height:2px;background:#0000000d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.dark .progress-bar[data-v-4e387aed]{background:#ffffff0d}.progress-fill[data-v-4e387aed]{height:100%;background:linear-gradient(90deg,var(--primary-color),var(--primary-color-light));transition:width .3s ease;position:relative}.progress-fill[data-v-4e387aed]:after{content:"";position:absolute;right:0;top:0;width:8px;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5));animation:shimmer-4e387aed 2s infinite}@keyframes shimmer-4e387aed{0%,to{opacity:.5}50%{opacity:1}}.reading-info[data-v-4e387aed]{position:absolute;top:100%;right:1rem;background:var(--bg-color);border:1px solid var(--border-color);border-radius:8px;padding:.75rem;box-shadow:0 4px 12px #00000026;opacity:0;transform:translateY(-10px);transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:1000}.reading-info.visible[data-v-4e387aed]{opacity:1;transform:translateY(0)}@media (max-width: 768px){.reading-info[data-v-4e387aed]{right:.5rem;left:.5rem;padding:.5rem}}.reading-stats[data-v-4e387aed]{display:flex;gap:1rem;margin-bottom:.75rem}@media (max-width: 768px){.reading-stats[data-v-4e387aed]{flex-direction:column;gap:.5rem;margin-bottom:.5rem}}.stat-item[data-v-4e387aed]{display:flex;align-items:center;gap:.25rem;font-size:.8rem;color:var(--text-color-light)}.stat-item svg[data-v-4e387aed]{color:var(--primary-color)}.reading-controls[data-v-4e387aed]{display:flex;gap:.5rem;justify-content:center}.control-btn[data-v-4e387aed]{padding:.375rem;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-color-hover);color:var(--text-color-light);cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.control-btn[data-v-4e387aed]:hover,.control-btn.active[data-v-4e387aed]{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.control-btn.info-toggle[data-v-4e387aed]{margin-left:.5rem}@media (max-width: 768px){.control-btn.info-toggle[data-v-4e387aed]{margin-left:0}}.chapter-minimap[data-v-4e387aed]{position:fixed;right:1rem;top:calc(50% + var(--header-height, 64px) / 2);transform:translateY(-50%);width:6px;height:200px;background:#0000001a;border-radius:3px;z-index:998}.dark .chapter-minimap[data-v-4e387aed]{background:#ffffff1a}@media (max-width: 1200px){.chapter-minimap[data-v-4e387aed]{display:none}}.chapter-dot[data-v-4e387aed]{position:absolute;width:8px;height:8px;background:var(--text-color-light);border-radius:50%;left:-1px;cursor:pointer;transition:all .2s ease}.chapter-dot[data-v-4e387aed]:hover{width:12px;height:12px;left:-3px;background:var(--primary-color)}.chapter-dot.active[data-v-4e387aed]{background:var(--primary-color);box-shadow:0 0 8px var(--primary-color)}.chapter-dot.read[data-v-4e387aed]{background:var(--success-color)}@media (max-width: 768px){.reading-progress-container[data-v-4e387aed]{pointer-events:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.reading-progress-container.is-mobile[data-v-4e387aed]{opacity:1;transform:translateY(0);transition:all .3s ease}.reading-progress-container.is-mobile.mobile-hidden[data-v-4e387aed]{opacity:0;transform:translateY(-100%)}.reading-progress-container.is-mobile.mobile-scrolling[data-v-4e387aed],.reading-progress-container .reading-info.visible[data-v-4e387aed]{opacity:1;transform:translateY(0)}.reading-progress-container .progress-bar[data-v-4e387aed]{pointer-events:none;touch-action:none}.reading-progress-container .reading-controls .control-btn[data-v-4e387aed]{pointer-events:auto;touch-action:manipulation}.progress-bar[data-v-4e387aed]{height:3px}}@media print{.reading-progress-container[data-v-4e387aed]{display:none!important}}.feedback-system[data-v-ddb1b7ef]{position:fixed;bottom:2rem;right:2rem;z-index:1500}@media (max-width: 768px){.feedback-system[data-v-ddb1b7ef]{bottom:1rem;right:1rem}}.feedback-trigger[data-v-ddb1b7ef]{width:56px;height:56px;border-radius:50%;background:var(--primary-color);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #00000026;transition:all .3s ease;position:relative}.feedback-trigger[data-v-ddb1b7ef]:hover{background:var(--primary-color-dark);transform:scale(1.05)}.feedback-trigger .notification-dot[data-v-ddb1b7ef]{position:absolute;top:8px;right:8px;width:12px;height:12px;background:#ff4757;border-radius:50%;border:2px solid white;animation:pulse-ddb1b7ef 2s infinite}@keyframes pulse-ddb1b7ef{0%,to{transform:scale(1)}50%{transform:scale(1.2)}}.feedback-panel[data-v-ddb1b7ef]{position:absolute;bottom:72px;right:0;width:360px;max-height:500px;background:var(--bg-color);border:1px solid var(--border-color);border-radius:12px;box-shadow:0 8px 24px #00000026;overflow:hidden;animation:slideInUp-ddb1b7ef .3s ease-out}@media (max-width: 480px){.feedback-panel[data-v-ddb1b7ef]{width:calc(100vw - 2rem);right:-1rem;max-height:80vh;overflow-y:auto}}@keyframes slideInUp-ddb1b7ef{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.feedback-header[data-v-ddb1b7ef]{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid var(--border-color);background:var(--bg-color-secondary)}.feedback-header h3[data-v-ddb1b7ef]{margin:0;font-size:1rem;color:var(--text-color)}.close-btn[data-v-ddb1b7ef]{padding:.25rem;border:none;background:none;color:var(--text-color-light);cursor:pointer;border-radius:4px;transition:all .2s ease}.close-btn[data-v-ddb1b7ef]:hover{background:var(--bg-color-hover);color:var(--text-color)}.quick-rating[data-v-ddb1b7ef]{padding:1rem;border-bottom:1px solid var(--border-color)}.quick-rating p[data-v-ddb1b7ef]{margin:0 0 .75rem;color:var(--text-color);font-size:.9rem}.rating-buttons[data-v-ddb1b7ef]{display:flex;gap:.5rem}.rating-btn[data-v-ddb1b7ef]{flex:1;padding:.5rem .75rem;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-color-hover);color:var(--text-color);cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.85rem}.rating-btn[data-v-ddb1b7ef]:hover{border-color:var(--primary-color)}.rating-btn.helpful.active[data-v-ddb1b7ef]{background:var(--success-color);color:#fff;border-color:var(--success-color)}.rating-btn.not-helpful.active[data-v-ddb1b7ef]{background:var(--warning-color);color:#fff;border-color:var(--warning-color)}.detailed-feedback[data-v-ddb1b7ef]{padding:1rem;border-bottom:1px solid var(--border-color)}.feedback-type[data-v-ddb1b7ef],.feedback-content[data-v-ddb1b7ef],.feedback-contact[data-v-ddb1b7ef]{margin-bottom:1rem}.feedback-type label[data-v-ddb1b7ef],.feedback-content label[data-v-ddb1b7ef],.feedback-contact label[data-v-ddb1b7ef]{display:block;margin-bottom:.5rem;font-size:.85rem;color:var(--text-color);font-weight:500}.feedback-select[data-v-ddb1b7ef],.feedback-textarea[data-v-ddb1b7ef],.feedback-email[data-v-ddb1b7ef]{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-color);color:var(--text-color);font-size:.85rem}.feedback-select[data-v-ddb1b7ef]:focus,.feedback-textarea[data-v-ddb1b7ef]:focus,.feedback-email[data-v-ddb1b7ef]:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #3b82f61a}.feedback-textarea[data-v-ddb1b7ef]{resize:vertical;min-height:80px;font-family:inherit}.feedback-contact label[data-v-ddb1b7ef]{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.feedback-contact label input[type=checkbox][data-v-ddb1b7ef]{width:auto}.feedback-email[data-v-ddb1b7ef]{margin-top:.5rem}.feedback-actions[data-v-ddb1b7ef]{display:flex;gap:.5rem;justify-content:flex-end}.submit-btn[data-v-ddb1b7ef],.cancel-btn[data-v-ddb1b7ef]{padding:.5rem 1rem;border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:.25rem;font-size:.85rem}.submit-btn[data-v-ddb1b7ef]{background:var(--primary-color);color:#fff;border:1px solid var(--primary-color)}.submit-btn[data-v-ddb1b7ef]:hover:not(:disabled){background:var(--primary-color-dark)}.submit-btn[data-v-ddb1b7ef]:disabled{opacity:.5;cursor:not-allowed}.cancel-btn[data-v-ddb1b7ef]{background:var(--bg-color-hover);color:var(--text-color);border:1px solid var(--border-color)}.cancel-btn[data-v-ddb1b7ef]:hover{background:var(--bg-color-secondary)}.page-stats[data-v-ddb1b7ef]{padding:1rem}.stats-grid[data-v-ddb1b7ef]{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}.stat-item[data-v-ddb1b7ef]{display:flex;align-items:center;justify-content:center;gap:.25rem;padding:.5rem;background:var(--bg-color-secondary);border-radius:6px;font-size:.8rem;color:var(--text-color-light)}.stat-item svg[data-v-ddb1b7ef]{color:var(--primary-color)}.success-toast[data-v-ddb1b7ef]{position:fixed;bottom:6rem;right:2rem;background:var(--success-color);color:#fff;padding:.75rem 1rem;border-radius:8px;display:flex;align-items:center;gap:.5rem;box-shadow:0 4px 12px #00000026;animation:slideInUp-ddb1b7ef .3s ease-out;z-index:1600}@media (max-width: 768px){.success-toast[data-v-ddb1b7ef]{right:1rem;bottom:5rem;width:auto;max-width:calc(100vw - 2rem)}}@media print{.feedback-system[data-v-ddb1b7ef]{display:none!important}}.floating-action-buttons[data-v-bff4674e]{position:fixed;bottom:2rem;right:2rem;z-index:1000}@media (max-width: 768px){.floating-action-buttons[data-v-bff4674e]{bottom:1rem;right:1rem;z-index:1002}}.fab-main[data-v-bff4674e]{width:50px;height:50px;border-radius:50%;background:var(--primary-color);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #00000026;transition:all .3s cubic-bezier(.25,.8,.25,1);position:relative;z-index:1001;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.fab-main[data-v-bff4674e]:hover{transform:translateY(-2px);box-shadow:0 6px 20px #0003}.fab-main.expanded[data-v-bff4674e]{transform:rotate(45deg);background:var(--danger-color, #ef4444)}.fab-main.expanded[data-v-bff4674e]:hover{transform:rotate(45deg) translateY(-2px)}@media (max-width: 768px){.fab-main[data-v-bff4674e]{width:54px;height:54px}.fab-main[data-v-bff4674e]:before{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px;border-radius:50%}.fab-main[data-v-bff4674e]:active{transform:scale(.95)}.fab-main.expanded[data-v-bff4674e]:active{transform:rotate(45deg) scale(.95)}}.fab-items[data-v-bff4674e]{position:absolute;bottom:60px;right:0;display:flex;flex-direction:column;gap:.75rem;pointer-events:none;z-index:1000}@media (max-width: 768px){.fab-items[data-v-bff4674e]{bottom:64px}}.fab-items .fab-item[data-v-bff4674e]{width:42px;height:42px;border-radius:50%;background:#fff;color:var(--text-color);border:1px solid var(--border-color);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000001a;transition:all .3s ease;position:relative;pointer-events:auto;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.fab-items .fab-item[data-v-bff4674e]:hover{transform:scale(1.1);box-shadow:0 4px 12px #00000026}.fab-items .fab-item.search-button[data-v-bff4674e]{background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:none}.fab-items .fab-item.search-button[data-v-bff4674e]:hover{background:linear-gradient(135deg,#059669,#047857)}.fab-items .fab-item.ai-button[data-v-bff4674e]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none}.fab-items .fab-item.ai-button[data-v-bff4674e]:hover{background:linear-gradient(135deg,#5a67d8,#6b4693)}.fab-items .fab-item.feedback-button[data-v-bff4674e]{background:linear-gradient(135deg,#f093fb,#f5576c);color:#fff;border:none}.fab-items .fab-item.feedback-button[data-v-bff4674e]:hover{background:linear-gradient(135deg,#e879f9,#f43f5e)}.fab-items .fab-item .fab-label[data-v-bff4674e]{position:absolute;right:60px;top:50%;transform:translateY(-50%);background:var(--bg-color);color:var(--text-color);padding:.5rem .75rem;border-radius:20px;font-size:.875rem;font-weight:500;white-space:nowrap;box-shadow:0 2px 8px #0000001a;border:1px solid var(--border-color);opacity:0;transform:translateY(-50%) translate(10px);transition:all .3s ease;pointer-events:none;z-index:1000}.fab-items .fab-item .fab-label[data-v-bff4674e]:after{content:"";position:absolute;top:50%;left:100%;transform:translateY(-50%);width:0;height:0;border-left:6px solid var(--bg-color);border-top:6px solid transparent;border-bottom:6px solid transparent}.fab-items .fab-item:hover .fab-label[data-v-bff4674e]{opacity:1;transform:translateY(-50%) translate(0)}.fab-items .fab-item .notification-dot[data-v-bff4674e]{position:absolute;top:6px;right:6px;width:12px;height:12px;background:#f44;border-radius:50%;border:2px solid white;animation:pulse-notification-bff4674e 2s infinite}@media (max-width: 768px){.fab-items .fab-item .notification-dot[data-v-bff4674e]{top:8px;right:8px;width:14px;height:14px}}@media (max-width: 768px){.fab-items .fab-item[data-v-bff4674e]{width:46px;height:46px}.fab-items .fab-item[data-v-bff4674e]:active{transform:scale(.95)}.fab-items .fab-item .fab-label[data-v-bff4674e]{display:none}}.fab-backdrop[data-v-bff4674e]{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#0000000d;z-index:999;animation:fadeIn-bff4674e .3s ease}.rotate-enter-active[data-v-bff4674e],.rotate-leave-active[data-v-bff4674e]{transition:all .3s ease}.rotate-enter-from[data-v-bff4674e]{opacity:0;transform:rotate(-90deg) scale(.8)}.rotate-leave-to[data-v-bff4674e]{opacity:0;transform:rotate(90deg) scale(.8)}.fab-items-enter-active[data-v-bff4674e]{transition:all .4s cubic-bezier(.25,.8,.25,1)}.fab-items-leave-active[data-v-bff4674e]{transition:all .3s cubic-bezier(.25,.8,.25,1)}.fab-items-enter-from[data-v-bff4674e]{opacity:0;transform:translateY(20px) scale(.8)}.fab-items-leave-to[data-v-bff4674e]{opacity:0;transform:translateY(10px) scale(.9)}.fab-items-move[data-v-bff4674e]{transition:transform .3s ease}@keyframes fadeIn-bff4674e{0%{opacity:0}to{opacity:1}}@keyframes pulse-notification-bff4674e{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.2);opacity:.8}}.dark .fab-item[data-v-bff4674e],.dark .fab-item .fab-label[data-v-bff4674e]{background:var(--bg-color-secondary);color:var(--text-color);border-color:var(--border-color)}.dark .fab-item .fab-label[data-v-bff4674e]:after{border-left-color:var(--bg-color-secondary)}.dark .fab-backdrop[data-v-bff4674e]{background:#0000004d}.footer-nav[data-v-2f06e240]{background:var(--bg-color-secondary);border-top:1px solid var(--border-color);margin-top:auto}.footer-nav .footer-container[data-v-2f06e240]{max-width:1200px;margin:0 auto;padding:3rem 2rem 1.5rem}@media (max-width: 768px){.footer-nav .footer-container[data-v-2f06e240]{padding:2rem 1rem 1rem}}.footer-nav .footer-main[data-v-2f06e240]{display:grid;grid-template-columns:1fr 2fr;gap:3rem;margin-bottom:2rem}@media (max-width: 768px){.footer-nav .footer-main[data-v-2f06e240]{grid-template-columns:1fr;gap:2rem;margin-bottom:1.5rem}}.footer-nav .footer-brand .brand-logo[data-v-2f06e240]{display:flex;align-items:center;margin-bottom:1rem}.footer-nav .footer-brand .brand-logo .logo-image[data-v-2f06e240]{width:40px;height:40px;border-radius:var(--border-radius);margin-right:.75rem}.footer-nav .footer-brand .brand-logo .logo-text[data-v-2f06e240]{font-size:2rem;margin-right:.75rem}.footer-nav .footer-brand .brand-title[data-v-2f06e240]{font-size:1.25rem;font-weight:600;color:var(--heading-color);margin:0 0 .5rem}.footer-nav .footer-brand .brand-description[data-v-2f06e240]{color:var(--text-color-light);line-height:1.6;margin:0 0 1.5rem;max-width:280px}.footer-nav .footer-brand .connect-section .connect-links[data-v-2f06e240]{display:flex;gap:.75rem}.footer-nav .footer-brand .connect-section .connect-links .connect-link[data-v-2f06e240]{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--border-radius);background:var(--bg-color);color:var(--text-color-light);text-decoration:none;transition:all .2s ease;border:1px solid var(--border-color)}.footer-nav .footer-brand .connect-section .connect-links .connect-link[data-v-2f06e240]:hover{background:var(--primary-color);color:#fff;border-color:var(--primary-color);transform:translateY(-2px)}.footer-nav .footer-links[data-v-2f06e240]{display:grid;grid-template-columns:repeat(2,1fr);gap:2rem}@media (max-width: 480px){.footer-nav .footer-links[data-v-2f06e240]{grid-template-columns:1fr;gap:1.5rem}}.footer-nav .links-section .section-title[data-v-2f06e240]{font-size:.875rem;font-weight:600;color:var(--heading-color);margin:0 0 1rem;position:relative}.footer-nav .links-section .section-title[data-v-2f06e240]:after{content:"";position:absolute;bottom:-4px;left:0;width:20px;height:2px;background:var(--primary-color);border-radius:1px}.footer-nav .links-section .links-list[data-v-2f06e240]{list-style:none;padding:0;margin:0}.footer-nav .links-section .link-item[data-v-2f06e240]{margin-bottom:.5rem}.footer-nav .links-section .footer-link[data-v-2f06e240]{display:inline-flex;align-items:center;color:var(--text-color-light);text-decoration:none;font-size:.875rem;transition:all .2s ease;padding:.25rem 0}.footer-nav .links-section .footer-link[data-v-2f06e240]:hover{color:var(--primary-color);padding-left:.25rem}.footer-nav .links-section .footer-link.external .external-icon[data-v-2f06e240]{margin-left:.25rem;opacity:.6}.footer-nav .footer-divider[data-v-2f06e240]{height:1px;background:var(--border-color);margin:2rem 0 1.5rem}.footer-nav .footer-bottom[data-v-2f06e240]{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:1.5rem}@media (max-width: 768px){.footer-nav .footer-bottom[data-v-2f06e240]{flex-direction:column;align-items:center;text-align:center;gap:1rem}}.footer-nav .footer-copyright p[data-v-2f06e240]{color:var(--text-color-muted);font-size:.875rem;margin:0 0 .25rem}.footer-nav .footer-copyright .build-info[data-v-2f06e240]{margin-top:.25rem}.footer-nav .footer-copyright .build-info .tech-link[data-v-2f06e240]{color:var(--primary-color);text-decoration:none;font-weight:500}.footer-nav .footer-copyright .build-info .tech-link[data-v-2f06e240]:hover{text-decoration:underline}.footer-nav .footer-meta[data-v-2f06e240]{display:flex;flex-direction:column;align-items:flex-end;gap:.75rem}@media (max-width: 768px){.footer-nav .footer-meta[data-v-2f06e240]{align-items:center}}.footer-nav .version-info[data-v-2f06e240]{display:flex;align-items:center;gap:.75rem;font-size:.75rem;color:var(--text-color-muted)}.footer-nav .version-info .version-badge[data-v-2f06e240]{background:var(--primary-color);color:#fff;padding:.25rem .5rem;border-radius:var(--border-radius);font-weight:500;font-size:.7rem}.dark .footer-nav[data-v-2f06e240]{background:var(--bg-color);border-top-color:var(--border-color)}.docs-layout{min-height:100vh;display:flex;flex-direction:column;background-color:var(--bg-color)}.docs-layout .header-nav{flex-shrink:0;display:block!important;width:100%;position:sticky;top:0;z-index:1000}@media (max-width: 768px){.docs-layout .header-nav{background:var(--bg-color);border-bottom:1px solid var(--border-color);box-shadow:0 1px 3px #0000001a}}.docs-container{display:grid;grid-template-columns:var(--sidebar-width) 1fr var(--toc-width);flex:1;height:calc(100vh - var(--header-height));overflow:hidden;position:relative}@media (max-width: 1200px){.docs-container{grid-template-columns:var(--sidebar-width) 1fr}.docs-container .docs-toc{display:none}}@media (max-width: 768px){.docs-container{grid-template-columns:1fr;height:calc(100vh - var(--header-height))}.docs-container .sidebar-nav{position:fixed;top:var(--header-height);left:-100%;z-index:999;transition:left .3s ease;width:var(--sidebar-width);height:calc(100vh - var(--header-height))}.docs-container .sidebar-nav.mobile-open{left:0}}.docs-main{overflow-y:auto;overflow-x:hidden;position:relative;min-width:0;width:100%;max-width:100%;display:flex;flex-direction:column}.docs-content{width:100%;padding:2rem;box-sizing:border-box;flex:1;overflow-wrap:break-word;word-wrap:break-word}@media (max-width: 1200px){.docs-content{padding:1.5rem}}@media (max-width: 768px){.docs-content{padding:1rem}}@media (max-width: 480px){.docs-content{padding:.75rem}}.docs-content *{max-width:100%;box-sizing:border-box}.docs-content table{width:100%;overflow-x:auto;display:block;white-space:nowrap}@media (max-width: 768px){.docs-content table{font-size:.875rem}}.docs-content img{max-width:100%;height:auto}.docs-content pre{overflow-x:auto;max-width:100%}.docs-toc{position:sticky;top:0;height:100%;overflow-y:auto}@media (max-width: 1200px){.docs-toc{display:none}}.sidebar-overlay{position:fixed;top:var(--header-height);left:0;right:0;bottom:0;background:#00000080;z-index:998;opacity:0;animation:fadeIn .3s ease forwards}@media (min-width: 769px){.sidebar-overlay{display:none}}@keyframes fadeIn{to{opacity:1}}.default-home[data-v-cf6c7637]{min-height:100vh;padding:2rem}.hero[data-v-cf6c7637]{text-align:center;padding:4rem 0;margin-bottom:4rem}.hero .hero-content[data-v-cf6c7637]{max-width:800px;margin:0 auto}.hero .hero-title[data-v-cf6c7637]{font-size:3rem;font-weight:700;margin-bottom:1rem;color:var(--text-color);display:flex;align-items:center;justify-content:center;gap:1rem}.hero .hero-title .hero-logo[data-v-cf6c7637]{display:flex;align-items:center}.hero .hero-title .hero-logo .logo-image[data-v-cf6c7637]{height:64px;width:auto;max-width:80px;object-fit:contain;border-radius:8px}.hero .hero-title .hero-logo .logo-text[data-v-cf6c7637]{font-size:3.5rem}@media (max-width: 768px){.hero .hero-title[data-v-cf6c7637]{font-size:2rem;flex-direction:column;gap:.5rem}.hero .hero-title .hero-logo .logo-image[data-v-cf6c7637]{height:48px;max-width:60px}.hero .hero-title .hero-logo .logo-text[data-v-cf6c7637]{font-size:2.5rem}}.hero .hero-description[data-v-cf6c7637]{font-size:1.25rem;color:var(--text-color-light);margin:0}.chapters[data-v-cf6c7637]{max-width:1200px;margin:0 auto}.chapters h2[data-v-cf6c7637]{text-align:center;font-size:2rem;margin-bottom:3rem;color:var(--text-color)}.chapter-grid[data-v-cf6c7637]{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:2rem}@media (max-width: 768px){.chapter-grid[data-v-cf6c7637]{grid-template-columns:1fr;gap:1.5rem}}.chapter-card[data-v-cf6c7637]{background:var(--bg-color-secondary, #f8fafc);border:1px solid var(--border-color, #e2e8f0);border-radius:12px;padding:2rem;cursor:pointer;transition:all .3s ease}.chapter-card[data-v-cf6c7637]:hover{transform:translateY(-4px);box-shadow:0 12px 24px #0000001a;border-color:var(--primary-color, #3b82f6)}.chapter-card h3[data-v-cf6c7637]{font-size:1.25rem;font-weight:600;margin-bottom:1.5rem;color:var(--primary-color, #3b82f6)}.chapter-sections .section-item[data-v-cf6c7637]{margin-bottom:.75rem}.chapter-sections .section-item[data-v-cf6c7637]:last-child{margin-bottom:0}.chapter-sections .section-link[data-v-cf6c7637]{display:block;color:var(--text-color, #1e293b);text-decoration:none;padding:.5rem 0;border-radius:6px;transition:all .2s ease}.chapter-sections .section-link[data-v-cf6c7637]:hover{color:var(--primary-color, #3b82f6);background:var(--bg-color-hover, rgba(59, 130, 246, .05));padding-left:1rem}.chapter-sections .more-sections[data-v-cf6c7637]{color:var(--text-color-light, #64748b);font-size:.9rem;font-style:italic;margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border-color, #e2e8f0)}.dark .chapter-card[data-v-cf6c7637]{background:var(--bg-color-secondary, #1e293b);border-color:var(--border-color, #374151)}.dark .section-link[data-v-cf6c7637]:hover{background:var(--bg-color-hover, rgba(59, 130, 246, .1))}.markdown-body{line-height:1.6;font-size:16px;color:var(--text-color)}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;color:var(--heading-color);position:relative}.markdown-body h1:first-child,.markdown-body h2:first-child,.markdown-body h3:first-child,.markdown-body h4:first-child,.markdown-body h5:first-child,.markdown-body h6:first-child{margin-top:0}.markdown-body h1 .header-anchor,.markdown-body h2 .header-anchor,.markdown-body h3 .header-anchor,.markdown-body h4 .header-anchor,.markdown-body h5 .header-anchor,.markdown-body h6 .header-anchor{position:absolute;left:-1.5em;opacity:0;font-weight:400;color:var(--text-color-light);transition:opacity .2s;text-decoration:none}.markdown-body h1 .header-anchor:hover,.markdown-body h2 .header-anchor:hover,.markdown-body h3 .header-anchor:hover,.markdown-body h4 .header-anchor:hover,.markdown-body h5 .header-anchor:hover,.markdown-body h6 .header-anchor:hover{text-decoration:none;color:var(--primary-color)}.markdown-body h1:hover .header-anchor,.markdown-body h2:hover .header-anchor,.markdown-body h3:hover .header-anchor,.markdown-body h4:hover .header-anchor,.markdown-body h5:hover .header-anchor,.markdown-body h6:hover .header-anchor{opacity:1}.markdown-body h1{font-size:2rem;border-bottom:1px solid var(--border-color);padding-bottom:.3rem}.markdown-body h2{font-size:1.5rem;border-bottom:1px solid var(--border-color);padding-bottom:.3rem}.markdown-body h3{font-size:1.25rem}.markdown-body h4{font-size:1.1rem}.markdown-body h5{font-size:1rem;font-weight:600}.markdown-body h6{font-size:.9rem;font-weight:600;color:var(--text-color-light)}.markdown-body p{margin-bottom:16px}.markdown-body a{color:var(--primary-color);text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body code{background-color:var(--code-bg-color);color:var(--code-text-color);padding:.2em .4em;border-radius:3px;font-size:.875em;font-family:var(--font-family-mono)}.markdown-body .code-block-wrapper{position:relative;margin:16px 0;border-radius:6px;overflow:hidden;border:1px solid var(--border-color)}.markdown-body .code-block-wrapper .code-lang{background:var(--bg-color-secondary);color:var(--text-color-light);font-size:.75rem;font-weight:500;padding:.5rem 1rem;border-bottom:1px solid var(--border-color);text-transform:uppercase;letter-spacing:.5px}.markdown-body .code-block-wrapper pre{margin:0;border-radius:0;border:none}.markdown-body pre{background-color:var(--code-bg-color);border-radius:6px;padding:16px;overflow-x:auto;margin:16px 0;border:1px solid var(--border-color)}.markdown-body pre code{background:none;padding:0;font-size:.875em;color:var(--code-text-color)}.markdown-body blockquote{padding:0 1rem;color:var(--text-color-light);border-left:4px solid var(--border-color);margin:16px 0;font-style:italic}.markdown-body table{width:100%;border-collapse:collapse;margin:16px 0}.markdown-body table th,.markdown-body table td{border:1px solid var(--border-color);padding:8px 12px;text-align:left}.markdown-body table th{background-color:var(--bg-color-secondary);font-weight:600}.markdown-body table tr:nth-child(2n){background-color:var(--bg-color-secondary)}.markdown-body img{max-width:100%;height:auto;display:block;margin:16px auto;border-radius:var(--border-radius)}.markdown-body hr{border:none;border-top:1px solid var(--border-color);margin:24px 0}.markdown-body ul,.markdown-body ol{padding-left:1.5rem;margin:16px 0}.markdown-body ul li,.markdown-body ol li,.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ul,.markdown-body ol ol{margin:4px 0}@media (max-width: 768px){.markdown-body{font-size:14px}.markdown-body h1{font-size:1.75rem}.markdown-body h2{font-size:1.375rem}.markdown-body .code-block-wrapper .code-lang{font-size:.7rem;padding:.4rem .8rem}.markdown-body pre{padding:12px;font-size:.8rem}}.default-article[data-v-45369187]{max-width:800px;margin:0 auto;padding:2rem}@media (max-width: 768px){.default-article[data-v-45369187]{padding:1rem}}.breadcrumb[data-v-45369187]{margin-bottom:2rem;font-size:.9rem;color:var(--text-color-light, #64748b)}.breadcrumb a[data-v-45369187]{color:var(--primary-color, #3b82f6);text-decoration:none}.breadcrumb a[data-v-45369187]:hover{text-decoration:underline}.breadcrumb .separator[data-v-45369187]{margin:0 .5rem;color:var(--text-color-light, #64748b)}.breadcrumb .current[data-v-45369187]{color:var(--text-color, #1e293b);font-weight:500}.loading[data-v-45369187]{text-align:center;padding:4rem 2rem}.loading p[data-v-45369187]{color:var(--text-color-light, #64748b);margin:0}.error[data-v-45369187]{text-align:center;padding:4rem 2rem}.error h2[data-v-45369187]{color:var(--error-color, #ef4444);margin-bottom:1rem}.error p[data-v-45369187]{color:var(--text-color-light, #64748b);margin-bottom:2rem}.error .retry-btn[data-v-45369187]{background:var(--primary-color, #3b82f6);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:6px;cursor:pointer;font-size:.9rem;transition:background-color .2s}.error .retry-btn[data-v-45369187]:hover{background:var(--primary-color-dark, #2563eb)}.article-content[data-v-45369187]{margin-bottom:4rem}.page-nav[data-v-45369187]{display:flex;justify-content:space-between;gap:1rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--border-color, #e2e8f0)}@media (max-width: 768px){.page-nav[data-v-45369187]{flex-direction:column}}.page-nav .nav-link[data-v-45369187]{display:flex;align-items:center;gap:1rem;padding:1rem 1.5rem;background:var(--bg-color-secondary, #f8fafc);border:1px solid var(--border-color, #e2e8f0);border-radius:8px;text-decoration:none;color:var(--text-color, #1e293b);transition:all .2s;min-width:0;flex:1;max-width:300px}.page-nav .nav-link[data-v-45369187]:hover{border-color:var(--primary-color, #3b82f6);transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.page-nav .nav-link.prev[data-v-45369187]{margin-right:auto}.page-nav .nav-link.next[data-v-45369187]{margin-left:auto;flex-direction:row-reverse}.page-nav .nav-link.next .nav-content[data-v-45369187]{text-align:right}.page-nav .nav-arrow[data-v-45369187]{font-size:1.2rem;color:var(--primary-color, #3b82f6);flex-shrink:0}.page-nav .nav-content[data-v-45369187]{min-width:0}.page-nav .nav-content .nav-label[data-v-45369187]{font-size:.8rem;color:var(--text-color-light, #64748b);margin-bottom:.25rem;text-transform:uppercase;letter-spacing:.5px}.page-nav .nav-content .nav-title[data-v-45369187]{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dark .nav-link[data-v-45369187]{background:var(--bg-color-secondary, #1e293b);border-color:var(--border-color, #374151)}:root{--primary-color: #3b82f6;--primary-color-dark: #2563eb;--accent-color: #10b981;--accent-color-dark: #059669;--bg-color: #ffffff;--bg-color-secondary: #f8fafc;--bg-color-hover: rgba(59, 130, 246, .05);--text-color: #1e293b;--text-color-light: #64748b;--text-color-muted: #94a3b8;--heading-color: #0f172a;--border-color: #e2e8f0;--border-color-light: #f1f5f9;--code-bg-color: #f1f5f9;--code-text-color: #334155;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--info-color: #3b82f6;--header-height: 60px;--sidebar-width: 280px;--toc-width: 240px;--border-radius: 6px;--border-radius-lg: 8px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace}.dark{--bg-color: #1a1a1a;--bg-color-secondary: #242424;--bg-color-hover: rgba(59, 130, 246, .08);--text-color: #e2e2e3;--text-color-light: #a8a8a9;--text-color-muted: #8e8e90;--heading-color: #ffffff;--border-color: #3c3c3c;--border-color-light: #484848;--code-bg-color: #161618;--code-text-color: #e6e6e6}.theme-vue{--primary-color: #41b883;--primary-color-dark: #369970;--accent-color: #35495e;--accent-color-dark: #2c3e50;--bg-color: #ffffff;--bg-color-secondary: #f9f9f9;--bg-color-hover: rgba(65, 184, 131, .06);--text-color: #2c3e50;--text-color-light: #7f8c8d;--text-color-muted: #95a5a6;--heading-color: #2c3e50;--border-color: #e4e7ed;--border-color-light: #ebeef5;--code-bg-color: #f8f8f8;--code-text-color: #476582;--success-color: #41b883;--warning-color: #f1c40f;--error-color: #e74c3c;--info-color: #3498db}.theme-vue.dark{--bg-color: #0d1117;--bg-color-secondary: #161b22;--bg-color-hover: rgba(65, 184, 131, .1);--text-color: #e6edf3;--text-color-light: #7d8590;--text-color-muted: #656d76;--heading-color: #f0f6fc;--border-color: #30363d;--border-color-light: #21262d;--code-bg-color: #0d1117;--code-text-color: #e6edf3;--primary-color: #42d392;--primary-color-dark: #369970}.theme-github{--primary-color: #0969da;--primary-color-dark: #0550ae;--accent-color: #6f42c1;--accent-color-dark: #5a32a3;--bg-color: #ffffff;--bg-color-secondary: #f6f8fa;--bg-color-hover: rgba(9, 105, 218, .05);--text-color: #24292f;--text-color-light: #656d76;--text-color-muted: #8b949e;--heading-color: #1f2328;--border-color: #d0d7de;--border-color-light: #e5e8ec;--code-bg-color: #f6f8fa;--code-text-color: #24292f;--success-color: #1a7f37;--warning-color: #9a6700;--error-color: #d1242f;--info-color: #0969da}.theme-github.dark{--bg-color: #0d1117;--bg-color-secondary: #161b22;--bg-color-hover: rgba(9, 105, 218, .1);--text-color: #e6edf3;--text-color-light: #7d8590;--text-color-muted: #656d76;--heading-color: #f0f6fc;--border-color: #30363d;--border-color-light: #21262d;--code-bg-color: #0d1117;--code-text-color: #e6edf3;--primary-color: #58a6ff;--primary-color-dark: #1f6feb}.theme-purple{--primary-color: #8b5cf6;--primary-color-dark: #7c3aed;--accent-color: #ec4899;--accent-color-dark: #db2777;--bg-color: #ffffff;--bg-color-secondary: #faf5ff;--bg-color-hover: rgba(139, 92, 246, .05);--text-color: #374151;--text-color-light: #6b7280;--text-color-muted: #9ca3af;--heading-color: #1f2937;--border-color: #e5e7eb;--border-color-light: #f3f4f6;--code-bg-color: #f9fafb;--code-text-color: #374151;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--info-color: #8b5cf6}.theme-purple.dark{--bg-color: #0f0f23;--bg-color-secondary: #1a1a2e;--bg-color-hover: rgba(139, 92, 246, .1);--text-color: #e2e8f0;--text-color-light: #a1a1aa;--text-color-muted: #71717a;--heading-color: #f1f5f9;--border-color: #374151;--border-color-light: #4b5563;--code-bg-color: #0f0f23;--code-text-color: #e2e8f0;--primary-color: #a78bfa;--primary-color-dark: #8b5cf6}.theme-orange{--primary-color: #ea580c;--primary-color-dark: #c2410c;--accent-color: #dc2626;--accent-color-dark: #b91c1c;--bg-color: #ffffff;--bg-color-secondary: #fff7ed;--bg-color-hover: rgba(234, 88, 12, .05);--text-color: #292524;--text-color-light: #78716c;--text-color-muted: #a8a29e;--heading-color: #1c1917;--border-color: #e7e5e4;--border-color-light: #f5f5f4;--code-bg-color: #fafaf9;--code-text-color: #292524;--success-color: #16a34a;--warning-color: #ea580c;--error-color: #dc2626;--info-color: #0284c7}.theme-orange.dark{--bg-color: #1c1917;--bg-color-secondary: #292524;--bg-color-hover: rgba(234, 88, 12, .1);--text-color: #fafaf9;--text-color-light: #a8a29e;--text-color-muted: #78716c;--heading-color: #ffffff;--border-color: #44403c;--border-color-light: #57534e;--code-bg-color: #1c1917;--code-text-color: #fafaf9;--primary-color: #fb923c;--primary-color-dark: #ea580c}.theme-emerald{--primary-color: #059669;--primary-color-dark: #047857;--accent-color: #0d9488;--accent-color-dark: #0f766e;--bg-color: #ffffff;--bg-color-secondary: #ecfdf5;--bg-color-hover: rgba(5, 150, 105, .05);--text-color: #064e3b;--text-color-light: #065f46;--text-color-muted: #6b7280;--heading-color: #022c22;--border-color: #d1fae5;--border-color-light: #ecfdf5;--code-bg-color: #f0fdf4;--code-text-color: #064e3b;--success-color: #059669;--warning-color: #d97706;--error-color: #dc2626;--info-color: #0284c7}.theme-emerald.dark{--bg-color: #022c22;--bg-color-secondary: #064e3b;--bg-color-hover: rgba(5, 150, 105, .1);--text-color: #d1fae5;--text-color-light: #86efac;--text-color-muted: #4ade80;--heading-color: #ffffff;--border-color: #065f46;--border-color-light: #047857;--code-bg-color: #022c22;--code-text-color: #d1fae5;--primary-color: #34d399;--primary-color-dark: #10b981}*,*:before,*:after{box-sizing:border-box}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;scroll-behavior:smooth}body{margin:0;padding:0;font-family:var(--font-family);font-feature-settings:normal;font-variation-settings:normal;background-color:var(--bg-color);color:var(--text-color);transition:background-color .2s,color .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-color-secondary)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-color-light)}.container{max-width:100%;width:100%;margin:0 auto;padding:0 1rem;box-sizing:border-box}.btn{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1rem;font-size:.875rem;font-weight:500;border-radius:var(--border-radius);border:1px solid transparent;cursor:pointer;transition:all .2s;text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.btn-primary{background:var(--primary-color);color:#fff}.btn.btn-primary:hover:not(:disabled){background:var(--primary-color-dark)}.btn.btn-secondary{background:var(--bg-color-secondary);color:var(--text-color);border-color:var(--border-color)}.btn.btn-secondary:hover:not(:disabled){background:var(--bg-color-hover);border-color:var(--primary-color)}.btn.btn-ghost{background:transparent;color:var(--text-color)}.btn.btn-ghost:hover:not(:disabled){background:var(--bg-color-hover)}.loading{display:inline-block;width:20px;height:20px;border:2px solid var(--border-color);border-radius:50%;border-top-color:var(--primary-color);animation:spin 1s ease-in-out infinite}@keyframes spin{to{transform:rotate(360deg)}}.hidden{display:none!important}@media (max-width: 768px){.hidden-mobile{display:none!important}}@media (min-width: 769px){.hidden-desktop{display:none!important}}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}pre[class*=language-]{background:var(--code-bg-color)!important;border:1px solid var(--border-color);border-radius:var(--border-radius-lg)}pre[class*=language-] code,code[class*=language-]{color:var(--code-text-color)!important}a{color:var(--primary-color);text-decoration:none}a:hover{text-decoration:underline}table{width:100%;border-collapse:collapse;margin:1.5rem 0}table th,table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--border-color)}table th{background:var(--bg-color-secondary);font-weight:600;color:var(--heading-color)}table tbody tr:hover{background:var(--bg-color-hover)}blockquote{margin:1.5rem 0;padding:1rem 1.5rem;border-left:4px solid var(--primary-color);background:var(--bg-color-secondary);border-radius:0 var(--border-radius) var(--border-radius) 0}blockquote p:last-child{margin-bottom:0}.slide-enter-from,.slide-leave-to{transform:translate(-100%)}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:var(--font-primary, "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);line-height:1.6;color:var(--text-color);background-color:var(--bg-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:inherit;text-decoration:none}ul,ol{list-style:none}img{max-width:100%;height:auto;display:block}button{border:none;background:none;cursor:pointer;font-family:inherit}input,textarea,select{font-family:inherit;font-size:inherit}code,pre{font-family:var(--font-mono, "JetBrains Mono", "Fira Code", Consolas, monospace)}::selection{background:#3b82f633;color:var(--text-color)}:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.w-full{width:100%}.h-full{height:100%}@media (max-width: 768px){.mobile-hidden{display:none!important}}@media (min-width: 769px){.desktop-hidden{display:none!important}}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-enter-active,.slide-leave-active{transition:transform .3s ease}.slide-enter-from{transform:translate(-100%)}.slide-leave-to{transform:translate(100%)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media print{.no-print{display:none!important}body{background:#fff!important;color:#000!important}a{text-decoration:underline}}.prevent-overflow{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-words{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word} diff --git a/docs/dist/assets/main-f65d595e.js b/docs/dist/assets/main-f65d595e.js new file mode 100644 index 0000000..f939617 --- /dev/null +++ b/docs/dist/assets/main-f65d595e.js @@ -0,0 +1,420 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();/** +* @vue/shared v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function pn(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ee={},Ns=[],kt=()=>{},mi=()=>!1,hs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Qc=e=>e.startsWith("onUpdate:"),we=Object.assign,Jc=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Y_=Object.prototype.hasOwnProperty,Oe=(e,t)=>Y_.call(e,t),se=Array.isArray,Os=e=>ti(e)==="[object Map]",ps=e=>ti(e)==="[object Set]",Df=e=>ti(e)==="[object Date]",Z_=e=>ti(e)==="[object RegExp]",fe=e=>typeof e=="function",ge=e=>typeof e=="string",tn=e=>typeof e=="symbol",ze=e=>e!==null&&typeof e=="object",eu=e=>(ze(e)||fe(e))&&fe(e.then)&&fe(e.catch),Sd=Object.prototype.toString,ti=e=>Sd.call(e),X_=e=>ti(e).slice(8,-1),Rl=e=>ti(e)==="[object Object]",tu=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Or=pn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Q_=pn("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Pl=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},J_=/-(\w)/g,Ze=Pl(e=>e.replace(J_,(t,n)=>n?n.toUpperCase():"")),ey=/\B([A-Z])/g,Qt=Pl(e=>e.replace(ey,"-$1").toLowerCase()),ds=Pl(e=>e.charAt(0).toUpperCase()+e.slice(1)),Fs=Pl(e=>e?`on${ds(e)}`:""),Ut=(e,t)=>!Object.is(e,t),Rs=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},Yo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Zo=e=>{const t=ge(e)?Number(e):NaN;return isNaN(t)?e:t};let Nf;const Ml=()=>Nf||(Nf=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ty(e,t){return e+JSON.stringify(t,(n,r)=>typeof r=="function"?r.toString():r)}const ny="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol",ry=pn(ny);function Vn(e){if(se(e)){const t={};for(let n=0;n{if(n){const r=n.split(iy);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Se(e){let t="";if(ge(e))t=e;else if(se(e))for(let n=0;n$r(n,t))}const Ld=e=>!!(e&&e.__v_isRef===!0),W=e=>ge(e)?e:e==null?"":se(e)||ze(e)&&(e.toString===Sd||!fe(e.toString))?Ld(e)?W(e.value):JSON.stringify(e,Dd,2):String(e),Dd=(e,t)=>Ld(t)?Dd(e,t.value):Os(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[Ca(r,i)+" =>"]=s,n),{})}:ps(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Ca(n))}:tn(t)?Ca(t):ze(t)&&!se(t)&&!Rl(t)?String(t):t,Ca=(e,t="")=>{var n;return tn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let It;class nu{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=It,!t&&It&&(this.index=(It.scopes||(It.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(It=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(ki){let t=ki;for(ki=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;bi;){let t=bi;for(bi=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Pd(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Md(e){let t,n=e.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),iu(r),ky(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function ec(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&($d(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function $d(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Di)||(e.globalVersion=Di,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ec(e))))return;e.flags|=2;const t=e.dep,n=Ve,r=Ln;Ve=e,Ln=!0;try{Pd(e);const s=e.fn(e._value);(t.version===0||Ut(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Ve=n,Ln=r,Md(e),e.flags&=-3}}function iu(e,t=!1){const{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)iu(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function ky(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}function vy(e,t){e.effect instanceof Li&&(e=e.effect.fn);const n=new Li(e);t&&we(n,t);try{n.run()}catch(s){throw n.stop(),s}const r=n.run.bind(n);return r.effect=n,r}function Ey(e){e.effect.stop()}let Ln=!0;const Bd=[];function hr(){Bd.push(Ln),Ln=!1}function pr(){const e=Bd.pop();Ln=e===void 0?!0:e}function Of(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ve;Ve=void 0;try{t()}finally{Ve=n}}}let Di=0;class Cy{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!Ve||!Ln||Ve===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ve)n=this.activeLink=new Cy(Ve,this),Ve.deps?(n.prevDep=Ve.depsTail,Ve.depsTail.nextDep=n,Ve.depsTail=n):Ve.deps=Ve.depsTail=n,zd(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Ve.depsTail,n.nextDep=void 0,Ve.depsTail.nextDep=n,Ve.depsTail=n,Ve.deps===n&&(Ve.deps=r)}return n}trigger(t){this.version++,Di++,this.notify(t)}notify(t){ru();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{su()}}}function zd(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)zd(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Xo=new WeakMap,ts=Symbol(""),tc=Symbol(""),Ni=Symbol("");function Nt(e,t,n){if(Ln&&Ve){let r=Xo.get(e);r||Xo.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new Bl),s.map=r,s.key=n),s.track()}}function rr(e,t,n,r,s,i){const o=Xo.get(e);if(!o){Di++;return}const l=a=>{a&&a.trigger()};if(ru(),t==="clear")o.forEach(l);else{const a=se(e),c=a&&tu(n);if(a&&n==="length"){const u=Number(r);o.forEach((f,p)=>{(p==="length"||p===Ni||!tn(p)&&p>=u)&&l(f)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),c&&l(o.get(Ni)),t){case"add":a?c&&l(o.get("length")):(l(o.get(ts)),Os(e)&&l(o.get(tc)));break;case"delete":a||(l(o.get(ts)),Os(e)&&l(o.get(tc)));break;case"set":Os(e)&&l(o.get(ts));break}}su()}function wy(e,t){const n=Xo.get(e);return n&&n.get(t)}function _s(e){const t=Ie(e);return t===e?t:(Nt(t,"iterate",Ni),un(e)?t:t.map(Ct))}function zl(e){return Nt(e=Ie(e),"iterate",Ni),e}const Ay={__proto__:null,[Symbol.iterator](){return Aa(this,Symbol.iterator,Ct)},concat(...e){return _s(this).concat(...e.map(t=>se(t)?_s(t):t))},entries(){return Aa(this,"entries",e=>(e[1]=Ct(e[1]),e))},every(e,t){return Yn(this,"every",e,t,void 0,arguments)},filter(e,t){return Yn(this,"filter",e,t,n=>n.map(Ct),arguments)},find(e,t){return Yn(this,"find",e,t,Ct,arguments)},findIndex(e,t){return Yn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Yn(this,"findLast",e,t,Ct,arguments)},findLastIndex(e,t){return Yn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Yn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Sa(this,"includes",e)},indexOf(...e){return Sa(this,"indexOf",e)},join(e){return _s(this).join(e)},lastIndexOf(...e){return Sa(this,"lastIndexOf",e)},map(e,t){return Yn(this,"map",e,t,void 0,arguments)},pop(){return ai(this,"pop")},push(...e){return ai(this,"push",e)},reduce(e,...t){return Ff(this,"reduce",e,t)},reduceRight(e,...t){return Ff(this,"reduceRight",e,t)},shift(){return ai(this,"shift")},some(e,t){return Yn(this,"some",e,t,void 0,arguments)},splice(...e){return ai(this,"splice",e)},toReversed(){return _s(this).toReversed()},toSorted(e){return _s(this).toSorted(e)},toSpliced(...e){return _s(this).toSpliced(...e)},unshift(...e){return ai(this,"unshift",e)},values(){return Aa(this,"values",Ct)}};function Aa(e,t,n){const r=zl(e),s=r[t]();return r!==e&&!un(e)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.value&&(i.value=n(i.value)),i}),s}const Sy=Array.prototype;function Yn(e,t,n,r,s,i){const o=zl(e),l=o!==e&&!un(e),a=o[t];if(a!==Sy[t]){const f=a.apply(e,i);return l?Ct(f):f}let c=n;o!==e&&(l?c=function(f,p){return n.call(this,Ct(f),p,e)}:n.length>2&&(c=function(f,p){return n.call(this,f,p,e)}));const u=a.call(o,c,r);return l&&s?s(u):u}function Ff(e,t,n,r){const s=zl(e);let i=n;return s!==e&&(un(e)?n.length>3&&(i=function(o,l,a){return n.call(this,o,l,a,e)}):i=function(o,l,a){return n.call(this,o,Ct(l),a,e)}),s[t](i,...r)}function Sa(e,t,n){const r=Ie(e);Nt(r,"iterate",Ni);const s=r[t](...n);return(s===-1||s===!1)&&jl(n[0])?(n[0]=Ie(n[0]),r[t](...n)):s}function ai(e,t,n=[]){hr(),ru();const r=Ie(e)[t].apply(e,n);return su(),pr(),r}const xy=pn("__proto__,__v_isRef,__isVue"),Ud=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(tn));function Ty(e){tn(e)||(e=String(e));const t=Ie(this);return Nt(t,"has",e),t.hasOwnProperty(e)}class Hd{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?Gd:Kd:i?Wd:qd).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=se(t);if(!s){let a;if(o&&(a=Ay[n]))return a;if(n==="hasOwnProperty")return Ty}const l=Reflect.get(t,n,ct(t)?t:r);return(tn(n)?Ud.has(n):xy(n))||(s||Nt(t,"get",n),i)?l:ct(l)?o&&tu(n)?l:l.value:ze(l)?s?lu(l):Ht(l):l}}class jd extends Hd{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n];if(!this._isShallow){const a=dr(i);if(!un(r)&&!dr(r)&&(i=Ie(i),r=Ie(r)),!se(t)&&ct(i)&&!ct(r))return a?!1:(i.value=r,!0)}const o=se(t)&&tu(n)?Number(n)e,yo=e=>Reflect.getPrototypeOf(e);function Oy(e,t,n){return function(...r){const s=this.__v_raw,i=Ie(s),o=Os(i),l=e==="entries"||e===Symbol.iterator&&o,a=e==="keys"&&o,c=s[e](...r),u=n?nc:t?Qo:Ct;return!t&&Nt(i,"iterate",a?tc:ts),{next(){const{value:f,done:p}=c.next();return p?{value:f,done:p}:{value:l?[u(f[0]),u(f[1])]:u(f),done:p}},[Symbol.iterator](){return this}}}}function bo(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fy(e,t){const n={get(s){const i=this.__v_raw,o=Ie(i),l=Ie(s);e||(Ut(s,l)&&Nt(o,"get",s),Nt(o,"get",l));const{has:a}=yo(o),c=t?nc:e?Qo:Ct;if(a.call(o,s))return c(i.get(s));if(a.call(o,l))return c(i.get(l));i!==o&&i.get(s)},get size(){const s=this.__v_raw;return!e&&Nt(Ie(s),"iterate",ts),Reflect.get(s,"size",s)},has(s){const i=this.__v_raw,o=Ie(i),l=Ie(s);return e||(Ut(s,l)&&Nt(o,"has",s),Nt(o,"has",l)),s===l?i.has(s):i.has(s)||i.has(l)},forEach(s,i){const o=this,l=o.__v_raw,a=Ie(l),c=t?nc:e?Qo:Ct;return!e&&Nt(a,"iterate",ts),l.forEach((u,f)=>s.call(i,c(u),c(f),o))}};return we(n,e?{add:bo("add"),set:bo("set"),delete:bo("delete"),clear:bo("clear")}:{add(s){!t&&!un(s)&&!dr(s)&&(s=Ie(s));const i=Ie(this);return yo(i).has.call(i,s)||(i.add(s),rr(i,"add",s,s)),this},set(s,i){!t&&!un(i)&&!dr(i)&&(i=Ie(i));const o=Ie(this),{has:l,get:a}=yo(o);let c=l.call(o,s);c||(s=Ie(s),c=l.call(o,s));const u=a.call(o,s);return o.set(s,i),c?Ut(i,u)&&rr(o,"set",s,i):rr(o,"add",s,i),this},delete(s){const i=Ie(this),{has:o,get:l}=yo(i);let a=o.call(i,s);a||(s=Ie(s),a=o.call(i,s)),l&&l.call(i,s);const c=i.delete(s);return a&&rr(i,"delete",s,void 0),c},clear(){const s=Ie(this),i=s.size!==0,o=s.clear();return i&&rr(s,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=Oy(s,e,t)}),n}function Ul(e,t){const n=Fy(e,t);return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Oe(n,s)&&s in r?n:r,s,i)}const Ry={get:Ul(!1,!1)},Py={get:Ul(!1,!0)},My={get:Ul(!0,!1)},$y={get:Ul(!0,!0)},qd=new WeakMap,Wd=new WeakMap,Kd=new WeakMap,Gd=new WeakMap;function By(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function zy(e){return e.__v_skip||!Object.isExtensible(e)?0:By(X_(e))}function Ht(e){return dr(e)?e:Hl(e,!1,Iy,Ry,qd)}function ou(e){return Hl(e,!1,Dy,Py,Wd)}function lu(e){return Hl(e,!0,Ly,My,Kd)}function Uy(e){return Hl(e,!0,Ny,$y,Gd)}function Hl(e,t,n,r,s){if(!ze(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=zy(e);if(i===0)return e;const o=s.get(e);if(o)return o;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Fr(e){return dr(e)?Fr(e.__v_raw):!!(e&&e.__v_isReactive)}function dr(e){return!!(e&&e.__v_isReadonly)}function un(e){return!!(e&&e.__v_isShallow)}function jl(e){return e?!!e.__v_raw:!1}function Ie(e){const t=e&&e.__v_raw;return t?Ie(t):e}function Yd(e){return!Oe(e,"__v_skip")&&Object.isExtensible(e)&&xd(e,"__v_skip",!0),e}const Ct=e=>ze(e)?Ht(e):e,Qo=e=>ze(e)?lu(e):e;function ct(e){return e?e.__v_isRef===!0:!1}function te(e){return Zd(e,!1)}function io(e){return Zd(e,!0)}function Zd(e,t){return ct(e)?e:new Hy(e,t)}class Hy{constructor(t,n){this.dep=new Bl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ie(t),this._value=n?t:Ct(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||un(t)||dr(t);t=r?t:Ie(t),Ut(t,n)&&(this._rawValue=t,this._value=r?t:Ct(t),this.dep.trigger())}}function jy(e){e.dep&&e.dep.trigger()}function Q(e){return ct(e)?e.value:e}function Vy(e){return fe(e)?e():Q(e)}const qy={get:(e,t,n)=>t==="__v_raw"?e:Q(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ct(s)&&!ct(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function au(e){return Fr(e)?e:new Proxy(e,qy)}class Wy{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Bl,{get:r,set:s}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=s}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Xd(e){return new Wy(e)}function Ky(e){const t=se(e)?new Array(e.length):{};for(const n in e)t[n]=Qd(e,n);return t}class Gy{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return wy(Ie(this._object),this._key)}}class Yy{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Zy(e,t,n){return ct(e)?e:fe(e)?new Yy(e):ze(e)&&arguments.length>1?Qd(e,t,n):te(e)}function Qd(e,t,n){const r=e[t];return ct(r)?r:new Gy(e,t,n)}class Xy{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Bl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Di-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Ve!==this)return Rd(this,!0),!0}get value(){const t=this.dep.track();return $d(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Qy(e,t,n=!1){let r,s;return fe(e)?r=e:(r=e.get,s=e.set),new Xy(r,s,n)}const Jy={GET:"get",HAS:"has",ITERATE:"iterate"},eb={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},ko={},Jo=new WeakMap;let wr;function tb(){return wr}function Jd(e,t=!1,n=wr){if(n){let r=Jo.get(n);r||Jo.set(n,r=[]),r.push(e)}}function nb(e,t,n=Ee){const{immediate:r,deep:s,once:i,scheduler:o,augmentJob:l,call:a}=n,c=m=>s?m:un(m)||s===!1||s===0?sr(m,1):sr(m);let u,f,p,h,d=!1,_=!1;if(ct(e)?(f=()=>e.value,d=un(e)):Fr(e)?(f=()=>c(e),d=!0):se(e)?(_=!0,d=e.some(m=>Fr(m)||un(m)),f=()=>e.map(m=>{if(ct(m))return m.value;if(Fr(m))return c(m);if(fe(m))return a?a(m,2):m()})):fe(e)?t?f=a?()=>a(e,2):e:f=()=>{if(p){hr();try{p()}finally{pr()}}const m=wr;wr=u;try{return a?a(e,3,[h]):e(h)}finally{wr=m}}:f=kt,t&&s){const m=f,y=s===!0?1/0:s;f=()=>sr(m(),y)}const C=Od(),S=()=>{u.stop(),C&&C.active&&Jc(C.effects,u)};if(i&&t){const m=t;t=(...y)=>{m(...y),S()}}let b=_?new Array(e.length).fill(ko):ko;const g=m=>{if(!(!(u.flags&1)||!u.dirty&&!m))if(t){const y=u.run();if(s||d||(_?y.some((k,T)=>Ut(k,b[T])):Ut(y,b))){p&&p();const k=wr;wr=u;try{const T=[y,b===ko?void 0:_&&b[0]===ko?[]:b,h];b=y,a?a(t,3,T):t(...T)}finally{wr=k}}}else u.run()};return l&&l(g),u=new Li(f),u.scheduler=o?()=>o(g,!1):g,h=m=>Jd(m,!1,u),p=u.onStop=()=>{const m=Jo.get(u);if(m){if(a)a(m,4);else for(const y of m)y();Jo.delete(u)}},t?r?g(!0):b=u.run():o?o(g.bind(null,!0),!0):u.run(),S.pause=u.pause.bind(u),S.resume=u.resume.bind(u),S.stop=S,S}function sr(e,t=1/0,n){if(t<=0||!ze(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ct(e))sr(e.value,t,n);else if(se(e))for(let r=0;r{sr(r,t,n)});else if(Rl(e)){for(const r in e)sr(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&sr(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const em=[];function rb(e){em.push(e)}function sb(){em.pop()}function ib(e,t){}const ob={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},lb={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function ni(e,t,n,r){try{return r?e(...r):e()}catch(s){ms(s,t,n)}}function En(e,t,n,r){if(fe(e)){const s=ni(e,t,n,r);return s&&eu(s)&&s.catch(i=>{ms(i,t,n)}),s}if(se(e)){const s=[];for(let i=0;i>>1,s=jt[r],i=Fi(s);i=Fi(n)?jt.push(e):jt.splice(cb(t),0,e),e.flags|=1,nm()}}function nm(){el||(el=tm.then(rm))}function Oi(e){se(e)?Ps.push(...e):Ar&&e.id===-1?Ar.splice(Cs+1,0,e):e.flags&1||(Ps.push(e),e.flags|=1),nm()}function Rf(e,t,n=Mn+1){for(;nFi(n)-Fi(r));if(Ps.length=0,Ar){Ar.push(...t);return}for(Ar=t,Cs=0;Cse.id==null?e.flags&2?-1:1/0:e.id;function rm(e){const t=kt;try{for(Mn=0;Mnws.emit(s,...i)),vo=[]):typeof window<"u"&&window.HTMLElement&&!((r=(n=window.navigator)==null?void 0:n.userAgent)!=null&&r.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{sm(i,t)}),setTimeout(()=>{ws||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,vo=[])},3e3)):vo=[]}let dt=null,Vl=null;function Ri(e){const t=dt;return dt=e,Vl=e&&e.type.__scopeId||null,t}function ub(e){Vl=e}function fb(){Vl=null}const hb=e=>Ot;function Ot(e,t=dt,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&uc(-1);const i=Ri(t);let o;try{o=e(...s)}finally{Ri(i),r._d&&uc(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function xn(e,t){if(dt===null)return e;const n=ao(dt),r=e.dirs||(e.dirs=[]);for(let s=0;se.__isTeleport,vi=e=>e&&(e.disabled||e.disabled===""),Pf=e=>e&&(e.defer||e.defer===""),Mf=e=>typeof SVGElement<"u"&&e instanceof SVGElement,$f=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,rc=(e,t)=>{const n=e&&e.to;return ge(n)?t?t(n):null:n},lm={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,i,o,l,a,c){const{mc:u,pc:f,pbc:p,o:{insert:h,querySelector:d,createText:_,createComment:C}}=c,S=vi(t.props);let{shapeFlag:b,children:g,dynamicChildren:m}=t;if(e==null){const y=t.el=_(""),k=t.anchor=_("");h(y,n,r),h(k,n,r);const T=(A,O)=>{b&16&&(s&&s.isCE&&(s.ce._teleportTarget=A),u(g,A,O,s,i,o,l,a))},L=()=>{const A=t.target=rc(t.props,d),O=am(A,t,_,h);A&&(o!=="svg"&&Mf(A)?o="svg":o!=="mathml"&&$f(A)&&(o="mathml"),S||(T(A,O),Mo(t,!1)))};S&&(T(n,k),Mo(t,!0)),Pf(t.props)?(t.el.__isMounted=!1,ut(()=>{L(),delete t.el.__isMounted},i)):L()}else{if(Pf(t.props)&&e.el.__isMounted===!1){ut(()=>{lm.process(e,t,n,r,s,i,o,l,a,c)},i);return}t.el=e.el,t.targetStart=e.targetStart;const y=t.anchor=e.anchor,k=t.target=e.target,T=t.targetAnchor=e.targetAnchor,L=vi(e.props),A=L?n:k,O=L?y:T;if(o==="svg"||Mf(k)?o="svg":(o==="mathml"||$f(k))&&(o="mathml"),m?(p(e.dynamicChildren,m,A,s,i,o,l),vu(e,t,!0)):a||f(e,t,A,O,s,i,o,l,!1),S)L?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Eo(t,n,y,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const H=t.target=rc(t.props,d);H&&Eo(t,H,null,c,0)}else L&&Eo(t,k,T,c,1);Mo(t,S)}},remove(e,t,n,{um:r,o:{remove:s}},i){const{shapeFlag:o,children:l,anchor:a,targetStart:c,targetAnchor:u,target:f,props:p}=e;if(f&&(s(c),s(u)),i&&s(a),o&16){const h=i||!vi(p);for(let d=0;d{e.isMounted=!0}),Gl(()=>{e.isUnmounting=!0}),e}const yn=[Function,Array],fu={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:yn,onEnter:yn,onAfterEnter:yn,onEnterCancelled:yn,onBeforeLeave:yn,onLeave:yn,onAfterLeave:yn,onLeaveCancelled:yn,onBeforeAppear:yn,onAppear:yn,onAfterAppear:yn,onAppearCancelled:yn},cm=e=>{const t=e.subTree;return t.component?cm(t.component):t},mb={name:"BaseTransition",props:fu,setup(e,{slots:t}){const n=Pt(),r=uu();return()=>{const s=t.default&&ql(t.default(),!0);if(!s||!s.length)return;const i=um(s),o=Ie(e),{mode:l}=o;if(r.isLeaving)return xa(i);const a=Bf(i);if(!a)return xa(i);let c=Bs(a,o,r,n,f=>c=f);a.type!==rt&&mr(a,c);let u=n.subTree&&Bf(n.subTree);if(u&&u.type!==rt&&!Sn(a,u)&&cm(n).type!==rt){let f=Bs(u,o,r,n);if(mr(u,f),l==="out-in"&&a.type!==rt)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},xa(i);l==="in-out"&&a.type!==rt?f.delayLeave=(p,h,d)=>{const _=hm(r,u);_[String(u.key)]=u,p[Sr]=()=>{h(),p[Sr]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{d(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return i}}};function um(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==rt){t=n;break}}return t}const fm=mb;function hm(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Bs(e,t,n,r,s){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:a,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:p,onLeave:h,onAfterLeave:d,onLeaveCancelled:_,onBeforeAppear:C,onAppear:S,onAfterAppear:b,onAppearCancelled:g}=t,m=String(e.key),y=hm(n,e),k=(A,O)=>{A&&En(A,r,9,O)},T=(A,O)=>{const H=O[1];k(A,O),se(A)?A.every(M=>M.length<=1)&&H():A.length<=1&&H()},L={mode:o,persisted:l,beforeEnter(A){let O=a;if(!n.isMounted)if(i)O=C||a;else return;A[Sr]&&A[Sr](!0);const H=y[m];H&&Sn(e,H)&&H.el[Sr]&&H.el[Sr](),k(O,[A])},enter(A){let O=c,H=u,M=f;if(!n.isMounted)if(i)O=S||c,H=b||u,M=g||f;else return;let V=!1;const oe=A[Co]=ie=>{V||(V=!0,ie?k(M,[A]):k(H,[A]),L.delayedLeave&&L.delayedLeave(),A[Co]=void 0)};O?T(O,[A,oe]):oe()},leave(A,O){const H=String(e.key);if(A[Co]&&A[Co](!0),n.isUnmounting)return O();k(p,[A]);let M=!1;const V=A[Sr]=oe=>{M||(M=!0,O(),oe?k(_,[A]):k(d,[A]),A[Sr]=void 0,y[H]===e&&delete y[H])};y[H]=e,h?T(h,[A,V]):V()},clone(A){const O=Bs(A,t,n,r,s);return s&&s(O),O}};return L}function xa(e){if(oo(e))return e=Wn(e),e.children=null,e}function Bf(e){if(!oo(e))return om(e.type)&&e.children?um(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&fe(n.default))return n.default()}}function mr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,mr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ql(e,t=!1,n){let r=[],s=0;for(let i=0;i1)for(let i=0;iwe({name:e.name},t,{setup:e}))():e}function gb(){const e=Pt();return e?(e.appContext.config.idPrefix||"v")+"-"+e.ids[0]+e.ids[1]++:""}function hu(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function _b(e){const t=Pt(),n=io(null);if(t){const s=t.refs===Ee?t.refs={}:t.refs;Object.defineProperty(s,e,{enumerable:!0,get:()=>n.value,set:i=>n.value=i})}return n}function Pi(e,t,n,r,s=!1){if(se(e)){e.forEach((d,_)=>Pi(d,t&&(se(t)?t[_]:t),n,r,s));return}if(Rr(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Pi(e,t,n,r.component.subTree);return}const i=r.shapeFlag&4?ao(r.component):r.el,o=s?null:i,{i:l,r:a}=e,c=t&&t.r,u=l.refs===Ee?l.refs={}:l.refs,f=l.setupState,p=Ie(f),h=f===Ee?()=>!1:d=>Oe(p,d);if(c!=null&&c!==a&&(ge(c)?(u[c]=null,h(c)&&(f[c]=null)):ct(c)&&(c.value=null)),fe(a))ni(a,l,12,[o,u]);else{const d=ge(a),_=ct(a);if(d||_){const C=()=>{if(e.f){const S=d?h(a)?f[a]:u[a]:a.value;s?se(S)&&Jc(S,i):se(S)?S.includes(i)||S.push(i):d?(u[a]=[i],h(a)&&(f[a]=u[a])):(a.value=[i],e.k&&(u[e.k]=a.value))}else d?(u[a]=o,h(a)&&(f[a]=o)):_&&(a.value=o,e.k&&(u[e.k]=o))};o?(C.id=-1,ut(C,n)):C()}}}let zf=!1;const ys=()=>{zf||(console.error("Hydration completed but contains mismatches."),zf=!0)},yb=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",bb=e=>e.namespaceURI.includes("MathML"),wo=e=>{if(e.nodeType===1){if(yb(e))return"svg";if(bb(e))return"mathml"}},Ts=e=>e.nodeType===8;function kb(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:i,parentNode:o,remove:l,insert:a,createComment:c}}=e,u=(g,m)=>{if(!m.hasChildNodes()){n(null,g,m),tl(),m._vnode=g;return}f(m.firstChild,g,null,null,null),tl(),m._vnode=g},f=(g,m,y,k,T,L=!1)=>{L=L||!!m.dynamicChildren;const A=Ts(g)&&g.data==="[",O=()=>_(g,m,y,k,T,A),{type:H,ref:M,shapeFlag:V,patchFlag:oe}=m;let ie=g.nodeType;m.el=g,oe===-2&&(L=!1,m.dynamicChildren=null);let Z=null;switch(H){case ur:ie!==3?m.children===""?(a(m.el=s(""),o(g),g),Z=g):Z=O():(g.data!==m.children&&(ys(),g.data=m.children),Z=i(g));break;case rt:b(g)?(Z=i(g),S(m.el=g.content.firstChild,g,y)):ie!==8||A?Z=O():Z=i(g);break;case ss:if(A&&(g=i(g),ie=g.nodeType),ie===1||ie===3){Z=g;const G=!m.children.length;for(let K=0;K{L=L||!!m.dynamicChildren;const{type:A,props:O,patchFlag:H,shapeFlag:M,dirs:V,transition:oe}=m,ie=A==="input"||A==="option";if(ie||H!==-1){V&&$n(m,null,y,"created");let Z=!1;if(b(g)){Z=Rm(null,oe)&&y&&y.vnode.props&&y.vnode.props.appear;const K=g.content.firstChild;if(Z){const ue=K.getAttribute("class");ue&&(K.$cls=ue),oe.beforeEnter(K)}S(K,g,y),m.el=g=K}if(M&16&&!(O&&(O.innerHTML||O.textContent))){let K=h(g.firstChild,m,g,y,k,T,L);for(;K;){Ao(g,1)||ys();const ue=K;K=K.nextSibling,l(ue)}}else if(M&8){let K=m.children;K[0]===` +`&&(g.tagName==="PRE"||g.tagName==="TEXTAREA")&&(K=K.slice(1)),g.textContent!==K&&(Ao(g,0)||ys(),g.textContent=m.children)}if(O){if(ie||!L||H&48){const K=g.tagName.includes("-");for(const ue in O)(ie&&(ue.endsWith("value")||ue==="indeterminate")||hs(ue)&&!Or(ue)||ue[0]==="."||K)&&r(g,ue,null,O[ue],void 0,y)}else if(O.onClick)r(g,"onClick",null,O.onClick,void 0,y);else if(H&4&&Fr(O.style))for(const K in O.style)O.style[K]}let G;(G=O&&O.onVnodeBeforeMount)&&Zt(G,y,m),V&&$n(m,null,y,"beforeMount"),((G=O&&O.onVnodeMounted)||V||Z)&&Vm(()=>{G&&Zt(G,y,m),Z&&oe.enter(g),V&&$n(m,null,y,"mounted")},k)}return g.nextSibling},h=(g,m,y,k,T,L,A)=>{A=A||!!m.dynamicChildren;const O=m.children,H=O.length;for(let M=0;M{const{slotScopeIds:A}=m;A&&(T=T?T.concat(A):A);const O=o(g),H=h(i(g),m,O,y,k,T,L);return H&&Ts(H)&&H.data==="]"?i(m.anchor=H):(ys(),a(m.anchor=c("]"),O,H),H)},_=(g,m,y,k,T,L)=>{if(Ao(g.parentElement,1)||ys(),m.el=null,L){const H=C(g);for(;;){const M=i(g);if(M&&M!==H)l(M);else break}}const A=i(g),O=o(g);return l(g),n(null,m,O,A,y,k,wo(O),T),y&&(y.vnode.el=m.el,Zl(y,m.el)),A},C=(g,m="[",y="]")=>{let k=0;for(;g;)if(g=i(g),g&&Ts(g)&&(g.data===m&&k++,g.data===y)){if(k===0)return i(g);k--}return g},S=(g,m,y)=>{const k=m.parentNode;k&&k.replaceChild(g,m);let T=y;for(;T;)T.vnode.el===m&&(T.vnode.el=T.subTree.el=g),T=T.parent},b=g=>g.nodeType===1&&g.tagName==="TEMPLATE";return[u,f]}const Uf="data-allow-mismatch",vb={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Ao(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Uf);)e=e.parentElement;const n=e&&e.getAttribute(Uf);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(vb[t])}}const Eb=Ml().requestIdleCallback||(e=>setTimeout(e,1)),Cb=Ml().cancelIdleCallback||(e=>clearTimeout(e)),wb=(e=1e4)=>t=>{const n=Eb(t,{timeout:e});return()=>Cb(n)};function Ab(e){const{top:t,left:n,bottom:r,right:s}=e.getBoundingClientRect(),{innerHeight:i,innerWidth:o}=window;return(t>0&&t0&&r0&&n0&&s(t,n)=>{const r=new IntersectionObserver(s=>{for(const i of s)if(i.isIntersecting){r.disconnect(),t();break}},e);return n(s=>{if(s instanceof Element){if(Ab(s))return t(),r.disconnect(),!1;r.observe(s)}}),()=>r.disconnect()},xb=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},Tb=(e=[])=>(t,n)=>{ge(e)&&(e=[e]);let r=!1;const s=o=>{r||(r=!0,i(),t(),o.target.dispatchEvent(new o.constructor(o.type,o)))},i=()=>{n(o=>{for(const l of e)o.removeEventListener(l,s)})};return n(o=>{for(const l of e)o.addEventListener(l,s,{once:!0})}),i};function Ib(e,t){if(Ts(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Ts(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const Rr=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Lb(e){fe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,hydrate:i,timeout:o,suspensible:l=!0,onError:a}=e;let c=null,u,f=0;const p=()=>(f++,c=null,h()),h=()=>{let d;return c||(d=c=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),a)return new Promise((C,S)=>{a(_,()=>C(p()),()=>S(_),f+1)});throw _}).then(_=>d!==c&&c?c:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),u=_,_)))};return Cn({name:"AsyncComponentWrapper",__asyncLoader:h,__asyncHydrate(d,_,C){const S=i?()=>{const g=i(()=>{C()},m=>Ib(d,m));g&&(_.bum||(_.bum=[])).push(g),(_.u||(_.u=[])).push(()=>!0)}:C;u?S():h().then(()=>!_.isUnmounted&&S())},get __asyncResolved(){return u},setup(){const d=ht;if(hu(d),u)return()=>Ta(u,d);const _=g=>{c=null,ms(g,d,13,!r)};if(l&&d.suspense||zs)return h().then(g=>()=>Ta(g,d)).catch(g=>(_(g),()=>r?X(r,{error:g}):null));const C=te(!1),S=te(),b=te(!!s);return s&&setTimeout(()=>{b.value=!1},s),o!=null&&setTimeout(()=>{if(!C.value&&!S.value){const g=new Error(`Async component timed out after ${o}ms.`);_(g),S.value=g}},o),h().then(()=>{C.value=!0,d.parent&&oo(d.parent.vnode)&&d.parent.update()}).catch(g=>{_(g),S.value=g}),()=>{if(C.value&&u)return Ta(u,d);if(S.value&&r)return X(r,{error:S.value});if(n&&!b.value)return X(n)}}})}function Ta(e,t){const{ref:n,props:r,children:s,ce:i}=t.vnode,o=X(e,r,s);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const oo=e=>e.type.__isKeepAlive,Db={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Pt(),r=n.ctx;if(!r.renderer)return()=>{const b=t.default&&t.default();return b&&b.length===1?b[0]:b};const s=new Map,i=new Set;let o=null;const l=n.suspense,{renderer:{p:a,m:c,um:u,o:{createElement:f}}}=r,p=f("div");r.activate=(b,g,m,y,k)=>{const T=b.component;c(b,g,m,0,l),a(T.vnode,b,g,m,T,l,y,b.slotScopeIds,k),ut(()=>{T.isDeactivated=!1,T.a&&Rs(T.a);const L=b.props&&b.props.onVnodeMounted;L&&Zt(L,T.parent,b)},l)},r.deactivate=b=>{const g=b.component;rl(g.m),rl(g.a),c(b,p,null,1,l),ut(()=>{g.da&&Rs(g.da);const m=b.props&&b.props.onVnodeUnmounted;m&&Zt(m,g.parent,b),g.isDeactivated=!0},l)};function h(b){Ia(b),u(b,n,l,!0)}function d(b){s.forEach((g,m)=>{const y=mc(g.type);y&&!b(y)&&_(m)})}function _(b){const g=s.get(b);g&&(!o||!Sn(g,o))?h(g):o&&Ia(o),s.delete(b),i.delete(b)}At(()=>[e.include,e.exclude],([b,g])=>{b&&d(m=>gi(b,m)),g&&d(m=>!gi(g,m))},{flush:"post",deep:!0});let C=null;const S=()=>{C!=null&&(sl(n.subTree.type)?ut(()=>{s.set(C,So(n.subTree))},n.subTree.suspense):s.set(C,So(n.subTree)))};return gt(S),Kl(S),Gl(()=>{s.forEach(b=>{const{subTree:g,suspense:m}=n,y=So(g);if(b.type===y.type&&b.key===y.key){Ia(y);const k=y.component.da;k&&ut(k,m);return}h(b)})}),()=>{if(C=null,!t.default)return o=null;const b=t.default(),g=b[0];if(b.length>1)return o=null,b;if(!gr(g)||!(g.shapeFlag&4)&&!(g.shapeFlag&128))return o=null,g;let m=So(g);if(m.type===rt)return o=null,m;const y=m.type,k=mc(Rr(m)?m.type.__asyncResolved||{}:y),{include:T,exclude:L,max:A}=e;if(T&&(!k||!gi(T,k))||L&&k&&gi(L,k))return m.shapeFlag&=-257,o=m,g;const O=m.key==null?y:m.key,H=s.get(O);return m.el&&(m=Wn(m),g.shapeFlag&128&&(g.ssContent=m)),C=O,H?(m.el=H.el,m.component=H.component,m.transition&&mr(m,m.transition),m.shapeFlag|=512,i.delete(O),i.add(O)):(i.add(O),A&&i.size>parseInt(A,10)&&_(i.values().next().value)),m.shapeFlag|=256,o=m,sl(g.type)?g:m}}},Nb=Db;function gi(e,t){return se(e)?e.some(n=>gi(n,t)):ge(e)?e.split(",").includes(t):Z_(e)?(e.lastIndex=0,e.test(t)):!1}function pm(e,t){mm(e,"a",t)}function dm(e,t){mm(e,"da",t)}function mm(e,t,n=ht){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Wl(t,r,n),n){let s=n.parent;for(;s&&s.parent;)oo(s.parent.vnode)&&Ob(r,t,n,s),s=s.parent}}function Ob(e,t,n,r){const s=Wl(t,e,r,!0);Mt(()=>{Jc(r[t],s)},n)}function Ia(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function So(e){return e.shapeFlag&128?e.ssContent:e}function Wl(e,t,n=ht,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{hr();const l=cs(n),a=En(t,n,e,o);return l(),pr(),a});return r?s.unshift(i):s.push(i),i}}const yr=e=>(t,n=ht)=>{(!zs||e==="sp")&&Wl(e,(...r)=>t(...r),n)},pu=yr("bm"),gt=yr("m"),du=yr("bu"),Kl=yr("u"),Gl=yr("bum"),Mt=yr("um"),gm=yr("sp"),_m=yr("rtg"),ym=yr("rtc");function bm(e,t=ht){Wl("ec",e,t)}const mu="components",Fb="directives";function $e(e,t){return gu(mu,e,!0,t)||e}const km=Symbol.for("v-ndc");function Rb(e){return ge(e)?gu(mu,e,!1)||e:e||km}function Pb(e){return gu(Fb,e)}function gu(e,t,n=!0,r=!1){const s=dt||ht;if(s){const i=s.type;if(e===mu){const l=mc(i,!1);if(l&&(l===t||l===Ze(t)||l===ds(Ze(t))))return i}const o=Hf(s[e]||i[e],t)||Hf(s.appContext[e],t);return!o&&r?i:o}}function Hf(e,t){return e&&(e[t]||e[Ze(t)]||e[ds(Ze(t))])}function wt(e,t,n,r){let s;const i=n&&n[r],o=se(e);if(o||ge(e)){const l=o&&Fr(e);let a=!1,c=!1;l&&(a=!un(e),c=dr(e),e=zl(e)),s=new Array(e.length);for(let u=0,f=e.length;ut(l,a,void 0,i&&i[a]));else{const l=Object.keys(e);s=new Array(l.length);for(let a=0,c=l.length;a{const i=r.fn(...s);return i&&(i.key=r.key),i}:r.fn)}return e}function $b(e,t,n={},r,s){if(dt.ce||dt.parent&&Rr(dt.parent)&&dt.parent.ce)return t!=="default"&&(n.name=t),B(),Be(Ce,null,[X("slot",n,r&&r())],64);let i=e[t];i&&i._c&&(i._d=!1),B();const o=i&&_u(i(n)),l=n.key||o&&o.key,a=Be(Ce,{key:(l&&!tn(l)?l:`_${t}`)+(!o&&r?"_fb":"")},o||(r?r():[]),o&&e._===1?64:-2);return!s&&a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),i&&i._c&&(i._d=!0),a}function _u(e){return e.some(t=>gr(t)?!(t.type===rt||t.type===Ce&&!_u(t.children)):!0)?e:null}function Bb(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:Fs(r)]=e[r];return n}const sc=e=>e?Xm(e)?ao(e):sc(e.parent):null,Ei=we(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>sc(e.parent),$root:e=>sc(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>yu(e),$forceUpdate:e=>e.f||(e.f=()=>{cu(e.update)}),$nextTick:e=>e.n||(e.n=qn.bind(e.proxy)),$watch:e=>_k.bind(e)}),La=(e,t)=>e!==Ee&&!e.__isScriptSetup&&Oe(e,t),ic={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:l,appContext:a}=e;let c;if(t[0]!=="$"){const h=o[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(La(r,t))return o[t]=1,r[t];if(s!==Ee&&Oe(s,t))return o[t]=2,s[t];if((c=e.propsOptions[0])&&Oe(c,t))return o[t]=3,i[t];if(n!==Ee&&Oe(n,t))return o[t]=4,n[t];oc&&(o[t]=0)}}const u=Ei[t];let f,p;if(u)return t==="$attrs"&&Nt(e.attrs,"get",""),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==Ee&&Oe(n,t))return o[t]=4,n[t];if(p=a.config.globalProperties,Oe(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return La(s,t)?(s[t]=n,!0):r!==Ee&&Oe(r,t)?(r[t]=n,!0):Oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:i}},o){let l;return!!n[o]||e!==Ee&&Oe(e,o)||La(t,o)||(l=i[0])&&Oe(l,o)||Oe(r,o)||Oe(Ei,o)||Oe(s.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},zb=we({},ic,{get(e,t){if(t!==Symbol.unscopables)return ic.get(e,t,e)},has(e,t){return t[0]!=="_"&&!ry(t)}});function Ub(){return null}function Hb(){return null}function jb(e){}function Vb(e){}function qb(){return null}function Wb(){}function Kb(e,t){return null}function Gb(){return vm().slots}function Yb(){return vm().attrs}function vm(){const e=Pt();return e.setupContext||(e.setupContext=tg(e))}function Mi(e){return se(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function Zb(e,t){const n=Mi(e);for(const r in t){if(r.startsWith("__skip"))continue;let s=n[r];s?se(s)||fe(s)?s=n[r]={type:s,default:t[r]}:s.default=t[r]:s===null&&(s=n[r]={default:t[r]}),s&&t[`__skip_${r}`]&&(s.skipFactory=!0)}return n}function Xb(e,t){return!e||!t?e||t:se(e)&&se(t)?e.concat(t):we({},Mi(e),Mi(t))}function Qb(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function Jb(e){const t=Pt();let n=e();return hc(),eu(n)&&(n=n.catch(r=>{throw cs(t),r})),[n,()=>cs(t)]}let oc=!0;function ek(e){const t=yu(e),n=e.proxy,r=e.ctx;oc=!1,t.beforeCreate&&jf(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:o,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:p,beforeUpdate:h,updated:d,activated:_,deactivated:C,beforeDestroy:S,beforeUnmount:b,destroyed:g,unmounted:m,render:y,renderTracked:k,renderTriggered:T,errorCaptured:L,serverPrefetch:A,expose:O,inheritAttrs:H,components:M,directives:V,filters:oe}=t;if(c&&tk(c,r,null),o)for(const G in o){const K=o[G];fe(K)&&(r[G]=K.bind(n))}if(s){const G=s.call(n,n);ze(G)&&(e.data=Ht(G))}if(oc=!0,i)for(const G in i){const K=i[G],ue=fe(K)?K.bind(n,n):fe(K.get)?K.get.bind(n,n):kt,ye=!fe(K)&&fe(K.set)?K.set.bind(n):kt,ke=pe({get:ue,set:ye});Object.defineProperty(r,G,{enumerable:!0,configurable:!0,get:()=>ke.value,set:He=>ke.value=He})}if(l)for(const G in l)Em(l[G],r,n,G);if(a){const G=fe(a)?a.call(n):a;Reflect.ownKeys(G).forEach(K=>{rs(K,G[K])})}u&&jf(u,e,"c");function Z(G,K){se(K)?K.forEach(ue=>G(ue.bind(n))):K&&G(K.bind(n))}if(Z(pu,f),Z(gt,p),Z(du,h),Z(Kl,d),Z(pm,_),Z(dm,C),Z(bm,L),Z(ym,k),Z(_m,T),Z(Gl,b),Z(Mt,m),Z(gm,A),se(O))if(O.length){const G=e.exposed||(e.exposed={});O.forEach(K=>{Object.defineProperty(G,K,{get:()=>n[K],set:ue=>n[K]=ue})})}else e.exposed||(e.exposed={});y&&e.render===kt&&(e.render=y),H!=null&&(e.inheritAttrs=H),M&&(e.components=M),V&&(e.directives=V),A&&hu(e)}function tk(e,t,n=kt){se(e)&&(e=lc(e));for(const r in e){const s=e[r];let i;ze(s)?"default"in s?i=tt(s.from||r,s.default,!0):i=tt(s.from||r):i=tt(s),ct(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function jf(e,t,n){En(se(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Em(e,t,n,r){let s=r.includes(".")?zm(n,r):()=>n[r];if(ge(e)){const i=t[e];fe(i)&&At(s,i)}else if(fe(e))At(s,e.bind(n));else if(ze(e))if(se(e))e.forEach(i=>Em(i,t,n,r));else{const i=fe(e.handler)?e.handler.bind(n):t[e.handler];fe(i)&&At(s,i,e)}}function yu(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let a;return l?a=l:!s.length&&!n&&!r?a=t:(a={},s.length&&s.forEach(c=>nl(a,c,o,!0)),nl(a,t,o)),ze(t)&&i.set(t,a),a}function nl(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&nl(e,i,n,!0),s&&s.forEach(o=>nl(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const l=nk[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const nk={data:Vf,props:qf,emits:qf,methods:_i,computed:_i,beforeCreate:zt,created:zt,beforeMount:zt,mounted:zt,beforeUpdate:zt,updated:zt,beforeDestroy:zt,beforeUnmount:zt,destroyed:zt,unmounted:zt,activated:zt,deactivated:zt,errorCaptured:zt,serverPrefetch:zt,components:_i,directives:_i,watch:sk,provide:Vf,inject:rk};function Vf(e,t){return t?e?function(){return we(fe(e)?e.call(this,this):e,fe(t)?t.call(this,this):t)}:t:e}function rk(e,t){return _i(lc(e),lc(t))}function lc(e){if(se(e)){const t={};for(let n=0;n1)return n&&fe(t)?t.call(r&&r.proxy):t}}function lk(){return!!(ht||dt||ns)}const wm={},Am=()=>Object.create(wm),Sm=e=>Object.getPrototypeOf(e)===wm;function ak(e,t,n,r=!1){const s={},i=Am();e.propsDefaults=Object.create(null),xm(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:ou(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function ck(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,l=Ie(s),[a]=e.propsOptions;let c=!1;if((r||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[p,h]=Tm(f,t,!0);we(o,p),h&&l.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!a)return ze(e)&&r.set(e,Ns),Ns;if(se(i))for(let u=0;ue[0]==="_"||e==="$stable",ku=e=>se(e)?e.map(Xt):[Xt(e)],fk=(e,t,n)=>{if(t._n)return t;const r=Ot((...s)=>ku(t(...s)),n);return r._c=!1,r},Im=(e,t,n)=>{const r=e._ctx;for(const s in e){if(bu(s))continue;const i=e[s];if(fe(i))t[s]=fk(s,i,r);else if(i!=null){const o=ku(i);t[s]=()=>o}}},Lm=(e,t)=>{const n=ku(t);e.slots.default=()=>n},Dm=(e,t,n)=>{for(const r in t)(n||!bu(r))&&(e[r]=t[r])},hk=(e,t,n)=>{const r=e.slots=Am();if(e.vnode.shapeFlag&32){const s=t._;s?(Dm(r,t,n),n&&xd(r,"_",s,!0)):Im(t,r)}else t&&Lm(e,t)},pk=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=Ee;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:Dm(s,t,n):(i=!t.$stable,Im(t,s)),o=t}else t&&(Lm(e,t),o={default:1});if(i)for(const l in s)!bu(l)&&o[l]==null&&delete s[l]},ut=Vm;function Nm(e){return Fm(e)}function Om(e){return Fm(e,kb)}function Fm(e,t){const n=Ml();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:p,setScopeId:h=kt,insertStaticContent:d}=e,_=(x,v,R,F=null,P=null,U=null,Y=void 0,E=null,w=!!v.dynamicChildren)=>{if(x===v)return;x&&!Sn(x,v)&&(F=j(x),He(x,P,U,!0),x=null),v.patchFlag===-2&&(w=!1,v.dynamicChildren=null);const{type:N,ref:z,shapeFlag:D}=v;switch(N){case ur:C(x,v,R,F);break;case rt:S(x,v,R,F);break;case ss:x==null&&b(v,R,F,Y);break;case Ce:M(x,v,R,F,P,U,Y,E,w);break;default:D&1?y(x,v,R,F,P,U,Y,E,w):D&6?V(x,v,R,F,P,U,Y,E,w):(D&64||D&128)&&N.process(x,v,R,F,P,U,Y,E,w,le)}z!=null&&P&&Pi(z,x&&x.ref,U,v||x,!v)},C=(x,v,R,F)=>{if(x==null)r(v.el=l(v.children),R,F);else{const P=v.el=x.el;v.children!==x.children&&c(P,v.children)}},S=(x,v,R,F)=>{x==null?r(v.el=a(v.children||""),R,F):v.el=x.el},b=(x,v,R,F)=>{[x.el,x.anchor]=d(x.children,v,R,F,x.el,x.anchor)},g=({el:x,anchor:v},R,F)=>{let P;for(;x&&x!==v;)P=p(x),r(x,R,F),x=P;r(v,R,F)},m=({el:x,anchor:v})=>{let R;for(;x&&x!==v;)R=p(x),s(x),x=R;s(v)},y=(x,v,R,F,P,U,Y,E,w)=>{v.type==="svg"?Y="svg":v.type==="math"&&(Y="mathml"),x==null?k(v,R,F,P,U,Y,E,w):A(x,v,P,U,Y,E,w)},k=(x,v,R,F,P,U,Y,E)=>{let w,N;const{props:z,shapeFlag:D,transition:$,dirs:ee}=x;if(w=x.el=o(x.type,U,z&&z.is,z),D&8?u(w,x.children):D&16&&L(x.children,w,null,F,P,Da(x,U),Y,E),ee&&$n(x,null,F,"created"),T(w,x,x.scopeId,Y,F),z){for(const Ae in z)Ae!=="value"&&!Or(Ae)&&i(w,Ae,null,z[Ae],U,F);"value"in z&&i(w,"value",null,z.value,U),(N=z.onVnodeBeforeMount)&&Zt(N,F,x)}ee&&$n(x,null,F,"beforeMount");const ae=Rm(P,$);ae&&$.beforeEnter(w),r(w,v,R),((N=z&&z.onVnodeMounted)||ae||ee)&&ut(()=>{N&&Zt(N,F,x),ae&&$.enter(w),ee&&$n(x,null,F,"mounted")},P)},T=(x,v,R,F,P)=>{if(R&&h(x,R),F)for(let U=0;U{for(let N=w;N{const E=v.el=x.el;let{patchFlag:w,dynamicChildren:N,dirs:z}=v;w|=x.patchFlag&16;const D=x.props||Ee,$=v.props||Ee;let ee;if(R&&Kr(R,!1),(ee=$.onVnodeBeforeUpdate)&&Zt(ee,R,v,x),z&&$n(v,x,R,"beforeUpdate"),R&&Kr(R,!0),(D.innerHTML&&$.innerHTML==null||D.textContent&&$.textContent==null)&&u(E,""),N?O(x.dynamicChildren,N,E,R,F,Da(v,P),U):Y||K(x,v,E,null,R,F,Da(v,P),U,!1),w>0){if(w&16)H(E,D,$,R,P);else if(w&2&&D.class!==$.class&&i(E,"class",null,$.class,P),w&4&&i(E,"style",D.style,$.style,P),w&8){const ae=v.dynamicProps;for(let Ae=0;Ae{ee&&Zt(ee,R,v,x),z&&$n(v,x,R,"updated")},F)},O=(x,v,R,F,P,U,Y)=>{for(let E=0;E{if(v!==R){if(v!==Ee)for(const U in v)!Or(U)&&!(U in R)&&i(x,U,v[U],null,P,F);for(const U in R){if(Or(U))continue;const Y=R[U],E=v[U];Y!==E&&U!=="value"&&i(x,U,E,Y,P,F)}"value"in R&&i(x,"value",v.value,R.value,P)}},M=(x,v,R,F,P,U,Y,E,w)=>{const N=v.el=x?x.el:l(""),z=v.anchor=x?x.anchor:l("");let{patchFlag:D,dynamicChildren:$,slotScopeIds:ee}=v;ee&&(E=E?E.concat(ee):ee),x==null?(r(N,R,F),r(z,R,F),L(v.children||[],R,z,P,U,Y,E,w)):D>0&&D&64&&$&&x.dynamicChildren?(O(x.dynamicChildren,$,R,P,U,Y,E),(v.key!=null||P&&v===P.subTree)&&vu(x,v,!0)):K(x,v,R,z,P,U,Y,E,w)},V=(x,v,R,F,P,U,Y,E,w)=>{v.slotScopeIds=E,x==null?v.shapeFlag&512?P.ctx.activate(v,R,F,Y,w):oe(v,R,F,P,U,Y,w):ie(x,v,w)},oe=(x,v,R,F,P,U,Y)=>{const E=x.component=Zm(x,F,P);if(oo(x)&&(E.ctx.renderer=le),Qm(E,!1,Y),E.asyncDep){if(P&&P.registerDep(E,Z,Y),!x.el){const w=E.subTree=X(rt);S(null,w,v,R)}}else Z(E,x,v,R,P,U,Y)},ie=(x,v,R)=>{const F=v.component=x.component;if(Ck(x,v,R))if(F.asyncDep&&!F.asyncResolved){G(F,v,R);return}else F.next=v,F.update();else v.el=x.el,F.vnode=v},Z=(x,v,R,F,P,U,Y)=>{const E=()=>{if(x.isMounted){let{next:D,bu:$,u:ee,parent:ae,vnode:Ae}=x;{const sn=Pm(x);if(sn){D&&(D.el=Ae.el,G(x,D,Y)),sn.asyncDep.then(()=>{x.isUnmounted||E()});return}}let xe=D,ot;Kr(x,!1),D?(D.el=Ae.el,G(x,D,Y)):D=Ae,$&&Rs($),(ot=D.props&&D.props.onVnodeBeforeUpdate)&&Zt(ot,ae,D,Ae),Kr(x,!0);const _t=$o(x),_n=x.subTree;x.subTree=_t,_(_n,_t,f(_n.el),j(_n),x,P,U),D.el=_t.el,xe===null&&Zl(x,_t.el),ee&&ut(ee,P),(ot=D.props&&D.props.onVnodeUpdated)&&ut(()=>Zt(ot,ae,D,Ae),P)}else{let D;const{el:$,props:ee}=v,{bm:ae,m:Ae,parent:xe,root:ot,type:_t}=x,_n=Rr(v);if(Kr(x,!1),ae&&Rs(ae),!_n&&(D=ee&&ee.onVnodeBeforeMount)&&Zt(D,xe,v),Kr(x,!0),$&&De){const sn=()=>{x.subTree=$o(x),De($,x.subTree,x,P,null)};_n&&_t.__asyncHydrate?_t.__asyncHydrate($,x,sn):sn()}else{ot.ce&&ot.ce._injectChildStyle(_t);const sn=x.subTree=$o(x);_(null,sn,R,F,x,P,U),v.el=sn.el}if(Ae&&ut(Ae,P),!_n&&(D=ee&&ee.onVnodeMounted)){const sn=v;ut(()=>Zt(D,xe,sn),P)}(v.shapeFlag&256||xe&&Rr(xe.vnode)&&xe.vnode.shapeFlag&256)&&x.a&&ut(x.a,P),x.isMounted=!0,v=R=F=null}};x.scope.on();const w=x.effect=new Li(E);x.scope.off();const N=x.update=w.run.bind(w),z=x.job=w.runIfDirty.bind(w);z.i=x,z.id=x.uid,w.scheduler=()=>cu(z),Kr(x,!0),N()},G=(x,v,R)=>{v.component=x;const F=x.vnode.props;x.vnode=v,x.next=null,ck(x,v.props,F,R),pk(x,v.children,R),hr(),Rf(x),pr()},K=(x,v,R,F,P,U,Y,E,w=!1)=>{const N=x&&x.children,z=x?x.shapeFlag:0,D=v.children,{patchFlag:$,shapeFlag:ee}=v;if($>0){if($&128){ye(N,D,R,F,P,U,Y,E,w);return}else if($&256){ue(N,D,R,F,P,U,Y,E,w);return}}ee&8?(z&16&&it(N,P,U),D!==N&&u(R,D)):z&16?ee&16?ye(N,D,R,F,P,U,Y,E,w):it(N,P,U,!0):(z&8&&u(R,""),ee&16&&L(D,R,F,P,U,Y,E,w))},ue=(x,v,R,F,P,U,Y,E,w)=>{x=x||Ns,v=v||Ns;const N=x.length,z=v.length,D=Math.min(N,z);let $;for($=0;$z?it(x,P,U,!0,!1,D):L(v,R,F,P,U,Y,E,w,D)},ye=(x,v,R,F,P,U,Y,E,w)=>{let N=0;const z=v.length;let D=x.length-1,$=z-1;for(;N<=D&&N<=$;){const ee=x[N],ae=v[N]=w?xr(v[N]):Xt(v[N]);if(Sn(ee,ae))_(ee,ae,R,null,P,U,Y,E,w);else break;N++}for(;N<=D&&N<=$;){const ee=x[D],ae=v[$]=w?xr(v[$]):Xt(v[$]);if(Sn(ee,ae))_(ee,ae,R,null,P,U,Y,E,w);else break;D--,$--}if(N>D){if(N<=$){const ee=$+1,ae=ee$)for(;N<=D;)He(x[N],P,U,!0),N++;else{const ee=N,ae=N,Ae=new Map;for(N=ae;N<=$;N++){const on=v[N]=w?xr(v[N]):Xt(v[N]);on.key!=null&&Ae.set(on.key,N)}let xe,ot=0;const _t=$-ae+1;let _n=!1,sn=0;const li=new Array(_t);for(N=0;N<_t;N++)li[N]=0;for(N=ee;N<=D;N++){const on=x[N];if(ot>=_t){He(on,P,U,!0);continue}let Fn;if(on.key!=null)Fn=Ae.get(on.key);else for(xe=ae;xe<=$;xe++)if(li[xe-ae]===0&&Sn(on,v[xe])){Fn=xe;break}Fn===void 0?He(on,P,U,!0):(li[Fn-ae]=N+1,Fn>=sn?sn=Fn:_n=!0,_(on,v[Fn],R,null,P,U,Y,E,w),ot++)}const If=_n?dk(li):Ns;for(xe=If.length-1,N=_t-1;N>=0;N--){const on=ae+N,Fn=v[on],Lf=on+1{const{el:U,type:Y,transition:E,children:w,shapeFlag:N}=x;if(N&6){ke(x.component.subTree,v,R,F);return}if(N&128){x.suspense.move(v,R,F);return}if(N&64){Y.move(x,v,R,le);return}if(Y===Ce){r(U,v,R);for(let D=0;DE.enter(U),P);else{const{leave:D,delayLeave:$,afterLeave:ee}=E,ae=()=>{x.ctx.isUnmounted?s(U):r(U,v,R)},Ae=()=>{D(U,()=>{ae(),ee&&ee()})};$?$(U,ae,Ae):Ae()}else r(U,v,R)},He=(x,v,R,F=!1,P=!1)=>{const{type:U,props:Y,ref:E,children:w,dynamicChildren:N,shapeFlag:z,patchFlag:D,dirs:$,cacheIndex:ee}=x;if(D===-2&&(P=!1),E!=null&&(hr(),Pi(E,null,R,x,!0),pr()),ee!=null&&(v.renderCache[ee]=void 0),z&256){v.ctx.deactivate(x);return}const ae=z&1&&$,Ae=!Rr(x);let xe;if(Ae&&(xe=Y&&Y.onVnodeBeforeUnmount)&&Zt(xe,v,x),z&6)gn(x.component,R,F);else{if(z&128){x.suspense.unmount(R,F);return}ae&&$n(x,null,v,"beforeUnmount"),z&64?x.type.remove(x,v,R,le,F):N&&!N.hasOnce&&(U!==Ce||D>0&&D&64)?it(N,v,R,!1,!0):(U===Ce&&D&384||!P&&z&16)&&it(w,v,R),F&&Wt(x)}(Ae&&(xe=Y&&Y.onVnodeUnmounted)||ae)&&ut(()=>{xe&&Zt(xe,v,x),ae&&$n(x,null,v,"unmounted")},R)},Wt=x=>{const{type:v,el:R,anchor:F,transition:P}=x;if(v===Ce){Bt(R,F);return}if(v===ss){m(x);return}const U=()=>{s(R),P&&!P.persisted&&P.afterLeave&&P.afterLeave()};if(x.shapeFlag&1&&P&&!P.persisted){const{leave:Y,delayLeave:E}=P,w=()=>Y(R,U);E?E(x.el,U,w):w()}else U()},Bt=(x,v)=>{let R;for(;x!==v;)R=p(x),s(x),x=R;s(v)},gn=(x,v,R)=>{const{bum:F,scope:P,job:U,subTree:Y,um:E,m:w,a:N,parent:z,slots:{__:D}}=x;rl(w),rl(N),F&&Rs(F),z&&se(D)&&D.forEach($=>{z.renderCache[$]=void 0}),P.stop(),U&&(U.flags|=8,He(Y,x,v,R)),E&&ut(E,v),ut(()=>{x.isUnmounted=!0},v),v&&v.pendingBranch&&!v.isUnmounted&&x.asyncDep&&!x.asyncResolved&&x.suspenseId===v.pendingId&&(v.deps--,v.deps===0&&v.resolve())},it=(x,v,R,F=!1,P=!1,U=0)=>{for(let Y=U;Y{if(x.shapeFlag&6)return j(x.component.subTree);if(x.shapeFlag&128)return x.suspense.next();const v=p(x.anchor||x.el),R=v&&v[im];return R?p(R):v};let ne=!1;const J=(x,v,R)=>{x==null?v._vnode&&He(v._vnode,null,null,!0):_(v._vnode||null,x,v,null,null,null,R),v._vnode=x,ne||(ne=!0,Rf(),tl(),ne=!1)},le={p:_,um:He,m:ke,r:Wt,mt:oe,mc:L,pc:K,pbc:O,n:j,o:e};let be,De;return t&&([be,De]=t(le)),{render:J,hydrate:be,createApp:ok(J,be)}}function Da({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Kr({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Rm(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vu(e,t,n=!1){const r=e.children,s=t.children;if(se(r)&&se(s))for(let i=0;i>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Pm(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Pm(t)}function rl(e){if(e)for(let t=0;ttt(Mm);function mk(e,t){return lo(e,null,t)}function gk(e,t){return lo(e,null,{flush:"post"})}function Bm(e,t){return lo(e,null,{flush:"sync"})}function At(e,t,n){return lo(e,t,n)}function lo(e,t,n=Ee){const{immediate:r,deep:s,flush:i,once:o}=n,l=we({},n),a=t&&r||!t&&i!=="post";let c;if(zs){if(i==="sync"){const h=$m();c=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=kt,h.resume=kt,h.pause=kt,h}}const u=ht;l.call=(h,d,_)=>En(h,u,d,_);let f=!1;i==="post"?l.scheduler=h=>{ut(h,u&&u.suspense)}:i!=="sync"&&(f=!0,l.scheduler=(h,d)=>{d?h():cu(h)}),l.augmentJob=h=>{t&&(h.flags|=4),f&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const p=nb(e,t,l);return zs&&(c?c.push(p):a&&p()),p}function _k(e,t,n){const r=this.proxy,s=ge(e)?e.includes(".")?zm(r,e):()=>r[e]:e.bind(r,r);let i;fe(t)?i=t:(i=t.handler,n=t);const o=cs(this),l=lo(s,i.bind(r),n);return o(),l}function zm(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{let u,f=Ee,p;return Bm(()=>{const h=e[s];Ut(u,h)&&(u=h,c())}),{get(){return a(),n.get?n.get(u):u},set(h){const d=n.set?n.set(h):h;if(!Ut(d,u)&&!(f!==Ee&&Ut(h,f)))return;const _=r.vnode.props;_&&(t in _||s in _||i in _)&&(`onUpdate:${t}`in _||`onUpdate:${s}`in _||`onUpdate:${i}`in _)||(u=h,c()),r.emit(`update:${t}`,d),Ut(h,d)&&Ut(h,f)&&!Ut(d,p)&&c(),f=h,p=d}}});return l[Symbol.iterator]=()=>{let a=0;return{next(){return a<2?{value:a++?o||Ee:l,done:!1}:{done:!0}}}},l}const Um=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ze(t)}Modifiers`]||e[`${Qt(t)}Modifiers`];function bk(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||Ee;let s=n;const i=t.startsWith("update:"),o=i&&Um(r,t.slice(7));o&&(o.trim&&(s=n.map(u=>ge(u)?u.trim():u)),o.number&&(s=n.map(Yo)));let l,a=r[l=Fs(t)]||r[l=Fs(Ze(t))];!a&&i&&(a=r[l=Fs(Qt(t))]),a&&En(a,e,6,s);const c=r[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,En(c,e,6,s)}}function Hm(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},l=!1;if(!fe(e)){const a=c=>{const u=Hm(c,t,!0);u&&(l=!0,we(o,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!i&&!l?(ze(e)&&r.set(e,null),null):(se(i)?i.forEach(a=>o[a]=null):we(o,i),ze(e)&&r.set(e,o),o)}function Yl(e,t){return!e||!hs(t)?!1:(t=t.slice(2).replace(/Once$/,""),Oe(e,t[0].toLowerCase()+t.slice(1))||Oe(e,Qt(t))||Oe(e,t))}function $o(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:o,attrs:l,emit:a,render:c,renderCache:u,props:f,data:p,setupState:h,ctx:d,inheritAttrs:_}=e,C=Ri(e);let S,b;try{if(n.shapeFlag&4){const m=s||r,y=m;S=Xt(c.call(y,m,u,f,h,p,d)),b=l}else{const m=t;S=Xt(m.length>1?m(f,{attrs:l,slots:o,emit:a}):m(f,null)),b=t.props?l:vk(l)}}catch(m){Ci.length=0,ms(m,e,1),S=X(rt)}let g=S;if(b&&_!==!1){const m=Object.keys(b),{shapeFlag:y}=g;m.length&&y&7&&(i&&m.some(Qc)&&(b=Ek(b,i)),g=Wn(g,b,!1,!0))}return n.dirs&&(g=Wn(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&mr(g,n.transition),S=g,Ri(C),S}function kk(e,t=!0){let n;for(let r=0;r{let t;for(const n in e)(n==="class"||n==="style"||hs(n))&&((t||(t={}))[n]=e[n]);return t},Ek=(e,t)=>{const n={};for(const r in e)(!Qc(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ck(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:l,patchFlag:a}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?Kf(r,o,c):!!o;if(a&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;let cc=0;const wk={name:"Suspense",__isSuspense:!0,process(e,t,n,r,s,i,o,l,a,c){if(e==null)Sk(t,n,r,s,i,o,l,a,c);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}xk(e,t,n,r,s,o,l,a,c)}},hydrate:Tk,normalize:Ik},Ak=wk;function $i(e,t){const n=e.props&&e.props[t];fe(n)&&n()}function Sk(e,t,n,r,s,i,o,l,a){const{p:c,o:{createElement:u}}=a,f=u("div"),p=e.suspense=jm(e,s,r,t,f,n,i,o,l,a);c(null,p.pendingBranch=e.ssContent,f,null,r,p,i,o),p.deps>0?($i(e,"onPending"),$i(e,"onFallback"),c(null,e.ssFallback,t,n,r,null,i,o),Ms(p,e.ssFallback)):p.resolve(!1,!0)}function xk(e,t,n,r,s,i,o,l,{p:a,um:c,o:{createElement:u}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const p=t.ssContent,h=t.ssFallback,{activeBranch:d,pendingBranch:_,isInFallback:C,isHydrating:S}=f;if(_)f.pendingBranch=p,Sn(p,_)?(a(_,p,f.hiddenContainer,null,s,f,i,o,l),f.deps<=0?f.resolve():C&&(S||(a(d,h,n,r,s,null,i,o,l),Ms(f,h)))):(f.pendingId=cc++,S?(f.isHydrating=!1,f.activeBranch=_):c(_,s,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u("div"),C?(a(null,p,f.hiddenContainer,null,s,f,i,o,l),f.deps<=0?f.resolve():(a(d,h,n,r,s,null,i,o,l),Ms(f,h))):d&&Sn(p,d)?(a(d,p,n,r,s,f,i,o,l),f.resolve(!0)):(a(null,p,f.hiddenContainer,null,s,f,i,o,l),f.deps<=0&&f.resolve()));else if(d&&Sn(p,d))a(d,p,n,r,s,f,i,o,l),Ms(f,p);else if($i(t,"onPending"),f.pendingBranch=p,p.shapeFlag&512?f.pendingId=p.component.suspenseId:f.pendingId=cc++,a(null,p,f.hiddenContainer,null,s,f,i,o,l),f.deps<=0)f.resolve();else{const{timeout:b,pendingId:g}=f;b>0?setTimeout(()=>{f.pendingId===g&&f.fallback(h)},b):b===0&&f.fallback(h)}}function jm(e,t,n,r,s,i,o,l,a,c,u=!1){const{p:f,m:p,um:h,n:d,o:{parentNode:_,remove:C}}=c;let S;const b=Lk(e);b&&t&&t.pendingBranch&&(S=t.pendingId,t.deps++);const g=e.props?Zo(e.props.timeout):void 0,m=i,y={vnode:e,parent:t,parentComponent:n,namespace:o,container:r,hiddenContainer:s,deps:0,pendingId:cc++,timeout:typeof g=="number"?g:-1,activeBranch:null,pendingBranch:null,isInFallback:!u,isHydrating:u,isUnmounted:!1,effects:[],resolve(k=!1,T=!1){const{vnode:L,activeBranch:A,pendingBranch:O,pendingId:H,effects:M,parentComponent:V,container:oe}=y;let ie=!1;y.isHydrating?y.isHydrating=!1:k||(ie=A&&O.transition&&O.transition.mode==="out-in",ie&&(A.transition.afterLeave=()=>{H===y.pendingId&&(p(O,oe,i===m?d(A):i,0),Oi(M))}),A&&(_(A.el)===oe&&(i=d(A)),h(A,V,y,!0)),ie||p(O,oe,i,0)),Ms(y,O),y.pendingBranch=null,y.isInFallback=!1;let Z=y.parent,G=!1;for(;Z;){if(Z.pendingBranch){Z.effects.push(...M),G=!0;break}Z=Z.parent}!G&&!ie&&Oi(M),y.effects=[],b&&t&&t.pendingBranch&&S===t.pendingId&&(t.deps--,t.deps===0&&!T&&t.resolve()),$i(L,"onResolve")},fallback(k){if(!y.pendingBranch)return;const{vnode:T,activeBranch:L,parentComponent:A,container:O,namespace:H}=y;$i(T,"onFallback");const M=d(L),V=()=>{y.isInFallback&&(f(null,k,O,M,A,null,H,l,a),Ms(y,k))},oe=k.transition&&k.transition.mode==="out-in";oe&&(L.transition.afterLeave=V),y.isInFallback=!0,h(L,A,null,!0),oe||V()},move(k,T,L){y.activeBranch&&p(y.activeBranch,k,T,L),y.container=k},next(){return y.activeBranch&&d(y.activeBranch)},registerDep(k,T,L){const A=!!y.pendingBranch;A&&y.deps++;const O=k.vnode.el;k.asyncDep.catch(H=>{ms(H,k,0)}).then(H=>{if(k.isUnmounted||y.isUnmounted||y.pendingId!==k.suspenseId)return;k.asyncResolved=!0;const{vnode:M}=k;pc(k,H,!1),O&&(M.el=O);const V=!O&&k.subTree.el;T(k,M,_(O||k.subTree.el),O?null:d(k.subTree),y,o,L),V&&C(V),Zl(k,M.el),A&&--y.deps===0&&y.resolve()})},unmount(k,T){y.isUnmounted=!0,y.activeBranch&&h(y.activeBranch,n,k,T),y.pendingBranch&&h(y.pendingBranch,n,k,T)}};return y}function Tk(e,t,n,r,s,i,o,l,a){const c=t.suspense=jm(t,r,n,e.parentNode,document.createElement("div"),null,s,i,o,l,!0),u=a(e,c.pendingBranch=t.ssContent,n,c,i,o);return c.deps===0&&c.resolve(!1,!0),u}function Ik(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=Gf(r?n.default:n),e.ssFallback=r?Gf(n.fallback):X(rt)}function Gf(e){let t;if(fe(e)){const n=as&&e._c;n&&(e._d=!1,B()),e=e(),n&&(e._d=!0,t=Ft,qm())}return se(e)&&(e=kk(e)),e=Xt(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function Vm(e,t){t&&t.pendingBranch?se(e)?t.effects.push(...e):t.effects.push(e):Oi(e)}function Ms(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e;let s=t.el;for(;!s&&t.component;)t=t.component.subTree,s=t.el;n.el=s,r&&r.subTree===n&&(r.vnode.el=s,Zl(r,s))}function Lk(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ce=Symbol.for("v-fgt"),ur=Symbol.for("v-txt"),rt=Symbol.for("v-cmt"),ss=Symbol.for("v-stc"),Ci=[];let Ft=null;function B(e=!1){Ci.push(Ft=e?null:[])}function qm(){Ci.pop(),Ft=Ci[Ci.length-1]||null}let as=1;function uc(e,t=!1){as+=e,e<0&&Ft&&t&&(Ft.hasOnce=!0)}function Wm(e){return e.dynamicChildren=as>0?Ft||Ns:null,qm(),as>0&&Ft&&Ft.push(e),e}function q(e,t,n,r,s,i){return Wm(I(e,t,n,r,s,i,!0))}function Be(e,t,n,r,s){return Wm(X(e,t,n,r,s,!0))}function gr(e){return e?e.__v_isVNode===!0:!1}function Sn(e,t){return e.type===t.type&&e.key===t.key}function Dk(e){}const Km=({key:e})=>e??null,Bo=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||ct(e)||fe(e)?{i:dt,r:e,k:t,f:!!n}:e:null);function I(e,t=null,n=null,r=0,s=null,i=e===Ce?0:1,o=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Km(t),ref:t&&Bo(t),scopeId:Vl,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:dt};return l?(Eu(a,n),i&128&&e.normalize(a)):n&&(a.shapeFlag|=ge(n)?8:16),as>0&&!o&&Ft&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&Ft.push(a),a}const X=Nk;function Nk(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===km)&&(e=rt),gr(e)){const l=Wn(e,t,!0);return n&&Eu(l,n),as>0&&!i&&Ft&&(l.shapeFlag&6?Ft[Ft.indexOf(e)]=l:Ft.push(l)),l.patchFlag=-2,l}if($k(e)&&(e=e.__vccOpts),t){t=Gm(t);let{class:l,style:a}=t;l&&!ge(l)&&(t.class=Se(l)),ze(a)&&(jl(a)&&!se(a)&&(a=we({},a)),t.style=Vn(a))}const o=ge(e)?1:sl(e)?128:om(e)?64:ze(e)?4:fe(e)?2:0;return I(e,t,n,r,s,o,i,!0)}function Gm(e){return e?jl(e)||Sm(e)?we({},e):e:null}function Wn(e,t,n=!1,r=!1){const{props:s,ref:i,patchFlag:o,children:l,transition:a}=e,c=t?Ym(s||{},t):s,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Km(c),ref:t&&t.ref?n&&i?se(i)?i.concat(Bo(t)):[i,Bo(t)]:Bo(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ce?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Wn(e.ssContent),ssFallback:e.ssFallback&&Wn(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&r&&mr(u,a.clone(u)),u}function We(e=" ",t=0){return X(ur,null,e,t)}function il(e,t){const n=X(ss,null,e);return n.staticCount=t,n}function de(e="",t=!1){return t?(B(),Be(rt,null,e)):X(rt,null,e)}function Xt(e){return e==null||typeof e=="boolean"?X(rt):se(e)?X(Ce,null,e.slice()):gr(e)?xr(e):X(ur,null,String(e))}function xr(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Wn(e)}function Eu(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(se(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Eu(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Sm(t)?t._ctx=dt:s===3&&dt&&(dt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else fe(t)?(t={default:t,_ctx:dt},n=32):(t=String(t),r&64?(n=16,t=[We(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ym(...e){const t={};for(let n=0;nht||dt;let ol,fc;{const e=Ml(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(o=>o(i)):s[0](i)}};ol=t("__VUE_INSTANCE_SETTERS__",n=>ht=n),fc=t("__VUE_SSR_SETTERS__",n=>zs=n)}const cs=e=>{const t=ht;return ol(e),e.scope.on(),()=>{e.scope.off(),ol(t)}},hc=()=>{ht&&ht.scope.off(),ol(null)};function Xm(e){return e.vnode.shapeFlag&4}let zs=!1;function Qm(e,t=!1,n=!1){t&&fc(t);const{props:r,children:s}=e.vnode,i=Xm(e);ak(e,r,i,t),hk(e,s,n||t);const o=i?Rk(e,t):void 0;return t&&fc(!1),o}function Rk(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ic);const{setup:r}=n;if(r){hr();const s=e.setupContext=r.length>1?tg(e):null,i=cs(e),o=ni(r,e,0,[e.props,s]),l=eu(o);if(pr(),i(),(l||e.sp)&&!Rr(e)&&hu(e),l){if(o.then(hc,hc),t)return o.then(a=>{pc(e,a,t)}).catch(a=>{ms(a,e,0)});e.asyncDep=o}else pc(e,o,t)}else eg(e,t)}function pc(e,t,n){fe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ze(t)&&(e.setupState=au(t)),eg(e,n)}let ll,dc;function Jm(e){ll=e,dc=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,zb))}}const Pk=()=>!ll;function eg(e,t,n){const r=e.type;if(!e.render){if(!t&&ll&&!r.render){const s=r.template||yu(e).template;if(s){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,c=we(we({isCustomElement:i,delimiters:l},o),a);r.render=ll(s,c)}}e.render=r.render||kt,dc&&dc(e)}{const s=cs(e);hr();try{ek(e)}finally{pr(),s()}}}const Mk={get(e,t){return Nt(e,"get",""),e[t]}};function tg(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Mk),slots:e.slots,emit:e.emit,expose:t}}function ao(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(au(Yd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ei)return Ei[n](e)},has(t,n){return n in t||n in Ei}})):e.proxy}function mc(e,t=!0){return fe(e)?e.displayName||e.name:e.name||t&&e.__name}function $k(e){return fe(e)&&"__vccOpts"in e}const pe=(e,t)=>Qy(e,t,zs);function Dt(e,t,n){const r=arguments.length;return r===2?ze(t)&&!se(t)?gr(t)?X(e,null,[t]):X(e,t):X(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&gr(n)&&(n=[n]),X(e,t,n))}function Bk(){}function zk(e,t,n,r){const s=n[r];if(s&&ng(s,e))return s;const i=t();return i.memo=e.slice(),i.cacheIndex=r,n[r]=i}function ng(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let r=0;r0&&Ft&&Ft.push(e),!0}const rg="3.5.16",Uk=kt,Hk=lb,jk=ws,Vk=sm,qk={createComponentInstance:Zm,setupComponent:Qm,renderComponentRoot:$o,setCurrentRenderingInstance:Ri,isVNode:gr,normalizeVNode:Xt,getComponentPublicInstance:ao,ensureValidVNode:_u,pushWarningContext:rb,popWarningContext:sb},Wk=qk,Kk=null,Gk=null,Yk=null;/** +* @vue/runtime-dom v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let gc;const Yf=typeof window<"u"&&window.trustedTypes;if(Yf)try{gc=Yf.createPolicy("vue",{createHTML:e=>e})}catch{}const sg=gc?e=>gc.createHTML(e):e=>e,Zk="http://www.w3.org/2000/svg",Xk="http://www.w3.org/1998/Math/MathML",nr=typeof document<"u"?document:null,Zf=nr&&nr.createElement("template"),Qk={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?nr.createElementNS(Zk,e):t==="mathml"?nr.createElementNS(Xk,e):n?nr.createElement(e,{is:n}):nr.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>nr.createTextNode(e),createComment:e=>nr.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>nr.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{Zf.innerHTML=sg(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const l=Zf.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},br="transition",ci="animation",Us=Symbol("_vtc"),ig={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},og=we({},fu,ig),Jk=e=>(e.displayName="Transition",e.props=og,e),Xl=Jk((e,{slots:t})=>Dt(fm,lg(e),t)),Gr=(e,t=[])=>{se(e)?e.forEach(n=>n(...t)):e&&e(...t)},Xf=e=>e?se(e)?e.some(t=>t.length>1):e.length>1:!1;function lg(e){const t={};for(const M in e)M in ig||(t[M]=e[M]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:c=o,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,d=ev(s),_=d&&d[0],C=d&&d[1],{onBeforeEnter:S,onEnter:b,onEnterCancelled:g,onLeave:m,onLeaveCancelled:y,onBeforeAppear:k=S,onAppear:T=b,onAppearCancelled:L=g}=t,A=(M,V,oe,ie)=>{M._enterCancelled=ie,Cr(M,V?u:l),Cr(M,V?c:o),oe&&oe()},O=(M,V)=>{M._isLeaving=!1,Cr(M,f),Cr(M,h),Cr(M,p),V&&V()},H=M=>(V,oe)=>{const ie=M?T:b,Z=()=>A(V,M,oe);Gr(ie,[V,Z]),Qf(()=>{Cr(V,M?a:i),Rn(V,M?u:l),Xf(ie)||Jf(V,r,_,Z)})};return we(t,{onBeforeEnter(M){Gr(S,[M]),Rn(M,i),Rn(M,o)},onBeforeAppear(M){Gr(k,[M]),Rn(M,a),Rn(M,c)},onEnter:H(!1),onAppear:H(!0),onLeave(M,V){M._isLeaving=!0;const oe=()=>O(M,V);Rn(M,f),M._enterCancelled?(Rn(M,p),_c()):(_c(),Rn(M,p)),Qf(()=>{M._isLeaving&&(Cr(M,f),Rn(M,h),Xf(m)||Jf(M,r,C,oe))}),Gr(m,[M,oe])},onEnterCancelled(M){A(M,!1,void 0,!0),Gr(g,[M])},onAppearCancelled(M){A(M,!0,void 0,!0),Gr(L,[M])},onLeaveCancelled(M){O(M),Gr(y,[M])}})}function ev(e){if(e==null)return null;if(ze(e))return[Na(e.enter),Na(e.leave)];{const t=Na(e);return[t,t]}}function Na(e){return Zo(e)}function Rn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Us]||(e[Us]=new Set)).add(t)}function Cr(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Us];n&&(n.delete(t),n.size||(e[Us]=void 0))}function Qf(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let tv=0;function Jf(e,t,n,r){const s=e._endId=++tv,i=()=>{s===e._endId&&r()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:a}=ag(e,t);if(!o)return r();const c=o+"end";let u=0;const f=()=>{e.removeEventListener(c,p),i()},p=h=>{h.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[d]||"").split(", "),s=r(`${br}Delay`),i=r(`${br}Duration`),o=eh(s,i),l=r(`${ci}Delay`),a=r(`${ci}Duration`),c=eh(l,a);let u=null,f=0,p=0;t===br?o>0&&(u=br,f=o,p=i.length):t===ci?c>0&&(u=ci,f=c,p=a.length):(f=Math.max(o,c),u=f>0?o>c?br:ci:null,p=u?u===br?i.length:a.length:0);const h=u===br&&/\b(transform|all)(,|$)/.test(r(`${br}Property`).toString());return{type:u,timeout:f,propCount:p,hasTransform:h}}function eh(e,t){for(;e.lengthth(n)+th(e[r])))}function th(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function _c(){return document.body.offsetHeight}function nv(e,t,n){const r=e[Us];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const al=Symbol("_vod"),cg=Symbol("_vsh"),wi={beforeMount(e,{value:t},{transition:n}){e[al]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):ui(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),ui(e,!0),r.enter(e)):r.leave(e,()=>{ui(e,!1)}):ui(e,t))},beforeUnmount(e,{value:t}){ui(e,t)}};function ui(e,t){e.style.display=t?e[al]:"none",e[cg]=!t}function rv(){wi.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const ug=Symbol("");function sv(e){const t=Pt();if(!t)return;const n=t.ut=(s=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>cl(i,s))},r=()=>{const s=e(t.proxy);t.ce?cl(t.ce,s):yc(t.subTree,s),n(s)};du(()=>{Oi(r)}),gt(()=>{At(r,kt,{flush:"post"});const s=new MutationObserver(r);s.observe(t.subTree.el.parentNode,{childList:!0}),Mt(()=>s.disconnect())})}function yc(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{yc(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)cl(e.el,t);else if(e.type===Ce)e.children.forEach(n=>yc(n,t));else if(e.type===ss){let{el:n,anchor:r}=e;for(;n&&(cl(n,t),n!==r);)n=n.nextSibling}}function cl(e,t){if(e.nodeType===1){const n=e.style;let r="";for(const s in t)n.setProperty(`--${s}`,t[s]),r+=`--${s}: ${t[s]};`;n[ug]=r}}const iv=/(^|;)\s*display\s*:/;function ov(e,t,n){const r=e.style,s=ge(n);let i=!1;if(n&&!s){if(t)if(ge(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&zo(r,l,"")}else for(const o in t)n[o]==null&&zo(r,o,"");for(const o in n)o==="display"&&(i=!0),zo(r,o,n[o])}else if(s){if(t!==n){const o=r[ug];o&&(n+=";"+o),r.cssText=n,i=iv.test(n)}}else t&&e.removeAttribute("style");al in e&&(e[al]=i?r.display:"",e[cg]&&(r.display="none"))}const nh=/\s*!important$/;function zo(e,t,n){if(se(n))n.forEach(r=>zo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=lv(e,t);nh.test(n)?e.setProperty(Qt(r),n.replace(nh,""),"important"):e[r]=n}}const rh=["Webkit","Moz","ms"],Oa={};function lv(e,t){const n=Oa[t];if(n)return n;let r=Ze(t);if(r!=="filter"&&r in e)return Oa[t]=r;r=ds(r);for(let s=0;sFa||(fv.then(()=>Fa=0),Fa=Date.now());function pv(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;En(dv(r,n.value),t,5,[r])};return n.value=e,n.attached=hv(),n}function dv(e,t){if(se(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const ch=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,mv=(e,t,n,r,s,i)=>{const o=s==="svg";t==="class"?nv(e,r,o):t==="style"?ov(e,n,r):hs(t)?Qc(t)||cv(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gv(e,t,r,o))?(oh(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ih(e,t,r,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ge(r))?oh(e,Ze(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),ih(e,t,r,o))};function gv(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ch(t)&&fe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return ch(t)&&ge(n)?!1:t in e}const uh={};/*! #__NO_SIDE_EFFECTS__ */function fg(e,t,n){const r=Cn(e,t);Rl(r)&&we(r,t);class s extends Ql{constructor(o){super(r,o,n)}}return s.def=r,s}/*! #__NO_SIDE_EFFECTS__ */const _v=(e,t)=>fg(e,t,Cg),yv=typeof HTMLElement<"u"?HTMLElement:class{};class Ql extends yv{constructor(t,n={},r=Bi){super(),this._def=t,this._props=n,this._createApp=r,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&r!==Bi?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow({mode:"open"}),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof Ql){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,qn(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null)})}_resolveDef(){if(this._pendingResolve)return;for(let r=0;r{for(const s of r)this._setAttr(s.attributeName)}),this._ob.observe(this,{attributes:!0});const t=(r,s=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:o}=r;let l;if(i&&!se(i))for(const a in i){const c=i[a];(c===Number||c&&c.type===Number)&&(a in this._props&&(this._props[a]=Zo(this._props[a])),(l||(l=Object.create(null)))[Ze(a)]=!0)}this._numberProps=l,this._resolveProps(r),this.shadowRoot&&this._applyStyles(o),this._mount(r)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(r=>t(this._def=r,!0)):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const r in n)Oe(this,r)||Object.defineProperty(this,r,{get:()=>Q(n[r])})}_resolveProps(t){const{props:n}=t,r=se(n)?n:Object.keys(n||{});for(const s of Object.keys(this))s[0]!=="_"&&r.includes(s)&&this._setProp(s,this[s]);for(const s of r.map(Ze))Object.defineProperty(this,s,{get(){return this._getProp(s)},set(i){this._setProp(s,i,!0,!0)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let r=n?this.getAttribute(t):uh;const s=Ze(t);n&&this._numberProps&&this._numberProps[s]&&(r=Zo(r)),this._setProp(s,r,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,r=!0,s=!1){if(n!==this._props[t]&&(n===uh?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),s&&this._instance&&this._update(),r)){const i=this._ob;i&&i.disconnect(),n===!0?this.setAttribute(Qt(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(Qt(t),n+""):n||this.removeAttribute(Qt(t)),i&&i.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),Eg(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=X(this._def,we(t,this._props));return this._instance||(n.ce=r=>{this._instance=r,r.ce=this,r.isCE=!0;const s=(i,o)=>{this.dispatchEvent(new CustomEvent(i,Rl(o[0])?we({detail:o},o[0]):{detail:o}))};r.emit=(i,...o)=>{s(i,o),Qt(i)!==i&&s(Qt(i),o)},this._setParent()}),n}_applyStyles(t,n){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const r=this._nonce;for(let s=t.length-1;s>=0;s--){const i=document.createElement("style");r&&i.setAttribute("nonce",r),i.textContent=t[s],this.shadowRoot.prepend(i)}}_parseSlots(){const t=this._slots={};let n;for(;n=this.firstChild;){const r=n.nodeType===1&&n.getAttribute("slot")||"default";(t[r]||(t[r]=[])).push(n),this.removeChild(n)}}_renderSlots(){const t=(this._teleportTarget||this).querySelectorAll("slot"),n=this._instance.type.__scopeId;for(let r=0;r(delete e.props.mode,e),Ev=vv({name:"TransitionGroup",props:we({},og,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Pt(),r=uu();let s,i;return Kl(()=>{if(!s.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!Sv(s[0].el,n.vnode.el,o)){s=[];return}s.forEach(Cv),s.forEach(wv);const l=s.filter(Av);_c(),l.forEach(a=>{const c=a.el,u=c.style;Rn(c,o),u.transform=u.webkitTransform=u.transitionDuration="";const f=c[ul]=p=>{p&&p.target!==c||(!p||/transform$/.test(p.propertyName))&&(c.removeEventListener("transitionend",f),c[ul]=null,Cr(c,o))};c.addEventListener("transitionend",f)}),s=[]}),()=>{const o=Ie(e),l=lg(o);let a=o.tag||Ce;if(s=[],i)for(let c=0;c{l.split(/\s+/).forEach(a=>a&&r.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&r.classList.add(l)),r.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(r);const{hasTransform:o}=ag(r);return i.removeChild(r),o}const Br=e=>{const t=e.props["onUpdate:modelValue"]||!1;return se(t)?n=>Rs(t,n):t};function xv(e){e.target.composing=!0}function hh(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vn=Symbol("_assign"),zr={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[vn]=Br(s);const i=r||s.props&&s.props.type==="number";ir(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Yo(l)),e[vn](l)}),n&&ir(e,"change",()=>{e.value=e.value.trim()}),t||(ir(e,"compositionstart",xv),ir(e,"compositionend",hh),ir(e,"change",hh))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},o){if(e[vn]=Br(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Yo(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===a)||(e.value=a))}},Jl={deep:!0,created(e,t,n){e[vn]=Br(n),ir(e,"change",()=>{const r=e._modelValue,s=Hs(e),i=e.checked,o=e[vn];if(se(r)){const l=$l(r,s),a=l!==-1;if(i&&!a)o(r.concat(s));else if(!i&&a){const c=[...r];c.splice(l,1),o(c)}}else if(ps(r)){const l=new Set(r);i?l.add(s):l.delete(s),o(l)}else o(gg(e,i))})},mounted:ph,beforeUpdate(e,t,n){e[vn]=Br(n),ph(e,t,n)}};function ph(e,{value:t,oldValue:n},r){e._modelValue=t;let s;if(se(t))s=$l(t,r.props.value)>-1;else if(ps(t))s=t.has(r.props.value);else{if(t===n)return;s=$r(t,gg(e,!0))}e.checked!==s&&(e.checked=s)}const Cu={created(e,{value:t},n){e.checked=$r(t,n.props.value),e[vn]=Br(n),ir(e,"change",()=>{e[vn](Hs(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[vn]=Br(r),t!==n&&(e.checked=$r(t,r.props.value))}},ea={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const s=ps(t);ir(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?Yo(Hs(o)):Hs(o));e[vn](e.multiple?s?new Set(i):i:i[0]),e._assigning=!0,qn(()=>{e._assigning=!1})}),e[vn]=Br(r)},mounted(e,{value:t}){dh(e,t)},beforeUpdate(e,t,n){e[vn]=Br(n)},updated(e,{value:t}){e._assigning||dh(e,t)}};function dh(e,t){const n=e.multiple,r=se(t);if(!(n&&!r&&!ps(t))){for(let s=0,i=e.options.length;sString(c)===String(l)):o.selected=$l(t,l)>-1}else o.selected=t.has(l);else if($r(Hs(o),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Hs(e){return"_value"in e?e._value:e.value}function gg(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const _g={created(e,t,n){xo(e,t,n,null,"created")},mounted(e,t,n){xo(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){xo(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){xo(e,t,n,r,"updated")}};function yg(e,t){switch(e){case"SELECT":return ea;case"TEXTAREA":return zr;default:switch(t){case"checkbox":return Jl;case"radio":return Cu;default:return zr}}}function xo(e,t,n,r,s){const o=yg(e.tagName,n.props&&n.props.type)[s];o&&o(e,t,n,r)}function Tv(){zr.getSSRProps=({value:e})=>({value:e}),Cu.getSSRProps=({value:e},t)=>{if(t.props&&$r(t.props.value,e))return{checked:!0}},Jl.getSSRProps=({value:e},t)=>{if(se(e)){if(t.props&&$l(e,t.props.value)>-1)return{checked:!0}}else if(ps(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},_g.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=yg(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const Iv=["ctrl","shift","alt","meta"],Lv={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Iv.some(n=>e[`${n}Key`]&&!t.includes(n))},je=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const i=Qt(s.key);if(t.some(o=>o===i||Dv[o]===i))return e(s)})},bg=we({patchProp:mv},Qk);let Ai,mh=!1;function kg(){return Ai||(Ai=Nm(bg))}function vg(){return Ai=mh?Ai:Om(bg),mh=!0,Ai}const Eg=(...e)=>{kg().render(...e)},Ov=(...e)=>{vg().hydrate(...e)},Bi=(...e)=>{const t=kg().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Ag(r);if(!s)return;const i=t._component;!fe(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const o=n(s,!1,wg(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},t},Cg=(...e)=>{const t=vg().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Ag(r);if(s)return n(s,!0,wg(s))},t};function wg(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ag(e){return ge(e)?document.querySelector(e):e}let gh=!1;const Fv=()=>{gh||(gh=!0,Tv(),rv())},Rv=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:fm,BaseTransitionPropsValidators:fu,Comment:rt,DeprecationTypes:Yk,EffectScope:nu,ErrorCodes:ob,ErrorTypeStrings:Hk,Fragment:Ce,KeepAlive:Nb,ReactiveEffect:Li,Static:ss,Suspense:Ak,Teleport:db,Text:ur,TrackOpTypes:Jy,Transition:Xl,TransitionGroup:mg,TriggerOpTypes:eb,VueElement:Ql,assertNumber:ib,callWithAsyncErrorHandling:En,callWithErrorHandling:ni,camelize:Ze,capitalize:ds,cloneVNode:Wn,compatUtils:Gk,computed:pe,createApp:Bi,createBlock:Be,createCommentVNode:de,createElementBlock:q,createElementVNode:I,createHydrationRenderer:Om,createPropsRestProxy:Qb,createRenderer:Nm,createSSRApp:Cg,createSlots:Mb,createStaticVNode:il,createTextVNode:We,createVNode:X,customRef:Xd,defineAsyncComponent:Lb,defineComponent:Cn,defineCustomElement:fg,defineEmits:Hb,defineExpose:jb,defineModel:Wb,defineOptions:Vb,defineProps:Ub,defineSSRCustomElement:_v,defineSlots:qb,devtools:jk,effect:vy,effectScope:Nd,getCurrentInstance:Pt,getCurrentScope:Od,getCurrentWatcher:tb,getTransitionRawChildren:ql,guardReactiveProps:Gm,h:Dt,handleError:ms,hasInjectionContext:lk,hydrate:Ov,hydrateOnIdle:wb,hydrateOnInteraction:Tb,hydrateOnMediaQuery:xb,hydrateOnVisible:Sb,initCustomFormatter:Bk,initDirectivesForSSR:Fv,inject:tt,isMemoSame:ng,isProxy:jl,isReactive:Fr,isReadonly:dr,isRef:ct,isRuntimeOnly:Pk,isShallow:un,isVNode:gr,markRaw:Yd,mergeDefaults:Zb,mergeModels:Xb,mergeProps:Ym,nextTick:qn,normalizeClass:Se,normalizeProps:ly,normalizeStyle:Vn,onActivated:pm,onBeforeMount:pu,onBeforeUnmount:Gl,onBeforeUpdate:du,onDeactivated:dm,onErrorCaptured:bm,onMounted:gt,onRenderTracked:ym,onRenderTriggered:_m,onScopeDispose:by,onServerPrefetch:gm,onUnmounted:Mt,onUpdated:Kl,onWatcherCleanup:Jd,openBlock:B,popScopeId:fb,provide:rs,proxyRefs:au,pushScopeId:ub,queuePostFlushCb:Oi,reactive:Ht,readonly:lu,ref:te,registerRuntimeCompiler:Jm,render:Eg,renderList:wt,renderSlot:$b,resolveComponent:$e,resolveDirective:Pb,resolveDynamicComponent:Rb,resolveFilter:Kk,resolveTransitionHooks:Bs,setBlockTracking:uc,setDevtoolsHook:Vk,setTransitionHooks:mr,shallowReactive:ou,shallowReadonly:Uy,shallowRef:io,ssrContextKey:Mm,ssrUtils:Wk,stop:Ey,toDisplayString:W,toHandlerKey:Fs,toHandlers:Bb,toRaw:Ie,toRef:Zy,toRefs:Ky,toValue:Vy,transformVNodeArgs:Dk,triggerRef:jy,unref:Q,useAttrs:Yb,useCssModule:kv,useCssVars:sv,useHost:hg,useId:gb,useModel:yk,useSSRContext:$m,useShadowRoot:bv,useSlots:Gb,useTemplateRef:_b,useTransitionState:uu,vModelCheckbox:Jl,vModelDynamic:_g,vModelRadio:Cu,vModelSelect:ea,vModelText:zr,vShow:wi,version:rg,warn:Uk,watch:At,watchEffect:mk,watchPostEffect:gk,watchSyncEffect:Bm,withAsyncContext:Jb,withCtx:Ot,withDefaults:Kb,withDirectives:xn,withKeys:Nv,withMemo:zk,withModifiers:je,withScopeId:hb},Symbol.toStringTag,{value:"Module"}));/** +* @vue/compiler-core v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const zi=Symbol(""),Si=Symbol(""),wu=Symbol(""),fl=Symbol(""),Sg=Symbol(""),us=Symbol(""),xg=Symbol(""),Tg=Symbol(""),Au=Symbol(""),Su=Symbol(""),co=Symbol(""),xu=Symbol(""),Ig=Symbol(""),Tu=Symbol(""),Iu=Symbol(""),Lu=Symbol(""),Du=Symbol(""),Nu=Symbol(""),Ou=Symbol(""),Lg=Symbol(""),Dg=Symbol(""),ta=Symbol(""),hl=Symbol(""),Fu=Symbol(""),Ru=Symbol(""),Ui=Symbol(""),uo=Symbol(""),Pu=Symbol(""),bc=Symbol(""),Pv=Symbol(""),kc=Symbol(""),pl=Symbol(""),Mv=Symbol(""),$v=Symbol(""),Mu=Symbol(""),Bv=Symbol(""),zv=Symbol(""),$u=Symbol(""),Ng=Symbol(""),js={[zi]:"Fragment",[Si]:"Teleport",[wu]:"Suspense",[fl]:"KeepAlive",[Sg]:"BaseTransition",[us]:"openBlock",[xg]:"createBlock",[Tg]:"createElementBlock",[Au]:"createVNode",[Su]:"createElementVNode",[co]:"createCommentVNode",[xu]:"createTextVNode",[Ig]:"createStaticVNode",[Tu]:"resolveComponent",[Iu]:"resolveDynamicComponent",[Lu]:"resolveDirective",[Du]:"resolveFilter",[Nu]:"withDirectives",[Ou]:"renderList",[Lg]:"renderSlot",[Dg]:"createSlots",[ta]:"toDisplayString",[hl]:"mergeProps",[Fu]:"normalizeClass",[Ru]:"normalizeStyle",[Ui]:"normalizeProps",[uo]:"guardReactiveProps",[Pu]:"toHandlers",[bc]:"camelize",[Pv]:"capitalize",[kc]:"toHandlerKey",[pl]:"setBlockTracking",[Mv]:"pushScopeId",[$v]:"popScopeId",[Mu]:"withCtx",[Bv]:"unref",[zv]:"isRef",[$u]:"withMemo",[Ng]:"isMemoSame"};function Uv(e){Object.getOwnPropertySymbols(e).forEach(t=>{js[t]=e[t]})}const dn={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function Hv(e,t=""){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:dn}}function Hi(e,t,n,r,s,i,o,l=!1,a=!1,c=!1,u=dn){return e&&(l?(e.helper(us),e.helper(Ws(e.inSSR,c))):e.helper(qs(e.inSSR,c)),o&&e.helper(Nu)),{type:13,tag:t,props:n,children:r,patchFlag:s,dynamicProps:i,directives:o,isBlock:l,disableTracking:a,isComponent:c,loc:u}}function is(e,t=dn){return{type:17,loc:t,elements:e}}function kn(e,t=dn){return{type:15,loc:t,properties:e}}function et(e,t){return{type:16,loc:dn,key:ge(e)?_e(e,!0):e,value:t}}function _e(e,t=!1,n=dn,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Dn(e,t=dn){return{type:8,loc:t,children:e}}function ft(e,t=[],n=dn){return{type:14,loc:n,callee:e,arguments:t}}function Vs(e,t=void 0,n=!1,r=!1,s=dn){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:s}}function vc(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:dn}}function jv(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:dn}}function Vv(e){return{type:21,body:e,loc:dn}}function qs(e,t){return e||t?Au:Su}function Ws(e,t){return e||t?xg:Tg}function Bu(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(qs(r,e.isComponent)),t(us),t(Ws(r,e.isComponent)))}const _h=new Uint8Array([123,123]),yh=new Uint8Array([125,125]);function bh(e){return e>=97&&e<=122||e>=65&&e<=90}function ln(e){return e===32||e===10||e===9||e===12||e===13}function kr(e){return e===47||e===62||ln(e)}function dl(e){const t=new Uint8Array(e.length);for(let n=0;n=0;s--){const i=this.newlines[s];if(t>i){n=s+2,r=t-i;break}}return{column:r,line:n,offset:t}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(t){t===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t))}stateInterpolationOpen(t){if(t===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const n=this.index+1-this.delimiterOpen.length;n>this.sectionStart&&this.cbs.ontext(this.sectionStart,n),this.state=3,this.sectionStart=n}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(t)):(this.state=1,this.stateText(t))}stateInterpolation(t){t===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(t))}stateInterpolationClose(t){t===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(t))}stateSpecialStartSequence(t){const n=this.sequenceIndex===this.currentSequence.length;if(!(n?kr(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!n){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(t)}stateInRCDATA(t){if(this.sequenceIndex===this.currentSequence.length){if(t===62||ln(t)){const n=this.index-this.currentSequence.length;if(this.sectionStart=t||(this.state===28?this.currentSequence===Tt.CdataEnd?this.cbs.oncdata(this.sectionStart,t):this.cbs.oncomment(this.sectionStart,t):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,n){}}function kh(e,{compatConfig:t}){const n=t&&t[e];return e==="MODE"?n||3:n}function os(e,t){const n=kh("MODE",t),r=kh(e,t);return n===3?r===!0:r!==!1}function ji(e,t,n,...r){return os(e,t)}function zu(e){throw e}function Og(e){}function Qe(e,t,n,r){const s=`https://vuejs.org/error-reference/#compiler-${e}`,i=new SyntaxError(String(s));return i.code=e,i.loc=t,i}const Jt=e=>e.type===4&&e.isStatic;function Fg(e){switch(e){case"Teleport":case"teleport":return Si;case"Suspense":case"suspense":return wu;case"KeepAlive":case"keep-alive":return fl;case"BaseTransition":case"base-transition":return Sg}}const Wv=/^\d|[^\$\w\xA0-\uFFFF]/,Uu=e=>!Wv.test(e),Kv=/[A-Za-z_$\xA0-\uFFFF]/,Gv=/[\.\?\w$\xA0-\uFFFF]/,Yv=/\s+[.[]\s*|\s*[.[]\s+/g,Rg=e=>e.type===4?e.content:e.loc.source,Zv=e=>{const t=Rg(e).trim().replace(Yv,l=>l.trim());let n=0,r=[],s=0,i=0,o=null;for(let l=0;l|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,Qv=e=>Xv.test(Rg(e)),Jv=Qv;function bn(e,t,n=!1){for(let r=0;rt.type===7&&t.name==="bind"&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function Ra(e){return e.type===5||e.type===2}function t2(e){return e.type===7&&e.name==="slot"}function ml(e){return e.type===1&&e.tagType===3}function gl(e){return e.type===1&&e.tagType===2}const n2=new Set([Ui,uo]);function Mg(e,t=[]){if(e&&!ge(e)&&e.type===14){const n=e.callee;if(!ge(n)&&n2.has(n))return Mg(e.arguments[0],t.concat(e))}return[e,t]}function _l(e,t,n){let r,s=e.type===13?e.props:e.arguments[2],i=[],o;if(s&&!ge(s)&&s.type===14){const l=Mg(s);s=l[0],i=l[1],o=i[i.length-1]}if(s==null||ge(s))r=kn([t]);else if(s.type===14){const l=s.arguments[0];!ge(l)&&l.type===15?vh(t,l)||l.properties.unshift(t):s.callee===Pu?r=ft(n.helper(hl),[kn([t]),s]):s.arguments.unshift(kn([t])),!r&&(r=s)}else s.type===15?(vh(t,s)||s.properties.unshift(t),r=s):(r=ft(n.helper(hl),[kn([t]),s]),o&&o.callee===uo&&(o=i[i.length-2]));e.type===13?o?o.arguments[0]=r:e.props=r:o?o.arguments[0]=r:e.arguments[2]=r}function vh(e,t){let n=!1;if(e.key.type===4){const r=e.key.content;n=t.properties.some(s=>s.key.type===4&&s.key.content===r)}return n}function Vi(e,t){return`_${t}_${e.replace(/[^\w]/g,(n,r)=>n==="-"?"_":e.charCodeAt(r).toString())}`}function r2(e){return e.type===14&&e.callee===$u?e.arguments[1].returns:e}const s2=/([\s\S]*?)\s+(?:in|of)\s+(\S[\s\S]*)/,$g={parseMode:"base",ns:0,delimiters:["{{","}}"],getNamespace:()=>0,isVoidTag:mi,isPreTag:mi,isIgnoreNewlineTag:mi,isCustomElement:mi,onError:zu,onWarn:Og,comments:!1,prefixIdentifiers:!1};let Fe=$g,qi=null,fr="",Lt=null,Te=null,Gt="",er=-1,Xr=-1,Hu=0,Tr=!1,Ec=null;const Xe=[],Je=new qv(Xe,{onerr:Zn,ontext(e,t){To(Et(e,t),e,t)},ontextentity(e,t,n){To(e,t,n)},oninterpolation(e,t){if(Tr)return To(Et(e,t),e,t);let n=e+Je.delimiterOpen.length,r=t-Je.delimiterClose.length;for(;ln(fr.charCodeAt(n));)n++;for(;ln(fr.charCodeAt(r-1));)r--;let s=Et(n,r);s.includes("&")&&(s=Fe.decodeEntities(s,!1)),Cc({type:5,content:Ho(s,!1,nt(n,r)),loc:nt(e,t)})},onopentagname(e,t){const n=Et(e,t);Lt={type:1,tag:n,ns:Fe.getNamespace(n,Xe[0],Fe.ns),tagType:0,props:[],children:[],loc:nt(e-1,t),codegenNode:void 0}},onopentagend(e){Ch(e)},onclosetag(e,t){const n=Et(e,t);if(!Fe.isVoidTag(n)){let r=!1;for(let s=0;s0&&Zn(24,Xe[0].loc.start.offset);for(let o=0;o<=s;o++){const l=Xe.shift();Uo(l,t,o(r.type===7?r.rawName:r.name)===n)&&Zn(2,t)},onattribend(e,t){if(Lt&&Te){if(es(Te.loc,t),e!==0)if(Gt.includes("&")&&(Gt=Fe.decodeEntities(Gt,!0)),Te.type===6)Te.name==="class"&&(Gt=Ug(Gt).trim()),e===1&&!Gt&&Zn(13,t),Te.value={type:2,content:Gt,loc:e===1?nt(er,Xr):nt(er-1,Xr+1)},Je.inSFCRoot&&Lt.tag==="template"&&Te.name==="lang"&&Gt&&Gt!=="html"&&Je.enterRCDATA(dl("s.content==="sync"))>-1&&ji("COMPILER_V_BIND_SYNC",Fe,Te.loc,Te.arg.loc.source)&&(Te.name="model",Te.modifiers.splice(r,1))}(Te.type!==7||Te.name!=="pre")&&Lt.props.push(Te)}Gt="",er=Xr=-1},oncomment(e,t){Fe.comments&&Cc({type:3,content:Et(e,t),loc:nt(e-4,t+3)})},onend(){const e=fr.length;for(let t=0;t{const d=t.start.offset+p,_=d+f.length;return Ho(f,!1,nt(d,_),0,h?1:0)},l={source:o(i.trim(),n.indexOf(i,s.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let a=s.trim().replace(i2,"").trim();const c=s.indexOf(a),u=a.match(Eh);if(u){a=a.replace(Eh,"").trim();const f=u[1].trim();let p;if(f&&(p=n.indexOf(f,c+a.length),l.key=o(f,p,!0)),u[2]){const h=u[2].trim();h&&(l.index=o(h,n.indexOf(h,l.key?p+f.length:c+a.length),!0))}}return a&&(l.value=o(a,c,!0)),l}function Et(e,t){return fr.slice(e,t)}function Ch(e){Je.inSFCRoot&&(Lt.innerLoc=nt(e+1,e+1)),Cc(Lt);const{tag:t,ns:n}=Lt;n===0&&Fe.isPreTag(t)&&Hu++,Fe.isVoidTag(t)?Uo(Lt,e):(Xe.unshift(Lt),(n===1||n===2)&&(Je.inXML=!0)),Lt=null}function To(e,t,n){{const i=Xe[0]&&Xe[0].tag;i!=="script"&&i!=="style"&&e.includes("&")&&(e=Fe.decodeEntities(e,!1))}const r=Xe[0]||qi,s=r.children[r.children.length-1];s&&s.type===2?(s.content+=e,es(s.loc,n)):r.children.push({type:2,content:e,loc:nt(t,n)})}function Uo(e,t,n=!1){n?es(e.loc,Bg(t,60)):es(e.loc,l2(t,62)+1),Je.inSFCRoot&&(e.children.length?e.innerLoc.end=we({},e.children[e.children.length-1].loc.end):e.innerLoc.end=we({},e.innerLoc.start),e.innerLoc.source=Et(e.innerLoc.start.offset,e.innerLoc.end.offset));const{tag:r,ns:s,children:i}=e;if(Tr||(r==="slot"?e.tagType=2:wh(e)?e.tagType=3:c2(e)&&(e.tagType=1)),Je.inRCDATA||(e.children=zg(i)),s===0&&Fe.isIgnoreNewlineTag(r)){const o=i[0];o&&o.type===2&&(o.content=o.content.replace(/^\r?\n/,""))}s===0&&Fe.isPreTag(r)&&Hu--,Ec===e&&(Tr=Je.inVPre=!1,Ec=null),Je.inXML&&(Xe[0]?Xe[0].ns:Fe.ns)===0&&(Je.inXML=!1);{const o=e.props;if(!Je.inSFCRoot&&os("COMPILER_NATIVE_TEMPLATE",Fe)&&e.tag==="template"&&!wh(e)){const a=Xe[0]||qi,c=a.children.indexOf(e);a.children.splice(c,1,...e.children)}const l=o.find(a=>a.type===6&&a.name==="inline-template");l&&ji("COMPILER_INLINE_TEMPLATE",Fe,l.loc)&&e.children.length&&(l.value={type:2,content:Et(e.children[0].loc.start.offset,e.children[e.children.length-1].loc.end.offset),loc:l.loc})}}function l2(e,t){let n=e;for(;fr.charCodeAt(n)!==t&&n=0;)n--;return n}const a2=new Set(["if","else","else-if","for","slot"]);function wh({tag:e,props:t}){if(e==="template"){for(let n=0;n64&&e<91}const f2=/\r\n/g;function zg(e,t){const n=Fe.whitespace!=="preserve";let r=!1;for(let s=0;s0){if(h>=2){p.codegenNode.patchFlag=-1,o.push(p);continue}}else{const d=p.codegenNode;if(d.type===13){const _=d.patchFlag;if((_===void 0||_===512||_===1)&&Vg(p,n)>=2){const C=qg(p);C&&(d.props=n.hoist(C))}d.dynamicProps&&(d.dynamicProps=n.hoist(d.dynamicProps))}}}else if(p.type===12&&(r?0:cn(p,n))>=2){o.push(p);continue}if(p.type===1){const h=p.tagType===1;h&&n.scopes.vSlot++,jo(p,e,n,!1,s),h&&n.scopes.vSlot--}else if(p.type===11)jo(p,e,n,p.children.length===1,!0);else if(p.type===9)for(let h=0;hd.key===p||d.key.content===p);return h&&h.value}}o.length&&n.transformHoist&&n.transformHoist(i,n,e)}function cn(e,t){const{constantCache:n}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;const r=n.get(e);if(r!==void 0)return r;const s=e.codegenNode;if(s.type!==13||s.isBlock&&e.tag!=="svg"&&e.tag!=="foreignObject"&&e.tag!=="math")return 0;if(s.patchFlag===void 0){let o=3;const l=Vg(e,t);if(l===0)return n.set(e,0),0;l1)for(let a=0;aH&&(L.childIndex--,L.onNodeRemoved()),L.parent.children.splice(H,1)},onNodeRemoved:kt,addIdentifiers(A){},removeIdentifiers(A){},hoist(A){ge(A)&&(A=_e(A)),L.hoists.push(A);const O=_e(`_hoisted_${L.hoists.length}`,!1,A.loc,2);return O.hoisted=A,O},cache(A,O=!1,H=!1){const M=jv(L.cached.length,A,O,H);return L.cached.push(M),M}};return L.filters=new Set,L}function v2(e,t){const n=k2(e,t);ra(e,n),t.hoistStatic&&y2(e,n),t.ssr||E2(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.transformed=!0,e.filters=[...n.filters]}function E2(e,t){const{helper:n}=t,{children:r}=e;if(r.length===1){const s=r[0];if(Hg(e,s)&&s.codegenNode){const i=s.codegenNode;i.type===13&&Bu(i,t),e.codegenNode=i}else e.codegenNode=s}else if(r.length>1){let s=64;e.codegenNode=Hi(t,n(zi),void 0,e.children,s,void 0,void 0,!0,void 0,!1)}}function C2(e,t){let n=0;const r=()=>{n--};for(;nr===e:r=>e.test(r);return(r,s)=>{if(r.type===1){const{props:i}=r;if(r.tagType===3&&i.some(t2))return;const o=[];for(let l=0;l`${js[e]}: _${js[e]}`;function w2(e,{mode:t="function",prefixIdentifiers:n=t==="module",sourceMap:r=!1,filename:s="template.vue.html",scopeId:i=null,optimizeImports:o=!1,runtimeGlobalName:l="Vue",runtimeModuleName:a="vue",ssrRuntimeModuleName:c="vue/server-renderer",ssr:u=!1,isTS:f=!1,inSSR:p=!1}){const h={mode:t,prefixIdentifiers:n,sourceMap:r,filename:s,scopeId:i,optimizeImports:o,runtimeGlobalName:l,runtimeModuleName:a,ssrRuntimeModuleName:c,ssr:u,isTS:f,inSSR:p,source:e.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(_){return`_${js[_]}`},push(_,C=-2,S){h.code+=_},indent(){d(++h.indentLevel)},deindent(_=!1){_?--h.indentLevel:d(--h.indentLevel)},newline(){d(h.indentLevel)}};function d(_){h.push(` +`+" ".repeat(_),0)}return h}function A2(e,t={}){const n=w2(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:r,push:s,prefixIdentifiers:i,indent:o,deindent:l,newline:a,scopeId:c,ssr:u}=n,f=Array.from(e.helpers),p=f.length>0,h=!i&&r!=="module";S2(e,n);const _=u?"ssrRender":"render",S=(u?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ");if(s(`function ${_}(${S}) {`),o(),h&&(s("with (_ctx) {"),o(),p&&(s(`const { ${f.map(Kg).join(", ")} } = _Vue +`,-1),a())),e.components.length&&(Pa(e.components,"component",n),(e.directives.length||e.temps>0)&&a()),e.directives.length&&(Pa(e.directives,"directive",n),e.temps>0&&a()),e.filters&&e.filters.length&&(a(),Pa(e.filters,"filter",n),a()),e.temps>0){s("let ");for(let b=0;b0?", ":""}_temp${b}`)}return(e.components.length||e.directives.length||e.temps)&&(s(` +`,0),a()),u||s("return "),e.codegenNode?Rt(e.codegenNode,n):s("null"),h&&(l(),s("}")),l(),s("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function S2(e,t){const{ssr:n,prefixIdentifiers:r,push:s,newline:i,runtimeModuleName:o,runtimeGlobalName:l,ssrRuntimeModuleName:a}=t,c=l,u=Array.from(e.helpers);if(u.length>0&&(s(`const _Vue = ${c} +`,-1),e.hoists.length)){const f=[Au,Su,co,xu,Ig].filter(p=>u.includes(p)).map(Kg).join(", ");s(`const { ${f} } = _Vue +`,-1)}x2(e.hoists,t),i(),s("return ")}function Pa(e,t,{helper:n,push:r,newline:s,isTS:i}){const o=n(t==="filter"?Du:t==="component"?Tu:Lu);for(let l=0;l3||!1;t.push("["),n&&t.indent(),fo(e,t,n),n&&t.deindent(),t.push("]")}function fo(e,t,n=!1,r=!0){const{push:s,newline:i}=t;for(let o=0;on||"null")}function F2(e,t){const{push:n,helper:r,pure:s}=t,i=ge(e.callee)?e.callee:r(e.callee);s&&n(sa),n(i+"(",-2,e),fo(e.arguments,t),n(")")}function R2(e,t){const{push:n,indent:r,deindent:s,newline:i}=t,{properties:o}=e;if(!o.length){n("{}",-2,e);return}const l=o.length>1||!1;n(l?"{":"{ "),l&&r();for(let a=0;a "),(a||l)&&(n("{"),r()),o?(a&&n("return "),se(o)?ju(o,t):Rt(o,t)):l&&Rt(l,t),(a||l)&&(s(),n("}")),c&&(e.isNonScopedSlot&&n(", undefined, true"),n(")"))}function $2(e,t){const{test:n,consequent:r,alternate:s,newline:i}=e,{push:o,indent:l,deindent:a,newline:c}=t;if(n.type===4){const f=!Uu(n.content);f&&o("("),Gg(n,t),f&&o(")")}else o("("),Rt(n,t),o(")");i&&l(),t.indentLevel++,i||o(" "),o("? "),Rt(r,t),t.indentLevel--,i&&c(),i||o(" "),o(": ");const u=s.type===19;u||t.indentLevel++,Rt(s,t),u||t.indentLevel--,i&&a(!0)}function B2(e,t){const{push:n,helper:r,indent:s,deindent:i,newline:o}=t,{needPauseTracking:l,needArraySpread:a}=e;a&&n("[...("),n(`_cache[${e.index}] || (`),l&&(s(),n(`${r(pl)}(-1`),e.inVOnce&&n(", true"),n("),"),o(),n("(")),n(`_cache[${e.index}] = `),Rt(e.value,t),l&&(n(`).cacheIndex = ${e.index},`),o(),n(`${r(pl)}(1),`),o(),n(`_cache[${e.index}]`),i()),n(")"),a&&n(")]")}new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");const z2=Wg(/^(if|else|else-if)$/,(e,t,n)=>U2(e,t,n,(r,s,i)=>{const o=n.parent.children;let l=o.indexOf(r),a=0;for(;l-->=0;){const c=o[l];c&&c.type===9&&(a+=c.branches.length)}return()=>{if(i)r.codegenNode=Sh(s,a,n);else{const c=H2(r.codegenNode);c.alternate=Sh(s,a+r.branches.length-1,n)}}}));function U2(e,t,n,r){if(t.name!=="else"&&(!t.exp||!t.exp.content.trim())){const s=t.exp?t.exp.loc:e.loc;n.onError(Qe(28,t.loc)),t.exp=_e("true",!1,s)}if(t.name==="if"){const s=Ah(e,t),i={type:9,loc:d2(e.loc),branches:[s]};if(n.replaceNode(i),r)return r(i,s,!0)}else{const s=n.parent.children;let i=s.indexOf(e);for(;i-->=-1;){const o=s[i];if(o&&o.type===3){n.removeNode(o);continue}if(o&&o.type===2&&!o.content.trim().length){n.removeNode(o);continue}if(o&&o.type===9){t.name==="else-if"&&o.branches[o.branches.length-1].condition===void 0&&n.onError(Qe(30,e.loc)),n.removeNode();const l=Ah(e,t);o.branches.push(l);const a=r&&r(o,l,!1);ra(l,n),a&&a(),n.currentNode=null}else n.onError(Qe(30,e.loc));break}}}function Ah(e,t){const n=e.tagType===3;return{type:10,loc:e.loc,condition:t.name==="else"?void 0:t.exp,children:n&&!bn(e,"for")?e.children:[e],userKey:na(e,"key"),isTemplateIf:n}}function Sh(e,t,n){return e.condition?vc(e.condition,xh(e,t,n),ft(n.helper(co),['""',"true"])):xh(e,t,n)}function xh(e,t,n){const{helper:r}=n,s=et("key",_e(`${t}`,!1,dn,2)),{children:i}=e,o=i[0];if(i.length!==1||o.type!==1)if(i.length===1&&o.type===11){const a=o.codegenNode;return _l(a,s,n),a}else{let a=64;return Hi(n,r(zi),kn([s]),i,a,void 0,void 0,!0,!1,!1,e.loc)}else{const a=o.codegenNode,c=r2(a);return c.type===13&&Bu(c,n),_l(c,s,n),a}}function H2(e){for(;;)if(e.type===19)if(e.alternate.type===19)e=e.alternate;else return e;else e.type===20&&(e=e.value)}const j2=(e,t,n)=>{const{modifiers:r,loc:s}=e,i=e.arg;let{exp:o}=e;if(o&&o.type===4&&!o.content.trim()&&(o=void 0),!o){if(i.type!==4||!i.isStatic)return n.onError(Qe(52,i.loc)),{props:[et(i,_e("",!0,s))]};Zg(e),o=e.exp}return i.type!==4?(i.children.unshift("("),i.children.push(') || ""')):i.isStatic||(i.content=`${i.content} || ""`),r.some(l=>l.content==="camel")&&(i.type===4?i.isStatic?i.content=Ze(i.content):i.content=`${n.helperString(bc)}(${i.content})`:(i.children.unshift(`${n.helperString(bc)}(`),i.children.push(")"))),n.inSSR||(r.some(l=>l.content==="prop")&&Th(i,"."),r.some(l=>l.content==="attr")&&Th(i,"^")),{props:[et(i,o)]}},Zg=(e,t)=>{const n=e.arg,r=Ze(n.content);e.exp=_e(r,!1,n.loc)},Th=(e,t)=>{e.type===4?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},V2=Wg("for",(e,t,n)=>{const{helper:r,removeHelper:s}=n;return q2(e,t,n,i=>{const o=ft(r(Ou),[i.source]),l=ml(e),a=bn(e,"memo"),c=na(e,"key",!1,!0);c&&c.type===7&&!c.exp&&Zg(c);let f=c&&(c.type===6?c.value?_e(c.value.content,!0):void 0:c.exp);const p=c&&f?et("key",f):null,h=i.source.type===4&&i.source.constType>0,d=h?64:c?128:256;return i.codegenNode=Hi(n,r(zi),void 0,o,d,void 0,void 0,!0,!h,!1,e.loc),()=>{let _;const{children:C}=i,S=C.length!==1||C[0].type!==1,b=gl(e)?e:l&&e.children.length===1&&gl(e.children[0])?e.children[0]:null;if(b?(_=b.codegenNode,l&&p&&_l(_,p,n)):S?_=Hi(n,r(zi),p?kn([p]):void 0,e.children,64,void 0,void 0,!0,void 0,!1):(_=C[0].codegenNode,l&&p&&_l(_,p,n),_.isBlock!==!h&&(_.isBlock?(s(us),s(Ws(n.inSSR,_.isComponent))):s(qs(n.inSSR,_.isComponent))),_.isBlock=!h,_.isBlock?(r(us),r(Ws(n.inSSR,_.isComponent))):r(qs(n.inSSR,_.isComponent))),a){const g=Vs(wc(i.parseResult,[_e("_cached")]));g.body=Vv([Dn(["const _memo = (",a.exp,")"]),Dn(["if (_cached",...f?[" && _cached.key === ",f]:[],` && ${n.helperString(Ng)}(_cached, _memo)) return _cached`]),Dn(["const _item = ",_]),_e("_item.memo = _memo"),_e("return _item")]),o.arguments.push(g,_e("_cache"),_e(String(n.cached.length))),n.cached.push(null)}else o.arguments.push(Vs(wc(i.parseResult),_,!0))}})});function q2(e,t,n,r){if(!t.exp){n.onError(Qe(31,t.loc));return}const s=t.forParseResult;if(!s){n.onError(Qe(32,t.loc));return}Xg(s);const{addIdentifiers:i,removeIdentifiers:o,scopes:l}=n,{source:a,value:c,key:u,index:f}=s,p={type:11,loc:t.loc,source:a,valueAlias:c,keyAlias:u,objectIndexAlias:f,parseResult:s,children:ml(e)?e.children:[e]};n.replaceNode(p),l.vFor++;const h=r&&r(p);return()=>{l.vFor--,h&&h()}}function Xg(e,t){e.finalized||(e.finalized=!0)}function wc({value:e,key:t,index:n},r=[]){return W2([e,t,n,...r])}function W2(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map((n,r)=>n||_e("_".repeat(r+1),!1))}const Ih=_e("undefined",!1),K2=(e,t)=>{if(e.type===1&&(e.tagType===1||e.tagType===3)){const n=bn(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},G2=(e,t,n,r)=>Vs(e,n,!1,!0,n.length?n[0].loc:r);function Y2(e,t,n=G2){t.helper(Mu);const{children:r,loc:s}=e,i=[],o=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const a=bn(e,"slot",!0);if(a){const{arg:C,exp:S}=a;C&&!Jt(C)&&(l=!0),i.push(et(C||_e("default",!0),n(S,void 0,r,s)))}let c=!1,u=!1;const f=[],p=new Set;let h=0;for(let C=0;C{const g=n(S,void 0,b,s);return t.compatConfig&&(g.isNonScopedSlot=!0),et("default",g)};c?f.length&&f.some(S=>Qg(S))&&(u?t.onError(Qe(39,f[0].loc)):i.push(C(void 0,f))):i.push(C(void 0,r))}const d=l?2:Vo(e.children)?3:1;let _=kn(i.concat(et("_",_e(d+"",!1))),s);return o.length&&(_=ft(t.helper(Dg),[_,is(o)])),{slots:_,hasDynamicSlots:l}}function Io(e,t,n){const r=[et("name",e),et("fn",t)];return n!=null&&r.push(et("key",_e(String(n),!0))),kn(r)}function Vo(e){for(let t=0;tfunction(){if(e=t.currentNode,!(e.type===1&&(e.tagType===0||e.tagType===1)))return;const{tag:r,props:s}=e,i=e.tagType===1;let o=i?X2(e,t):`"${r}"`;const l=ze(o)&&o.callee===Iu;let a,c,u=0,f,p,h,d=l||o===Si||o===wu||!i&&(r==="svg"||r==="foreignObject"||r==="math");if(s.length>0){const _=e0(e,t,void 0,i,l);a=_.props,u=_.patchFlag,p=_.dynamicPropNames;const C=_.directives;h=C&&C.length?is(C.map(S=>J2(S,t))):void 0,_.shouldUseBlock&&(d=!0)}if(e.children.length>0)if(o===fl&&(d=!0,u|=1024),i&&o!==Si&&o!==fl){const{slots:C,hasDynamicSlots:S}=Y2(e,t);c=C,S&&(u|=1024)}else if(e.children.length===1&&o!==Si){const C=e.children[0],S=C.type,b=S===5||S===8;b&&cn(C,t)===0&&(u|=1),b||S===2?c=C:c=e.children}else c=e.children;p&&p.length&&(f=eE(p)),e.codegenNode=Hi(t,o,a,c,u===0?void 0:u,f,h,!!d,!1,i,e.loc)};function X2(e,t,n=!1){let{tag:r}=e;const s=Ac(r),i=na(e,"is",!1,!0);if(i)if(s||os("COMPILER_IS_ON_ELEMENT",t)){let l;if(i.type===6?l=i.value&&_e(i.value.content,!0):(l=i.exp,l||(l=_e("is",!1,i.arg.loc))),l)return ft(t.helper(Iu),[l])}else i.type===6&&i.value.content.startsWith("vue:")&&(r=i.value.content.slice(4));const o=Fg(r)||t.isBuiltInComponent(r);return o?(n||t.helper(o),o):(t.helper(Tu),t.components.add(r),Vi(r,"component"))}function e0(e,t,n=e.props,r,s,i=!1){const{tag:o,loc:l,children:a}=e;let c=[];const u=[],f=[],p=a.length>0;let h=!1,d=0,_=!1,C=!1,S=!1,b=!1,g=!1,m=!1;const y=[],k=O=>{c.length&&(u.push(kn(Lh(c),l)),c=[]),O&&u.push(O)},T=()=>{t.scopes.vFor>0&&c.push(et(_e("ref_for",!0),_e("true")))},L=({key:O,value:H})=>{if(Jt(O)){const M=O.content,V=hs(M);if(V&&(!r||s)&&M.toLowerCase()!=="onclick"&&M!=="onUpdate:modelValue"&&!Or(M)&&(b=!0),V&&Or(M)&&(m=!0),V&&H.type===14&&(H=H.arguments[0]),H.type===20||(H.type===4||H.type===8)&&cn(H,t)>0)return;M==="ref"?_=!0:M==="class"?C=!0:M==="style"?S=!0:M!=="key"&&!y.includes(M)&&y.push(M),r&&(M==="class"||M==="style")&&!y.includes(M)&&y.push(M)}else g=!0};for(let O=0;Oye.content==="prop")&&(d|=32);const ue=t.directiveTransforms[M];if(ue){const{props:ye,needRuntime:ke}=ue(H,e,t);!i&&ye.forEach(L),K&&V&&!Jt(V)?k(kn(ye,l)):c.push(...ye),ke&&(f.push(H),tn(ke)&&Jg.set(H,ke))}else Q_(M)||(f.push(H),p&&(h=!0))}}let A;if(u.length?(k(),u.length>1?A=ft(t.helper(hl),u,l):A=u[0]):c.length&&(A=kn(Lh(c),l)),g?d|=16:(C&&!r&&(d|=2),S&&!r&&(d|=4),y.length&&(d|=8),b&&(d|=32)),!h&&(d===0||d===32)&&(_||m||f.length>0)&&(d|=512),!t.inSSR&&A)switch(A.type){case 15:let O=-1,H=-1,M=!1;for(let ie=0;ieet(o,i)),s))}return is(n,e.loc)}function eE(e){let t="[";for(let n=0,r=e.length;n{if(gl(e)){const{children:n,loc:r}=e,{slotName:s,slotProps:i}=nE(e,t),o=[t.prefixIdentifiers?"_ctx.$slots":"$slots",s,"{}","undefined","true"];let l=2;i&&(o[2]=i,l=3),n.length&&(o[3]=Vs([],n,!1,!1,r),l=4),t.scopeId&&!t.slotted&&(l=5),o.splice(l),e.codegenNode=ft(t.helper(Lg),o,r)}};function nE(e,t){let n='"default"',r;const s=[];for(let i=0;i0){const{props:i,directives:o}=e0(e,t,s,!1,!1);r=i,o.length&&t.onError(Qe(36,o[0].loc))}return{slotName:n,slotProps:r}}const t0=(e,t,n,r)=>{const{loc:s,modifiers:i,arg:o}=e;!e.exp&&!i.length&&n.onError(Qe(35,s));let l;if(o.type===4)if(o.isStatic){let f=o.content;f.startsWith("vue:")&&(f=`vnode-${f.slice(4)}`);const p=t.tagType!==0||f.startsWith("vnode")||!/[A-Z]/.test(f)?Fs(Ze(f)):`on:${f}`;l=_e(p,!0,o.loc)}else l=Dn([`${n.helperString(kc)}(`,o,")"]);else l=o,l.children.unshift(`${n.helperString(kc)}(`),l.children.push(")");let a=e.exp;a&&!a.content.trim()&&(a=void 0);let c=n.cacheHandlers&&!a&&!n.inVOnce;if(a){const f=Pg(a),p=!(f||Jv(a)),h=a.content.includes(";");(p||c&&f)&&(a=Dn([`${p?"$event":"(...args)"} => ${h?"{":"("}`,a,h?"}":")"]))}let u={props:[et(l,a||_e("() => {}",!1,s))]};return r&&(u=r(u)),c&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach(f=>f.key.isHandlerKey=!0),u},rE=(e,t)=>{if(e.type===0||e.type===1||e.type===11||e.type===10)return()=>{const n=e.children;let r,s=!1;for(let i=0;ii.type===7&&!t.directiveTransforms[i.name])&&e.tag!=="template")))for(let i=0;i{if(e.type===1&&bn(e,"once",!0))return Dh.has(e)||t.inVOnce||t.inSSR?void 0:(Dh.add(e),t.inVOnce=!0,t.helper(pl),()=>{t.inVOnce=!1;const n=t.currentNode;n.codegenNode&&(n.codegenNode=t.cache(n.codegenNode,!0,!0))})},n0=(e,t,n)=>{const{exp:r,arg:s}=e;if(!r)return n.onError(Qe(41,e.loc)),Lo();const i=r.loc.source.trim(),o=r.type===4?r.content:i,l=n.bindingMetadata[i];if(l==="props"||l==="props-aliased")return n.onError(Qe(44,r.loc)),Lo();if(!o.trim()||!Pg(r))return n.onError(Qe(42,r.loc)),Lo();const a=s||_e("modelValue",!0),c=s?Jt(s)?`onUpdate:${Ze(s.content)}`:Dn(['"onUpdate:" + ',s]):"onUpdate:modelValue";let u;const f=n.isTS?"($event: any)":"$event";u=Dn([`${f} => ((`,r,") = $event)"]);const p=[et(a,e.exp),et(c,u)];if(e.modifiers.length&&t.tagType===1){const h=e.modifiers.map(_=>_.content).map(_=>(Uu(_)?_:JSON.stringify(_))+": true").join(", "),d=s?Jt(s)?`${s.content}Modifiers`:Dn([s,' + "Modifiers"']):"modelModifiers";p.push(et(d,_e(`{ ${h} }`,!1,e.loc,2)))}return Lo(p)};function Lo(e=[]){return{props:e}}const iE=/[\w).+\-_$\]]/,oE=(e,t)=>{os("COMPILER_FILTERS",t)&&(e.type===5?yl(e.content,t):e.type===1&&e.props.forEach(n=>{n.type===7&&n.name!=="for"&&n.exp&&yl(n.exp,t)}))};function yl(e,t){if(e.type===4)Nh(e,t);else for(let n=0;n=0&&(b=n.charAt(S),b===" ");S--);(!b||!iE.test(b))&&(o=!0)}}d===void 0?d=n.slice(0,h).trim():u!==0&&C();function C(){_.push(n.slice(u,h).trim()),u=h+1}if(_.length){for(h=0;h<_.length;h++)d=lE(d,_[h],t);e.content=d,e.ast=void 0}}function lE(e,t,n){n.helper(Du);const r=t.indexOf("(");if(r<0)return n.filters.add(t),`${Vi(t,"filter")}(${e})`;{const s=t.slice(0,r),i=t.slice(r+1);return n.filters.add(s),`${Vi(s,"filter")}(${e}${i!==")"?","+i:i}`}}const Oh=new WeakSet,aE=(e,t)=>{if(e.type===1){const n=bn(e,"memo");return!n||Oh.has(e)?void 0:(Oh.add(e),()=>{const r=e.codegenNode||t.currentNode.codegenNode;r&&r.type===13&&(e.tagType!==1&&Bu(r,t),e.codegenNode=ft(t.helper($u),[n.exp,Vs(void 0,r),"_cache",String(t.cached.length)]),t.cached.push(null))})}};function cE(e){return[[sE,z2,aE,V2,oE,tE,Z2,K2,rE],{on:t0,bind:j2,model:n0}]}function uE(e,t={}){const n=t.onError||zu,r=t.mode==="module";t.prefixIdentifiers===!0?n(Qe(47)):r&&n(Qe(48));const s=!1;t.cacheHandlers&&n(Qe(49)),t.scopeId&&!r&&n(Qe(50));const i=we({},t,{prefixIdentifiers:s}),o=ge(e)?_2(e,i):e,[l,a]=cE();return v2(o,we({},i,{nodeTransforms:[...l,...t.nodeTransforms||[]],directiveTransforms:we({},a,t.directiveTransforms||{})})),A2(o,i)}const fE=()=>({props:[]});/** +* @vue/compiler-dom v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const r0=Symbol(""),s0=Symbol(""),i0=Symbol(""),o0=Symbol(""),Sc=Symbol(""),l0=Symbol(""),a0=Symbol(""),c0=Symbol(""),u0=Symbol(""),f0=Symbol("");Uv({[r0]:"vModelRadio",[s0]:"vModelCheckbox",[i0]:"vModelText",[o0]:"vModelSelect",[Sc]:"vModelDynamic",[l0]:"withModifiers",[a0]:"withKeys",[c0]:"vShow",[u0]:"Transition",[f0]:"TransitionGroup"});let bs;function hE(e,t=!1){return bs||(bs=document.createElement("div")),t?(bs.innerHTML=`
`,bs.children[0].getAttribute("foo")):(bs.innerHTML=e,bs.textContent)}const pE={parseMode:"html",isVoidTag:my,isNativeTag:e=>hy(e)||py(e)||dy(e),isPreTag:e=>e==="pre",isIgnoreNewlineTag:e=>e==="pre"||e==="textarea",decodeEntities:hE,isBuiltInComponent:e=>{if(e==="Transition"||e==="transition")return u0;if(e==="TransitionGroup"||e==="transition-group")return f0},getNamespace(e,t,n){let r=t?t.ns:n;if(t&&r===2)if(t.tag==="annotation-xml"){if(e==="svg")return 1;t.props.some(s=>s.type===6&&s.name==="encoding"&&s.value!=null&&(s.value.content==="text/html"||s.value.content==="application/xhtml+xml"))&&(r=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&e!=="mglyph"&&e!=="malignmark"&&(r=0);else t&&r===1&&(t.tag==="foreignObject"||t.tag==="desc"||t.tag==="title")&&(r=0);if(r===0){if(e==="svg")return 1;if(e==="math")return 2}return r}},dE=e=>{e.type===1&&e.props.forEach((t,n)=>{t.type===6&&t.name==="style"&&t.value&&(e.props[n]={type:7,name:"bind",arg:_e("style",!0,t.loc),exp:mE(t.value.content,t.loc),modifiers:[],loc:t.loc})})},mE=(e,t)=>{const n=Td(e);return _e(JSON.stringify(n),!1,t,3)};function Pr(e,t){return Qe(e,t)}const gE=(e,t,n)=>{const{exp:r,loc:s}=e;return r||n.onError(Pr(53,s)),t.children.length&&(n.onError(Pr(54,s)),t.children.length=0),{props:[et(_e("innerHTML",!0,s),r||_e("",!0))]}},_E=(e,t,n)=>{const{exp:r,loc:s}=e;return r||n.onError(Pr(55,s)),t.children.length&&(n.onError(Pr(56,s)),t.children.length=0),{props:[et(_e("textContent",!0),r?cn(r,n)>0?r:ft(n.helperString(ta),[r],s):_e("",!0))]}},yE=(e,t,n)=>{const r=n0(e,t,n);if(!r.props.length||t.tagType===1)return r;e.arg&&n.onError(Pr(58,e.arg.loc));const{tag:s}=t,i=n.isCustomElement(s);if(s==="input"||s==="textarea"||s==="select"||i){let o=i0,l=!1;if(s==="input"||i){const a=na(t,"type");if(a){if(a.type===7)o=Sc;else if(a.value)switch(a.value.content){case"radio":o=r0;break;case"checkbox":o=s0;break;case"file":l=!0,n.onError(Pr(59,e.loc));break}}else e2(t)&&(o=Sc)}else s==="select"&&(o=o0);l||(r.needRuntime=n.helper(o))}else n.onError(Pr(57,e.loc));return r.props=r.props.filter(o=>!(o.key.type===4&&o.key.content==="modelValue")),r},bE=pn("passive,once,capture"),kE=pn("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),vE=pn("left,right"),h0=pn("onkeyup,onkeydown,onkeypress"),EE=(e,t,n,r)=>{const s=[],i=[],o=[];for(let l=0;lJt(e)&&e.content.toLowerCase()==="onclick"?_e(t,!0):e.type!==4?Dn(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,CE=(e,t,n)=>t0(e,t,n,r=>{const{modifiers:s}=e;if(!s.length)return r;let{key:i,value:o}=r.props[0];const{keyModifiers:l,nonKeyModifiers:a,eventOptionModifiers:c}=EE(i,s,n,e.loc);if(a.includes("right")&&(i=Fh(i,"onContextmenu")),a.includes("middle")&&(i=Fh(i,"onMouseup")),a.length&&(o=ft(n.helper(l0),[o,JSON.stringify(a)])),l.length&&(!Jt(i)||h0(i.content.toLowerCase()))&&(o=ft(n.helper(a0),[o,JSON.stringify(l)])),c.length){const u=c.map(ds).join("");i=Jt(i)?_e(`${i.content}${u}`,!0):Dn(["(",i,`) + "${u}"`])}return{props:[et(i,o)]}}),wE=(e,t,n)=>{const{exp:r,loc:s}=e;return r||n.onError(Pr(61,s)),{props:[],needRuntime:n.helper(c0)}},AE=(e,t)=>{e.type===1&&e.tagType===0&&(e.tag==="script"||e.tag==="style")&&t.removeNode()},SE=[dE],xE={cloak:fE,html:gE,text:_E,model:yE,on:CE,show:wE};function TE(e,t={}){return uE(e,we({},pE,t,{nodeTransforms:[AE,...SE,...t.nodeTransforms||[]],directiveTransforms:we({},xE,t.directiveTransforms||{}),transformHoist:null}))}/** +* vue v3.5.16 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Rh=Object.create(null);function IE(e,t){if(!ge(e))if(e.nodeType)e=e.innerHTML;else return kt;const n=ty(e,t),r=Rh[n];if(r)return r;if(e[0]==="#"){const l=document.querySelector(e);e=l?l.innerHTML:""}const s=we({hoistStatic:!0,onError:void 0,onWarn:kt},t);!s.isCustomElement&&typeof customElements<"u"&&(s.isCustomElement=l=>!!customElements.get(l));const{code:i}=TE(e,s),o=new Function("Vue",i)(Rv);return o._rc=!0,Rh[n]=o}Jm(IE);/*! + * vue-router v4.5.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const As=typeof document<"u";function p0(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function LE(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&p0(e.default)}const Re=Object.assign;function Ma(e,t){const n={};for(const r in t){const s=t[r];n[r]=Nn(s)?s.map(e):e(s)}return n}const xi=()=>{},Nn=Array.isArray,d0=/#/g,DE=/&/g,NE=/\//g,OE=/=/g,FE=/\?/g,m0=/\+/g,RE=/%5B/g,PE=/%5D/g,g0=/%5E/g,ME=/%60/g,_0=/%7B/g,$E=/%7C/g,y0=/%7D/g,BE=/%20/g;function Vu(e){return encodeURI(""+e).replace($E,"|").replace(RE,"[").replace(PE,"]")}function zE(e){return Vu(e).replace(_0,"{").replace(y0,"}").replace(g0,"^")}function xc(e){return Vu(e).replace(m0,"%2B").replace(BE,"+").replace(d0,"%23").replace(DE,"%26").replace(ME,"`").replace(_0,"{").replace(y0,"}").replace(g0,"^")}function UE(e){return xc(e).replace(OE,"%3D")}function HE(e){return Vu(e).replace(d0,"%23").replace(FE,"%3F")}function jE(e){return e==null?"":HE(e).replace(NE,"%2F")}function Wi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const VE=/\/$/,qE=e=>e.replace(VE,"");function $a(e,t,n="/"){let r,s={},i="",o="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),i=t.slice(a+1,l>-1?l:t.length),s=e(i)),l>-1&&(r=r||t.slice(0,l),o=t.slice(l,t.length)),r=YE(r??t,n),{fullPath:r+(i&&"?")+i+o,path:r,query:s,hash:Wi(o)}}function WE(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ph(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function KE(e,t,n){const r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&Ks(t.matched[r],n.matched[s])&&b0(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Ks(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function b0(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!GE(e[n],t[n]))return!1;return!0}function GE(e,t){return Nn(e)?Mh(e,t):Nn(t)?Mh(t,e):e===t}function Mh(e,t){return Nn(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function YE(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(o).join("/")}const vr={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Ki;(function(e){e.pop="pop",e.push="push"})(Ki||(Ki={}));var Ti;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ti||(Ti={}));function ZE(e){if(!e)if(As){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),qE(e)}const XE=/^[^#]+#/;function QE(e,t){return e.replace(XE,"#")+t}function JE(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const ia=()=>({left:window.scrollX,top:window.scrollY});function eC(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=JE(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function $h(e,t){return(history.state?history.state.position-t:-1)+e}const Tc=new Map;function tC(e,t){Tc.set(e,t)}function nC(e){const t=Tc.get(e);return Tc.delete(e),t}let rC=()=>location.protocol+"//"+location.host;function k0(e,t){const{pathname:n,search:r,hash:s}=t,i=e.indexOf("#");if(i>-1){let l=s.includes(e.slice(i))?e.slice(i).length:1,a=s.slice(l);return a[0]!=="/"&&(a="/"+a),Ph(a,"")}return Ph(n,e)+r+s}function sC(e,t,n,r){let s=[],i=[],o=null;const l=({state:p})=>{const h=k0(e,location),d=n.value,_=t.value;let C=0;if(p){if(n.value=h,t.value=p,o&&o===d){o=null;return}C=_?p.position-_.position:0}else r(h);s.forEach(S=>{S(n.value,d,{delta:C,type:Ki.pop,direction:C?C>0?Ti.forward:Ti.back:Ti.unknown})})};function a(){o=n.value}function c(p){s.push(p);const h=()=>{const d=s.indexOf(p);d>-1&&s.splice(d,1)};return i.push(h),h}function u(){const{history:p}=window;p.state&&p.replaceState(Re({},p.state,{scroll:ia()}),"")}function f(){for(const p of i)p();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:f}}function Bh(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?ia():null}}function iC(e){const{history:t,location:n}=window,r={value:k0(e,n)},s={value:t.state};s.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(a,c,u){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:rC()+e+a;try{t[u?"replaceState":"pushState"](c,"",p),s.value=c}catch(h){console.error(h),n[u?"replace":"assign"](p)}}function o(a,c){const u=Re({},t.state,Bh(s.value.back,a,s.value.forward,!0),c,{position:s.value.position});i(a,u,!0),r.value=a}function l(a,c){const u=Re({},s.value,t.state,{forward:a,scroll:ia()});i(u.current,u,!0);const f=Re({},Bh(r.value,a,null),{position:u.position+1},c);i(a,f,!1),r.value=a}return{location:r,state:s,push:l,replace:o}}function oC(e){e=ZE(e);const t=iC(e),n=sC(e,t.state,t.location,t.replace);function r(i,o=!0){o||n.pauseListeners(),history.go(i)}const s=Re({location:"",base:e,go:r,createHref:QE.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function lC(e){return typeof e=="string"||e&&typeof e=="object"}function v0(e){return typeof e=="string"||typeof e=="symbol"}const E0=Symbol("");var zh;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(zh||(zh={}));function Gs(e,t){return Re(new Error,{type:e,[E0]:!0},t)}function Xn(e,t){return e instanceof Error&&E0 in e&&(t==null||!!(e.type&t))}const Uh="[^/]+?",aC={sensitive:!1,strict:!1,start:!0,end:!0},cC=/[.+*?^${}()[\]/\\]/g;function uC(e,t){const n=Re({},aC,t),r=[];let s=n.start?"^":"";const i=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(s+="/");for(let f=0;ft.length?t.length===1&&t[0]===40+40?1:-1:0}function C0(e,t){let n=0;const r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const hC={type:0,value:""},pC=/[a-zA-Z0-9_]/;function dC(e){if(!e)return[[]];if(e==="/")return[[hC]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=0,r=n;const s=[];let i;function o(){i&&s.push(i),i=[]}let l=0,a,c="",u="";function f(){c&&(n===0?i.push({type:0,value:c}):n===1||n===2||n===3?(i.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=a}for(;l{o(g)}:xi}function o(f){if(v0(f)){const p=r.get(f);p&&(r.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(o),p.alias.forEach(o))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&r.delete(f.record.name),f.children.forEach(o),f.alias.forEach(o))}}function l(){return n}function a(f){const p=bC(f,n);n.splice(p,0,f),f.record.name&&!qh(f)&&r.set(f.record.name,f)}function c(f,p){let h,d={},_,C;if("name"in f&&f.name){if(h=r.get(f.name),!h)throw Gs(1,{location:f});C=h.record.name,d=Re(jh(p.params,h.keys.filter(g=>!g.optional).concat(h.parent?h.parent.keys.filter(g=>g.optional):[]).map(g=>g.name)),f.params&&jh(f.params,h.keys.map(g=>g.name))),_=h.stringify(d)}else if(f.path!=null)_=f.path,h=n.find(g=>g.re.test(_)),h&&(d=h.parse(_),C=h.record.name);else{if(h=p.name?r.get(p.name):n.find(g=>g.re.test(p.path)),!h)throw Gs(1,{location:f,currentLocation:p});C=h.record.name,d=Re({},p.params,f.params),_=h.stringify(d)}const S=[];let b=h;for(;b;)S.unshift(b.record),b=b.parent;return{name:C,path:_,params:d,matched:S,meta:yC(S)}}e.forEach(f=>i(f));function u(){n.length=0,r.clear()}return{addRoute:i,resolve:c,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:s}}function jh(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Vh(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:_C(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function _C(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function qh(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function yC(e){return e.reduce((t,n)=>Re(t,n.meta),{})}function Wh(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function bC(e,t){let n=0,r=t.length;for(;n!==r;){const i=n+r>>1;C0(e,t[i])<0?r=i:n=i+1}const s=kC(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function kC(e){let t=e;for(;t=t.parent;)if(w0(t)&&C0(e,t)===0)return t}function w0({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function vC(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;si&&xc(i)):[r&&xc(r)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function EC(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Nn(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}const CC=Symbol(""),Gh=Symbol(""),oa=Symbol(""),qu=Symbol(""),Ic=Symbol("");function fi(){let e=[];function t(r){return e.push(r),()=>{const s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ir(e,t,n,r,s,i=o=>o()){const o=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((l,a)=>{const c=p=>{p===!1?a(Gs(4,{from:n,to:t})):p instanceof Error?a(p):lC(p)?a(Gs(2,{from:t,to:p})):(o&&r.enterCallbacks[s]===o&&typeof p=="function"&&o.push(p),l())},u=i(()=>e.call(r&&r.instances[s],t,n,c));let f=Promise.resolve(u);e.length<3&&(f=f.then(c)),f.catch(p=>a(p))})}function Ba(e,t,n,r,s=i=>i()){const i=[];for(const o of e)for(const l in o.components){let a=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(p0(a)){const u=(a.__vccOpts||a)[t];u&&i.push(Ir(u,n,r,o,l,s))}else{let c=a();i.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const f=LE(u)?u.default:u;o.mods[l]=u,o.components[l]=f;const h=(f.__vccOpts||f)[t];return h&&Ir(h,n,r,o,l,s)()}))}}return i}function Yh(e){const t=tt(oa),n=tt(qu),r=pe(()=>{const a=Q(e.to);return t.resolve(a)}),s=pe(()=>{const{matched:a}=r.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const p=f.findIndex(Ks.bind(null,u));if(p>-1)return p;const h=Zh(a[c-2]);return c>1&&Zh(u)===h&&f[f.length-1].path!==h?f.findIndex(Ks.bind(null,a[c-2])):p}),i=pe(()=>s.value>-1&&TC(n.params,r.value.params)),o=pe(()=>s.value>-1&&s.value===n.matched.length-1&&b0(n.params,r.value.params));function l(a={}){if(xC(a)){const c=t[Q(e.replace)?"replace":"push"](Q(e.to)).catch(xi);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:r,href:pe(()=>r.value.href),isActive:i,isExactActive:o,navigate:l}}function wC(e){return e.length===1?e[0]:e}const AC=Cn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Yh,setup(e,{slots:t}){const n=Ht(Yh(e)),{options:r}=tt(oa),s=pe(()=>({[Xh(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Xh(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&wC(t.default(n));return e.custom?i:Dt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},i)}}}),SC=AC;function xC(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function TC(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!Nn(s)||s.length!==r.length||r.some((i,o)=>i!==s[o]))return!1}return!0}function Zh(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Xh=(e,t,n)=>e??t??n,IC=Cn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=tt(Ic),s=pe(()=>e.route||r.value),i=tt(Gh,0),o=pe(()=>{let c=Q(i);const{matched:u}=s.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=pe(()=>s.value.matched[o.value]);rs(Gh,pe(()=>o.value+1)),rs(CC,l),rs(Ic,s);const a=te();return At(()=>[a.value,l.value,e.name],([c,u,f],[p,h,d])=>{u&&(u.instances[f]=c,h&&h!==u&&c&&c===p&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),c&&u&&(!h||!Ks(u,h)||!p)&&(u.enterCallbacks[f]||[]).forEach(_=>_(c))},{flush:"post"}),()=>{const c=s.value,u=e.name,f=l.value,p=f&&f.components[u];if(!p)return Qh(n.default,{Component:p,route:c});const h=f.props[u],d=h?h===!0?c.params:typeof h=="function"?h(c):h:null,C=Dt(p,Re({},d,t,{onVnodeUnmounted:S=>{S.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Qh(n.default,{Component:C,route:c})||C}}});function Qh(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const LC=IC;function DC(e){const t=gC(e.routes,e),n=e.parseQuery||vC,r=e.stringifyQuery||Kh,s=e.history,i=fi(),o=fi(),l=fi(),a=io(vr);let c=vr;As&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Ma.bind(null,j=>""+j),f=Ma.bind(null,jE),p=Ma.bind(null,Wi);function h(j,ne){let J,le;return v0(j)?(J=t.getRecordMatcher(j),le=ne):le=j,t.addRoute(le,J)}function d(j){const ne=t.getRecordMatcher(j);ne&&t.removeRoute(ne)}function _(){return t.getRoutes().map(j=>j.record)}function C(j){return!!t.getRecordMatcher(j)}function S(j,ne){if(ne=Re({},ne||a.value),typeof j=="string"){const v=$a(n,j,ne.path),R=t.resolve({path:v.path},ne),F=s.createHref(v.fullPath);return Re(v,R,{params:p(R.params),hash:Wi(v.hash),redirectedFrom:void 0,href:F})}let J;if(j.path!=null)J=Re({},j,{path:$a(n,j.path,ne.path).path});else{const v=Re({},j.params);for(const R in v)v[R]==null&&delete v[R];J=Re({},j,{params:f(v)}),ne.params=f(ne.params)}const le=t.resolve(J,ne),be=j.hash||"";le.params=u(p(le.params));const De=WE(r,Re({},j,{hash:zE(be),path:le.path})),x=s.createHref(De);return Re({fullPath:De,hash:be,query:r===Kh?EC(j.query):j.query||{}},le,{redirectedFrom:void 0,href:x})}function b(j){return typeof j=="string"?$a(n,j,a.value.path):Re({},j)}function g(j,ne){if(c!==j)return Gs(8,{from:ne,to:j})}function m(j){return T(j)}function y(j){return m(Re(b(j),{replace:!0}))}function k(j){const ne=j.matched[j.matched.length-1];if(ne&&ne.redirect){const{redirect:J}=ne;let le=typeof J=="function"?J(j):J;return typeof le=="string"&&(le=le.includes("?")||le.includes("#")?le=b(le):{path:le},le.params={}),Re({query:j.query,hash:j.hash,params:le.path!=null?{}:j.params},le)}}function T(j,ne){const J=c=S(j),le=a.value,be=j.state,De=j.force,x=j.replace===!0,v=k(J);if(v)return T(Re(b(v),{state:typeof v=="object"?Re({},be,v.state):be,force:De,replace:x}),ne||J);const R=J;R.redirectedFrom=ne;let F;return!De&&KE(r,le,J)&&(F=Gs(16,{to:R,from:le}),ke(le,le,!0,!1)),(F?Promise.resolve(F):O(R,le)).catch(P=>Xn(P)?Xn(P,2)?P:ye(P):K(P,R,le)).then(P=>{if(P){if(Xn(P,2))return T(Re({replace:x},b(P.to),{state:typeof P.to=="object"?Re({},be,P.to.state):be,force:De}),ne||R)}else P=M(R,le,!0,x,be);return H(R,le,P),P})}function L(j,ne){const J=g(j,ne);return J?Promise.reject(J):Promise.resolve()}function A(j){const ne=Bt.values().next().value;return ne&&typeof ne.runWithContext=="function"?ne.runWithContext(j):j()}function O(j,ne){let J;const[le,be,De]=NC(j,ne);J=Ba(le.reverse(),"beforeRouteLeave",j,ne);for(const v of le)v.leaveGuards.forEach(R=>{J.push(Ir(R,j,ne))});const x=L.bind(null,j,ne);return J.push(x),it(J).then(()=>{J=[];for(const v of i.list())J.push(Ir(v,j,ne));return J.push(x),it(J)}).then(()=>{J=Ba(be,"beforeRouteUpdate",j,ne);for(const v of be)v.updateGuards.forEach(R=>{J.push(Ir(R,j,ne))});return J.push(x),it(J)}).then(()=>{J=[];for(const v of De)if(v.beforeEnter)if(Nn(v.beforeEnter))for(const R of v.beforeEnter)J.push(Ir(R,j,ne));else J.push(Ir(v.beforeEnter,j,ne));return J.push(x),it(J)}).then(()=>(j.matched.forEach(v=>v.enterCallbacks={}),J=Ba(De,"beforeRouteEnter",j,ne,A),J.push(x),it(J))).then(()=>{J=[];for(const v of o.list())J.push(Ir(v,j,ne));return J.push(x),it(J)}).catch(v=>Xn(v,8)?v:Promise.reject(v))}function H(j,ne,J){l.list().forEach(le=>A(()=>le(j,ne,J)))}function M(j,ne,J,le,be){const De=g(j,ne);if(De)return De;const x=ne===vr,v=As?history.state:{};J&&(le||x?s.replace(j.fullPath,Re({scroll:x&&v&&v.scroll},be)):s.push(j.fullPath,be)),a.value=j,ke(j,ne,J,x),ye()}let V;function oe(){V||(V=s.listen((j,ne,J)=>{if(!gn.listening)return;const le=S(j),be=k(le);if(be){T(Re(be,{replace:!0,force:!0}),le).catch(xi);return}c=le;const De=a.value;As&&tC($h(De.fullPath,J.delta),ia()),O(le,De).catch(x=>Xn(x,12)?x:Xn(x,2)?(T(Re(b(x.to),{force:!0}),le).then(v=>{Xn(v,20)&&!J.delta&&J.type===Ki.pop&&s.go(-1,!1)}).catch(xi),Promise.reject()):(J.delta&&s.go(-J.delta,!1),K(x,le,De))).then(x=>{x=x||M(le,De,!1),x&&(J.delta&&!Xn(x,8)?s.go(-J.delta,!1):J.type===Ki.pop&&Xn(x,20)&&s.go(-1,!1)),H(le,De,x)}).catch(xi)}))}let ie=fi(),Z=fi(),G;function K(j,ne,J){ye(j);const le=Z.list();return le.length?le.forEach(be=>be(j,ne,J)):console.error(j),Promise.reject(j)}function ue(){return G&&a.value!==vr?Promise.resolve():new Promise((j,ne)=>{ie.add([j,ne])})}function ye(j){return G||(G=!j,oe(),ie.list().forEach(([ne,J])=>j?J(j):ne()),ie.reset()),j}function ke(j,ne,J,le){const{scrollBehavior:be}=e;if(!As||!be)return Promise.resolve();const De=!J&&nC($h(j.fullPath,0))||(le||!J)&&history.state&&history.state.scroll||null;return qn().then(()=>be(j,ne,De)).then(x=>x&&eC(x)).catch(x=>K(x,j,ne))}const He=j=>s.go(j);let Wt;const Bt=new Set,gn={currentRoute:a,listening:!0,addRoute:h,removeRoute:d,clearRoutes:t.clearRoutes,hasRoute:C,getRoutes:_,resolve:S,options:e,push:m,replace:y,go:He,back:()=>He(-1),forward:()=>He(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:Z.add,isReady:ue,install(j){const ne=this;j.component("RouterLink",SC),j.component("RouterView",LC),j.config.globalProperties.$router=ne,Object.defineProperty(j.config.globalProperties,"$route",{enumerable:!0,get:()=>Q(a)}),As&&!Wt&&a.value===vr&&(Wt=!0,m(s.location).catch(be=>{}));const J={};for(const be in vr)Object.defineProperty(J,be,{get:()=>a.value[be],enumerable:!0});j.provide(oa,ne),j.provide(qu,ou(J)),j.provide(Ic,a);const le=j.unmount;Bt.add(j),j.unmount=function(){Bt.delete(j),Bt.size<1&&(c=vr,V&&V(),V=null,a.value=vr,Wt=!1,G=!1),le()}}};function it(j){return j.reduce((ne,J)=>ne.then(()=>A(J)),Promise.resolve())}return gn}function NC(e,t){const n=[],r=[],s=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oKs(c,l))?r.push(l):n.push(l));const a=e.matched[o];a&&(t.matched.find(c=>Ks(c,a))||s.push(a))}return[n,r,s]}function la(){return tt(oa)}function ri(e){return tt(qu)}const OC="modulepreload",FC=function(e){return"/"+e},Jh={},A0=function(t,n,r){if(!n||n.length===0)return t();const s=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=FC(i),i in Jh)return;Jh[i]=!0;const o=i.endsWith(".css"),l=o?'[rel="stylesheet"]':"";if(!!r)for(let u=s.length-1;u>=0;u--){const f=s[u];if(f.href===i&&(!o||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const c=document.createElement("link");if(c.rel=o?"stylesheet":OC,o||(c.as="script",c.crossOrigin=""),c.href=i,document.head.appendChild(c),o)return new Promise((u,f)=>{c.addEventListener("load",u),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})};var RC=Object.defineProperty,PC=(e,t,n)=>t in e?RC(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,qe=(e,t,n)=>PC(e,typeof t!="symbol"?t+"":t,n);/*! + * shared v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */const bl=typeof window<"u",Vr=(e,t=!1)=>t?Symbol.for(e):Symbol(e),MC=(e,t,n)=>$C({l:e,k:t,s:n}),$C=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),st=e=>typeof e=="number"&&isFinite(e),BC=e=>x0(e)==="[object Date]",Ur=e=>x0(e)==="[object RegExp]",aa=e=>me(e)&&Object.keys(e).length===0,St=Object.assign,zC=Object.create,Ue=(e=null)=>zC(e);let ep;const or=()=>ep||(ep=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Ue());function tp(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const UC=Object.prototype.hasOwnProperty;function Tn(e,t){return UC.call(e,t)}const Ye=Array.isArray,Ke=e=>typeof e=="function",re=e=>typeof e=="string",ve=e=>typeof e=="boolean",Ne=e=>e!==null&&typeof e=="object",HC=e=>Ne(e)&&Ke(e.then)&&Ke(e.catch),S0=Object.prototype.toString,x0=e=>S0.call(e),me=e=>{if(!Ne(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object},jC=e=>e==null?"":Ye(e)||me(e)&&e.toString===S0?JSON.stringify(e,null,2):String(e);function VC(e,t=""){return e.reduce((n,r,s)=>s===0?n+r:n+t+r,"")}function ca(e){let t=e;return()=>++t}function qC(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const Do=e=>!Ne(e)||Ye(e);function qo(e,t){if(Do(e)||Do(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:r,des:s}=n.pop();Object.keys(r).forEach(i=>{i!=="__proto__"&&(Ne(r[i])&&!Ne(s[i])&&(s[i]=Array.isArray(r[i])?[]:Ue()),Do(s[i])||Do(r[i])?s[i]=r[i]:n.push({src:r[i],des:s[i]}))})}}/*! + * message-compiler v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function WC(e,t,n){return{line:e,column:t,offset:n}}function kl(e,t,n){return{start:e,end:t}}const KC=/\{([0-9a-zA-Z]+)\}/g;function T0(e,...t){return t.length===1&&GC(t[0])&&(t=t[0]),(!t||!t.hasOwnProperty)&&(t={}),e.replace(KC,(n,r)=>t.hasOwnProperty(r)?t[r]:"")}const I0=Object.assign,np=e=>typeof e=="string",GC=e=>e!==null&&typeof e=="object";function L0(e,t=""){return e.reduce((n,r,s)=>s===0?n+r:n+t+r,"")}const Wu={USE_MODULO_SYNTAX:1,__EXTEND_POINT__:2},YC={[Wu.USE_MODULO_SYNTAX]:"Use modulo before '{{0}}'."};function ZC(e,t,...n){const r=T0(YC[e],...n||[]),s={message:String(r),code:e};return t&&(s.location=t),s}const he={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},XC={[he.EXPECTED_TOKEN]:"Expected token: '{0}'",[he.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[he.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[he.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[he.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[he.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[he.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[he.EMPTY_PLACEHOLDER]:"Empty placeholder",[he.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[he.INVALID_LINKED_FORMAT]:"Invalid linked format",[he.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[he.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[he.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[he.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[he.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[he.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function si(e,t,n={}){const{domain:r,messages:s,args:i}=n,o=T0((s||XC)[e]||"",...i||[]),l=new SyntaxError(String(o));return l.code=e,t&&(l.location=t),l.domain=r,l}function QC(e){throw e}const Qn=" ",JC="\r",Yt=` +`,ew="\u2028",tw="\u2029";function nw(e){const t=e;let n=0,r=1,s=1,i=0;const o=T=>t[T]===JC&&t[T+1]===Yt,l=T=>t[T]===Yt,a=T=>t[T]===tw,c=T=>t[T]===ew,u=T=>o(T)||l(T)||a(T)||c(T),f=()=>n,p=()=>r,h=()=>s,d=()=>i,_=T=>o(T)||a(T)||c(T)?Yt:t[T],C=()=>_(n),S=()=>_(n+i);function b(){return i=0,u(n)&&(r++,s=0),o(n)&&n++,n++,s++,t[n]}function g(){return o(n+i)&&i++,i++,t[n+i]}function m(){n=0,r=1,s=1,i=0}function y(T=0){i=T}function k(){const T=n+i;for(;T!==n;)b();i=0}return{index:f,line:p,column:h,peekOffset:d,charAt:_,currentChar:C,currentPeek:S,next:b,peek:g,reset:m,resetPeek:y,skipToPeek:k}}const Er=void 0,rp="'",rw="tokenizer";function sw(e,t={}){const n=t.location!==!1,r=nw(e),s=()=>r.index(),i=()=>WC(r.line(),r.column(),r.index()),o=i(),l=s(),a={currentType:14,offset:l,startLoc:o,endLoc:o,lastType:14,lastOffset:l,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:""},c=()=>a,{onError:u}=t;function f(E,w,N,...z){const D=c();if(w.column+=N,w.offset+=N,u){const $=n?kl(D.startLoc,w):null,ee=si(E,$,{domain:rw,args:z});u(ee)}}function p(E,w,N){E.endLoc=i(),E.currentType=w;const z={type:w};return n&&(z.loc=kl(E.startLoc,E.endLoc)),N!=null&&(z.value=N),z}const h=E=>p(E,14);function d(E,w){return E.currentChar()===w?(E.next(),w):(f(he.EXPECTED_TOKEN,i(),0,w),"")}function _(E){let w="";for(;E.currentPeek()===Qn||E.currentPeek()===Yt;)w+=E.currentPeek(),E.peek();return w}function C(E){const w=_(E);return E.skipToPeek(),w}function S(E){if(E===Er)return!1;const w=E.charCodeAt(0);return w>=97&&w<=122||w>=65&&w<=90||w===95}function b(E){if(E===Er)return!1;const w=E.charCodeAt(0);return w>=48&&w<=57}function g(E,w){const{currentType:N}=w;if(N!==2)return!1;_(E);const z=S(E.currentPeek());return E.resetPeek(),z}function m(E,w){const{currentType:N}=w;if(N!==2)return!1;_(E);const z=E.currentPeek()==="-"?E.peek():E.currentPeek(),D=b(z);return E.resetPeek(),D}function y(E,w){const{currentType:N}=w;if(N!==2)return!1;_(E);const z=E.currentPeek()===rp;return E.resetPeek(),z}function k(E,w){const{currentType:N}=w;if(N!==8)return!1;_(E);const z=E.currentPeek()===".";return E.resetPeek(),z}function T(E,w){const{currentType:N}=w;if(N!==9)return!1;_(E);const z=S(E.currentPeek());return E.resetPeek(),z}function L(E,w){const{currentType:N}=w;if(!(N===8||N===12))return!1;_(E);const z=E.currentPeek()===":";return E.resetPeek(),z}function A(E,w){const{currentType:N}=w;if(N!==10)return!1;const z=()=>{const $=E.currentPeek();return $==="{"?S(E.peek()):$==="@"||$==="%"||$==="|"||$===":"||$==="."||$===Qn||!$?!1:$===Yt?(E.peek(),z()):M(E,!1)},D=z();return E.resetPeek(),D}function O(E){_(E);const w=E.currentPeek()==="|";return E.resetPeek(),w}function H(E){const w=_(E),N=E.currentPeek()==="%"&&E.peek()==="{";return E.resetPeek(),{isModulo:N,hasSpace:w.length>0}}function M(E,w=!0){const N=(D=!1,$="",ee=!1)=>{const ae=E.currentPeek();return ae==="{"?$==="%"?!1:D:ae==="@"||!ae?$==="%"?!0:D:ae==="%"?(E.peek(),N(D,"%",!0)):ae==="|"?$==="%"||ee?!0:!($===Qn||$===Yt):ae===Qn?(E.peek(),N(!0,Qn,ee)):ae===Yt?(E.peek(),N(!0,Yt,ee)):!0},z=N();return w&&E.resetPeek(),z}function V(E,w){const N=E.currentChar();return N===Er?Er:w(N)?(E.next(),N):null}function oe(E){const w=E.charCodeAt(0);return w>=97&&w<=122||w>=65&&w<=90||w>=48&&w<=57||w===95||w===36}function ie(E){return V(E,oe)}function Z(E){const w=E.charCodeAt(0);return w>=97&&w<=122||w>=65&&w<=90||w>=48&&w<=57||w===95||w===36||w===45}function G(E){return V(E,Z)}function K(E){const w=E.charCodeAt(0);return w>=48&&w<=57}function ue(E){return V(E,K)}function ye(E){const w=E.charCodeAt(0);return w>=48&&w<=57||w>=65&&w<=70||w>=97&&w<=102}function ke(E){return V(E,ye)}function He(E){let w="",N="";for(;w=ue(E);)N+=w;return N}function Wt(E){C(E);const w=E.currentChar();return w!=="%"&&f(he.EXPECTED_TOKEN,i(),0,w),E.next(),"%"}function Bt(E){let w="";for(;;){const N=E.currentChar();if(N==="{"||N==="}"||N==="@"||N==="|"||!N)break;if(N==="%")if(M(E))w+=N,E.next();else break;else if(N===Qn||N===Yt)if(M(E))w+=N,E.next();else{if(O(E))break;w+=N,E.next()}else w+=N,E.next()}return w}function gn(E){C(E);let w="",N="";for(;w=G(E);)N+=w;return E.currentChar()===Er&&f(he.UNTERMINATED_CLOSING_BRACE,i(),0),N}function it(E){C(E);let w="";return E.currentChar()==="-"?(E.next(),w+=`-${He(E)}`):w+=He(E),E.currentChar()===Er&&f(he.UNTERMINATED_CLOSING_BRACE,i(),0),w}function j(E){return E!==rp&&E!==Yt}function ne(E){C(E),d(E,"'");let w="",N="";for(;w=V(E,j);)w==="\\"?N+=J(E):N+=w;const z=E.currentChar();return z===Yt||z===Er?(f(he.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,i(),0),z===Yt&&(E.next(),d(E,"'")),N):(d(E,"'"),N)}function J(E){const w=E.currentChar();switch(w){case"\\":case"'":return E.next(),`\\${w}`;case"u":return le(E,w,4);case"U":return le(E,w,6);default:return f(he.UNKNOWN_ESCAPE_SEQUENCE,i(),0,w),""}}function le(E,w,N){d(E,w);let z="";for(let D=0;D{const z=E.currentChar();return z==="{"||z==="%"||z==="@"||z==="|"||z==="("||z===")"||!z||z===Qn?N:(N+=z,E.next(),w(N))};return w("")}function R(E){C(E);const w=d(E,"|");return C(E),w}function F(E,w){let N=null;switch(E.currentChar()){case"{":return w.braceNest>=1&&f(he.NOT_ALLOW_NEST_PLACEHOLDER,i(),0),E.next(),N=p(w,2,"{"),C(E),w.braceNest++,N;case"}":return w.braceNest>0&&w.currentType===2&&f(he.EMPTY_PLACEHOLDER,i(),0),E.next(),N=p(w,3,"}"),w.braceNest--,w.braceNest>0&&C(E),w.inLinked&&w.braceNest===0&&(w.inLinked=!1),N;case"@":return w.braceNest>0&&f(he.UNTERMINATED_CLOSING_BRACE,i(),0),N=P(E,w)||h(w),w.braceNest=0,N;default:{let z=!0,D=!0,$=!0;if(O(E))return w.braceNest>0&&f(he.UNTERMINATED_CLOSING_BRACE,i(),0),N=p(w,1,R(E)),w.braceNest=0,w.inLinked=!1,N;if(w.braceNest>0&&(w.currentType===5||w.currentType===6||w.currentType===7))return f(he.UNTERMINATED_CLOSING_BRACE,i(),0),w.braceNest=0,U(E,w);if(z=g(E,w))return N=p(w,5,gn(E)),C(E),N;if(D=m(E,w))return N=p(w,6,it(E)),C(E),N;if($=y(E,w))return N=p(w,7,ne(E)),C(E),N;if(!z&&!D&&!$)return N=p(w,13,De(E)),f(he.INVALID_TOKEN_IN_PLACEHOLDER,i(),0,N.value),C(E),N;break}}return N}function P(E,w){const{currentType:N}=w;let z=null;const D=E.currentChar();switch((N===8||N===9||N===12||N===10)&&(D===Yt||D===Qn)&&f(he.INVALID_LINKED_FORMAT,i(),0),D){case"@":return E.next(),z=p(w,8,"@"),w.inLinked=!0,z;case".":return C(E),E.next(),p(w,9,".");case":":return C(E),E.next(),p(w,10,":");default:return O(E)?(z=p(w,1,R(E)),w.braceNest=0,w.inLinked=!1,z):k(E,w)||L(E,w)?(C(E),P(E,w)):T(E,w)?(C(E),p(w,12,x(E))):A(E,w)?(C(E),D==="{"?F(E,w)||z:p(w,11,v(E))):(N===8&&f(he.INVALID_LINKED_FORMAT,i(),0),w.braceNest=0,w.inLinked=!1,U(E,w))}}function U(E,w){let N={type:14};if(w.braceNest>0)return F(E,w)||h(w);if(w.inLinked)return P(E,w)||h(w);switch(E.currentChar()){case"{":return F(E,w)||h(w);case"}":return f(he.UNBALANCED_CLOSING_BRACE,i(),0),E.next(),p(w,3,"}");case"@":return P(E,w)||h(w);default:{if(O(E))return N=p(w,1,R(E)),w.braceNest=0,w.inLinked=!1,N;const{isModulo:z,hasSpace:D}=H(E);if(z)return D?p(w,0,Bt(E)):p(w,4,Wt(E));if(M(E))return p(w,0,Bt(E));break}}return N}function Y(){const{currentType:E,offset:w,startLoc:N,endLoc:z}=a;return a.lastType=E,a.lastOffset=w,a.lastStartLoc=N,a.lastEndLoc=z,a.offset=s(),a.startLoc=i(),r.currentChar()===Er?p(a,14):U(r,a)}return{nextToken:Y,currentOffset:s,currentPosition:i,context:c}}const iw="parser",ow=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function lw(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const r=parseInt(t||n,16);return r<=55295||r>=57344?String.fromCodePoint(r):"�"}}}function aw(e={}){const t=e.location!==!1,{onError:n,onWarn:r}=e;function s(g,m,y,k,...T){const L=g.currentPosition();if(L.offset+=k,L.column+=k,n){const A=t?kl(y,L):null,O=si(m,A,{domain:iw,args:T});n(O)}}function i(g,m,y,k,...T){const L=g.currentPosition();if(L.offset+=k,L.column+=k,r){const A=t?kl(y,L):null;r(ZC(m,A,T))}}function o(g,m,y){const k={type:g};return t&&(k.start=m,k.end=m,k.loc={start:y,end:y}),k}function l(g,m,y,k){t&&(g.end=m,g.loc&&(g.loc.end=y))}function a(g,m){const y=g.context(),k=o(3,y.offset,y.startLoc);return k.value=m,l(k,g.currentOffset(),g.currentPosition()),k}function c(g,m){const y=g.context(),{lastOffset:k,lastStartLoc:T}=y,L=o(5,k,T);return L.index=parseInt(m,10),g.nextToken(),l(L,g.currentOffset(),g.currentPosition()),L}function u(g,m,y){const k=g.context(),{lastOffset:T,lastStartLoc:L}=k,A=o(4,T,L);return A.key=m,y===!0&&(A.modulo=!0),g.nextToken(),l(A,g.currentOffset(),g.currentPosition()),A}function f(g,m){const y=g.context(),{lastOffset:k,lastStartLoc:T}=y,L=o(9,k,T);return L.value=m.replace(ow,lw),g.nextToken(),l(L,g.currentOffset(),g.currentPosition()),L}function p(g){const m=g.nextToken(),y=g.context(),{lastOffset:k,lastStartLoc:T}=y,L=o(8,k,T);return m.type!==12?(s(g,he.UNEXPECTED_EMPTY_LINKED_MODIFIER,y.lastStartLoc,0),L.value="",l(L,k,T),{nextConsumeToken:m,node:L}):(m.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,wn(m)),L.value=m.value||"",l(L,g.currentOffset(),g.currentPosition()),{node:L})}function h(g,m){const y=g.context(),k=o(7,y.offset,y.startLoc);return k.value=m,l(k,g.currentOffset(),g.currentPosition()),k}function d(g){const m=g.context(),y=o(6,m.offset,m.startLoc);let k=g.nextToken();if(k.type===9){const T=p(g);y.modifier=T.node,k=T.nextConsumeToken||g.nextToken()}switch(k.type!==10&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(k)),k=g.nextToken(),k.type===2&&(k=g.nextToken()),k.type){case 11:k.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(k)),y.key=h(g,k.value||"");break;case 5:k.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(k)),y.key=u(g,k.value||"");break;case 6:k.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(k)),y.key=c(g,k.value||"");break;case 7:k.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(k)),y.key=f(g,k.value||"");break;default:{s(g,he.UNEXPECTED_EMPTY_LINKED_KEY,m.lastStartLoc,0);const T=g.context(),L=o(7,T.offset,T.startLoc);return L.value="",l(L,T.offset,T.startLoc),y.key=L,l(y,T.offset,T.startLoc),{nextConsumeToken:k,node:y}}}return l(y,g.currentOffset(),g.currentPosition()),{node:y}}function _(g){const m=g.context(),y=m.currentType===1?g.currentOffset():m.offset,k=m.currentType===1?m.endLoc:m.startLoc,T=o(2,y,k);T.items=[];let L=null,A=null;do{const M=L||g.nextToken();switch(L=null,M.type){case 0:M.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(M)),T.items.push(a(g,M.value||""));break;case 6:M.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(M)),T.items.push(c(g,M.value||""));break;case 4:A=!0;break;case 5:M.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(M)),T.items.push(u(g,M.value||"",!!A)),A&&(i(g,Wu.USE_MODULO_SYNTAX,m.lastStartLoc,0,wn(M)),A=null);break;case 7:M.value==null&&s(g,he.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,wn(M)),T.items.push(f(g,M.value||""));break;case 8:{const V=d(g);T.items.push(V.node),L=V.nextConsumeToken||null;break}}}while(m.currentType!==14&&m.currentType!==1);const O=m.currentType===1?m.lastOffset:g.currentOffset(),H=m.currentType===1?m.lastEndLoc:g.currentPosition();return l(T,O,H),T}function C(g,m,y,k){const T=g.context();let L=k.items.length===0;const A=o(1,m,y);A.cases=[],A.cases.push(k);do{const O=_(g);L||(L=O.items.length===0),A.cases.push(O)}while(T.currentType!==14);return L&&s(g,he.MUST_HAVE_MESSAGES_IN_PLURAL,y,0),l(A,g.currentOffset(),g.currentPosition()),A}function S(g){const m=g.context(),{offset:y,startLoc:k}=m,T=_(g);return m.currentType===14?T:C(g,y,k,T)}function b(g){const m=sw(g,I0({},e)),y=m.context(),k=o(0,y.offset,y.startLoc);return t&&k.loc&&(k.loc.source=g),k.body=S(m),e.onCacheKey&&(k.cacheKey=e.onCacheKey(g)),y.currentType!==14&&s(m,he.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,g[y.offset]||""),l(k,m.currentOffset(),m.currentPosition()),k}return{parse:b}}function wn(e){if(e.type===14)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function cw(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:r=>(n.helpers.add(r),r)}}function sp(e,t){for(let n=0;nip(n)),e}function ip(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;no;function a(h,d){o.code+=h}function c(h,d=!0){const _=d?r:"";a(s?_+" ".repeat(h):_)}function u(h=!0){const d=++o.indentLevel;h&&c(d)}function f(h=!0){const d=--o.indentLevel;h&&c(d)}function p(){c(o.indentLevel)}return{context:l,push:a,indent:u,deindent:f,newline:p,helper:h=>`_${h}`,needIndent:()=>o.needIndent}}function mw(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),Ys(e,t.key),t.modifier?(e.push(", "),Ys(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function gw(e,t){const{helper:n,needIndent:r}=e;e.push(`${n("normalize")}([`),e.indent(r());const s=t.items.length;for(let i=0;i1){e.push(`${n("plural")}([`),e.indent(r());const s=t.cases.length;for(let i=0;i{const n=np(t.mode)?t.mode:"normal",r=np(t.filename)?t.filename:"message.intl";t.sourceMap;const s=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":` +`,i=t.needIndent?t.needIndent:n!=="arrow",o=e.helpers||[],l=dw(e,{filename:r,breakLineCode:s,needIndent:i});l.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),l.indent(i),o.length>0&&(l.push(`const { ${L0(o.map(u=>`${u}: _${u}`),", ")} } = ctx`),l.newline()),l.push("return "),Ys(l,e),l.deindent(i),l.push("}"),delete e.helpers;const{code:a,map:c}=l.context();return{ast:e,code:a,map:c?c.toJSON():void 0}};function kw(e,t={}){const n=I0({},t),r=!!n.jit,s=!!n.minify,i=n.optimize==null?!0:n.optimize,o=aw(n).parse(e);return r?(i&&fw(o),s&&Ss(o),{ast:o,code:""}):(uw(o,n),bw(o,n))}/*! + * core-base v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function vw(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(or().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(or().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(or().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Hn(e){return Ne(e)&&Gu(e)===0&&(Tn(e,"b")||Tn(e,"body"))}const D0=["b","body"];function Ew(e){return qr(e,D0)}const N0=["c","cases"];function Cw(e){return qr(e,N0,[])}const O0=["s","static"];function ww(e){return qr(e,O0)}const F0=["i","items"];function Aw(e){return qr(e,F0,[])}const R0=["t","type"];function Gu(e){return qr(e,R0)}const P0=["v","value"];function No(e,t){const n=qr(e,P0);if(n!=null)return n;throw Gi(t)}const M0=["m","modifier"];function Sw(e){return qr(e,M0)}const $0=["k","key"];function xw(e){const t=qr(e,$0);if(t)return t;throw Gi(6)}function qr(e,t,n){for(let r=0;r{o===void 0?o=l:o+=l},p[1]=()=>{o!==void 0&&(t.push(o),o=void 0)},p[2]=()=>{p[0](),s++},p[3]=()=>{if(s>0)s--,r=4,p[0]();else{if(s=0,o===void 0||(o=Nw(o),o===!1))return!1;p[1]()}};function h(){const d=e[n+1];if(r===5&&d==="'"||r===6&&d==='"')return n++,l="\\"+d,p[0](),!0}for(;r!==null;)if(n++,i=e[n],!(i==="\\"&&h())){if(a=Dw(i),f=Wr[r],c=f[a]||f.l||8,c===8||(r=c[0],c[1]!==void 0&&(u=p[c[1]],u&&(l=i,u()===!1))))return;if(r===7)return t}}const op=new Map;function Fw(e,t){return Ne(e)?e[t]:null}function Rw(e,t){if(!Ne(e))return null;let n=op.get(t);if(n||(n=Ow(t),n&&op.set(t,n)),!n)return null;const r=n.length;let s=e,i=0;for(;ie,Mw=e=>"",$w="text",Bw=e=>e.length===0?"":VC(e),zw=jC;function lp(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Uw(e){const t=st(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(st(e.named.count)||st(e.named.n))?st(e.named.count)?e.named.count:st(e.named.n)?e.named.n:t:t}function Hw(e,t){t.count||(t.count=e),t.n||(t.n=e)}function jw(e={}){const t=e.locale,n=Uw(e),r=Ne(e.pluralRules)&&re(t)&&Ke(e.pluralRules[t])?e.pluralRules[t]:lp,s=Ne(e.pluralRules)&&re(t)&&Ke(e.pluralRules[t])?lp:void 0,i=C=>C[r(n,C.length,s)],o=e.list||[],l=C=>o[C],a=e.named||Ue();st(e.pluralIndex)&&Hw(n,a);const c=C=>a[C];function u(C){return(Ke(e.messages)?e.messages(C):Ne(e.messages)?e.messages[C]:!1)||(e.parent?e.parent.message(C):Mw)}const f=C=>e.modifiers?e.modifiers[C]:Pw,p=me(e.processor)&&Ke(e.processor.normalize)?e.processor.normalize:Bw,h=me(e.processor)&&Ke(e.processor.interpolate)?e.processor.interpolate:zw,d=me(e.processor)&&re(e.processor.type)?e.processor.type:$w,_={list:l,named:c,plural:i,linked:(C,...S)=>{const[b,g]=S;let m="text",y="";S.length===1?Ne(b)?(y=b.modifier||y,m=b.type||m):re(b)&&(y=b||y):S.length===2&&(re(b)&&(y=b||y),re(g)&&(m=g||m));const k=u(C)(_),T=m==="vnode"&&Ye(k)&&y?k[0]:k;return y?f(y)(T,m):T},message:u,type:d,interpolate:h,normalize:p,values:St(Ue(),o,a)};return _}let Yi=null;function Vw(e){Yi=e}function qw(e,t,n){Yi&&Yi.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const Ww=Kw("function:translate");function Kw(e){return t=>Yi&&Yi.emit(e,t)}const z0=Wu.__EXTEND_POINT__,Yr=ca(z0),Gw={NOT_FOUND_KEY:z0,FALLBACK_TO_TRANSLATE:Yr(),CANNOT_FORMAT_NUMBER:Yr(),FALLBACK_TO_NUMBER_FORMAT:Yr(),CANNOT_FORMAT_DATE:Yr(),FALLBACK_TO_DATE_FORMAT:Yr(),EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:Yr(),__EXTEND_POINT__:Yr()},U0=he.__EXTEND_POINT__,Zr=ca(U0),In={INVALID_ARGUMENT:U0,INVALID_DATE_ARGUMENT:Zr(),INVALID_ISO_DATE_ARGUMENT:Zr(),NOT_SUPPORT_NON_STRING_MESSAGE:Zr(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:Zr(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:Zr(),NOT_SUPPORT_LOCALE_TYPE:Zr(),__EXTEND_POINT__:Zr()};function Bn(e){return si(e,null,void 0)}function Yu(e,t){return t.locale!=null?ap(t.locale):ap(e.locale)}let za;function ap(e){if(re(e))return e;if(Ke(e)){if(e.resolvedOnce&&za!=null)return za;if(e.constructor.name==="Function"){const t=e();if(HC(t))throw Bn(In.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return za=t}else throw Bn(In.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw Bn(In.NOT_SUPPORT_LOCALE_TYPE)}function Yw(e,t,n){return[...new Set([n,...Ye(t)?t:Ne(t)?Object.keys(t):re(t)?[t]:[n]])]}function H0(e,t,n){const r=re(n)?n:Zs,s=e;s.__localeChainCache||(s.__localeChainCache=new Map);let i=s.__localeChainCache.get(r);if(!i){i=[];let o=[n];for(;Ye(o);)o=cp(i,o,t);const l=Ye(t)||!me(t)?t:t.default?t.default:null;o=re(l)?[l]:l,Ye(o)&&cp(i,o,!1),s.__localeChainCache.set(r,i)}return i}function cp(e,t,n){let r=!0;for(let s=0;s`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function Jw(){return{upper:(e,t)=>t==="text"&&re(e)?e.toUpperCase():t==="vnode"&&Ne(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&re(e)?e.toLowerCase():t==="vnode"&&Ne(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&re(e)?fp(e):t==="vnode"&&Ne(e)&&"__v_isVNode"in e?fp(e.children):e}}let j0;function hp(e){j0=e}let V0;function eA(e){V0=e}let q0;function tA(e){q0=e}let W0=null;const pp=e=>{W0=e},nA=()=>W0;let dp=0;function rA(e={}){const t=Ke(e.onWarn)?e.onWarn:qC,n=re(e.version)?e.version:Qw,r=re(e.locale)||Ke(e.locale)?e.locale:Zs,s=Ke(r)?Zs:r,i=Ye(e.fallbackLocale)||me(e.fallbackLocale)||re(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:s,o=me(e.messages)?e.messages:Ua(s),l=me(e.datetimeFormats)?e.datetimeFormats:Ua(s),a=me(e.numberFormats)?e.numberFormats:Ua(s),c=St(Ue(),e.modifiers,Jw()),u=e.pluralRules||Ue(),f=Ke(e.missing)?e.missing:null,p=ve(e.missingWarn)||Ur(e.missingWarn)?e.missingWarn:!0,h=ve(e.fallbackWarn)||Ur(e.fallbackWarn)?e.fallbackWarn:!0,d=!!e.fallbackFormat,_=!!e.unresolving,C=Ke(e.postTranslation)?e.postTranslation:null,S=me(e.processor)?e.processor:null,b=ve(e.warnHtmlMessage)?e.warnHtmlMessage:!0,g=!!e.escapeParameter,m=Ke(e.messageCompiler)?e.messageCompiler:j0,y=Ke(e.messageResolver)?e.messageResolver:V0||Fw,k=Ke(e.localeFallbacker)?e.localeFallbacker:q0||Yw,T=Ne(e.fallbackContext)?e.fallbackContext:void 0,L=e,A=Ne(L.__datetimeFormatters)?L.__datetimeFormatters:new Map,O=Ne(L.__numberFormatters)?L.__numberFormatters:new Map,H=Ne(L.__meta)?L.__meta:{};dp++;const M={version:n,cid:dp,locale:r,fallbackLocale:i,messages:o,modifiers:c,pluralRules:u,missing:f,missingWarn:p,fallbackWarn:h,fallbackFormat:d,unresolving:_,postTranslation:C,processor:S,warnHtmlMessage:b,escapeParameter:g,messageCompiler:m,messageResolver:y,localeFallbacker:k,fallbackContext:T,onWarn:t,__meta:H};return M.datetimeFormats=l,M.numberFormats=a,M.__datetimeFormatters=A,M.__numberFormatters=O,__INTLIFY_PROD_DEVTOOLS__&&qw(M,n,H),M}const Ua=e=>({[e]:Ue()});function Zu(e,t,n,r,s){const{missing:i,onWarn:o}=e;if(i!==null){const l=i(e,n,t,s);return re(l)?l:t}else return t}function hi(e,t,n){const r=e;r.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function sA(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function iA(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let r=n+1;roA(t,e)}function oA(e,t){const n=Ew(t);if(n==null)throw Gi(0);if(Gu(n)===1){const r=Cw(n);return e.plural(r.reduce((s,i)=>[...s,mp(e,i)],[]))}else return mp(e,n)}function mp(e,t){const n=ww(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const r=Aw(t).reduce((s,i)=>[...s,Lc(e,i)],[]);return e.normalize(r)}}function Lc(e,t){const n=Gu(t);switch(n){case 3:return No(t,n);case 9:return No(t,n);case 4:{const r=t;if(Tn(r,"k")&&r.k)return e.interpolate(e.named(r.k));if(Tn(r,"key")&&r.key)return e.interpolate(e.named(r.key));throw Gi(n)}case 5:{const r=t;if(Tn(r,"i")&&st(r.i))return e.interpolate(e.list(r.i));if(Tn(r,"index")&&st(r.index))return e.interpolate(e.list(r.index));throw Gi(n)}case 6:{const r=t,s=Sw(r),i=xw(r);return e.linked(Lc(e,i),s?Lc(e,s):void 0,e.type)}case 7:return No(t,n);case 8:return No(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}const K0=e=>e;let Is=Ue();function G0(e,t={}){let n=!1;const r=t.onError||QC;return t.onError=s=>{n=!0,r(s)},{...kw(e,t),detectError:n}}const lA=(e,t)=>{if(!re(e))throw Bn(In.NOT_SUPPORT_NON_STRING_MESSAGE);{ve(t.warnHtmlMessage)&&t.warnHtmlMessage;const n=(t.onCacheKey||K0)(e),r=Is[n];if(r)return r;const{code:s,detectError:i}=G0(e,t),o=new Function(`return ${s}`)();return i?o:Is[n]=o}};function aA(e,t){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&re(e)){ve(t.warnHtmlMessage)&&t.warnHtmlMessage;const n=(t.onCacheKey||K0)(e),r=Is[n];if(r)return r;const{ast:s,detectError:i}=G0(e,{...t,location:!1,jit:!0}),o=Ha(s);return i?o:Is[n]=o}else{const n=e.cacheKey;return n?Is[n]||(Is[n]=Ha(e)):Ha(e)}}const gp=()=>"",An=e=>Ke(e);function _p(e,...t){const{fallbackFormat:n,postTranslation:r,unresolving:s,messageCompiler:i,fallbackLocale:o,messages:l}=e,[a,c]=Dc(...t),u=ve(c.missingWarn)?c.missingWarn:e.missingWarn,f=ve(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,p=ve(c.escapeParameter)?c.escapeParameter:e.escapeParameter,h=!!c.resolvedMessage,d=re(c.default)||ve(c.default)?ve(c.default)?i?a:()=>a:c.default:n?i?a:()=>a:"",_=n||d!=="",C=Yu(e,c);p&&cA(c);let[S,b,g]=h?[a,C,l[C]||Ue()]:Y0(e,a,C,o,f,u),m=S,y=a;if(!h&&!(re(m)||Hn(m)||An(m))&&_&&(m=d,y=m),!h&&(!(re(m)||Hn(m)||An(m))||!re(b)))return s?ua:a;let k=!1;const T=()=>{k=!0},L=An(m)?m:Z0(e,a,b,m,y,T);if(k)return m;const A=hA(e,b,g,c),O=jw(A),H=uA(e,L,O),M=r?r(H,a):H;if(__INTLIFY_PROD_DEVTOOLS__){const V={timestamp:Date.now(),key:re(a)?a:An(m)?m.key:"",locale:b||(An(m)?m.locale:""),format:re(m)?m:An(m)?m.source:"",message:M};V.meta=St({},e.__meta,{}),Ww(V)}return M}function cA(e){Ye(e.list)?e.list=e.list.map(t=>re(t)?tp(t):t):Ne(e.named)&&Object.keys(e.named).forEach(t=>{re(e.named[t])&&(e.named[t]=tp(e.named[t]))})}function Y0(e,t,n,r,s,i){const{messages:o,onWarn:l,messageResolver:a,localeFallbacker:c}=e,u=c(e,r,n);let f=Ue(),p,h=null;const d="translate";for(let _=0;_r;return c.locale=n,c.key=t,c}const a=o(r,fA(e,n,s,r,l,i));return a.locale=n,a.key=t,a.source=r,a}function uA(e,t,n){return t(n)}function Dc(...e){const[t,n,r]=e,s=Ue();if(!re(t)&&!st(t)&&!An(t)&&!Hn(t))throw Bn(In.INVALID_ARGUMENT);const i=st(t)?String(t):t;return st(n)?s.plural=n:re(n)?s.default=n:me(n)&&!aa(n)?s.named=n:Ye(n)&&(s.list=n),st(r)?s.plural=r:re(r)?s.default=r:me(r)&&St(s,r),[i,s]}function fA(e,t,n,r,s,i){return{locale:t,key:n,warnHtmlMessage:s,onError:o=>{throw i&&i(o),o},onCacheKey:o=>MC(t,n,o)}}function hA(e,t,n,r){const{modifiers:s,pluralRules:i,messageResolver:o,fallbackLocale:l,fallbackWarn:a,missingWarn:c,fallbackContext:u}=e,f={locale:t,modifiers:s,pluralRules:i,messages:p=>{let h=o(n,p);if(h==null&&u){const[,,d]=Y0(u,p,t,l,a,c);h=o(d,p)}if(re(h)||Hn(h)){let d=!1;const _=Z0(e,p,t,h,p,()=>{d=!0});return d?gp:_}else return An(h)?h:gp}};return e.processor&&(f.processor=e.processor),r.list&&(f.list=r.list),r.named&&(f.named=r.named),st(r.plural)&&(f.pluralIndex=r.plural),f}function yp(e,...t){const{datetimeFormats:n,unresolving:r,fallbackLocale:s,onWarn:i,localeFallbacker:o}=e,{__datetimeFormatters:l}=e,[a,c,u,f]=Nc(...t),p=ve(u.missingWarn)?u.missingWarn:e.missingWarn;ve(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn;const h=!!u.part,d=Yu(e,u),_=o(e,s,d);if(!re(a)||a==="")return new Intl.DateTimeFormat(d,f).format(c);let C={},S,b=null;const g="datetime format";for(let k=0;k<_.length&&(S=_[k],C=n[S]||{},b=C[a],!me(b));k++)Zu(e,a,S,p,g);if(!me(b)||!re(S))return r?ua:a;let m=`${S}__${a}`;aa(f)||(m=`${m}__${JSON.stringify(f)}`);let y=l.get(m);return y||(y=new Intl.DateTimeFormat(S,St({},b,f)),l.set(m,y)),h?y.formatToParts(c):y.format(c)}const X0=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Nc(...e){const[t,n,r,s]=e,i=Ue();let o=Ue(),l;if(re(t)){const a=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!a)throw Bn(In.INVALID_ISO_DATE_ARGUMENT);const c=a[3]?a[3].trim().startsWith("T")?`${a[1].trim()}${a[3].trim()}`:`${a[1].trim()}T${a[3].trim()}`:a[1].trim();l=new Date(c);try{l.toISOString()}catch{throw Bn(In.INVALID_ISO_DATE_ARGUMENT)}}else if(BC(t)){if(isNaN(t.getTime()))throw Bn(In.INVALID_DATE_ARGUMENT);l=t}else if(st(t))l=t;else throw Bn(In.INVALID_ARGUMENT);return re(n)?i.key=n:me(n)&&Object.keys(n).forEach(a=>{X0.includes(a)?o[a]=n[a]:i[a]=n[a]}),re(r)?i.locale=r:me(r)&&(o=r),me(s)&&(o=s),[i.key||"",l,i,o]}function bp(e,t,n){const r=e;for(const s in n){const i=`${t}__${s}`;r.__datetimeFormatters.has(i)&&r.__datetimeFormatters.delete(i)}}function kp(e,...t){const{numberFormats:n,unresolving:r,fallbackLocale:s,onWarn:i,localeFallbacker:o}=e,{__numberFormatters:l}=e,[a,c,u,f]=Oc(...t),p=ve(u.missingWarn)?u.missingWarn:e.missingWarn;ve(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn;const h=!!u.part,d=Yu(e,u),_=o(e,s,d);if(!re(a)||a==="")return new Intl.NumberFormat(d,f).format(c);let C={},S,b=null;const g="number format";for(let k=0;k<_.length&&(S=_[k],C=n[S]||{},b=C[a],!me(b));k++)Zu(e,a,S,p,g);if(!me(b)||!re(S))return r?ua:a;let m=`${S}__${a}`;aa(f)||(m=`${m}__${JSON.stringify(f)}`);let y=l.get(m);return y||(y=new Intl.NumberFormat(S,St({},b,f)),l.set(m,y)),h?y.formatToParts(c):y.format(c)}const Q0=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Oc(...e){const[t,n,r,s]=e,i=Ue();let o=Ue();if(!st(t))throw Bn(In.INVALID_ARGUMENT);const l=t;return re(n)?i.key=n:me(n)&&Object.keys(n).forEach(a=>{Q0.includes(a)?o[a]=n[a]:i[a]=n[a]}),re(r)?i.locale=r:me(r)&&(o=r),me(s)&&(o=s),[i.key||"",l,i,o]}function vp(e,t,n){const r=e;for(const s in n){const i=`${t}__${s}`;r.__numberFormatters.has(i)&&r.__numberFormatters.delete(i)}}vw();/*! + * vue-i18n v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */const pA="9.14.4";function dA(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(or().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(or().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(or().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(or().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(or().__INTLIFY_PROD_DEVTOOLS__=!1)}const J0=Gw.__EXTEND_POINT__,Jn=ca(J0);Jn(),Jn(),Jn(),Jn(),Jn(),Jn(),Jn(),Jn(),Jn();const e1=In.__EXTEND_POINT__,Kt=ca(e1),mt={UNEXPECTED_RETURN_TYPE:e1,INVALID_ARGUMENT:Kt(),MUST_BE_CALL_SETUP_TOP:Kt(),NOT_INSTALLED:Kt(),NOT_AVAILABLE_IN_LEGACY_MODE:Kt(),REQUIRED_VALUE:Kt(),INVALID_VALUE:Kt(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:Kt(),NOT_INSTALLED_WITH_PROVIDE:Kt(),UNEXPECTED_ERROR:Kt(),NOT_COMPATIBLE_LEGACY_VUE_I18N:Kt(),BRIDGE_SUPPORT_VUE_2_ONLY:Kt(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:Kt(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:Kt(),__EXTEND_POINT__:Kt()};function vt(e,...t){return si(e,null,void 0)}const Fc=Vr("__translateVNode"),Rc=Vr("__datetimeParts"),Pc=Vr("__numberParts"),t1=Vr("__setPluralRules"),n1=Vr("__injectWithOption"),Mc=Vr("__dispose");function Zi(e){if(!Ne(e)||Hn(e))return e;for(const t in e)if(Tn(e,t))if(!t.includes("."))Ne(e[t])&&Zi(e[t]);else{const n=t.split("."),r=n.length-1;let s=e,i=!1;for(let o=0;o{if("locale"in l&&"resource"in l){const{locale:a,resource:c}=l;a?(o[a]=o[a]||Ue(),qo(c,o[a])):qo(c,o)}else re(l)&&qo(JSON.parse(l),o)}),s==null&&i)for(const l in o)Tn(o,l)&&Zi(o[l]);return o}function mA(e){return e.type}function r1(e,t,n){let r=Ne(t.messages)?t.messages:Ue();"__i18nGlobal"in n&&(r=fa(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));const s=Object.keys(r);s.length&&s.forEach(i=>{e.mergeLocaleMessage(i,r[i])});{if(Ne(t.datetimeFormats)){const i=Object.keys(t.datetimeFormats);i.length&&i.forEach(o=>{e.mergeDateTimeFormat(o,t.datetimeFormats[o])})}if(Ne(t.numberFormats)){const i=Object.keys(t.numberFormats);i.length&&i.forEach(o=>{e.mergeNumberFormat(o,t.numberFormats[o])})}}}function Ep(e){return X(ur,null,e,0)}const Cp=()=>[],gA=()=>!1;let wp=0;function Ap(e){return(t,n,r,s)=>e(n,r,Pt()||void 0,s)}function Xu(e={},t){const{__root:n,__injectWithOption:r}=e,s=n===void 0,i=e.flatJson,o=bl?te:io,l=!!e.translateExistCompatible;let a=ve(e.inheritLocale)?e.inheritLocale:!0;const c=o(n&&a?n.locale.value:re(e.locale)?e.locale:Zs),u=o(n&&a?n.fallbackLocale.value:re(e.fallbackLocale)||Ye(e.fallbackLocale)||me(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:c.value),f=o(fa(c.value,e)),p=o(me(e.datetimeFormats)?e.datetimeFormats:{[c.value]:{}}),h=o(me(e.numberFormats)?e.numberFormats:{[c.value]:{}});let d=n?n.missingWarn:ve(e.missingWarn)||Ur(e.missingWarn)?e.missingWarn:!0,_=n?n.fallbackWarn:ve(e.fallbackWarn)||Ur(e.fallbackWarn)?e.fallbackWarn:!0,C=n?n.fallbackRoot:ve(e.fallbackRoot)?e.fallbackRoot:!0,S=!!e.fallbackFormat,b=Ke(e.missing)?e.missing:null,g=Ke(e.missing)?Ap(e.missing):null,m=Ke(e.postTranslation)?e.postTranslation:null,y=n?n.warnHtmlMessage:ve(e.warnHtmlMessage)?e.warnHtmlMessage:!0,k=!!e.escapeParameter;const T=n?n.modifiers:me(e.modifiers)?e.modifiers:{};let L=e.pluralRules||n&&n.pluralRules,A;A=(()=>{s&&pp(null);const D={version:pA,locale:c.value,fallbackLocale:u.value,messages:f.value,modifiers:T,pluralRules:L,missing:g===null?void 0:g,missingWarn:d,fallbackWarn:_,fallbackFormat:S,unresolving:!0,postTranslation:m===null?void 0:m,warnHtmlMessage:y,escapeParameter:k,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};D.datetimeFormats=p.value,D.numberFormats=h.value,D.__datetimeFormatters=me(A)?A.__datetimeFormatters:void 0,D.__numberFormatters=me(A)?A.__numberFormatters:void 0;const $=rA(D);return s&&pp($),$})(),hi(A,c.value,u.value);function O(){return[c.value,u.value,f.value,p.value,h.value]}const H=pe({get:()=>c.value,set:D=>{c.value=D,A.locale=c.value}}),M=pe({get:()=>u.value,set:D=>{u.value=D,A.fallbackLocale=u.value,hi(A,c.value,D)}}),V=pe(()=>f.value),oe=pe(()=>p.value),ie=pe(()=>h.value);function Z(){return Ke(m)?m:null}function G(D){m=D,A.postTranslation=D}function K(){return b}function ue(D){D!==null&&(g=Ap(D)),b=D,A.missing=g}const ye=(D,$,ee,ae,Ae,xe)=>{O();let ot;try{__INTLIFY_PROD_DEVTOOLS__,s||(A.fallbackContext=n?nA():void 0),ot=D(A)}finally{__INTLIFY_PROD_DEVTOOLS__,s||(A.fallbackContext=void 0)}if(ee!=="translate exists"&&st(ot)&&ot===ua||ee==="translate exists"&&!ot){const[_t,_n]=$();return n&&C?ae(n):Ae(_t)}else{if(xe(ot))return ot;throw vt(mt.UNEXPECTED_RETURN_TYPE)}};function ke(...D){return ye($=>Reflect.apply(_p,null,[$,...D]),()=>Dc(...D),"translate",$=>Reflect.apply($.t,$,[...D]),$=>$,$=>re($))}function He(...D){const[$,ee,ae]=D;if(ae&&!Ne(ae))throw vt(mt.INVALID_ARGUMENT);return ke($,ee,St({resolvedMessage:!0},ae||{}))}function Wt(...D){return ye($=>Reflect.apply(yp,null,[$,...D]),()=>Nc(...D),"datetime format",$=>Reflect.apply($.d,$,[...D]),()=>up,$=>re($))}function Bt(...D){return ye($=>Reflect.apply(kp,null,[$,...D]),()=>Oc(...D),"number format",$=>Reflect.apply($.n,$,[...D]),()=>up,$=>re($))}function gn(D){return D.map($=>re($)||st($)||ve($)?Ep(String($)):$)}const it={normalize:gn,interpolate:D=>D,type:"vnode"};function j(...D){return ye($=>{let ee;const ae=$;try{ae.processor=it,ee=Reflect.apply(_p,null,[ae,...D])}finally{ae.processor=null}return ee},()=>Dc(...D),"translate",$=>$[Fc](...D),$=>[Ep($)],$=>Ye($))}function ne(...D){return ye($=>Reflect.apply(kp,null,[$,...D]),()=>Oc(...D),"number format",$=>$[Pc](...D),Cp,$=>re($)||Ye($))}function J(...D){return ye($=>Reflect.apply(yp,null,[$,...D]),()=>Nc(...D),"datetime format",$=>$[Rc](...D),Cp,$=>re($)||Ye($))}function le(D){L=D,A.pluralRules=L}function be(D,$){return ye(()=>{if(!D)return!1;const ee=re($)?$:c.value,ae=v(ee),Ae=A.messageResolver(ae,D);return l?Ae!=null:Hn(Ae)||An(Ae)||re(Ae)},()=>[D],"translate exists",ee=>Reflect.apply(ee.te,ee,[D,$]),gA,ee=>ve(ee))}function De(D){let $=null;const ee=H0(A,u.value,c.value);for(let ae=0;ae{a&&(c.value=D,A.locale=D,hi(A,c.value,u.value))}),At(n.fallbackLocale,D=>{a&&(u.value=D,A.fallbackLocale=D,hi(A,c.value,u.value))}));const z={id:wp,locale:H,fallbackLocale:M,get inheritLocale(){return a},set inheritLocale(D){a=D,D&&n&&(c.value=n.locale.value,u.value=n.fallbackLocale.value,hi(A,c.value,u.value))},get availableLocales(){return Object.keys(f.value).sort()},messages:V,get modifiers(){return T},get pluralRules(){return L||{}},get isGlobal(){return s},get missingWarn(){return d},set missingWarn(D){d=D,A.missingWarn=d},get fallbackWarn(){return _},set fallbackWarn(D){_=D,A.fallbackWarn=_},get fallbackRoot(){return C},set fallbackRoot(D){C=D},get fallbackFormat(){return S},set fallbackFormat(D){S=D,A.fallbackFormat=S},get warnHtmlMessage(){return y},set warnHtmlMessage(D){y=D,A.warnHtmlMessage=D},get escapeParameter(){return k},set escapeParameter(D){k=D,A.escapeParameter=D},t:ke,getLocaleMessage:v,setLocaleMessage:R,mergeLocaleMessage:F,getPostTranslationHandler:Z,setPostTranslationHandler:G,getMissingHandler:K,setMissingHandler:ue,[t1]:le};return z.datetimeFormats=oe,z.numberFormats=ie,z.rt=He,z.te=be,z.tm=x,z.d=Wt,z.n=Bt,z.getDateTimeFormat=P,z.setDateTimeFormat=U,z.mergeDateTimeFormat=Y,z.getNumberFormat=E,z.setNumberFormat=w,z.mergeNumberFormat=N,z[n1]=r,z[Fc]=j,z[Rc]=J,z[Pc]=ne,z}function _A(e){const t=re(e.locale)?e.locale:Zs,n=re(e.fallbackLocale)||Ye(e.fallbackLocale)||me(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,r=Ke(e.missing)?e.missing:void 0,s=ve(e.silentTranslationWarn)||Ur(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,i=ve(e.silentFallbackWarn)||Ur(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,o=ve(e.fallbackRoot)?e.fallbackRoot:!0,l=!!e.formatFallbackMessages,a=me(e.modifiers)?e.modifiers:{},c=e.pluralizationRules,u=Ke(e.postTranslation)?e.postTranslation:void 0,f=re(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,p=!!e.escapeParameterHtml,h=ve(e.sync)?e.sync:!0;let d=e.messages;if(me(e.sharedMessages)){const k=e.sharedMessages;d=Object.keys(k).reduce((T,L)=>{const A=T[L]||(T[L]={});return St(A,k[L]),T},d||{})}const{__i18n:_,__root:C,__injectWithOption:S}=e,b=e.datetimeFormats,g=e.numberFormats,m=e.flatJson,y=e.translateExistCompatible;return{locale:t,fallbackLocale:n,messages:d,flatJson:m,datetimeFormats:b,numberFormats:g,missing:r,missingWarn:s,fallbackWarn:i,fallbackRoot:o,fallbackFormat:l,modifiers:a,pluralRules:c,postTranslation:u,warnHtmlMessage:f,escapeParameter:p,messageResolver:e.messageResolver,inheritLocale:h,translateExistCompatible:y,__i18n:_,__root:C,__injectWithOption:S}}function $c(e={},t){{const n=Xu(_A(e)),{__extender:r}=e,s={id:n.id,get locale(){return n.locale.value},set locale(i){n.locale.value=i},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(i){n.fallbackLocale.value=i},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(i){},get missing(){return n.getMissingHandler()},set missing(i){n.setMissingHandler(i)},get silentTranslationWarn(){return ve(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(i){n.missingWarn=ve(i)?!i:i},get silentFallbackWarn(){return ve(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(i){n.fallbackWarn=ve(i)?!i:i},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(i){n.fallbackFormat=i},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(i){n.setPostTranslationHandler(i)},get sync(){return n.inheritLocale},set sync(i){n.inheritLocale=i},get warnHtmlInMessage(){return n.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(i){n.warnHtmlMessage=i!=="off"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(i){n.escapeParameter=i},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(i){},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...i){const[o,l,a]=i,c={};let u=null,f=null;if(!re(o))throw vt(mt.INVALID_ARGUMENT);const p=o;return re(l)?c.locale=l:Ye(l)?u=l:me(l)&&(f=l),Ye(a)?u=a:me(a)&&(f=a),Reflect.apply(n.t,n,[p,u||f||{},c])},rt(...i){return Reflect.apply(n.rt,n,[...i])},tc(...i){const[o,l,a]=i,c={plural:1};let u=null,f=null;if(!re(o))throw vt(mt.INVALID_ARGUMENT);const p=o;return re(l)?c.locale=l:st(l)?c.plural=l:Ye(l)?u=l:me(l)&&(f=l),re(a)?c.locale=a:Ye(a)?u=a:me(a)&&(f=a),Reflect.apply(n.t,n,[p,u||f||{},c])},te(i,o){return n.te(i,o)},tm(i){return n.tm(i)},getLocaleMessage(i){return n.getLocaleMessage(i)},setLocaleMessage(i,o){n.setLocaleMessage(i,o)},mergeLocaleMessage(i,o){n.mergeLocaleMessage(i,o)},d(...i){return Reflect.apply(n.d,n,[...i])},getDateTimeFormat(i){return n.getDateTimeFormat(i)},setDateTimeFormat(i,o){n.setDateTimeFormat(i,o)},mergeDateTimeFormat(i,o){n.mergeDateTimeFormat(i,o)},n(...i){return Reflect.apply(n.n,n,[...i])},getNumberFormat(i){return n.getNumberFormat(i)},setNumberFormat(i,o){n.setNumberFormat(i,o)},mergeNumberFormat(i,o){n.mergeNumberFormat(i,o)},getChoiceIndex(i,o){return-1}};return s.__extender=r,s}}const Qu={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function yA({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((n,r)=>[...n,...r.type===Ce?r.children:[r]],[]):t.reduce((n,r)=>{const s=e[r];return s&&(n[r]=s()),n},Ue())}function s1(e){return Ce}const bA=Cn({name:"i18n-t",props:St({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>st(e)||!isNaN(e)}},Qu),setup(e,t){const{slots:n,attrs:r}=t,s=e.i18n||mn({useScope:e.scope,__useComponent:!0});return()=>{const i=Object.keys(n).filter(f=>f!=="_"),o=Ue();e.locale&&(o.locale=e.locale),e.plural!==void 0&&(o.plural=re(e.plural)?+e.plural:e.plural);const l=yA(t,i),a=s[Fc](e.keypath,l,o),c=St(Ue(),r),u=re(e.tag)||Ne(e.tag)?e.tag:s1();return Dt(u,c,a)}}}),Sp=bA;function kA(e){return Ye(e)&&!re(e[0])}function i1(e,t,n,r){const{slots:s,attrs:i}=t;return()=>{const o={part:!0};let l=Ue();e.locale&&(o.locale=e.locale),re(e.format)?o.key=e.format:Ne(e.format)&&(re(e.format.key)&&(o.key=e.format.key),l=Object.keys(e.format).reduce((p,h)=>n.includes(h)?St(Ue(),p,{[h]:e.format[h]}):p,Ue()));const a=r(e.value,o,l);let c=[o.key];Ye(a)?c=a.map((p,h)=>{const d=s[p.type],_=d?d({[p.type]:p.value,index:h,parts:a}):[p.value];return kA(_)&&(_[0].key=`${p.type}-${h}`),_}):re(a)&&(c=[a]);const u=St(Ue(),i),f=re(e.tag)||Ne(e.tag)?e.tag:s1();return Dt(f,u,c)}}const vA=Cn({name:"i18n-n",props:St({value:{type:Number,required:!0},format:{type:[String,Object]}},Qu),setup(e,t){const n=e.i18n||mn({useScope:e.scope,__useComponent:!0});return i1(e,t,Q0,(...r)=>n[Pc](...r))}}),xp=vA,EA=Cn({name:"i18n-d",props:St({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},Qu),setup(e,t){const n=e.i18n||mn({useScope:e.scope,__useComponent:!0});return i1(e,t,X0,(...r)=>n[Rc](...r))}}),Tp=EA;function CA(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const r=n.__getInstance(t);return r!=null?r.__composer:e.global.__composer}}function wA(e){const t=n=>{const{instance:r,modifiers:s,value:i}=n;if(!r||!r.$)throw vt(mt.UNEXPECTED_ERROR);const o=CA(e,r.$),l=Ip(i);return[Reflect.apply(o.t,o,[...Lp(l)]),o]};return{created:(n,r)=>{const[s,i]=t(r);bl&&e.global===i&&(n.__i18nWatcher=At(i.locale,()=>{r.instance&&r.instance.$forceUpdate()})),n.__composer=i,n.textContent=s},unmounted:n=>{bl&&n.__i18nWatcher&&(n.__i18nWatcher(),n.__i18nWatcher=void 0,delete n.__i18nWatcher),n.__composer&&(n.__composer=void 0,delete n.__composer)},beforeUpdate:(n,{value:r})=>{if(n.__composer){const s=n.__composer,i=Ip(r);n.textContent=Reflect.apply(s.t,s,[...Lp(i)])}},getSSRProps:n=>{const[r]=t(n);return{textContent:r}}}}function Ip(e){if(re(e))return{path:e};if(me(e)){if(!("path"in e))throw vt(mt.REQUIRED_VALUE,"path");return e}else throw vt(mt.INVALID_VALUE)}function Lp(e){const{path:t,locale:n,args:r,choice:s,plural:i}=e,o={},l=r||{};return re(n)&&(o.locale=n),st(s)&&(o.plural=s),st(i)&&(o.plural=i),[t,l,o]}function AA(e,t,...n){const r=me(n[0])?n[0]:{},s=!!r.useI18nComponentName;(ve(r.globalInstall)?r.globalInstall:!0)&&([s?"i18n":Sp.name,"I18nT"].forEach(o=>e.component(o,Sp)),[xp.name,"I18nN"].forEach(o=>e.component(o,xp)),[Tp.name,"I18nD"].forEach(o=>e.component(o,Tp))),e.directive("t",wA(t))}function SA(e,t,n){return{beforeCreate(){const r=Pt();if(!r)throw vt(mt.UNEXPECTED_ERROR);const s=this.$options;if(s.i18n){const i=s.i18n;if(s.__i18n&&(i.__i18n=s.__i18n),i.__root=t,this===this.$root)this.$i18n=Dp(e,i);else{i.__injectWithOption=!0,i.__extender=n.__vueI18nExtend,this.$i18n=$c(i);const o=this.$i18n;o.__extender&&(o.__disposer=o.__extender(this.$i18n))}}else if(s.__i18n)if(this===this.$root)this.$i18n=Dp(e,s);else{this.$i18n=$c({__i18n:s.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const i=this.$i18n;i.__extender&&(i.__disposer=i.__extender(this.$i18n))}else this.$i18n=e;s.__i18nGlobal&&r1(t,s,s),this.$t=(...i)=>this.$i18n.t(...i),this.$rt=(...i)=>this.$i18n.rt(...i),this.$tc=(...i)=>this.$i18n.tc(...i),this.$te=(i,o)=>this.$i18n.te(i,o),this.$d=(...i)=>this.$i18n.d(...i),this.$n=(...i)=>this.$i18n.n(...i),this.$tm=i=>this.$i18n.tm(i),n.__setInstance(r,this.$i18n)},mounted(){},unmounted(){const r=Pt();if(!r)throw vt(mt.UNEXPECTED_ERROR);const s=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,s.__disposer&&(s.__disposer(),delete s.__disposer,delete s.__extender),n.__deleteInstance(r),delete this.$i18n}}}function Dp(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[t1](t.pluralizationRules||e.pluralizationRules);const n=fa(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(r=>e.mergeLocaleMessage(r,n[r])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(r=>e.mergeDateTimeFormat(r,t.datetimeFormats[r])),t.numberFormats&&Object.keys(t.numberFormats).forEach(r=>e.mergeNumberFormat(r,t.numberFormats[r])),e}const xA=Vr("global-vue-i18n");function TA(e={},t){const n=__VUE_I18N_LEGACY_API__&&ve(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,r=ve(e.globalInjection)?e.globalInjection:!0,s=__VUE_I18N_LEGACY_API__&&n?!!e.allowComposition:!0,i=new Map,[o,l]=IA(e,n),a=Vr("");function c(p){return i.get(p)||null}function u(p,h){i.set(p,h)}function f(p){i.delete(p)}{const p={get mode(){return __VUE_I18N_LEGACY_API__&&n?"legacy":"composition"},get allowComposition(){return s},async install(h,...d){if(h.__VUE_I18N_SYMBOL__=a,h.provide(h.__VUE_I18N_SYMBOL__,p),me(d[0])){const S=d[0];p.__composerExtend=S.__composerExtend,p.__vueI18nExtend=S.__vueI18nExtend}let _=null;!n&&r&&(_=$A(h,p.global)),__VUE_I18N_FULL_INSTALL__&&AA(h,p,...d),__VUE_I18N_LEGACY_API__&&n&&h.mixin(SA(l,l.__composer,p));const C=h.unmount;h.unmount=()=>{_&&_(),p.dispose(),C()}},get global(){return l},dispose(){o.stop()},__instances:i,__getInstance:c,__setInstance:u,__deleteInstance:f};return p}}function mn(e={}){const t=Pt();if(t==null)throw vt(mt.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw vt(mt.NOT_INSTALLED);const n=LA(t),r=NA(n),s=mA(t),i=DA(e,s);if(__VUE_I18N_LEGACY_API__&&n.mode==="legacy"&&!e.__useComponent){if(!n.allowComposition)throw vt(mt.NOT_AVAILABLE_IN_LEGACY_MODE);return PA(t,i,r,e)}if(i==="global")return r1(r,e,s),r;if(i==="parent"){let a=OA(n,t,e.__useComponent);return a==null&&(a=r),a}const o=n;let l=o.__getInstance(t);if(l==null){const a=St({},e);"__i18n"in s&&(a.__i18n=s.__i18n),r&&(a.__root=r),l=Xu(a),o.__composerExtend&&(l[Mc]=o.__composerExtend(l)),RA(o,t,l),o.__setInstance(t,l)}return l}function IA(e,t,n){const r=Nd();{const s=__VUE_I18N_LEGACY_API__&&t?r.run(()=>$c(e)):r.run(()=>Xu(e));if(s==null)throw vt(mt.UNEXPECTED_ERROR);return[r,s]}}function LA(e){{const t=tt(e.isCE?xA:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw vt(e.isCE?mt.NOT_INSTALLED_WITH_PROVIDE:mt.UNEXPECTED_ERROR);return t}}function DA(e,t){return aa(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function NA(e){return e.mode==="composition"?e.global:e.global.__composer}function OA(e,t,n=!1){let r=null;const s=t.root;let i=FA(t,n);for(;i!=null;){const o=e;if(e.mode==="composition")r=o.__getInstance(i);else if(__VUE_I18N_LEGACY_API__){const l=o.__getInstance(i);l!=null&&(r=l.__composer,n&&r&&!r[n1]&&(r=null))}if(r!=null||s===i)break;i=i.parent}return r}function FA(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function RA(e,t,n){gt(()=>{},t),Mt(()=>{const r=n;e.__deleteInstance(t);const s=r[Mc];s&&(s(),delete r[Mc])},t)}function PA(e,t,n,r={}){const s=t==="local",i=io(null);if(s&&e.proxy&&!(e.proxy.$options.i18n||e.proxy.$options.__i18n))throw vt(mt.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const o=ve(r.inheritLocale)?r.inheritLocale:!re(r.locale),l=te(!s||o?n.locale.value:re(r.locale)?r.locale:Zs),a=te(!s||o?n.fallbackLocale.value:re(r.fallbackLocale)||Ye(r.fallbackLocale)||me(r.fallbackLocale)||r.fallbackLocale===!1?r.fallbackLocale:l.value),c=te(fa(l.value,r)),u=te(me(r.datetimeFormats)?r.datetimeFormats:{[l.value]:{}}),f=te(me(r.numberFormats)?r.numberFormats:{[l.value]:{}}),p=s?n.missingWarn:ve(r.missingWarn)||Ur(r.missingWarn)?r.missingWarn:!0,h=s?n.fallbackWarn:ve(r.fallbackWarn)||Ur(r.fallbackWarn)?r.fallbackWarn:!0,d=s?n.fallbackRoot:ve(r.fallbackRoot)?r.fallbackRoot:!0,_=!!r.fallbackFormat,C=Ke(r.missing)?r.missing:null,S=Ke(r.postTranslation)?r.postTranslation:null,b=s?n.warnHtmlMessage:ve(r.warnHtmlMessage)?r.warnHtmlMessage:!0,g=!!r.escapeParameter,m=s?n.modifiers:me(r.modifiers)?r.modifiers:{},y=r.pluralRules||s&&n.pluralRules;function k(){return[l.value,a.value,c.value,u.value,f.value]}const T=pe({get:()=>i.value?i.value.locale.value:l.value,set:v=>{i.value&&(i.value.locale.value=v),l.value=v}}),L=pe({get:()=>i.value?i.value.fallbackLocale.value:a.value,set:v=>{i.value&&(i.value.fallbackLocale.value=v),a.value=v}}),A=pe(()=>i.value?i.value.messages.value:c.value),O=pe(()=>u.value),H=pe(()=>f.value);function M(){return i.value?i.value.getPostTranslationHandler():S}function V(v){i.value&&i.value.setPostTranslationHandler(v)}function oe(){return i.value?i.value.getMissingHandler():C}function ie(v){i.value&&i.value.setMissingHandler(v)}function Z(v){return k(),v()}function G(...v){return i.value?Z(()=>Reflect.apply(i.value.t,null,[...v])):Z(()=>"")}function K(...v){return i.value?Reflect.apply(i.value.rt,null,[...v]):""}function ue(...v){return i.value?Z(()=>Reflect.apply(i.value.d,null,[...v])):Z(()=>"")}function ye(...v){return i.value?Z(()=>Reflect.apply(i.value.n,null,[...v])):Z(()=>"")}function ke(v){return i.value?i.value.tm(v):{}}function He(v,R){return i.value?i.value.te(v,R):!1}function Wt(v){return i.value?i.value.getLocaleMessage(v):{}}function Bt(v,R){i.value&&(i.value.setLocaleMessage(v,R),c.value[v]=R)}function gn(v,R){i.value&&i.value.mergeLocaleMessage(v,R)}function it(v){return i.value?i.value.getDateTimeFormat(v):{}}function j(v,R){i.value&&(i.value.setDateTimeFormat(v,R),u.value[v]=R)}function ne(v,R){i.value&&i.value.mergeDateTimeFormat(v,R)}function J(v){return i.value?i.value.getNumberFormat(v):{}}function le(v,R){i.value&&(i.value.setNumberFormat(v,R),f.value[v]=R)}function be(v,R){i.value&&i.value.mergeNumberFormat(v,R)}const De={get id(){return i.value?i.value.id:-1},locale:T,fallbackLocale:L,messages:A,datetimeFormats:O,numberFormats:H,get inheritLocale(){return i.value?i.value.inheritLocale:o},set inheritLocale(v){i.value&&(i.value.inheritLocale=v)},get availableLocales(){return i.value?i.value.availableLocales:Object.keys(c.value)},get modifiers(){return i.value?i.value.modifiers:m},get pluralRules(){return i.value?i.value.pluralRules:y},get isGlobal(){return i.value?i.value.isGlobal:!1},get missingWarn(){return i.value?i.value.missingWarn:p},set missingWarn(v){i.value&&(i.value.missingWarn=v)},get fallbackWarn(){return i.value?i.value.fallbackWarn:h},set fallbackWarn(v){i.value&&(i.value.missingWarn=v)},get fallbackRoot(){return i.value?i.value.fallbackRoot:d},set fallbackRoot(v){i.value&&(i.value.fallbackRoot=v)},get fallbackFormat(){return i.value?i.value.fallbackFormat:_},set fallbackFormat(v){i.value&&(i.value.fallbackFormat=v)},get warnHtmlMessage(){return i.value?i.value.warnHtmlMessage:b},set warnHtmlMessage(v){i.value&&(i.value.warnHtmlMessage=v)},get escapeParameter(){return i.value?i.value.escapeParameter:g},set escapeParameter(v){i.value&&(i.value.escapeParameter=v)},t:G,getPostTranslationHandler:M,setPostTranslationHandler:V,getMissingHandler:oe,setMissingHandler:ie,rt:K,d:ue,n:ye,tm:ke,te:He,getLocaleMessage:Wt,setLocaleMessage:Bt,mergeLocaleMessage:gn,getDateTimeFormat:it,setDateTimeFormat:j,mergeDateTimeFormat:ne,getNumberFormat:J,setNumberFormat:le,mergeNumberFormat:be};function x(v){v.locale.value=l.value,v.fallbackLocale.value=a.value,Object.keys(c.value).forEach(R=>{v.mergeLocaleMessage(R,c.value[R])}),Object.keys(u.value).forEach(R=>{v.mergeDateTimeFormat(R,u.value[R])}),Object.keys(f.value).forEach(R=>{v.mergeNumberFormat(R,f.value[R])}),v.escapeParameter=g,v.fallbackFormat=_,v.fallbackRoot=d,v.fallbackWarn=h,v.missingWarn=p,v.warnHtmlMessage=b}return pu(()=>{if(e.proxy==null||e.proxy.$i18n==null)throw vt(mt.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const v=i.value=e.proxy.$i18n.__composer;t==="global"?(l.value=v.locale.value,a.value=v.fallbackLocale.value,c.value=v.messages.value,u.value=v.datetimeFormats.value,f.value=v.numberFormats.value):s&&x(v)}),De}const MA=["locale","fallbackLocale","availableLocales"],Np=["t","rt","d","n","tm","te"];function $A(e,t){const n=Object.create(null);return MA.forEach(r=>{const s=Object.getOwnPropertyDescriptor(t,r);if(!s)throw vt(mt.UNEXPECTED_ERROR);const i=ct(s.value)?{get(){return s.value.value},set(o){s.value.value=o}}:{get(){return s.get&&s.get()}};Object.defineProperty(n,r,i)}),e.config.globalProperties.$i18n=n,Np.forEach(r=>{const s=Object.getOwnPropertyDescriptor(t,r);if(!s||!s.value)throw vt(mt.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${r}`,s)}),()=>{delete e.config.globalProperties.$i18n,Np.forEach(r=>{delete e.config.globalProperties[`$${r}`]})}}dA();__INTLIFY_JIT_COMPILATION__?hp(aA):hp(lA);eA(Rw);tA(H0);if(__INTLIFY_PROD_DEVTOOLS__){const e=or();e.__INTLIFY__=!0,Vw(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const BA={nav:{home:"首页",guide:"指南",api:"API",examples:"示例",about:"关于",language:"语言",tableOfContents:"目录",more:"更多"},sidebar:{gettingStarted:"快速开始",introduction:"介绍",installation:"安装",quickStart:"快速上手",configuration:"配置说明",advancedGuide:"进阶指南",customThemes:"自定义主题",componentDevelopment:"组件开发",apiReference:"API 参考",deployment:"部署",examples:"示例",basicExample:"基础示例"},common:{search:"搜索",theme:"主题",light:"浅色",dark:"深色",menu:"菜单",close:"关闭",back:"返回",next:"下一页",prev:"上一页",and:"和",toc:"目录",edit:"编辑此页",lastUpdated:"最后更新",contributors:"贡献者",custom:"自定义",draggable:"可拖拽",loading:"正在加载内容...",error:"加载失败",retry:"重试",prevSection:"← 上一节",nextSection:"下一节 →",articleTitle:"页面",noContent:"此页面的内容正在编写中...",loadError:"无法加载文章内容,请稍后重试。"},ai:{assistant:"AI助手",open:"打开AI助手",close:"关闭AI助手",settings:"设置",test:"测试连接",save:"保存设置",placeholder:"问我任何关于文档的问题...",configNotice:"请先配置AI设置",welcome:"您好!我是AI助手,可以帮助您解答文档相关的问题。",demoMessages:{user1:"你好,我想了解一下这个文档系统的功能。",ai1:`很高兴为您介绍!这个文档系统包含以下主要功能: + +1. **多语言支持** - 支持中文和英文切换 +2. **AI助手** - 可以回答文档相关问题 +3. **响应式设计** - 支持各种设备尺寸 +4. **主题切换** - 支持亮色和暗色主题 +5. **搜索功能** - 快速查找文档内容`,user2:"这些功能很棒,可以详细介绍一下AI助手的功能吗?",ai2:`AI助手具备以下能力: + +**对话功能** +- 实时对话交流 +- 支持markdown格式回复 +- 保存对话历史 + +**技术特性** +- 支持多种AI模型(OpenAI、Claude、Gemini等) +- 可配置API密钥和端点 +- 连接测试功能 + +**用户体验** +- 可拖拽移动窗口 +- 可调整窗口大小 +- 平滑滚动体验`}},settings:{title:"设置",provider:"AI提供商",model:"模型ID",apiKey:"API密钥",baseUrl:"API基础URL",testing:"测试中...",testConnection:"测试连接",saveSettings:"保存设置",closeSettings:"关闭设置",saveSuccess:"设置已自动保存!",apiKeyPlaceholder:"输入您的API密钥",baseUrlPlaceholder:"API端点URL",modelPlaceholder:"例如: gpt-3.5-turbo",errors:{invalidProvider:"无效的AI提供商",missingProviderConfig:"缺少提供商配置",missingApiKey:"缺少API密钥",missingModelId:"缺少模型ID",missingBaseUrl:"缺少API基础URL",connectionFailed:"连接测试失败"}},theme:{themes:{default:{name:"默认主题",description:"经典蓝色风格"},vue:{name:"Vue主题",description:"Vue官网绿色风格"},github:{name:"GitHub主题",description:"GitHub黑白灰风格"},purple:{name:"紫色主题",description:"优雅紫色风格"},orange:{name:"橙色主题",description:"温暖橙色风格"},emerald:{name:"翠绿主题",description:"清新翠绿风格"}},darkMode:"深色模式",lightMode:"浅色模式"},readingProgress:{estimatedTime:"预计阅读",progress:"进度",words:"字",minutes:"分钟",autoScroll:"自动滚动",stopAutoScroll:"停止自动滚动",startAutoScroll:"开始自动滚动",backToTop:"回到顶部",showInfo:"显示信息",hideInfo:"隐藏信息"},feedback:{title:"页面反馈",triggerTitle:"给文档提供反馈",quickQuestion:"这个页面对您有帮助吗?",helpful:"有帮助",notHelpful:"没帮助",feedbackType:"反馈类型",selectType:"请选择",types:{content:"内容问题",typo:"错别字",missing:"缺少信息",suggestion:"改进建议",bug:"页面错误",question:"疑问",other:"其他"},detailLabel:"详细说明",detailPlaceholder:"请详细描述您的反馈...",contactLabel:"如有需要,允许我们联系您获取更多信息",emailPlaceholder:"您的邮箱(可选)",submit:"提交反馈",cancel:"取消",successMessage:"感谢您的反馈!",stats:{visitors:"访问",helpful:"有用",feedback:"反馈"}},footer:{gettingStarted:"快速开始",introduction:"介绍",installation:"安装",quickStart:"快速上手",configuration:"配置说明",advanced:"进阶指南",customThemes:"自定义主题",components:"组件开发",apiReference:"API 参考",deployment:"部署",community:"社区",discussions:"讨论区",issues:"问题反馈",contributing:"贡献指南",releases:"版本发布",support:"帮助支持",examples:"示例",sourceCode:"源代码",license:"开源许可",backToTop:"回到顶部",builtWith:"构建技术:",lastUpdated:"最后更新",connectMe:"联系我",github:"GitHub",email:"邮箱",twitter:"Twitter",discord:"Discord",bilibili:"哔哩哔哩",qq:"QQ",wechat:"微信",weibo:"微博",douyin:"抖音",zhihu:"知乎",youtube:"YouTube",telegram:"Telegram",tiktok:"TikTok"}},zA={nav:{home:"Home",guide:"Guide",api:"API",examples:"Examples",about:"About",language:"Language",tableOfContents:"Table of Contents",more:"more"},sidebar:{gettingStarted:"Getting Started",introduction:"Introduction",installation:"Installation",quickStart:"Quick Start",configuration:"Configuration",advancedGuide:"Advanced Guide",customThemes:"Custom Themes",componentDevelopment:"Component Development",apiReference:"API Reference",deployment:"Deployment",examples:"Examples",basicExample:"Basic Example"},common:{search:"Search",theme:"Theme",light:"Light",dark:"Dark",menu:"Menu",close:"Close",back:"Back",next:"Next",prev:"Previous",and:"and",toc:"Table of Contents",edit:"Edit this page",lastUpdated:"Last updated",contributors:"Contributors",custom:"Custom",draggable:"Draggable",loading:"Loading content...",error:"Failed to load",retry:"Retry",prevSection:"← Previous",nextSection:"Next →",articleTitle:"Page",noContent:"Content for this page is being written...",loadError:"Unable to load article content, please try again later."},ai:{assistant:"AI Assistant",open:"Open AI Assistant",close:"Close AI Assistant",settings:"Settings",test:"Test Connection",save:"Save Settings",placeholder:"Ask me anything about the documentation...",configNotice:"Please configure AI settings first",welcome:"Hello! I am an AI assistant that can help you answer questions related to the documentation.",demoMessages:{user1:"Hello, I would like to learn about the features of this documentation system.",ai1:`I am happy to introduce you to the main features of this documentation system: + +1. **Multi-language Support** - Supports Chinese and English switching +2. **AI Assistant** - Can answer documentation-related questions +3. **Responsive Design** - Supports various device sizes +4. **Theme Switching** - Supports light and dark themes +5. **Search Function** - Quickly find document content`,user2:"These features are great! Can you introduce the AI assistant features in detail?",ai2:`AI Assistant has the following capabilities: + +**Conversation Features** +- Real-time conversation +- Supports markdown format replies +- Save conversation history + +**Technical Features** +- Supports multiple AI models (OpenAI, Claude, Gemini, etc.) +- Configurable API keys and endpoints +- Connection testing functionality + +**User Experience** +- Draggable window +- Resizable window +- Smooth scrolling experience`}},settings:{title:"Settings",provider:"AI Provider",model:"Model ID",apiKey:"API Key",baseUrl:"API Base URL",testing:"Testing...",testConnection:"Test Connection",saveSettings:"Save Settings",closeSettings:"Close Settings",saveSuccess:"Settings auto-saved successfully!",apiKeyPlaceholder:"Enter your API key",baseUrlPlaceholder:"API endpoint URL",modelPlaceholder:"e.g: gpt-3.5-turbo",errors:{invalidProvider:"Invalid AI provider",missingProviderConfig:"Missing provider configuration",missingApiKey:"Missing API key",missingModelId:"Missing model ID",missingBaseUrl:"Missing API base URL",connectionFailed:"Connection test failed"}},theme:{themes:{default:{name:"Default Theme",description:"Classic blue style"},vue:{name:"Vue Theme",description:"Vue official green style"},github:{name:"GitHub Theme",description:"GitHub black and white style"},purple:{name:"Purple Theme",description:"Elegant purple style"},orange:{name:"Orange Theme",description:"Warm orange style"},emerald:{name:"Emerald Theme",description:"Fresh emerald style"}},darkMode:"Dark Mode",lightMode:"Light Mode"},readingProgress:{estimatedTime:"Estimated reading",progress:"Progress",words:"words",minutes:"minutes",autoScroll:"Auto scroll",stopAutoScroll:"Stop auto scroll",startAutoScroll:"Start auto scroll",backToTop:"Back to top",showInfo:"Show info",hideInfo:"Hide info"},feedback:{title:"Page Feedback",triggerTitle:"Provide feedback for documentation",quickQuestion:"Is this page helpful to you?",helpful:"Helpful",notHelpful:"Not helpful",feedbackType:"Feedback type",selectType:"Please select",types:{content:"Content issue",typo:"Typo",missing:"Missing information",suggestion:"Improvement suggestion",bug:"Page error",question:"Question",other:"Other"},detailLabel:"Detailed description",detailPlaceholder:"Please describe your feedback in detail...",contactLabel:"Allow us to contact you for more information if needed",emailPlaceholder:"Your email (optional)",submit:"Submit feedback",cancel:"Cancel",successMessage:"Thank you for your feedback!",stats:{visitors:"visitors",helpful:"helpful",feedback:"feedback"}},footer:{gettingStarted:"Getting Started",introduction:"Introduction",installation:"Installation",quickStart:"Quick Start",configuration:"Configuration",advanced:"Advanced",customThemes:"Custom Themes",components:"Components",apiReference:"API Reference",deployment:"Deployment",community:"Community",discussions:"Discussions",issues:"Issues",contributing:"Contributing",releases:"Releases",support:"Support",examples:"Examples",sourceCode:"Source Code",license:"License",backToTop:"Back to Top",builtWith:"Built with",lastUpdated:"Last updated",connectMe:"Connect Me",github:"GitHub",email:"Email",twitter:"Twitter",discord:"Discord",bilibili:"Bilibili",qq:"QQ",wechat:"WeChat",weibo:"Weibo",douyin:"Douyin",zhihu:"Zhihu",youtube:"YouTube",telegram:"Telegram",tiktok:"TikTok"}};/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function o1(e){return typeof e>"u"||e===null}function UA(e){return typeof e=="object"&&e!==null}function HA(e){return Array.isArray(e)?e:o1(e)?[]:[e]}function jA(e,t){var n,r,s,i;if(t)for(i=Object.keys(t),n=0,r=i.length;nl&&(i=" ... ",t=r-l+i.length),n-r>l&&(o=" ...",n=r+l-o.length),{str:i+e.slice(t,n).replace(/\t/g,"→")+o,pos:r-t+i.length}}function Va(e,t){return pt.repeat(" ",t-e.length)+e}function QA(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var n=/\r?\n|\r|\0/g,r=[0],s=[],i,o=-1;i=n.exec(e.buffer);)s.push(i.index),r.push(i.index+i[0].length),e.position<=i.index&&o<0&&(o=r.length-2);o<0&&(o=r.length-1);var l="",a,c,u=Math.min(e.line+t.linesAfter,s.length).toString().length,f=t.maxLength-(t.indent+u+3);for(a=1;a<=t.linesBefore&&!(o-a<0);a++)c=ja(e.buffer,r[o-a],s[o-a],e.position-(r[o]-r[o-a]),f),l=pt.repeat(" ",t.indent)+Va((e.line-a+1).toString(),u)+" | "+c.str+` +`+l;for(c=ja(e.buffer,r[o],s[o],e.position,f),l+=pt.repeat(" ",t.indent)+Va((e.line+1).toString(),u)+" | "+c.str+` +`,l+=pt.repeat("-",t.indent+u+3+c.pos)+`^ +`,a=1;a<=t.linesAfter&&!(o+a>=s.length);a++)c=ja(e.buffer,r[o+a],s[o+a],e.position-(r[o]-r[o+a]),f),l+=pt.repeat(" ",t.indent)+Va((e.line+a+1).toString(),u)+" | "+c.str+` +`;return l.replace(/\n$/,"")}var JA=QA,eS=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],tS=["scalar","sequence","mapping"];function nS(e){var t={};return e!==null&&Object.keys(e).forEach(function(n){e[n].forEach(function(r){t[String(r)]=n})}),t}function rS(e,t){if(t=t||{},Object.keys(t).forEach(function(n){if(eS.indexOf(n)===-1)throw new Vt('Unknown option "'+n+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(n){return n},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=nS(t.styleAliases||null),tS.indexOf(this.kind)===-1)throw new Vt('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var xt=rS;function Op(e,t){var n=[];return e[t].forEach(function(r){var s=n.length;n.forEach(function(i,o){i.tag===r.tag&&i.kind===r.kind&&i.multi===r.multi&&(s=o)}),n[s]=r}),n}function sS(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,n;function r(s){s.multi?(e.multi[s.kind].push(s),e.multi.fallback.push(s)):e[s.kind][s.tag]=e.fallback[s.tag]=s}for(t=0,n=arguments.length;t=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),_S=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function yS(e){return!(e===null||!_S.test(e)||e[e.length-1]==="_")}function bS(e){var t,n;return t=e.replace(/_/g,"").toLowerCase(),n=t[0]==="-"?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),t===".inf"?n===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:t===".nan"?NaN:n*parseFloat(t,10)}var kS=/^[-+]?[0-9]+e/;function vS(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(pt.isNegativeZero(e))return"-0.0";return n=e.toString(10),kS.test(n)?n.replace("e",".e"):n}function ES(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||pt.isNegativeZero(e))}var g1=new xt("tag:yaml.org,2002:float",{kind:"scalar",resolve:yS,construct:bS,predicate:ES,represent:vS,defaultStyle:"lowercase"}),_1=h1.extend({implicit:[p1,d1,m1,g1]}),y1=_1,b1=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),k1=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function CS(e){return e===null?!1:b1.exec(e)!==null||k1.exec(e)!==null}function wS(e){var t,n,r,s,i,o,l,a=0,c=null,u,f,p;if(t=b1.exec(e),t===null&&(t=k1.exec(e)),t===null)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,s=+t[3],!t[4])return new Date(Date.UTC(n,r,s));if(i=+t[4],o=+t[5],l=+t[6],t[7]){for(a=t[7].slice(0,3);a.length<3;)a+="0";a=+a}return t[9]&&(u=+t[10],f=+(t[11]||0),c=(u*60+f)*6e4,t[9]==="-"&&(c=-c)),p=new Date(Date.UTC(n,r,s,i,o,l,a)),c&&p.setTime(p.getTime()-c),p}function AS(e){return e.toISOString()}var v1=new xt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:CS,construct:wS,instanceOf:Date,represent:AS});function SS(e){return e==="<<"||e===null}var E1=new xt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:SS}),Ju=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function xS(e){if(e===null)return!1;var t,n,r=0,s=e.length,i=Ju;for(n=0;n64)){if(t<0)return!1;r+=6}return r%8===0}function TS(e){var t,n,r=e.replace(/[\r\n=]/g,""),s=r.length,i=Ju,o=0,l=[];for(t=0;t>16&255),l.push(o>>8&255),l.push(o&255)),o=o<<6|i.indexOf(r.charAt(t));return n=s%4*6,n===0?(l.push(o>>16&255),l.push(o>>8&255),l.push(o&255)):n===18?(l.push(o>>10&255),l.push(o>>2&255)):n===12&&l.push(o>>4&255),new Uint8Array(l)}function IS(e){var t="",n=0,r,s,i=e.length,o=Ju;for(r=0;r>18&63],t+=o[n>>12&63],t+=o[n>>6&63],t+=o[n&63]),n=(n<<8)+e[r];return s=i%3,s===0?(t+=o[n>>18&63],t+=o[n>>12&63],t+=o[n>>6&63],t+=o[n&63]):s===2?(t+=o[n>>10&63],t+=o[n>>4&63],t+=o[n<<2&63],t+=o[64]):s===1&&(t+=o[n>>2&63],t+=o[n<<4&63],t+=o[64],t+=o[64]),t}function LS(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var C1=new xt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:xS,construct:TS,predicate:LS,represent:IS}),DS=Object.prototype.hasOwnProperty,NS=Object.prototype.toString;function OS(e){if(e===null)return!0;var t=[],n,r,s,i,o,l=e;for(n=0,r=l.length;n>10)+55296,(e-65536&1023)+56320)}var D1=new Array(256),N1=new Array(256);for(var ks=0;ks<256;ks++)D1[ks]=Pp(ks)?1:0,N1[ks]=Pp(ks);function YS(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||ef,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function O1(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=JA(n),new Vt(t,n)}function ce(e,t){throw O1(e,t)}function Cl(e,t){e.onWarning&&e.onWarning.call(null,O1(e,t))}var Mp={YAML:function(e,t,n){var r,s,i;e.version!==null&&ce(e,"duplication of %YAML directive"),n.length!==1&&ce(e,"YAML directive accepts exactly one argument"),r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),r===null&&ce(e,"ill-formed argument of the YAML directive"),s=parseInt(r[1],10),i=parseInt(r[2],10),s!==1&&ce(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=i<2,i!==1&&i!==2&&Cl(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var r,s;n.length!==2&&ce(e,"TAG directive accepts exactly two arguments"),r=n[0],s=n[1],I1.test(r)||ce(e,"ill-formed tag handle (first argument) of the TAG directive"),Hr.call(e.tagMap,r)&&ce(e,'there is a previously declared suffix for "'+r+'" tag handle'),L1.test(s)||ce(e,"ill-formed tag prefix (second argument) of the TAG directive");try{s=decodeURIComponent(s)}catch{ce(e,"tag prefix is malformed: "+s)}e.tagMap[r]=s}};function Mr(e,t,n,r){var s,i,o,l;if(t1&&(e.result+=pt.repeat(` +`,t-1))}function ZS(e,t,n){var r,s,i,o,l,a,c,u,f=e.kind,p=e.result,h;if(h=e.input.charCodeAt(e.position),en(h)||Ls(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(s=e.input.charCodeAt(e.position+1),en(s)||n&&Ls(s)))return!1;for(e.kind="scalar",e.result="",i=o=e.position,l=!1;h!==0;){if(h===58){if(s=e.input.charCodeAt(e.position+1),en(s)||n&&Ls(s))break}else if(h===35){if(r=e.input.charCodeAt(e.position-1),en(r))break}else{if(e.position===e.lineStart&&ha(e)||n&&Ls(h))break;if(jn(h))if(a=e.line,c=e.lineStart,u=e.lineIndent,at(e,!1,-1),e.lineIndent>=t){l=!0,h=e.input.charCodeAt(e.position);continue}else{e.position=o,e.line=a,e.lineStart=c,e.lineIndent=u;break}}l&&(Mr(e,i,o,!1),nf(e,e.line-a),i=o=e.position,l=!1),ls(h)||(o=e.position+1),h=e.input.charCodeAt(++e.position)}return Mr(e,i,o,!1),e.result?!0:(e.kind=f,e.result=p,!1)}function XS(e,t){var n,r,s;if(n=e.input.charCodeAt(e.position),n!==39)return!1;for(e.kind="scalar",e.result="",e.position++,r=s=e.position;(n=e.input.charCodeAt(e.position))!==0;)if(n===39)if(Mr(e,r,e.position,!0),n=e.input.charCodeAt(++e.position),n===39)r=e.position,e.position++,s=e.position;else return!0;else jn(n)?(Mr(e,r,s,!0),nf(e,at(e,!1,t)),r=s=e.position):e.position===e.lineStart&&ha(e)?ce(e,"unexpected end of the document within a single quoted scalar"):(e.position++,s=e.position);ce(e,"unexpected end of the stream within a single quoted scalar")}function QS(e,t){var n,r,s,i,o,l;if(l=e.input.charCodeAt(e.position),l!==34)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;(l=e.input.charCodeAt(e.position))!==0;){if(l===34)return Mr(e,n,e.position,!0),e.position++,!0;if(l===92){if(Mr(e,n,e.position,!0),l=e.input.charCodeAt(++e.position),jn(l))at(e,!1,t);else if(l<256&&D1[l])e.result+=N1[l],e.position++;else if((o=WS(l))>0){for(s=o,i=0;s>0;s--)l=e.input.charCodeAt(++e.position),(o=qS(l))>=0?i=(i<<4)+o:ce(e,"expected hexadecimal character");e.result+=GS(i),e.position++}else ce(e,"unknown escape sequence");n=r=e.position}else jn(l)?(Mr(e,n,r,!0),nf(e,at(e,!1,t)),n=r=e.position):e.position===e.lineStart&&ha(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}function JS(e,t){var n=!0,r,s,i,o=e.tag,l,a=e.anchor,c,u,f,p,h,d=Object.create(null),_,C,S,b;if(b=e.input.charCodeAt(e.position),b===91)u=93,h=!1,l=[];else if(b===123)u=125,h=!0,l={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=l),b=e.input.charCodeAt(++e.position);b!==0;){if(at(e,!0,t),b=e.input.charCodeAt(e.position),b===u)return e.position++,e.tag=o,e.anchor=a,e.kind=h?"mapping":"sequence",e.result=l,!0;n?b===44&&ce(e,"expected the node content, but found ','"):ce(e,"missed comma between flow collection entries"),C=_=S=null,f=p=!1,b===63&&(c=e.input.charCodeAt(e.position+1),en(c)&&(f=p=!0,e.position++,at(e,!0,t))),r=e.line,s=e.lineStart,i=e.position,Xs(e,t,vl,!1,!0),C=e.tag,_=e.result,at(e,!0,t),b=e.input.charCodeAt(e.position),(p||e.line===r)&&b===58&&(f=!0,b=e.input.charCodeAt(++e.position),at(e,!0,t),Xs(e,t,vl,!1,!0),S=e.result),h?Ds(e,l,d,C,_,S,r,s,i):f?l.push(Ds(e,null,d,C,_,S,r,s,i)):l.push(_),at(e,!0,t),b=e.input.charCodeAt(e.position),b===44?(n=!0,b=e.input.charCodeAt(++e.position)):n=!1}ce(e,"unexpected end of the stream within a flow collection")}function ex(e,t){var n,r,s=qa,i=!1,o=!1,l=t,a=0,c=!1,u,f;if(f=e.input.charCodeAt(e.position),f===124)r=!1;else if(f===62)r=!0;else return!1;for(e.kind="scalar",e.result="";f!==0;)if(f=e.input.charCodeAt(++e.position),f===43||f===45)qa===s?s=f===43?Fp:US:ce(e,"repeat of a chomping mode identifier");else if((u=KS(f))>=0)u===0?ce(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?ce(e,"repeat of an indentation width identifier"):(l=t+u-1,o=!0);else break;if(ls(f)){do f=e.input.charCodeAt(++e.position);while(ls(f));if(f===35)do f=e.input.charCodeAt(++e.position);while(!jn(f)&&f!==0)}for(;f!==0;){for(tf(e),e.lineIndent=0,f=e.input.charCodeAt(e.position);(!o||e.lineIndentl&&(l=e.lineIndent),jn(f)){a++;continue}if(e.lineIndentt)&&a!==0)ce(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(C&&(o=e.line,l=e.lineStart,a=e.position),Xs(e,t,El,!0,s)&&(C?d=e.result:_=e.result),C||(Ds(e,f,p,h,d,_,o,l,a),h=d=_=null),at(e,!0,-1),b=e.input.charCodeAt(e.position)),(e.line===i||e.lineIndent>t)&&b!==0)ce(e,"bad indentation of a mapping entry");else if(e.lineIndentt?a=1:e.lineIndent===t?a=0:e.lineIndentt?a=1:e.lineIndent===t?a=0:e.lineIndent tag; it should be "scalar", not "'+e.kind+'"'),f=0,p=e.implicitTypes.length;f"),e.result!==null&&d.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+d.kind+'", not "'+e.kind+'"'),d.resolve(e.result,e.tag)?(e.result=d.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||u}function ix(e){var t=e.position,n,r,s,i=!1,o;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(o=e.input.charCodeAt(e.position))!==0&&(at(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||o!==37));){for(i=!0,o=e.input.charCodeAt(++e.position),n=e.position;o!==0&&!en(o);)o=e.input.charCodeAt(++e.position);for(r=e.input.slice(n,e.position),s=[],r.length<1&&ce(e,"directive name must not be less than one character in length");o!==0;){for(;ls(o);)o=e.input.charCodeAt(++e.position);if(o===35){do o=e.input.charCodeAt(++e.position);while(o!==0&&!jn(o));break}if(jn(o))break;for(n=e.position;o!==0&&!en(o);)o=e.input.charCodeAt(++e.position);s.push(e.input.slice(n,e.position))}o!==0&&tf(e),Hr.call(Mp,r)?Mp[r](e,r,s):Cl(e,'unknown document directive "'+r+'"')}if(at(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,at(e,!0,-1)):i&&ce(e,"directives end mark is expected"),Xs(e,e.lineIndent-1,El,!1,!0),at(e,!0,-1),e.checkLineBreaks&&jS.test(e.input.slice(t,e.position))&&Cl(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&ha(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,at(e,!0,-1));return}if(e.position"u"&&(n=t,t=null);var r=F1(e,n);if(typeof t!="function")return r;for(var s=0,i=r.length;s=55296&&n<=56319&&t+1=56320&&r<=57343)?(n-55296)*1024+r-56320+65536:n}function j1(e){var t=/^\n* /;return t.test(e)}var V1=1,Hc=2,q1=3,W1=4,xs=5;function Rx(e,t,n,r,s,i,o,l){var a,c=0,u=null,f=!1,p=!1,h=r!==-1,d=-1,_=Ox(yi(e,0))&&Fx(yi(e,e.length-1));if(t||o)for(a=0;a=65536?a+=2:a++){if(c=yi(e,a),!eo(c))return xs;_=_&&Hp(c,u,l),u=c}else{for(a=0;a=65536?a+=2:a++){if(c=yi(e,a),c===Qi)f=!0,h&&(p=p||a-d-1>r&&e[d+1]!==" ",d=a);else if(!eo(c))return xs;_=_&&Hp(c,u,l),u=c}p=p||h&&a-d-1>r&&e[d+1]!==" "}return!f&&!p?_&&!o&&!s(e)?V1:i===Ji?xs:Hc:n>9&&j1(e)?xs:o?i===Ji?xs:Hc:p?W1:q1}function Px(e,t,n,r,s){e.dump=function(){if(t.length===0)return e.quotingType===Ji?'""':"''";if(!e.noCompatMode&&(Sx.indexOf(t)!==-1||xx.test(t)))return e.quotingType===Ji?'"'+t+'"':"'"+t+"'";var i=e.indent*Math.max(1,n),o=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-i),l=r||e.flowLevel>-1&&n>=e.flowLevel;function a(c){return Nx(e,c)}switch(Rx(t,l,e.indent,o,a,e.quotingType,e.forceQuotes&&!r,s)){case V1:return t;case Hc:return"'"+t.replace(/'/g,"''")+"'";case q1:return"|"+jp(t,e.indent)+Vp(zp(t,i));case W1:return">"+jp(t,e.indent)+Vp(zp(Mx(t,o),i));case xs:return'"'+$x(t)+'"';default:throw new Vt("impossible error: invalid scalar style")}}()}function jp(e,t){var n=j1(e)?String(t):"",r=e[e.length-1]===` +`,s=r&&(e[e.length-2]===` +`||e===` +`),i=s?"+":r?"":"-";return n+i+` +`}function Vp(e){return e[e.length-1]===` +`?e.slice(0,-1):e}function Mx(e,t){for(var n=/(\n+)([^\n]*)/g,r=function(){var c=e.indexOf(` +`);return c=c!==-1?c:e.length,n.lastIndex=c,qp(e.slice(0,c),t)}(),s=e[0]===` +`||e[0]===" ",i,o;o=n.exec(e);){var l=o[1],a=o[2];i=a[0]===" ",r+=l+(!s&&!i&&a!==""?` +`:"")+qp(a,t),s=i}return r}function qp(e,t){if(e===""||e[0]===" ")return e;for(var n=/ [^ ]/g,r,s=0,i,o=0,l=0,a="";r=n.exec(e);)l=r.index,l-s>t&&(i=o>s?o:l,a+=` +`+e.slice(s,i),s=i+1),o=l;return a+=` +`,e.length-s>t&&o>s?a+=e.slice(s,o)+` +`+e.slice(o+1):a+=e.slice(s),a.slice(1)}function $x(e){for(var t="",n=0,r,s=0;s=65536?s+=2:s++)n=yi(e,s),r=$t[n],!r&&eo(n)?(t+=e[s],n>=65536&&(t+=e[s+1])):t+=r||Ix(n);return t}function Bx(e,t,n){var r="",s=e.tag,i,o,l;for(i=0,o=n.length;i"u"&&_r(e,t,null,!1,!1))&&(r!==""&&(r+=","+(e.condenseFlow?"":" ")),r+=e.dump);e.tag=s,e.dump="["+r+"]"}function Wp(e,t,n,r){var s="",i=e.tag,o,l,a;for(o=0,l=n.length;o"u"&&_r(e,t+1,null,!0,!0,!1,!0))&&((!r||s!=="")&&(s+=Uc(e,t)),e.dump&&Qi===e.dump.charCodeAt(0)?s+="-":s+="- ",s+=e.dump);e.tag=i,e.dump=s||"[]"}function zx(e,t,n){var r="",s=e.tag,i=Object.keys(n),o,l,a,c,u;for(o=0,l=i.length;o1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),_r(e,t,c,!1,!1)&&(u+=e.dump,r+=u));e.tag=s,e.dump="{"+r+"}"}function Ux(e,t,n,r){var s="",i=e.tag,o=Object.keys(n),l,a,c,u,f,p;if(e.sortKeys===!0)o.sort();else if(typeof e.sortKeys=="function")o.sort(e.sortKeys);else if(e.sortKeys)throw new Vt("sortKeys must be a boolean or a function");for(l=0,a=o.length;l1024,f&&(e.dump&&Qi===e.dump.charCodeAt(0)?p+="?":p+="? "),p+=e.dump,f&&(p+=Uc(e,t)),_r(e,t+1,u,!0,f)&&(e.dump&&Qi===e.dump.charCodeAt(0)?p+=":":p+=": ",p+=e.dump,s+=p));e.tag=i,e.dump=s||"{}"}function Kp(e,t,n){var r,s,i,o,l,a;for(s=n?e.explicitTypes:e.implicitTypes,i=0,o=s.length;i tag resolver accepts not "'+a+'" style');e.dump=r}return!0}return!1}function _r(e,t,n,r,s,i,o){e.tag=null,e.dump=n,Kp(e,n,!1)||Kp(e,n,!0);var l=P1.call(e.dump),a=r,c;r&&(r=e.flowLevel<0||e.flowLevel>t);var u=l==="[object Object]"||l==="[object Array]",f,p;if(u&&(f=e.duplicates.indexOf(n),p=f!==-1),(e.tag!==null&&e.tag!=="?"||p||e.indent!==2&&t>0)&&(s=!1),p&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(u&&p&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),l==="[object Object]")r&&Object.keys(e.dump).length!==0?(Ux(e,t,e.dump,s),p&&(e.dump="&ref_"+f+e.dump)):(zx(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if(l==="[object Array]")r&&e.dump.length!==0?(e.noArrayIndent&&!o&&t>0?Wp(e,t-1,e.dump,s):Wp(e,t,e.dump,s),p&&(e.dump="&ref_"+f+e.dump)):(Bx(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if(l==="[object String]")e.tag!=="?"&&Px(e,e.dump,t,i,a);else{if(l==="[object Undefined]"||e.skipInvalid)return!1;throw new Vt("unacceptable kind of an object to dump "+l)}e.tag!==null&&e.tag!=="?"&&(c=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?c="!"+c:c.slice(0,18)==="tag:yaml.org,2002:"?c="!!"+c.slice(18):c="!<"+c+">",e.dump=c+" "+e.dump)}return!0}function Hx(e,t){var n=[],r=[],s,i;for(jc(e,n,r),s=0,i=r.length;s{e.models[s]&&(e.models[s]={...e.models[s],...r.models[s]})}),r.provider&&(e.provider=r.provider),r.systemPrompt}return an=e,an}catch(e){console.error("❌ AI配置加载失败,使用默认配置:",e)}return an=Wo,an}function pa(){return an||Wo}function lT(){return an=null,K1()}function vs(e){an={...an,...e};const t={...an};return delete t.systemPrompt,localStorage.setItem("vue-docs-ai-config",JSON.stringify(t)),an}function sO(){const e=pa();return{provider:e.provider,...e.models[e.provider]}}function G1(e){var t;const n=[],r=Object.values(tr);(!e.provider||!r.includes(e.provider))&&n.push("settings.errors.invalidProvider");const s=(t=e.models)==null?void 0:t[e.provider];return s?((!s.apiKey||s.apiKey.trim()==="")&&n.push("settings.errors.missingApiKey"),(!s.modelId||s.modelId.trim()==="")&&n.push("settings.errors.missingModelId"),(!s.baseUrl||s.baseUrl.trim()==="")&&n.push("settings.errors.missingBaseUrl")):n.push("settings.errors.missingProviderConfig"),{isValid:n.length===0,errors:n}}async function aT(){const e=G1(pa());if(!e.isValid)return{success:!1,message:e.errors.join(", ")};try{const{testAIConnection:t}=await A0(()=>import("./aiService-C9Fe_Phd-d1533d53.js"),[]);return await t()}catch(t){return{success:!1,message:`settings.errors.connectionFailed: ${t.message}`}}}typeof window<"u"&&(window.debugAI={async reloadConfig(){return await lT()},async testSystemPrompt(){return(await K1()).systemPrompt},getCurrentConfig(){return pa()},clearCache(){an=null},checkLocalStorage(){const e=localStorage.getItem("vue-docs-ai-config");if(e){const t=JSON.parse(e);return t.systemPrompt,t}else return null},cleanLocalStorage(){localStorage.removeItem("vue-docs-ai-config")},async fullReset(){return this.cleanLocalStorage(),this.clearCache(),await this.reloadConfig()}});let lt=null,Ko=null;function Y1(){lt=null,Ko=null}function cT(){return localStorage.getItem("language")||((navigator.language||navigator.userLanguage).startsWith("zh")?"zh":"en")}async function ii(e=null){const t=e||cT();if(Ko&&Ko!==t&&Y1(),Ko=t,lt)return lt;try{const n=await fetch(t==="en"?"/config/site.en.yaml":"/config/site.yaml");if(!n.ok)throw new Error(`HTTP ${n.status}: ${n.statusText}`);const r=await n.text();if(lt=oT.load(r),!lt)throw new Error("YAML解析返回空值");return Yp(lt),lt}catch(n){return console.error("配置加载失败,使用默认配置:",n),lt=pT(t),Yp(lt),lt}}function of(){return(lt==null?void 0:lt.site)||{}}function Z1(){return(lt==null?void 0:lt.navbar)||{}}function uT(){return(lt==null?void 0:lt.sidebar)||{}}function Gp(){return(lt==null?void 0:lt.toc)||{maxLevel:2,enabled:!0,title:"目录"}}function fT(){if(!lt)return{enabled:!0,copyright:"© 2024 Documentation Site. All rights reserved.",links:[],social:[],repository:{url:"https://github.com/shenjianZ/vue-docs-ui",branch:"master"}};const e=lt.footer||{enabled:!0,copyright:"© 2024 Documentation Site. All rights reserved.",links:[],social:[],repository:{url:"https://github.com/shenjianZ/vue-docs-ui",branch:"master"}};return e.repository||(e.repository={url:"https://github.com/shenjianZ/vue-docs-ui",branch:"master"}),e}async function hT(e){return Y1(),await ii(e)}function Yp(e){const t=(e==null?void 0:e.theme)||{};if(!t.theme&&!t.defaultMode)return;const n=document.body;t.theme&&t.theme!=="default"&&(n.classList.remove("theme-vue","theme-github","theme-purple","theme-orange","theme-emerald"),n.classList.add(`theme-${t.theme}`)),t.defaultMode&&(t.defaultMode==="dark"?n.classList.add("dark"):t.defaultMode==="light"?n.classList.remove("dark"):t.defaultMode==="auto"&&(window.matchMedia("(prefers-color-scheme: dark)").matches?n.classList.add("dark"):n.classList.remove("dark")))}function pT(e="zh"){const t=e==="en";return{site:{title:t?"Documentation Site":"文档网站",description:t?"Vue-based documentation site":"基于Vue的文档网站",logo:"📚",author:"Author"},navbar:{items:[{title:t?"Home":"首页",link:"/",active:!0}]},sidebar:{sections:[{title:t?"Chapter 1: Machine Learning Basics":"第一章 机器学习基础",path:"/chapter1",children:[{title:t?"1.1 The Two Hands and Four Legs of AI":"1.1 人工智能的两只手和四条腿",path:"/chapter1/ai-basics"},{title:t?"1.2 What is Machine Learning":"1.2 机器学习是什么",path:"/chapter1/what-is-ml"},{title:t?"1.3 The Era That Created Machine Learning":"1.3 时代造就机器学习",path:"/chapter1/era-of-ml"}]}]},theme:{colors:{primary:"#3b82f6",secondary:"#64748b",accent:"#06b6d4",background:"#ffffff",surface:"#f8fafc",text:"#1e293b",textSecondary:"#64748b",border:"#e2e8f0"},fonts:{primary:"Inter, sans-serif",mono:"JetBrains Mono, monospace"}},toc:{maxLevel:2,enabled:!0,title:t?"Table of Contents":"目录"}}}const da=[{code:"zh",name:"中文",flag:"🇨🇳"},{code:"en",name:"English",flag:"🇺🇸"}];function dT(){const e=localStorage.getItem("vue-docs-locale");return e&&da.find(t=>t.code===e)?e:navigator.language.toLowerCase().startsWith("zh")?"zh":"en"}const lf=TA({locale:dT(),fallbackLocale:"en",messages:{zh:BA,en:zA},legacy:!1});async function mT(e){if(da.find(t=>t.code===e)){lf.global.locale.value=e,localStorage.setItem("vue-docs-locale",e),localStorage.setItem("language",e),document.documentElement.lang=e;try{await hT(e),window.dispatchEvent(new CustomEvent("locale-changed",{detail:{locale:e}}))}catch(t){console.error("❌ 重新加载配置失败:",t)}}}function gT(){return lf.global.locale.value}function _T(e){return da.find(t=>t.code===e)}/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zp=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),yT=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,r)=>r?r.toUpperCase():n.toLowerCase()),bT=e=>{const t=yT(e);return t.charAt(0).toUpperCase()+t.slice(1)},kT=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var Oo={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vT=({size:e,strokeWidth:t=2,absoluteStrokeWidth:n,color:r,iconNode:s,name:i,class:o,...l},{slots:a})=>Dt("svg",{...Oo,width:e||Oo.width,height:e||Oo.height,stroke:r||Oo.stroke,"stroke-width":n?Number(t)*24/Number(e):t,class:kT("lucide",...i?[`lucide-${Zp(bT(i))}-icon`,`lucide-${Zp(i)}`]:["lucide-icon"]),...l},[...s.map(c=>Dt(...c)),...a.default?[a.default()]:[]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Le=(e,t)=>(n,{slots:r})=>Dt(vT,{...n,iconNode:t,name:e},r);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ET=Le("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const af=Le("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X1=Le("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q1=Le("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const CT=Le("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wT=Le("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const AT=Le("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ST=Le("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xT=Le("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const TT=Le("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IT=Le("file-search",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3",key:"ms7g94"}],["path",{d:"m9 18-1.5-1.5",key:"1j6qii"}],["circle",{cx:"5",cy:"14",r:"3",key:"ufru5t"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J1=Le("file-text",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e_=Le("github",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const LT=Le("mail",[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DT=Le("menu",[["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 18h16",key:"19g7jn"}],["path",{d:"M4 6h16",key:"1o0s65"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sl=Le("message-circle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t_=Le("moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const NT=Le("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OT=Le("pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FT=Le("play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RT=Le("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PT=Le("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cf=Le("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n_=Le("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MT=Le("settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r_=Le("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $T=Le("thumbs-down",[["path",{d:"M17 14V2",key:"8ymqnk"}],["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z",key:"m61m77"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xp=Le("thumbs-up",[["path",{d:"M7 10v12",key:"1qc93n"}],["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z",key:"emmmcr"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const BT=Le("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zT=Le("twitter",[["path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z",key:"pff0z6"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const UT=Le("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ma=Le("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** + * @license lucide-vue-next v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const HT=Le("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),rn=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},jT={name:"LanguageSwitcher",components:{ChevronDown:Q1,Check:X1},setup(){const{locale:e,t}=mn(),n=te(!1),r=te(null),s=pe(()=>gT()),i=pe(()=>_T(s.value)),o=()=>{n.value=!n.value},l=u=>{mT(u),n.value=!1},a=u=>{r.value&&!r.value.contains(u.target)&&(n.value=!1)},c=u=>{u.key==="Escape"&&n.value&&(n.value=!1)};return gt(()=>{document.addEventListener("click",a),document.addEventListener("keydown",c)}),Mt(()=>{document.removeEventListener("click",a),document.removeEventListener("keydown",c)}),{isOpen:n,switcherRef:r,currentLocale:s,currentLocaleInfo:i,SUPPORTED_LOCALES:da,toggleDropdown:o,switchLanguage:l,t}}},VT={class:"language-switcher",ref:"switcherRef"},qT=["title","aria-expanded"],WT={class:"current-flag"},KT={class:"current-name"},GT={key:0,class:"language-dropdown"},YT={class:"dropdown-header"},ZT={class:"language-list"},XT=["onClick","aria-pressed"],QT={class:"locale-flag"},JT={class:"locale-name"};function e3(e,t,n,r,s,i){var o,l;const a=$e("ChevronDown"),c=$e("Check");return B(),q("div",VT,[I("button",{class:"language-btn",onClick:t[0]||(t[0]=(...u)=>r.toggleDropdown&&r.toggleDropdown(...u)),title:r.t("nav.language"),"aria-expanded":r.isOpen,"aria-haspopup":"true"},[I("span",WT,W((o=r.currentLocaleInfo)==null?void 0:o.flag),1),I("span",KT,W((l=r.currentLocaleInfo)==null?void 0:l.name),1),X(a,{size:14,class:Se(["dropdown-icon",{rotate:r.isOpen}])},null,8,["class"])],8,qT),X(Xl,{name:"dropdown"},{default:Ot(()=>[r.isOpen?(B(),q("div",GT,[I("div",YT,[I("span",null,W(r.t("nav.language")),1)]),I("ul",ZT,[(B(!0),q(Ce,null,wt(r.SUPPORTED_LOCALES,u=>(B(),q("li",{key:u.code,class:Se(["language-item",{active:u.code===r.currentLocale}])},[I("button",{class:"language-option",onClick:f=>r.switchLanguage(u.code),"aria-pressed":u.code===r.currentLocale},[I("span",QT,W(u.flag),1),I("span",JT,W(u.name),1),u.code===r.currentLocale?(B(),Be(c,{key:0,size:16,class:"check-icon"})):de("",!0)],8,XT)],2))),128))])])):de("",!0)]),_:1})],512)}const t3=rn(jT,[["render",e3],["__scopeId","data-v-1ebf0c47"]]),n3={key:0,class:"theme-switcher"},r3={class:"theme-label"},s3={key:0,class:"theme-dropdown"},i3={key:0,class:"theme-options"},o3=["onClick"],l3={class:"theme-preview"},a3={class:"theme-info"},c3={class:"theme-name"},u3={class:"theme-desc"},f3={key:1,class:"theme-modes"},h3={__name:"ThemeSwitcher",props:{visible:{type:Boolean,default:!0},allowThemeToggle:{type:Boolean,default:!0},allowModeToggle:{type:Boolean,default:!0}},setup(e){const{t}=mn(),n=e,r=tt("docsConfig",{}),s=te(!1),i=te("default"),o=te(!1),l=pe(()=>[{id:"default",name:t("theme.themes.default.name"),description:t("theme.themes.default.description"),colors:{primary:"#3b82f6",accent:"#10b981"}},{id:"vue",name:t("theme.themes.vue.name"),description:t("theme.themes.vue.description"),colors:{primary:"#41b883",accent:"#35495e"}},{id:"github",name:t("theme.themes.github.name"),description:t("theme.themes.github.description"),colors:{primary:"#0969da",accent:"#6f42c1"}},{id:"purple",name:t("theme.themes.purple.name"),description:t("theme.themes.purple.description"),colors:{primary:"#8b5cf6",accent:"#ec4899"}},{id:"orange",name:t("theme.themes.orange.name"),description:t("theme.themes.orange.description"),colors:{primary:"#ea580c",accent:"#dc2626"}},{id:"emerald",name:t("theme.themes.emerald.name"),description:t("theme.themes.emerald.description"),colors:{primary:"#059669",accent:"#0d9488"}}]),a=pe(()=>{const m=l.value.find(y=>y.id===i.value);return m?m.name:t("theme.themes.default.name")}),c=pe(()=>{if(!n.visible)return!1;const m=(r==null?void 0:r.theme)||{};return!(m.showThemeSwitcher===!1||m.allowToggle===!1&&!n.allowThemeToggle&&!n.allowModeToggle)}),u=()=>{s.value=!s.value,s.value&&qn(()=>{f()})},f=()=>{const m=document.querySelector(".theme-switcher"),y=document.querySelector(".theme-dropdown");if(!m||!y||window.innerWidth>768)return;const k=m.getBoundingClientRect(),T=240,L=window.innerWidth,A=16;m.classList.remove("align-left","align-right"),k.right-TL-A,m.classList.add("align-right"))},p=()=>{s.value=!1},h=m=>{i.value=m,_(),p(),localStorage.setItem("vue-docs-theme",m)},d=()=>{o.value=!o.value,_(),localStorage.setItem("vue-docs-dark",o.value.toString())},_=()=>{const m=document.body;m.classList.remove("theme-vue","theme-github","theme-purple","theme-orange","theme-emerald"),i.value!=="default"&&m.classList.add(`theme-${i.value}`),o.value?m.classList.add("dark"):m.classList.remove("dark")},C=()=>{const m=(r==null?void 0:r.theme)||{},y=localStorage.getItem("vue-docs-theme"),k=localStorage.getItem("vue-docs-dark");y&&l.value.find(T=>T.id===y)?i.value=y:m.theme&&l.value.find(T=>T.id===m.theme)&&(i.value=m.theme),k!==null?o.value=k==="true":m.defaultMode?m.defaultMode==="dark"?o.value=!0:m.defaultMode==="light"?o.value=!1:m.defaultMode==="auto"&&(o.value=window.matchMedia("(prefers-color-scheme: dark)").matches):o.value=window.matchMedia("(prefers-color-scheme: dark)").matches,_()},S=m=>{m.key==="Escape"&&s.value&&p()},b=()=>{s.value&&f()},g=()=>{};return gt(()=>{C(),document.addEventListener("keydown",S),window.addEventListener("resize",b),window.addEventListener("locale-changed",g)}),Mt(()=>{document.removeEventListener("keydown",S),window.removeEventListener("resize",b),window.removeEventListener("locale-changed",g)}),(m,y)=>c.value?(B(),q("div",n3,[I("button",{class:Se(["theme-button",{active:s.value}]),onClick:u,"aria-label":"切换主题"},[X(Q(NT),{size:20}),I("span",r3,W(a.value),1),X(Q(Q1),{size:16,class:Se({rotated:s.value})},null,8,["class"])],2),s.value?(B(),q("div",s3,[n.allowThemeToggle?(B(),q("div",i3,[(B(!0),q(Ce,null,wt(l.value,k=>(B(),q("div",{key:k.id,class:Se(["theme-option",{active:i.value===k.id}]),onClick:T=>h(k.id)},[I("div",l3,[I("div",{class:"color-dot primary",style:Vn({backgroundColor:k.colors.primary})},null,4),I("div",{class:"color-dot accent",style:Vn({backgroundColor:k.colors.accent})},null,4)]),I("div",a3,[I("div",c3,W(k.name),1),I("div",u3,W(k.description),1)]),i.value===k.id?(B(),Be(Q(X1),{key:0,size:16,class:"check-icon"})):de("",!0)],10,o3))),128))])):de("",!0),n.allowModeToggle?(B(),q("div",f3,[I("button",{class:Se(["mode-button",{active:o.value}]),onClick:d},[o.value?(B(),Be(Q(r_),{key:0,size:16})):(B(),Be(Q(t_),{key:1,size:16})),I("span",null,W(o.value?Q(t)("theme.lightMode"):Q(t)("theme.darkMode")),1)],2)])):de("",!0)])):de("",!0),s.value?(B(),q("div",{key:1,class:"backdrop",onClick:p})):de("",!0)])):de("",!0)}},s_=rn(h3,[["__scopeId","data-v-55b2f18a"]]),p3={name:"HeaderNav",components:{Search:cf,Sun:r_,Moon:t_,Menu:DT,Github:e_,Bot:af,LanguageSwitcher:t3,ThemeSwitcher:s_},props:{config:{type:Object,default:()=>({})}},emits:["toggle-sidebar","toggle-ai","toggle-search"],setup(e,{emit:t}){const n=la(),r=ri(),{t:s}=mn(),i=Ht({}),o=te([]),l=te(!1),a=e.config||tt("docsConfig",{}),c=pe(()=>a.theme||{}),u=pe(()=>!(c.value.showThemeSwitcher===!1||c.value.allowToggle===!1)),f=pe(()=>c.value.allowToggle!==!1),p=pe(()=>c.value.allowToggle!==!1),h=L=>{if(!L||typeof L!="string")return!1;const A=L.match(/^(https?:\/\/|\/|\.\/|\.\.\/)/i),O=L.match(/\.(jpg|jpeg|png|gif|svg|webp|ico)(\?.*)?$/i);return!!A&&!!O},d=async()=>{await ii(),Object.assign(i,of()),o.value=Z1().items||[]},_=()=>{d()};gt(async()=>{await d(),l.value=document.documentElement.classList.contains("dark"),window.addEventListener("locale-changed",_)}),Mt(()=>{window.removeEventListener("locale-changed",_)});const C=L=>{L.external||n.push(L.link)},S=()=>{t("toggle-search")},b=()=>{t("toggle-ai")},g=()=>{t("toggle-sidebar")},m=L=>{if(!L.link||L.external)return!1;const A=r.path;return!!(A===L.link||L.link==="/"&&A==="/"||L.link!=="/"&&a.sidebar&&y(A,L,a.sidebar)||L.link!=="/"&&A.startsWith(L.link))},y=(L,A,O)=>{if(!O.sections)return!1;for(const H of O.sections)if(k(A,H)&&T(L,H))return!0;return!1},k=(L,A)=>A.path?L.link.startsWith(A.path)||A.path.startsWith(L.link):A.children?A.children.some(O=>O.path===L.link||L.link.startsWith(O.path)):!1,T=(L,A)=>A.path&&L.startsWith(A.path)?!0:A.children?A.children.some(O=>O.path&&(L===O.path||L.startsWith(O.path+"/"))):!1;return{siteInfo:i,navItems:o,isDark:l,shouldShowThemeSwitcher:u,allowThemeToggle:f,allowModeToggle:p,isImageLogo:h,handleNavClick:C,toggleSearch:S,toggleAI:b,toggleMobileMenu:g,isActiveNavItem:m,checkIfPathBelongsToNavItem:y,isNavItemRelatedToSection:k,isPathInSection:T,t:s}}},d3={class:"header-nav"},m3={class:"nav-container"},g3={class:"nav-brand"},_3={class:"brand-logo"},y3=["src","alt"],b3={key:1,class:"logo-text"},k3={class:"brand-title"},v3={class:"nav-menu"},E3={class:"nav-items"},C3=["href","target","onClick"],w3={key:0,class:"nav-icon"},A3={class:"nav-actions"},S3=["title"],x3=["title"],T3=["title"];function I3(e,t,n,r,s,i){const o=$e("router-link"),l=$e("Github"),a=$e("Search"),c=$e("Bot"),u=$e("LanguageSwitcher"),f=$e("ThemeSwitcher"),p=$e("Menu");return B(),q("header",d3,[I("div",m3,[I("div",g3,[X(o,{to:"/",class:"brand-link"},{default:Ot(()=>[I("div",_3,[r.isImageLogo(r.siteInfo.logo)?(B(),q("img",{key:0,src:r.siteInfo.logo,alt:r.siteInfo.title,class:"logo-image"},null,8,y3)):(B(),q("span",b3,W(r.siteInfo.logo),1))]),I("span",k3,W(r.siteInfo.title),1)]),_:1})]),I("nav",v3,[I("ul",E3,[(B(!0),q(Ce,null,wt(r.navItems,h=>(B(),q("li",{key:h.title,class:"nav-item"},[I("a",{href:h.external?h.link:void 0,class:Se(["nav-link",{active:r.isActiveNavItem(h)}]),target:h.external?"_blank":void 0,onClick:d=>!h.external&&r.handleNavClick(h)},[h.icon?(B(),q("span",w3,[h.icon==="github"?(B(),Be(l,{key:0,size:20})):de("",!0)])):de("",!0),We(" "+W(h.title),1)],10,C3)]))),128))])]),I("div",A3,[I("button",{class:"search-btn",onClick:t[0]||(t[0]=(...h)=>r.toggleSearch&&r.toggleSearch(...h)),title:r.t("common.search")},[X(a,{size:20})],8,S3),I("button",{class:"ai-btn",onClick:t[1]||(t[1]=(...h)=>r.toggleAI&&r.toggleAI(...h)),title:r.t("ai.assistant")},[X(c,{size:20})],8,x3),X(u),r.shouldShowThemeSwitcher?(B(),Be(f,{key:0,visible:r.shouldShowThemeSwitcher,allowThemeToggle:r.allowThemeToggle,allowModeToggle:r.allowModeToggle},null,8,["visible","allowThemeToggle","allowModeToggle"])):de("",!0),I("button",{class:"mobile-menu-btn",onClick:t[2]||(t[2]=(...h)=>r.toggleMobileMenu&&r.toggleMobileMenu(...h)),title:r.t("common.menu")},[X(p,{size:24})],8,T3)])])])}const i_=rn(p3,[["render",I3],["__scopeId","data-v-1e4645ae"]]),L3={template:` + + + + `},D3={name:"SidebarNav",components:{ChevronIcon:L3},props:{isOpen:{type:Boolean,default:!1},uniqueExpansion:{type:Boolean,default:!0}},emits:["close"],setup(e,{emit:t}){const n=ri(),r=te([]),s=Ht(new Set),i=u=>{if(!u)return!1;const f=n.path;return!!(f===u||u!=="/books"&&f.startsWith(u+"/"))},o=u=>{var f;((f=u.children)==null?void 0:f.length)>0&&(s.has(u.title)?s.delete(u.title):(e.uniqueExpansion&&s.clear(),s.add(u.title)))},l=()=>{const u=n.path;s.clear(),r.value.forEach(f=>{var p,h;(f.path&&u.startsWith(f.path)||(p=f.children)!=null&&p.some(d=>u===d.path||u.startsWith(d.path+"/")))&&((h=f.children)==null?void 0:h.length)>0&&s.add(f.title)})},a=async()=>{try{await ii();const u=uT();u&&u.sections&&(r.value=u.sections,l())}catch(u){console.error("Failed to load sidebar config:",u)}},c=()=>{a()};return gt(()=>{a(),window.addEventListener("locale-changed",c)}),Mt(()=>{window.removeEventListener("locale-changed",c)}),At(()=>n.path,()=>{l()}),{sections:r,expandedSections:s,isActive:i,toggleSection:o}}},N3={class:"sidebar-content"},O3={class:"nav-sections"},F3={class:"section-title"},R3=["onClick"],P3={class:"section-title"},M3={key:0,class:"section-children"},$3={class:"child-title"};function B3(e,t,n,r,s,i){const o=$e("ChevronIcon"),l=$e("router-link");return B(),q("aside",{class:Se(["sidebar-nav",{"mobile-open":n.isOpen}])},[I("div",N3,[I("nav",O3,[(B(!0),q(Ce,null,wt(r.sections,a=>{var c,u,f;return B(),q("div",{key:a.title,class:"nav-section"},[a.path?(B(),Be(l,{key:0,to:a.path,class:Se(["section-link",{active:r.isActive(a.path),"has-children":((c=a.children)==null?void 0:c.length)>0}]),onClick:p=>r.toggleSection(a)},{default:Ot(()=>{var p;return[I("span",F3,W(a.title),1),((p=a.children)==null?void 0:p.length)>0?(B(),Be(o,{key:0,class:Se(["chevron-icon",{expanded:r.expandedSections.has(a.title)}])},null,8,["class"])):de("",!0)]}),_:2},1032,["to","class","onClick"])):(B(),q("div",{key:1,class:Se(["section-link","section-header",{"has-children":((u=a.children)==null?void 0:u.length)>0}]),onClick:p=>r.toggleSection(a)},[I("span",P3,W(a.title),1),((f=a.children)==null?void 0:f.length)>0?(B(),Be(o,{key:0,class:Se(["chevron-icon",{expanded:r.expandedSections.has(a.title)}])},null,8,["class"])):de("",!0)],10,R3)),X(Xl,{name:"children-slide"},{default:Ot(()=>{var p;return[((p=a.children)==null?void 0:p.length)>0&&r.expandedSections.has(a.title)?(B(),q("div",M3,[(B(!0),q(Ce,null,wt(a.children,h=>(B(),Be(l,{key:h.title,to:h.path,class:Se(["child-link",{active:r.isActive(h.path)}])},{default:Ot(()=>[I("span",$3,W(h.title),1)]),_:2},1032,["to","class"]))),128))])):de("",!0)]}),_:2},1024)])}),128))])])],2)}const o_=rn(D3,[["render",B3],["__scopeId","data-v-8d878718"]]),Qp={};function z3(e){let t=Qp[e];if(t)return t;t=Qp[e]=[];for(let n=0;n<128;n++){const r=String.fromCharCode(n);t.push(r)}for(let n=0;n=55296&&u<=57343?s+="���":s+=String.fromCharCode(u),i+=6;continue}}if((l&248)===240&&i+91114111?s+="����":(f-=65536,s+=String.fromCharCode(55296+(f>>10),56320+(f&1023))),i+=9;continue}}s+="�"}return s})}Qs.defaultChars=";/?:@&=+$,#";Qs.componentChars="";const Jp={};function U3(e){let t=Jp[e];if(t)return t;t=Jp[e]=[];for(let n=0;n<128;n++){const r=String.fromCharCode(n);/^[0-9a-z]$/i.test(r)?t.push(r):t.push("%"+("0"+n.toString(16).toUpperCase()).slice(-2))}for(let n=0;n"u"&&(n=!0);const r=U3(t);let s="";for(let i=0,o=e.length;i=55296&&l<=57343){if(l>=55296&&l<=56319&&i+1=56320&&a<=57343){s+=encodeURIComponent(e[i]+e[i+1]),i++;continue}}s+="%EF%BF%BD";continue}s+=encodeURIComponent(e[i])}return s}ho.defaultChars=";/?:@&=+$,-_.!~*'()#";ho.componentChars="-_.!~*'()";function uf(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function xl(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}const H3=/^([a-z0-9.+-]+:)/i,j3=/:[0-9]*$/,V3=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,q3=["<",">",'"',"`"," ","\r",` +`," "],W3=["{","}","|","\\","^","`"].concat(q3),K3=["'"].concat(W3),ed=["%","/","?",";","#"].concat(K3),td=["/","?","#"],G3=255,nd=/^[+a-z0-9A-Z_-]{0,63}$/,Y3=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,rd={javascript:!0,"javascript:":!0},sd={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function ff(e,t){if(e&&e instanceof xl)return e;const n=new xl;return n.parse(e,t),n}xl.prototype.parse=function(e,t){let n,r,s,i=e;if(i=i.trim(),!t&&e.split("#").length===1){const c=V3.exec(i);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}let o=H3.exec(i);if(o&&(o=o[0],n=o.toLowerCase(),this.protocol=o,i=i.substr(o.length)),(t||o||i.match(/^\/\/[^@\/]+@[^@\/]+/))&&(s=i.substr(0,2)==="//",s&&!(o&&rd[o])&&(i=i.substr(2),this.slashes=!0)),!rd[o]&&(s||o&&!sd[o])){let c=-1;for(let d=0;d127?b+="x":b+=S[g];if(!b.match(nd)){const g=d.slice(0,_),m=d.slice(_+1),y=S.match(Y3);y&&(g.push(y[1]),m.unshift(y[2])),m.length&&(i=m.join(".")+i),this.hostname=g.join(".");break}}}}this.hostname.length>G3&&(this.hostname=""),h&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}const l=i.indexOf("#");l!==-1&&(this.hash=i.substr(l),i=i.slice(0,l));const a=i.indexOf("?");return a!==-1&&(this.search=i.substr(a),i=i.slice(0,a)),i&&(this.pathname=i),sd[n]&&this.hostname&&!this.pathname&&(this.pathname=""),this};xl.prototype.parseHost=function(e){let t=j3.exec(e);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};const Z3=Object.freeze(Object.defineProperty({__proto__:null,decode:Qs,encode:ho,format:uf,parse:ff},Symbol.toStringTag,{value:"Module"})),l_=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,a_=/[\0-\x1F\x7F-\x9F]/,X3=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,hf=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,c_=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/,u_=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,Q3=Object.freeze(Object.defineProperty({__proto__:null,Any:l_,Cc:a_,Cf:X3,P:hf,S:c_,Z:u_},Symbol.toStringTag,{value:"Module"})),J3=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),e4=new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(e=>e.charCodeAt(0)));var Wa;const t4=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),n4=(Wa=String.fromCodePoint)!==null&&Wa!==void 0?Wa:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function r4(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=t4.get(e))!==null&&t!==void 0?t:e}var bt;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(bt||(bt={}));const s4=32;var Nr;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(Nr||(Nr={}));function Vc(e){return e>=bt.ZERO&&e<=bt.NINE}function i4(e){return e>=bt.UPPER_A&&e<=bt.UPPER_F||e>=bt.LOWER_A&&e<=bt.LOWER_F}function o4(e){return e>=bt.UPPER_A&&e<=bt.UPPER_Z||e>=bt.LOWER_A&&e<=bt.LOWER_Z||Vc(e)}function l4(e){return e===bt.EQUALS||o4(e)}var yt;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(yt||(yt={}));var Dr;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Dr||(Dr={}));class a4{constructor(t,n,r){this.decodeTree=t,this.emitCodePoint=n,this.errors=r,this.state=yt.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Dr.Strict}startEntity(t){this.decodeMode=t,this.state=yt.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,n){switch(this.state){case yt.EntityStart:return t.charCodeAt(n)===bt.NUM?(this.state=yt.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=yt.NamedEntity,this.stateNamedEntity(t,n));case yt.NumericStart:return this.stateNumericStart(t,n);case yt.NumericDecimal:return this.stateNumericDecimal(t,n);case yt.NumericHex:return this.stateNumericHex(t,n);case yt.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|s4)===bt.LOWER_X?(this.state=yt.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=yt.NumericDecimal,this.stateNumericDecimal(t,n))}addToNumericResult(t,n,r,s){if(n!==r){const i=r-n;this.result=this.result*Math.pow(s,i)+parseInt(t.substr(n,i),s),this.consumed+=i}}stateNumericHex(t,n){const r=n;for(;n>14;for(;n>14,i!==0){if(o===bt.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Dr.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:n,decodeTree:r}=this,s=(r[n]&Nr.VALUE_LENGTH)>>14;return this.emitNamedEntityData(n,s,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,r){const{decodeTree:s}=this;return this.emitCodePoint(n===1?s[t]&~Nr.VALUE_LENGTH:s[t+1],r),n===3&&this.emitCodePoint(s[t+2],r),r}end(){var t;switch(this.state){case yt.NamedEntity:return this.result!==0&&(this.decodeMode!==Dr.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case yt.NumericDecimal:return this.emitNumericEntity(0,2);case yt.NumericHex:return this.emitNumericEntity(0,3);case yt.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case yt.EntityStart:return 0}}}function f_(e){let t="";const n=new a4(e,r=>t+=n4(r));return function(r,s){let i=0,o=0;for(;(o=r.indexOf("&",o))>=0;){t+=r.slice(i,o),n.startEntity(s);const a=n.write(r,o+1);if(a<0){i=o+n.end();break}i=o+a,o=a===0?i+1:i}const l=t+r.slice(i);return t="",l}}function c4(e,t,n,r){const s=(t&Nr.BRANCH_LENGTH)>>7,i=t&Nr.JUMP_TABLE;if(s===0)return i!==0&&r===i?n:-1;if(i){const a=r-i;return a<0||a>=s?-1:e[n+a]-1}let o=n,l=o+s-1;for(;o<=l;){const a=o+l>>>1,c=e[a];if(cr)l=a-1;else return e[a+s]}return-1}const u4=f_(J3);f_(e4);function h_(e,t=Dr.Legacy){return u4(e,t)}function f4(e){return Object.prototype.toString.call(e)}function pf(e){return f4(e)==="[object String]"}const h4=Object.prototype.hasOwnProperty;function p4(e,t){return h4.call(e,t)}function ga(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if(typeof t!="object")throw new TypeError(t+"must be object");Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e}function p_(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function df(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function Tl(e){if(e>65535){e-=65536;const t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}const d_=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,d4=/&([a-z#][a-z0-9]{1,31});/gi,m4=new RegExp(d_.source+"|"+d4.source,"gi"),g4=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function _4(e,t){if(t.charCodeAt(0)===35&&g4.test(t)){const r=t[1].toLowerCase()==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return df(r)?Tl(r):e}const n=h_(e);return n!==e?n:e}function y4(e){return e.indexOf("\\")<0?e:e.replace(d_,"$1")}function Js(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(m4,function(t,n,r){return n||_4(t,r)})}const b4=/[&<>"]/,k4=/[&<>"]/g,v4={"&":"&","<":"<",">":">",'"':"""};function E4(e){return v4[e]}function jr(e){return b4.test(e)?e.replace(k4,E4):e}const C4=/[.?*+^$[\]\\(){}|-]/g;function w4(e){return e.replace(C4,"\\$&")}function Ge(e){switch(e){case 9:case 32:return!0}return!1}function to(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function no(e){return hf.test(e)||c_.test(e)}function ro(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function _a(e){return e=e.trim().replace(/\s+/g," "),"ẞ".toLowerCase()==="Ṿ"&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}const A4={mdurl:Z3,ucmicro:Q3},S4=Object.freeze(Object.defineProperty({__proto__:null,arrayReplaceAt:p_,assign:ga,escapeHtml:jr,escapeRE:w4,fromCodePoint:Tl,has:p4,isMdAsciiPunct:ro,isPunctChar:no,isSpace:Ge,isString:pf,isValidEntityCode:df,isWhiteSpace:to,lib:A4,normalizeReference:_a,unescapeAll:Js,unescapeMd:y4},Symbol.toStringTag,{value:"Module"}));function x4(e,t,n){let r,s,i,o;const l=e.posMax,a=e.pos;for(e.pos=t+1,r=1;e.pos32))return i;if(r===41){if(o===0)break;o--}s++}return t===s||o!==0||(i.str=Js(e.slice(t,s)),i.pos=s,i.ok=!0),i}function I4(e,t,n,r){let s,i=t;const o={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(r)o.str=r.str,o.marker=r.marker;else{if(i>=n)return o;let l=e.charCodeAt(i);if(l!==34&&l!==39&&l!==40)return o;t++,i++,l===40&&(l=41),o.marker=l}for(;i"+jr(i.content)+""};Kn.code_block=function(e,t,n,r,s){const i=e[t];return""+jr(e[t].content)+` +`};Kn.fence=function(e,t,n,r,s){const i=e[t],o=i.info?Js(i.info).trim():"";let l="",a="";if(o){const u=o.split(/(\s+)/g);l=u[0],a=u.slice(2).join("")}let c;if(n.highlight?c=n.highlight(i.content,l,a)||jr(i.content):c=jr(i.content),c.indexOf("${c} +`}return`
${c}
+`};Kn.image=function(e,t,n,r,s){const i=e[t];return i.attrs[i.attrIndex("alt")][1]=s.renderInlineAsText(i.children,n,r),s.renderToken(e,t,n)};Kn.hardbreak=function(e,t,n){return n.xhtmlOut?`
+`:`
+`};Kn.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?`
+`:`
+`:` +`};Kn.text=function(e,t){return jr(e[t].content)};Kn.html_block=function(e,t){return e[t].content};Kn.html_inline=function(e,t){return e[t].content};function oi(){this.rules=ga({},Kn)}oi.prototype.renderAttrs=function(e){let t,n,r;if(!e.attrs)return"";for(r="",t=0,n=e.attrs.length;t +`:">",s};oi.prototype.renderInline=function(e,t,n){let r="";const s=this.rules;for(let i=0,o=e.length;i=0&&(n=this.attrs[t][1]),n};On.prototype.attrJoin=function(e,t){const n=this.attrIndex(e);n<0?this.attrPush([e,t]):this.attrs[n][1]=this.attrs[n][1]+" "+t};function m_(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}m_.prototype.Token=On;const D4=/\r\n?|\n/g,N4=/\0/g;function O4(e){let t;t=e.src.replace(D4,` +`),t=t.replace(N4,"�"),e.src=t}function F4(e){let t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}function R4(e){const t=e.tokens;for(let n=0,r=t.length;n\s]/i.test(e)}function M4(e){return/^<\/a\s*>/i.test(e)}function $4(e){const t=e.tokens;if(e.md.options.linkify)for(let n=0,r=t.length;n=0;o--){const l=s[o];if(l.type==="link_close"){for(o--;s[o].level!==l.level&&s[o].type!=="link_open";)o--;continue}if(l.type==="html_inline"&&(P4(l.content)&&i>0&&i--,M4(l.content)&&i++),!(i>0)&&l.type==="text"&&e.md.linkify.test(l.content)){const a=l.content;let c=e.md.linkify.match(a);const u=[];let f=l.level,p=0;c.length>0&&c[0].index===0&&o>0&&s[o-1].type==="text_special"&&(c=c.slice(1));for(let h=0;hp){const y=new e.Token("text","",0);y.content=a.slice(p,S),y.level=f,u.push(y)}const b=new e.Token("link_open","a",1);b.attrs=[["href",_]],b.level=f++,b.markup="linkify",b.info="auto",u.push(b);const g=new e.Token("text","",0);g.content=C,g.level=f,u.push(g);const m=new e.Token("link_close","a",-1);m.level=--f,m.markup="linkify",m.info="auto",u.push(m),p=c[h].lastIndex}if(p=0;n--){const r=e[n];r.type==="text"&&!t&&(r.content=r.content.replace(z4,H4)),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function V4(e){let t=0;for(let n=e.length-1;n>=0;n--){const r=e[n];r.type==="text"&&!t&&g_.test(r.content)&&(r.content=r.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1—").replace(/(^|\s)--(?=\s|$)/mg,"$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1–")),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function q4(e){let t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)e.tokens[t].type==="inline"&&(B4.test(e.tokens[t].content)&&j4(e.tokens[t].children),g_.test(e.tokens[t].content)&&V4(e.tokens[t].children))}const W4=/['"]/,id=/['"]/g,od="’";function Fo(e,t,n){return e.slice(0,t)+n+e.slice(t+1)}function K4(e,t){let n;const r=[];for(let s=0;s=0&&!(r[n].level<=o);n--);if(r.length=n+1,i.type!=="text")continue;let l=i.content,a=0,c=l.length;e:for(;a=0)d=l.charCodeAt(u.index-1);else for(n=s-1;n>=0&&!(e[n].type==="softbreak"||e[n].type==="hardbreak");n--)if(e[n].content){d=e[n].content.charCodeAt(e[n].content.length-1);break}let _=32;if(a=48&&d<=57&&(p=f=!1),f&&p&&(f=C,p=S),!f&&!p){h&&(i.content=Fo(i.content,u.index,od));continue}if(p)for(n=r.length-1;n>=0;n--){let m=r[n];if(r[n].level=0;t--)e.tokens[t].type!=="inline"||!W4.test(e.tokens[t].content)||K4(e.tokens[t].children,e)}function Y4(e){let t,n;const r=e.tokens,s=r.length;for(let i=0;i0&&this.level++,this.tokens.push(r),r};Gn.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]};Gn.prototype.skipEmptyLines=function(e){for(let t=this.lineMax;et;)if(!Ge(this.src.charCodeAt(--e)))return e+1;return e};Gn.prototype.skipChars=function(e,t){for(let n=this.src.length;en;)if(t!==this.src.charCodeAt(--e))return e+1;return e};Gn.prototype.getLines=function(e,t,n,r){if(e>=t)return"";const s=new Array(t-e);for(let i=0,o=e;on?s[i]=new Array(l-n+1).join(" ")+this.src.slice(c,u):s[i]=this.src.slice(c,u)}return s.join("")};Gn.prototype.Token=On;const Z4=65536;function Ga(e,t){const n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];return e.src.slice(n,r)}function ld(e){const t=[],n=e.length;let r=0,s=e.charCodeAt(r),i=!1,o=0,l="";for(;rn)return!1;let s=t+1;if(e.sCount[s]=4)return!1;let i=e.bMarks[s]+e.tShift[s];if(i>=e.eMarks[s])return!1;const o=e.src.charCodeAt(i++);if(o!==124&&o!==45&&o!==58||i>=e.eMarks[s])return!1;const l=e.src.charCodeAt(i++);if(l!==124&&l!==45&&l!==58&&!Ge(l)||o===45&&Ge(l))return!1;for(;i=4)return!1;c=ld(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop();const f=c.length;if(f===0||f!==u.length)return!1;if(r)return!0;const p=e.parentType;e.parentType="table";const h=e.md.block.ruler.getRules("blockquote"),d=e.push("table_open","table",1),_=[t,0];d.map=_;const C=e.push("thead_open","thead",1);C.map=[t,t+1];const S=e.push("tr_open","tr",1);S.map=[t,t+1];for(let m=0;m=4||(c=ld(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop(),g+=f-c.length,g>Z4))break;if(s===t+2){const k=e.push("tbody_open","tbody",1);k.map=b=[t+2,0]}const y=e.push("tr_open","tr",1);y.map=[s,s+1];for(let k=0;k=4){r++,s=r;continue}break}e.line=s;const i=e.push("code_block","code",0);return i.content=e.getLines(t,s,4+e.blkIndent,!1)+` +`,i.map=[t,e.line],!0}function J4(e,t,n,r){let s=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||s+3>i)return!1;const o=e.src.charCodeAt(s);if(o!==126&&o!==96)return!1;let l=s;s=e.skipChars(s,o);let a=s-l;if(a<3)return!1;const c=e.src.slice(l,s),u=e.src.slice(s,i);if(o===96&&u.indexOf(String.fromCharCode(o))>=0)return!1;if(r)return!0;let f=t,p=!1;for(;f++,!(f>=n||(s=l=e.bMarks[f]+e.tShift[f],i=e.eMarks[f],s=4)&&(s=e.skipChars(s,o),!(s-l=4||e.src.charCodeAt(s)!==62)return!1;if(r)return!0;const l=[],a=[],c=[],u=[],f=e.md.block.ruler.getRules("blockquote"),p=e.parentType;e.parentType="blockquote";let h=!1,d;for(d=t;d=i)break;if(e.src.charCodeAt(s++)===62&&!g){let y=e.sCount[d]+1,k,T;e.src.charCodeAt(s)===32?(s++,y++,T=!1,k=!0):e.src.charCodeAt(s)===9?(k=!0,(e.bsCount[d]+y)%4===3?(s++,y++,T=!1):T=!0):k=!1;let L=y;for(l.push(e.bMarks[d]),e.bMarks[d]=s;s=i,a.push(e.bsCount[d]),e.bsCount[d]=e.sCount[d]+1+(k?1:0),c.push(e.sCount[d]),e.sCount[d]=L-y,u.push(e.tShift[d]),e.tShift[d]=s-e.bMarks[d];continue}if(h)break;let m=!1;for(let y=0,k=f.length;y";const S=[t,0];C.map=S,e.md.block.tokenize(e,t,d);const b=e.push("blockquote_close","blockquote",-1);b.markup=">",e.lineMax=o,e.parentType=p,S[1]=e.line;for(let g=0;g=4)return!1;let i=e.bMarks[t]+e.tShift[t];const o=e.src.charCodeAt(i++);if(o!==42&&o!==45&&o!==95)return!1;let l=1;for(;i=r)return-1;let i=e.src.charCodeAt(s++);if(i<48||i>57)return-1;for(;;){if(s>=r)return-1;if(i=e.src.charCodeAt(s++),i>=48&&i<=57){if(s-n>=10)return-1;continue}if(i===41||i===46)break;return-1}return s=4||e.listIndent>=0&&e.sCount[a]-e.listIndent>=4&&e.sCount[a]=e.blkIndent&&(u=!0);let f,p,h;if((h=cd(e,a))>=0){if(f=!0,o=e.bMarks[a]+e.tShift[a],p=Number(e.src.slice(o,h-1)),u&&p!==1)return!1}else if((h=ad(e,a))>=0)f=!1;else return!1;if(u&&e.skipSpaces(h)>=e.eMarks[a])return!1;if(r)return!0;const d=e.src.charCodeAt(h-1),_=e.tokens.length;f?(l=e.push("ordered_list_open","ol",1),p!==1&&(l.attrs=[["start",p]])):l=e.push("bullet_list_open","ul",1);const C=[a,0];l.map=C,l.markup=String.fromCharCode(d);let S=!1;const b=e.md.block.ruler.getRules("list"),g=e.parentType;for(e.parentType="list";a=s?T=1:T=y-m,T>4&&(T=1);const L=m+T;l=e.push("list_item_open","li",1),l.markup=String.fromCharCode(d);const A=[a,0];l.map=A,f&&(l.info=e.src.slice(o,h-1));const O=e.tight,H=e.tShift[a],M=e.sCount[a],V=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=L,e.tight=!0,e.tShift[a]=k-e.bMarks[a],e.sCount[a]=y,k>=s&&e.isEmpty(a+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,a,n,!0),(!e.tight||S)&&(c=!1),S=e.line-a>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=V,e.tShift[a]=H,e.sCount[a]=M,e.tight=O,l=e.push("list_item_close","li",-1),l.markup=String.fromCharCode(d),a=e.line,A[1]=a,a>=n||e.sCount[a]=4)break;let oe=!1;for(let ie=0,Z=b.length;ie=4||e.src.charCodeAt(s)!==91)return!1;function l(b){const g=e.lineMax;if(b>=g||e.isEmpty(b))return null;let m=!1;if(e.sCount[b]-e.blkIndent>3&&(m=!0),e.sCount[b]<0&&(m=!0),!m){const T=e.md.block.ruler.getRules("reference"),L=e.parentType;e.parentType="reference";let A=!1;for(let O=0,H=T.length;O"u"&&(e.env.references={}),typeof e.env.references[S]>"u"&&(e.env.references[S]={title:C,href:f}),e.line=o),!0):!1}const iI=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],oI="[a-zA-Z_:][a-zA-Z0-9:._-]*",lI="[^\"'=<>`\\x00-\\x20]+",aI="'[^']*'",cI='"[^"]*"',uI="(?:"+lI+"|"+aI+"|"+cI+")",fI="(?:\\s+"+oI+"(?:\\s*=\\s*"+uI+")?)",__="<[A-Za-z][A-Za-z0-9\\-]*"+fI+"*\\s*\\/?>",y_="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",hI="",pI="<[?][\\s\\S]*?[?]>",dI="]*>",mI="",gI=new RegExp("^(?:"+__+"|"+y_+"|"+hI+"|"+pI+"|"+dI+"|"+mI+")"),_I=new RegExp("^(?:"+__+"|"+y_+")"),Es=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(_I.source+"\\s*$"),/^$/,!1]];function yI(e,t,n,r){let s=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||!e.md.options.html||e.src.charCodeAt(s)!==60)return!1;let o=e.src.slice(s,i),l=0;for(;l=4)return!1;let o=e.src.charCodeAt(s);if(o!==35||s>=i)return!1;let l=1;for(o=e.src.charCodeAt(++s);o===35&&s6||ss&&Ge(e.src.charCodeAt(a-1))&&(i=a),e.line=t+1;const c=e.push("heading_open","h"+String(l),1);c.markup="########".slice(0,l),c.map=[t,e.line];const u=e.push("inline","",0);u.content=e.src.slice(s,i).trim(),u.map=[t,e.line],u.children=[];const f=e.push("heading_close","h"+String(l),-1);return f.markup="########".slice(0,l),!0}function kI(e,t,n){const r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;const s=e.parentType;e.parentType="paragraph";let i=0,o,l=t+1;for(;l3)continue;if(e.sCount[l]>=e.blkIndent){let h=e.bMarks[l]+e.tShift[l];const d=e.eMarks[l];if(h=d))){i=o===61?1:2;break}}if(e.sCount[l]<0)continue;let p=!1;for(let h=0,d=r.length;h3||e.sCount[i]<0)continue;let c=!1;for(let u=0,f=r.length;u=n||e.sCount[o]=i){e.line=n;break}const a=e.line;let c=!1;for(let u=0;u=e.line)throw new Error("block rule didn't increment state.line");break}if(!c)throw new Error("none of the block rules matched");e.tight=!l,e.isEmpty(e.line-1)&&(l=!0),o=e.line,o0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],s={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(s),r};po.prototype.scanDelims=function(e,t){const n=this.posMax,r=this.src.charCodeAt(e),s=e>0?this.src.charCodeAt(e-1):32;let i=e;for(;i0)return!1;const n=e.pos,r=e.posMax;if(n+3>r||e.src.charCodeAt(n)!==58||e.src.charCodeAt(n+1)!==47||e.src.charCodeAt(n+2)!==47)return!1;const s=e.pending.match(wI);if(!s)return!1;const i=s[1],o=e.md.linkify.matchAtStart(e.src.slice(n-i.length));if(!o)return!1;let l=o.url;if(l.length<=i.length)return!1;l=l.replace(/\*+$/,"");const a=e.md.normalizeLink(l);if(!e.md.validateLink(a))return!1;if(!t){e.pending=e.pending.slice(0,-i.length);const c=e.push("link_open","a",1);c.attrs=[["href",a]],c.markup="linkify",c.info="auto";const u=e.push("text","",0);u.content=e.md.normalizeLinkText(l);const f=e.push("link_close","a",-1);f.markup="linkify",f.info="auto"}return e.pos+=l.length-i.length,!0}function SI(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==10)return!1;const r=e.pending.length-1,s=e.posMax;if(!t)if(r>=0&&e.pending.charCodeAt(r)===32)if(r>=1&&e.pending.charCodeAt(r-1)===32){let i=r-1;for(;i>=1&&e.pending.charCodeAt(i-1)===32;)i--;e.pending=e.pending.slice(0,i),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n?@[]^_`{|}~-".split("").forEach(function(e){gf[e.charCodeAt(0)]=1});function xI(e,t){let n=e.pos;const r=e.posMax;if(e.src.charCodeAt(n)!==92||(n++,n>=r))return!1;let s=e.src.charCodeAt(n);if(s===10){for(t||e.push("hardbreak","br",0),n++;n=55296&&s<=56319&&n+1=56320&&l<=57343&&(i+=e.src[n+1],n++)}const o="\\"+i;if(!t){const l=e.push("text_special","",0);s<256&&gf[s]!==0?l.content=i:l.content=o,l.markup=o,l.info="escape"}return e.pos=n+1,!0}function TI(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==96)return!1;const r=n;n++;const s=e.posMax;for(;n=0;r--){const s=t[r];if(s.marker!==95&&s.marker!==42||s.end===-1)continue;const i=t[s.end],o=r>0&&t[r-1].end===s.end+1&&t[r-1].marker===s.marker&&t[r-1].token===s.token-1&&t[s.end+1].token===i.token+1,l=String.fromCharCode(s.marker),a=e.tokens[s.token];a.type=o?"strong_open":"em_open",a.tag=o?"strong":"em",a.nesting=1,a.markup=o?l+l:l,a.content="";const c=e.tokens[i.token];c.type=o?"strong_close":"em_close",c.tag=o?"strong":"em",c.nesting=-1,c.markup=o?l+l:l,c.content="",o&&(e.tokens[t[r-1].token].content="",e.tokens[t[s.end+1].token].content="",r--)}}function NI(e){const t=e.tokens_meta,n=e.tokens_meta.length;fd(e,e.delimiters);for(let r=0;r=f)return!1;if(a=d,s=e.md.helpers.parseLinkDestination(e.src,d,e.posMax),s.ok){for(o=e.md.normalizeLink(s.str),e.md.validateLink(o)?d=s.pos:o="",a=d;d=f||e.src.charCodeAt(d)!==41)&&(c=!0),d++}if(c){if(typeof e.env.references>"u")return!1;if(d=0?r=e.src.slice(a,d++):d=h+1):d=h+1,r||(r=e.src.slice(p,h)),i=e.env.references[_a(r)],!i)return e.pos=u,!1;o=i.href,l=i.title}if(!t){e.pos=p,e.posMax=h;const _=e.push("link_open","a",1),C=[["href",o]];_.attrs=C,l&&C.push(["title",l]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=d,e.posMax=f,!0}function FI(e,t){let n,r,s,i,o,l,a,c,u="";const f=e.pos,p=e.posMax;if(e.src.charCodeAt(e.pos)!==33||e.src.charCodeAt(e.pos+1)!==91)return!1;const h=e.pos+2,d=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(d<0)return!1;if(i=d+1,i=p)return!1;for(c=i,l=e.md.helpers.parseLinkDestination(e.src,i,e.posMax),l.ok&&(u=e.md.normalizeLink(l.str),e.md.validateLink(u)?i=l.pos:u=""),c=i;i=p||e.src.charCodeAt(i)!==41)return e.pos=f,!1;i++}else{if(typeof e.env.references>"u")return!1;if(i=0?s=e.src.slice(c,i++):i=d+1):i=d+1,s||(s=e.src.slice(h,d)),o=e.env.references[_a(s)],!o)return e.pos=f,!1;u=o.href,a=o.title}if(!t){r=e.src.slice(h,d);const _=[];e.md.inline.parse(r,e.md,e.env,_);const C=e.push("image","img",0),S=[["src",u],["alt",""]];C.attrs=S,C.children=_,C.content=r,a&&S.push(["title",a])}return e.pos=i,e.posMax=p,!0}const RI=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,PI=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/;function MI(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==60)return!1;const r=e.pos,s=e.posMax;for(;;){if(++n>=s)return!1;const o=e.src.charCodeAt(n);if(o===60)return!1;if(o===62)break}const i=e.src.slice(r+1,n);if(PI.test(i)){const o=e.md.normalizeLink(i);if(!e.md.validateLink(o))return!1;if(!t){const l=e.push("link_open","a",1);l.attrs=[["href",o]],l.markup="autolink",l.info="auto";const a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);const c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}if(RI.test(i)){const o=e.md.normalizeLink("mailto:"+i);if(!e.md.validateLink(o))return!1;if(!t){const l=e.push("link_open","a",1);l.attrs=[["href",o]],l.markup="autolink",l.info="auto";const a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);const c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}return!1}function $I(e){return/^\s]/i.test(e)}function BI(e){return/^<\/a\s*>/i.test(e)}function zI(e){const t=e|32;return t>=97&&t<=122}function UI(e,t){if(!e.md.options.html)return!1;const n=e.posMax,r=e.pos;if(e.src.charCodeAt(r)!==60||r+2>=n)return!1;const s=e.src.charCodeAt(r+1);if(s!==33&&s!==63&&s!==47&&!zI(s))return!1;const i=e.src.slice(r).match(gI);if(!i)return!1;if(!t){const o=e.push("html_inline","",0);o.content=i[0],$I(o.content)&&e.linkLevel++,BI(o.content)&&e.linkLevel--}return e.pos+=i[0].length,!0}const HI=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,jI=/^&([a-z][a-z0-9]{1,31});/i;function VI(e,t){const n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==38||n+1>=r)return!1;if(e.src.charCodeAt(n+1)===35){const s=e.src.slice(n).match(HI);if(s){if(!t){const i=s[1][0].toLowerCase()==="x"?parseInt(s[1].slice(1),16):parseInt(s[1],10),o=e.push("text_special","",0);o.content=df(i)?Tl(i):Tl(65533),o.markup=s[0],o.info="entity"}return e.pos+=s[0].length,!0}}else{const s=e.src.slice(n).match(jI);if(s){const i=h_(s[0]);if(i!==s[0]){if(!t){const o=e.push("text_special","",0);o.content=i,o.markup=s[0],o.info="entity"}return e.pos+=s[0].length,!0}}}return!1}function hd(e){const t={},n=e.length;if(!n)return;let r=0,s=-2;const i=[];for(let o=0;oa;c-=i[c]+1){const f=e[c];if(f.marker===l.marker&&f.open&&f.end<0){let p=!1;if((f.close||l.open)&&(f.length+l.length)%3===0&&(f.length%3!==0||l.length%3!==0)&&(p=!0),!p){const h=c>0&&!e[c-1].open?i[c-1]+1:0;i[o]=o-c+h,i[c]=h,l.open=!1,f.end=o,f.close=!1,u=-1,s=-2;break}}}u!==-1&&(t[l.marker][(l.open?3:0)+(l.length||0)%3]=u)}}function qI(e){const t=e.tokens_meta,n=e.tokens_meta.length;hd(e.delimiters);for(let r=0;r0&&r++,s[t].type==="text"&&t+1=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;o||e.pos++,i[t]=e.pos};mo.prototype.tokenize=function(e){const t=this.ruler.getRules(""),n=t.length,r=e.posMax,s=e.md.options.maxNesting;for(;e.pos=e.pos)throw new Error("inline rule didn't increment state.pos");break}}if(o){if(e.pos>=r)break;continue}e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()};mo.prototype.parse=function(e,t,n,r){const s=new this.State(e,t,n,r);this.tokenize(s);const i=this.ruler2.getRules(""),o=i.length;for(let l=0;l|$))",t.tpl_email_fuzzy="(^|"+n+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}function qc(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){t&&Object.keys(t).forEach(function(n){e[n]=t[n]})}),e}function ba(e){return Object.prototype.toString.call(e)}function GI(e){return ba(e)==="[object String]"}function YI(e){return ba(e)==="[object Object]"}function ZI(e){return ba(e)==="[object RegExp]"}function pd(e){return ba(e)==="[object Function]"}function XI(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}const v_={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function QI(e){return Object.keys(e||{}).reduce(function(t,n){return t||v_.hasOwnProperty(n)},!1)}const JI={"http:":{validate:function(e,t,n){const r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){const r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&e[t-3]===":"||t>=3&&e[t-3]==="/"?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){const r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},e6="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",t6="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function n6(e){e.__index__=-1,e.__text_cache__=""}function r6(e){return function(t,n){const r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}function dd(){return function(e,t){t.normalize(e)}}function Il(e){const t=e.re=KI(e.__opts__),n=e.__tlds__.slice();e.onCompile(),e.__tlds_replaced__||n.push(e6),n.push(t.src_xn),t.src_tlds=n.join("|");function r(l){return l.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");const s=[];e.__compiled__={};function i(l,a){throw new Error('(LinkifyIt) Invalid schema "'+l+'": '+a)}Object.keys(e.__schemas__).forEach(function(l){const a=e.__schemas__[l];if(a===null)return;const c={validate:null,link:null};if(e.__compiled__[l]=c,YI(a)){ZI(a.validate)?c.validate=r6(a.validate):pd(a.validate)?c.validate=a.validate:i(l,a),pd(a.normalize)?c.normalize=a.normalize:a.normalize?i(l,a):c.normalize=dd();return}if(GI(a)){s.push(l);return}i(l,a)}),s.forEach(function(l){e.__compiled__[e.__schemas__[l]]&&(e.__compiled__[l].validate=e.__compiled__[e.__schemas__[l]].validate,e.__compiled__[l].normalize=e.__compiled__[e.__schemas__[l]].normalize)}),e.__compiled__[""]={validate:null,normalize:dd()};const o=Object.keys(e.__compiled__).filter(function(l){return l.length>0&&e.__compiled__[l]}).map(XI).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+o+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+o+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),n6(e)}function s6(e,t){const n=e.__index__,r=e.__last_index__,s=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=s,this.text=s,this.url=s}function Wc(e,t){const n=new s6(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function fn(e,t){if(!(this instanceof fn))return new fn(e,t);t||QI(e)&&(t=e,e={}),this.__opts__=qc({},v_,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=qc({},JI,e),this.__compiled__={},this.__tlds__=t6,this.__tlds_replaced__=!1,this.re={},Il(this)}fn.prototype.add=function(e,t){return this.__schemas__[e]=t,Il(this),this};fn.prototype.set=function(e){return this.__opts__=qc(this.__opts__,e),this};fn.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;let t,n,r,s,i,o,l,a,c;if(this.re.schema_test.test(e)){for(l=this.re.schema_search,l.lastIndex=0;(t=l.exec(e))!==null;)if(s=this.testSchemaAt(e,t[2],l.lastIndex),s){this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+s;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(a=e.search(this.re.host_fuzzy_test),a>=0&&(this.__index__<0||a=0&&(r=e.match(this.re.email_fuzzy))!==null&&(i=r.index+r[1].length,o=r.index+r[0].length,(this.__index__<0||ithis.__last_index__)&&(this.__schema__="mailto:",this.__index__=i,this.__last_index__=o))),this.__index__>=0};fn.prototype.pretest=function(e){return this.re.pretest.test(e)};fn.prototype.testSchemaAt=function(e,t,n){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,n,this):0};fn.prototype.match=function(e){const t=[];let n=0;this.__index__>=0&&this.__text_cache__===e&&(t.push(Wc(this,n)),n=this.__last_index__);let r=n?e.slice(n):e;for(;this.test(r);)t.push(Wc(this,n)),r=r.slice(this.__last_index__),n+=this.__last_index__;return t.length?t:null};fn.prototype.matchAtStart=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return null;const t=this.re.schema_at_start.exec(e);if(!t)return null;const n=this.testSchemaAt(e,t[2],t[0].length);return n?(this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+n,Wc(this,0)):null};fn.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(n,r,s){return n!==s[r-1]}).reverse(),Il(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,Il(this),this)};fn.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),e.schema==="mailto:"&&!/^mailto:/i.test(e.url)&&(e.url="mailto:"+e.url)};fn.prototype.onCompile=function(){};const $s=2147483647,zn=36,_f=1,so=26,i6=38,o6=700,E_=72,C_=128,w_="-",l6=/^xn--/,a6=/[^\0-\x7F]/,c6=/[\x2E\u3002\uFF0E\uFF61]/g,u6={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Xa=zn-_f,Un=Math.floor,Qa=String.fromCharCode;function Lr(e){throw new RangeError(u6[e])}function f6(e,t){const n=[];let r=e.length;for(;r--;)n[r]=t(e[r]);return n}function A_(e,t){const n=e.split("@");let r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(c6,".");const s=e.split("."),i=f6(s,t).join(".");return r+i}function S_(e){const t=[];let n=0;const r=e.length;for(;n=55296&&s<=56319&&nString.fromCodePoint(...e),p6=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:zn},md=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},x_=function(e,t,n){let r=0;for(e=n?Un(e/o6):e>>1,e+=Un(e/t);e>Xa*so>>1;r+=zn)e=Un(e/Xa);return Un(r+(Xa+1)*e/(e+i6))},T_=function(e){const t=[],n=e.length;let r=0,s=C_,i=E_,o=e.lastIndexOf(w_);o<0&&(o=0);for(let l=0;l=128&&Lr("not-basic"),t.push(e.charCodeAt(l));for(let l=o>0?o+1:0;l=n&&Lr("invalid-input");const p=p6(e.charCodeAt(l++));p>=zn&&Lr("invalid-input"),p>Un(($s-r)/u)&&Lr("overflow"),r+=p*u;const h=f<=i?_f:f>=i+so?so:f-i;if(pUn($s/d)&&Lr("overflow"),u*=d}const c=t.length+1;i=x_(r-a,c,a==0),Un(r/c)>$s-s&&Lr("overflow"),s+=Un(r/c),r%=c,t.splice(r++,0,s)}return String.fromCodePoint(...t)},I_=function(e){const t=[];e=S_(e);const n=e.length;let r=C_,s=0,i=E_;for(const a of e)a<128&&t.push(Qa(a));const o=t.length;let l=o;for(o&&t.push(w_);l=r&&uUn(($s-s)/c)&&Lr("overflow"),s+=(a-r)*c,r=a;for(const u of e)if(u$s&&Lr("overflow"),u===r){let f=s;for(let p=zn;;p+=zn){const h=p<=i?_f:p>=i+so?so:p-i;if(f=0))try{t.hostname=L_.toASCII(t.hostname)}catch{}return ho(uf(t))}function w6(e){const t=ff(e,!0);if(t.hostname&&(!t.protocol||D_.indexOf(t.protocol)>=0))try{t.hostname=L_.toUnicode(t.hostname)}catch{}return Qs(uf(t),Qs.defaultChars+"%")}function hn(e,t){if(!(this instanceof hn))return new hn(e,t);t||pf(e)||(t=e||{},e="default"),this.inline=new mo,this.block=new ya,this.core=new mf,this.renderer=new oi,this.linkify=new fn,this.validateLink=E6,this.normalizeLink=C6,this.normalizeLinkText=w6,this.utils=S4,this.helpers=ga({},L4),this.options={},this.configure(e),t&&this.set(t)}hn.prototype.set=function(e){return ga(this.options,e),this};hn.prototype.configure=function(e){const t=this;if(pf(e)){const n=e;if(e=b6[n],!e)throw new Error('Wrong `markdown-it` preset "'+n+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this};hn.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(s){n=n.concat(this[s].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));const r=e.filter(function(s){return n.indexOf(s)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this};hn.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(s){n=n.concat(this[s].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));const r=e.filter(function(s){return n.indexOf(s)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this};hn.prototype.use=function(e){const t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this};hn.prototype.parse=function(e,t){if(typeof e!="string")throw new Error("Input data should be a String");const n=new this.core.State(e,this,t);return this.core.process(n),n.tokens};hn.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)};hn.prototype.parseInline=function(e,t){const n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens};hn.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var gd=!1,ei={false:"push",true:"unshift",after:"push",before:"unshift"},Ll={isPermalinkSymbol:!0};function Kc(e,t,n,r){var s;if(!gd){var i="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";typeof process=="object"&&process&&process.emitWarning?process.emitWarning(i):console.warn(i),gd=!0}var o=[Object.assign(new n.Token("link_open","a",1),{attrs:[].concat(t.permalinkClass?[["class",t.permalinkClass]]:[],[["href",t.permalinkHref(e,n)]],Object.entries(t.permalinkAttrs(e,n)))}),Object.assign(new n.Token("html_block","",0),{content:t.permalinkSymbol,meta:Ll}),new n.Token("link_close","a",-1)];t.permalinkSpace&&n.tokens[r+1].children[ei[t.permalinkBefore]](Object.assign(new n.Token("text","",0),{content:" "})),(s=n.tokens[r+1].children)[ei[t.permalinkBefore]].apply(s,o)}function N_(e){return"#"+e}function O_(e){return{}}var A6={class:"header-anchor",symbol:"#",renderHref:N_,renderAttrs:O_};function go(e){function t(n){return n=Object.assign({},t.defaults,n),function(r,s,i,o){return e(r,n,s,i,o)}}return t.defaults=Object.assign({},A6),t.renderPermalinkImpl=e,t}function yf(e){var t=[],n=e.filter(function(r){if(r[0]!=="class")return!0;t.push(r[1])});return t.length>0&&n.unshift(["class",t.join(" ")]),n}var ka=go(function(e,t,n,r,s){var i,o=[Object.assign(new r.Token("link_open","a",1),{attrs:yf([].concat(t.class?[["class",t.class]]:[],[["href",t.renderHref(e,r)]],t.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(t.renderAttrs(e,r))))}),Object.assign(new r.Token("html_inline","",0),{content:t.symbol,meta:Ll}),new r.Token("link_close","a",-1)];if(t.space){var l=typeof t.space=="string"?t.space:" ";r.tokens[s+1].children[ei[t.placement]](Object.assign(new r.Token(typeof t.space=="string"?"html_inline":"text","",0),{content:l}))}(i=r.tokens[s+1].children)[ei[t.placement]].apply(i,o)});Object.assign(ka.defaults,{space:!0,placement:"after",ariaHidden:!1});var Qr=go(ka.renderPermalinkImpl);Qr.defaults=Object.assign({},ka.defaults,{ariaHidden:!0});var F_=go(function(e,t,n,r,s){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:yf([].concat(t.class?[["class",t.class]]:[],[["href",t.renderHref(e,r)]],Object.entries(t.renderAttrs(e,r))))})].concat(t.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[s+1].children,t.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[s+1]=Object.assign(new r.Token("inline","",0),{children:i})});Object.assign(F_.defaults,{safariReaderFix:!1});var _d=go(function(e,t,n,r,s){var i;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(t.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+t.style+"`");if(!["aria-describedby","aria-labelledby"].includes(t.style)&&!t.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+t.style+"` style");if(t.style==="visually-hidden"&&!t.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var o=r.tokens[s+1].children.filter(function(f){return f.type==="text"||f.type==="code_inline"}).reduce(function(f,p){return f+p.content},""),l=[],a=[];if(t.class&&a.push(["class",t.class]),a.push(["href",t.renderHref(e,r)]),a.push.apply(a,Object.entries(t.renderAttrs(e,r))),t.style==="visually-hidden"){if(l.push(Object.assign(new r.Token("span_open","span",1),{attrs:[["class",t.visuallyHiddenClass]]}),Object.assign(new r.Token("text","",0),{content:t.assistiveText(o)}),new r.Token("span_close","span",-1)),t.space){var c=typeof t.space=="string"?t.space:" ";l[ei[t.placement]](Object.assign(new r.Token(typeof t.space=="string"?"html_inline":"text","",0),{content:c}))}l[ei[t.placement]](Object.assign(new r.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new r.Token("html_inline","",0),{content:t.symbol,meta:Ll}),new r.Token("span_close","span",-1))}else l.push(Object.assign(new r.Token("html_inline","",0),{content:t.symbol,meta:Ll}));t.style==="aria-label"?a.push(["aria-label",t.assistiveText(o)]):["aria-describedby","aria-labelledby"].includes(t.style)&&a.push([t.style,e]);var u=[Object.assign(new r.Token("link_open","a",1),{attrs:yf(a)})].concat(l,[new r.Token("link_close","a",-1)]);(i=r.tokens).splice.apply(i,[s+3,0].concat(u)),t.wrapper&&(r.tokens.splice(s,0,Object.assign(new r.Token("html_block","",0),{content:t.wrapper[0]+` +`})),r.tokens.splice(s+3+u.length+1,0,Object.assign(new r.Token("html_block","",0),{content:t.wrapper[1]+` +`})))});function yd(e,t,n,r){var s=e,i=r;if(n&&Object.prototype.hasOwnProperty.call(t,s))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(t,s);)s=e+"-"+i,i+=1;return t[s]=!0,s}function lr(e,t){t=Object.assign({},lr.defaults,t),e.core.ruler.push("anchor",function(n){for(var r,s={},i=n.tokens,o=Array.isArray(t.level)?(r=t.level,function(f){return r.includes(f)}):function(f){return function(p){return p>=f}}(t.level),l=0;le.toLowerCase().trim().replace(/[\s]+/g,"-").replace(/[^\w\u4e00-\u9fa5-]/g,"").replace(/--+/g,"-").replace(/^-|-$/g,"");bf.use(lr,{slugify:S6,permalink:lr.permalink.headerLink({symbol:"#",renderAttrs:()=>({"aria-hidden":"true"})})});const bd=bf.renderer.rules.fence||function(e,t,n,r,s){return s.renderToken(e,t,n)};bf.renderer.rules.fence=function(e,t,n,r,s){const i=e[t],o=i.info?i.info.trim():"",l=o?o.split(/\s+/g)[0]:"";if(l){const a=`
${l}
`,c=bd(e,t,n,r,s);return`
${a}${c}
`}return bd(e,t,n,r,s)};function x6(e,t=2){if(!Array.isArray(e)||t<1)return[];const n=r=>r.filter(s=>s.level<=t).map(s=>({...s,children:s.children?n(s.children):[]}));return n(e)}const T6={name:"TableOfContents",props:{headers:{type:Array,default:()=>[]}},setup(e){const{t}=mn(),n=te(""),r=pe(()=>{if(!e.headers||!Array.isArray(e.headers))return[];const c=Gp().maxLevel||2;return x6(e.headers,c)}),s=pe(()=>r.value&&r.value.length>0),i=pe(()=>Gp().title||"目录");function o(c){const u=document.getElementById(c);u&&(u.scrollIntoView({behavior:"smooth",block:"start"}),n.value=c,history.pushState(null,"",`#${c}`))}function l(){const c=document.querySelectorAll("h1, h2, h3, h4, h5, h6");let u="";for(const f of c)f.getBoundingClientRect().top<=100&&(u=f.id);n.value=u}let a;return gt(()=>{const c=location.hash.slice(1);c&&(n.value=c),a=()=>l(),window.addEventListener("scroll",a,{passive:!0}),l()}),Mt(()=>{a&&window.removeEventListener("scroll",a)}),{activeAnchor:n,scrollToAnchor:o,hasHeaders:s,filteredHeaders:r,tocTitle:i,t}}},I6={class:"table-of-contents"},L6={class:"toc-header"},D6={key:0,class:"toc-nav"},N6=["href","onClick"],O6={key:0,class:"toc-children"},F6=["href","onClick"],R6={key:0,class:"toc-children"},P6=["href","onClick"],M6={key:1,class:"toc-empty"};function $6(e,t,n,r,s,i){return B(),q("aside",I6,[I("div",L6,[I("h3",null,W(r.t("common.toc")),1)]),r.hasHeaders?(B(),q("nav",D6,[(B(!0),q(Ce,null,wt(r.filteredHeaders,o=>(B(),q("div",{key:o.anchor,class:Se(["toc-item","toc-level-"+o.level])},[I("a",{href:"#"+o.anchor,class:Se([{active:r.activeAnchor===o.anchor},"toc-link"]),onClick:je(l=>r.scrollToAnchor(o.anchor),["prevent"])},W(o.text),11,N6),o.children&&o.children.length>0?(B(),q("div",O6,[(B(!0),q(Ce,null,wt(o.children,l=>(B(),q("div",{key:l.anchor,class:Se(["toc-item","toc-level-"+l.level])},[I("a",{href:"#"+l.anchor,class:Se([{active:r.activeAnchor===l.anchor},"toc-link"]),onClick:je(a=>r.scrollToAnchor(l.anchor),["prevent"])},W(l.text),11,F6),l.children&&l.children.length>0?(B(),q("div",R6,[(B(!0),q(Ce,null,wt(l.children,a=>(B(),q("div",{key:a.anchor,class:Se(["toc-item","toc-level-"+a.level])},[I("a",{href:"#"+a.anchor,class:Se([{active:r.activeAnchor===a.anchor},"toc-link"]),onClick:je(c=>r.scrollToAnchor(a.anchor),["prevent"])},W(a.text),11,P6)],2))),128))])):de("",!0)],2))),128))])):de("",!0)],2))),128))])):(B(),q("div",M6,[I("p",null,W(r.t("common.noContent")),1)]))])}const R_=rn(T6,[["render",$6],["__scopeId","data-v-fab21543"]]);function kf(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var gs=kf();function P_(e){gs=e}var Ii={exec:()=>null};function Me(e,t=""){let n=typeof e=="string"?e:e.source;const r={replace:(s,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(qt.caret,"$1"),n=n.replace(s,o),r},getRegex:()=>new RegExp(n,t)};return r}var qt={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},B6=/^(?:[ \t]*(?:\n|$))+/,z6=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,U6=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,_o=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,H6=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,vf=/(?:[*+-]|\d{1,9}[.)])/,M_=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,$_=Me(M_).replace(/bull/g,vf).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),j6=Me(M_).replace(/bull/g,vf).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Ef=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,V6=/^[^\n]+/,Cf=/(?!\s*\])(?:\\.|[^\[\]\\])+/,q6=Me(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Cf).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),W6=Me(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,vf).getRegex(),va="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",wf=/|$))/,K6=Me("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",wf).replace("tag",va).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),B_=Me(Ef).replace("hr",_o).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",va).getRegex(),G6=Me(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",B_).getRegex(),Af={blockquote:G6,code:z6,def:q6,fences:U6,heading:H6,hr:_o,html:K6,lheading:$_,list:W6,newline:B6,paragraph:B_,table:Ii,text:V6},kd=Me("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",_o).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",va).getRegex(),Y6={...Af,lheading:j6,table:kd,paragraph:Me(Ef).replace("hr",_o).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",kd).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",va).getRegex()},Z6={...Af,html:Me(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",wf).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ii,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Me(Ef).replace("hr",_o).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",$_).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},X6=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Q6=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,z_=/^( {2,}|\\)\n(?!\s*$)/,J6=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,j_=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,sL=Me(j_,"u").replace(/punct/g,Ea).getRegex(),iL=Me(j_,"u").replace(/punct/g,H_).getRegex(),V_="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",oL=Me(V_,"gu").replace(/notPunctSpace/g,U_).replace(/punctSpace/g,Sf).replace(/punct/g,Ea).getRegex(),lL=Me(V_,"gu").replace(/notPunctSpace/g,nL).replace(/punctSpace/g,tL).replace(/punct/g,H_).getRegex(),aL=Me("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,U_).replace(/punctSpace/g,Sf).replace(/punct/g,Ea).getRegex(),cL=Me(/\\(punct)/,"gu").replace(/punct/g,Ea).getRegex(),uL=Me(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),fL=Me(wf).replace("(?:-->|$)","-->").getRegex(),hL=Me("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",fL).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Dl=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,pL=Me(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",Dl).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),q_=Me(/^!?\[(label)\]\[(ref)\]/).replace("label",Dl).replace("ref",Cf).getRegex(),W_=Me(/^!?\[(ref)\](?:\[\])?/).replace("ref",Cf).getRegex(),dL=Me("reflink|nolink(?!\\()","g").replace("reflink",q_).replace("nolink",W_).getRegex(),xf={_backpedal:Ii,anyPunctuation:cL,autolink:uL,blockSkip:rL,br:z_,code:Q6,del:Ii,emStrongLDelim:sL,emStrongRDelimAst:oL,emStrongRDelimUnd:aL,escape:X6,link:pL,nolink:W_,punctuation:eL,reflink:q_,reflinkSearch:dL,tag:hL,text:J6,url:Ii},mL={...xf,link:Me(/^!?\[(label)\]\((.*?)\)/).replace("label",Dl).getRegex(),reflink:Me(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Dl).getRegex()},Gc={...xf,emStrongRDelimAst:lL,emStrongLDelim:iL,url:Me(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},vd=e=>_L[e];function Pn(e,t){if(t){if(qt.escapeTest.test(e))return e.replace(qt.escapeReplace,vd)}else if(qt.escapeTestNoEncode.test(e))return e.replace(qt.escapeReplaceNoEncode,vd);return e}function Ed(e){try{e=encodeURI(e).replace(qt.percentDecode,"%")}catch{return null}return e}function Cd(e,t){var n;const r=e.replace(qt.findPipe,(o,l,a)=>{let c=!1,u=l;for(;--u>=0&&a[u]==="\\";)c=!c;return c?"|":" |"}),s=r.split(qt.splitPipe);let i=0;if(s[0].trim()||s.shift(),s.length>0&&!((n=s.at(-1))!=null&&n.trim())&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length0?-2:-1}function wd(e,t,n,r,s){const i=t.href,o=t.title||null,l=e[1].replace(s.other.outputLinkReplace,"$1");r.state.inLink=!0;const a={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:o,text:l,tokens:r.inlineTokens(l)};return r.state.inLink=!1,a}function bL(e,t,n){const r=e.match(n.other.indentCodeCompensation);if(r===null)return t;const s=r[1];return t.split(` +`).map(i=>{const o=i.match(n.other.beginningSpace);if(o===null)return i;const[l]=o;return l.length>=s.length?i.slice(s.length):i}).join(` +`)}var Nl=class{constructor(e){qe(this,"options"),qe(this,"rules"),qe(this,"lexer"),this.options=e||gs}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:di(n,` +`)}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const n=t[0],r=bL(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){const r=di(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:di(t[0],` +`)}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let n=di(t[0],` +`).split(` +`),r="",s="";const i=[];for(;n.length>0;){let o=!1;const l=[];let a;for(a=0;a1,s={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");const i=this.rules.other.listItemRegex(n);let o=!1;for(;e;){let a=!1,c="",u="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let f=t[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,S=>" ".repeat(3*S.length)),p=e.split(` +`,1)[0],h=!f.trim(),d=0;if(this.options.pedantic?(d=2,u=f.trimStart()):h?d=t[1].length+1:(d=t[2].search(this.rules.other.nonSpaceChar),d=d>4?1:d,u=f.slice(d),d+=t[1].length),h&&this.rules.other.blankLine.test(p)&&(c+=p+` +`,e=e.substring(p.length+1),a=!0),!a){const S=this.rules.other.nextBulletRegex(d),b=this.rules.other.hrRegex(d),g=this.rules.other.fencesBeginRegex(d),m=this.rules.other.headingBeginRegex(d),y=this.rules.other.htmlBeginRegex(d);for(;e;){const k=e.split(` +`,1)[0];let T;if(p=k,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),T=p):T=p.replace(this.rules.other.tabCharGlobal," "),g.test(p)||m.test(p)||y.test(p)||S.test(p)||b.test(p))break;if(T.search(this.rules.other.nonSpaceChar)>=d||!p.trim())u+=` +`+T.slice(d);else{if(h||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||g.test(f)||m.test(f)||b.test(f))break;u+=` +`+p}!h&&!p.trim()&&(h=!0),c+=k+` +`,e=e.substring(k.length+1),f=T.slice(d)}}s.loose||(o?s.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0));let _=null,C;this.options.gfm&&(_=this.rules.other.listIsTask.exec(u),_&&(C=_[0]!=="[ ] ",u=u.replace(this.rules.other.listReplaceTask,""))),s.items.push({type:"list_item",raw:c,task:!!_,checked:C,loose:!1,text:u,tokens:[]}),s.raw+=c}const l=s.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;s.raw=s.raw.trimEnd();for(let a=0;af.type==="space"),u=c.length>0&&c.some(f=>this.rules.other.anyLine.test(f.raw));s.loose=u}if(s.loose)for(let a=0;a({text:a,tokens:this.lexer.inline(a),header:!1,align:o.align[c]})));return o}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const n=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;const i=di(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{const i=yL(t[2],"()");if(i===-2)return;if(i>-1){const o=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,o).trim(),t[3]=""}}let r=t[2],s="";if(this.options.pedantic){const i=this.rules.other.pedanticHrefTitle.exec(r);i&&(r=i[1],s=i[3])}else s=t[3]?t[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),wd(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:s&&s.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),s=t[r.toLowerCase()];if(!s){const i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return wd(n,s,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[2])||!n||this.rules.inline.punctuation.exec(n))){const s=[...r[0]].length-1;let i,o,l=s,a=0;const c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(o=[...i].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){a+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+a);const u=[...r[0]][0].length,f=e.slice(0,s+r.index+u+o);if(Math.min(s,o)%2){const h=f.slice(1,-1);return{type:"em",raw:f,text:h,tokens:this.lexer.inlineTokens(h)}}const p=f.slice(2,-2);return{type:"strong",raw:f,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," ");const r=this.rules.other.nonSpaceChar.test(n),s=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&s&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]==="@"?(n=t[1],r="mailto:"+n):(n=t[1],r=n),{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var t;let n;if(n=this.rules.inline.url.exec(e)){let r,s;if(n[2]==="@")r=n[0],s="mailto:"+r;else{let i;do i=n[0],n[0]=((t=this.rules.inline._backpedal.exec(n[0]))==null?void 0:t[0])??"";while(i!==n[0]);r=n[0],n[1]==="www."?s="http://"+n[0]:s=n[0]}return{type:"link",raw:n[0],text:r,href:s,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){const n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},ar=class Yc{constructor(t){qe(this,"tokens"),qe(this,"options"),qe(this,"state"),qe(this,"tokenizer"),qe(this,"inlineQueue"),this.tokens=[],this.tokens.links=Object.create(null),this.options=t||gs,this.options.tokenizer=this.options.tokenizer||new Nl,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const n={other:qt,block:Po.normal,inline:pi.normal};this.options.pedantic?(n.block=Po.pedantic,n.inline=pi.pedantic):this.options.gfm&&(n.block=Po.gfm,this.options.breaks?n.inline=pi.breaks:n.inline=pi.gfm),this.tokenizer.rules=n}static get rules(){return{block:Po,inline:pi}}static lex(t,n){return new Yc(n).lex(t)}static lexInline(t,n){return new Yc(n).inlineTokens(t)}lex(t){t=t.replace(qt.carriageReturn,` +`),this.blockTokens(t,this.tokens);for(let n=0;n(l=c.call({lexer:this},t,n))?(t=t.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.space(t)){t=t.substring(l.raw.length);const c=n.at(-1);l.raw.length===1&&c!==void 0?c.raw+=` +`:n.push(l);continue}if(l=this.tokenizer.code(t)){t=t.substring(l.raw.length);const c=n.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=` +`+l.raw,c.text+=` +`+l.text,this.inlineQueue.at(-1).src=c.text):n.push(l);continue}if(l=this.tokenizer.fences(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.heading(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.hr(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.blockquote(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.list(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.html(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.def(t)){t=t.substring(l.raw.length);const c=n.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=` +`+l.raw,c.text+=` +`+l.raw,this.inlineQueue.at(-1).src=c.text):this.tokens.links[l.tag]||(this.tokens.links[l.tag]={href:l.href,title:l.title});continue}if(l=this.tokenizer.table(t)){t=t.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.lheading(t)){t=t.substring(l.raw.length),n.push(l);continue}let a=t;if((o=this.options.extensions)!=null&&o.startBlock){let c=1/0;const u=t.slice(1);let f;this.options.extensions.startBlock.forEach(p=>{f=p.call({lexer:this},u),typeof f=="number"&&f>=0&&(c=Math.min(c,f))}),c<1/0&&c>=0&&(a=t.substring(0,c+1))}if(this.state.top&&(l=this.tokenizer.paragraph(a))){const c=n.at(-1);r&&(c==null?void 0:c.type)==="paragraph"?(c.raw+=` +`+l.raw,c.text+=` +`+l.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(l),r=a.length!==t.length,t=t.substring(l.raw.length);continue}if(l=this.tokenizer.text(t)){t=t.substring(l.raw.length);const c=n.at(-1);(c==null?void 0:c.type)==="text"?(c.raw+=` +`+l.raw,c.text+=` +`+l.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(l);continue}if(t){const c="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var r,s,i;let o=t,l=null;if(this.tokens.links){const u=Object.keys(this.tokens.links);if(u.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(o))!=null;)u.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(o))!=null;)o=o.slice(0,l.index)+"++"+o.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(l=this.tokenizer.rules.inline.blockSkip.exec(o))!=null;)o=o.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let a=!1,c="";for(;t;){a||(c=""),a=!1;let u;if((s=(r=this.options.extensions)==null?void 0:r.inline)!=null&&s.some(p=>(u=p.call({lexer:this},t,n))?(t=t.substring(u.raw.length),n.push(u),!0):!1))continue;if(u=this.tokenizer.escape(t)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.tag(t)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.link(t)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(u.raw.length);const p=n.at(-1);u.type==="text"&&(p==null?void 0:p.type)==="text"?(p.raw+=u.raw,p.text+=u.text):n.push(u);continue}if(u=this.tokenizer.emStrong(t,o,c)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.codespan(t)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.br(t)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.del(t)){t=t.substring(u.raw.length),n.push(u);continue}if(u=this.tokenizer.autolink(t)){t=t.substring(u.raw.length),n.push(u);continue}if(!this.state.inLink&&(u=this.tokenizer.url(t))){t=t.substring(u.raw.length),n.push(u);continue}let f=t;if((i=this.options.extensions)!=null&&i.startInline){let p=1/0;const h=t.slice(1);let d;this.options.extensions.startInline.forEach(_=>{d=_.call({lexer:this},h),typeof d=="number"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(f=t.substring(0,p+1))}if(u=this.tokenizer.inlineText(f)){t=t.substring(u.raw.length),u.raw.slice(-1)!=="_"&&(c=u.raw.slice(-1)),a=!0;const p=n.at(-1);(p==null?void 0:p.type)==="text"?(p.raw+=u.raw,p.text+=u.text):n.push(u);continue}if(t){const p="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return n}},Ol=class{constructor(e){qe(this,"options"),qe(this,"parser"),this.options=e||gs}space(e){return""}code({text:e,lang:t,escaped:n}){var r;const s=(r=(t||"").match(qt.notSpaceStart))==null?void 0:r[0],i=e.replace(qt.endingNewline,"")+` +`;return s?'
'+(n?i:Pn(i,!0))+`
+`:"
"+(n?i:Pn(i,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){const t=e.ordered,n=e.start;let r="";for(let o=0;o +`+r+" +`}listitem(e){var t;let n="";if(e.task){const r=this.checkbox({checked:!!e.checked});e.loose?((t=e.tokens[0])==null?void 0:t.type)==="paragraph"?(e.tokens[0].text=r+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=r+" "+Pn(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):n+=r+" "}return n+=this.parser.parse(e.tokens,!!e.loose),`
  • ${n}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let t="",n="";for(let s=0;s${r}`),` + +`+t+` +`+r+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){const t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Pn(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){const r=this.parser.parseInline(n),s=Ed(e);if(s===null)return r;e=s;let i='
    ",i}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));const s=Ed(e);if(s===null)return Pn(n);e=s;let i=`${n}{const a=o[l].flat(1/0);s=s.concat(this.walkTokens(a,t))}):o.tokens&&(s=s.concat(this.walkTokens(o.tokens,t)))}}return s}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{const r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){const i=t.renderers[s.name];i?t.renderers[s.name]=function(...o){let l=s.renderer.apply(this,o);return l===!1&&(l=i.apply(this,o)),l}:t.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const i=t[s.level];i?i.unshift(s.tokenizer):t[s.level]=[s.tokenizer],s.start&&(s.level==="block"?t.startBlock?t.startBlock.push(s.start):t.startBlock=[s.start]:s.level==="inline"&&(t.startInline?t.startInline.push(s.start):t.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(t.childTokens[s.name]=s.childTokens)}),r.extensions=t),n.renderer){const s=this.defaults.renderer||new Ol(this.defaults);for(const i in n.renderer){if(!(i in s))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;const o=i,l=n.renderer[o],a=s[o];s[o]=(...c)=>{let u=l.apply(s,c);return u===!1&&(u=a.apply(s,c)),u||""}}r.renderer=s}if(n.tokenizer){const s=this.defaults.tokenizer||new Nl(this.defaults);for(const i in n.tokenizer){if(!(i in s))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;const o=i,l=n.tokenizer[o],a=s[o];s[o]=(...c)=>{let u=l.apply(s,c);return u===!1&&(u=a.apply(s,c)),u}}r.tokenizer=s}if(n.hooks){const s=this.defaults.hooks||new Go;for(const i in n.hooks){if(!(i in s))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;const o=i,l=n.hooks[o],a=s[o];Go.passThroughHooks.has(i)?s[o]=c=>{if(this.defaults.async)return Promise.resolve(l.call(s,c)).then(f=>a.call(s,f));const u=l.call(s,c);return a.call(s,u)}:s[o]=(...c)=>{let u=l.apply(s,c);return u===!1&&(u=a.apply(s,c)),u}}r.hooks=s}if(n.walkTokens){const s=this.defaults.walkTokens,i=n.walkTokens;r.walkTokens=function(o){let l=[];return l.push(i.call(this,o)),s&&(l=l.concat(s.call(this,o))),l}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ar.lex(e,t??this.defaults)}parser(e,t){return cr.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{const r={...n},s={...this.defaults,...r},i=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&r.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);const o=s.hooks?s.hooks.provideLexer():e?ar.lex:ar.lexInline,l=s.hooks?s.hooks.provideParser():e?cr.parse:cr.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(t):t).then(a=>o(a,s)).then(a=>s.hooks?s.hooks.processAllTokens(a):a).then(a=>s.walkTokens?Promise.all(this.walkTokens(a,s.walkTokens)).then(()=>a):a).then(a=>l(a,s)).then(a=>s.hooks?s.hooks.postprocess(a):a).catch(i);try{s.hooks&&(t=s.hooks.preprocess(t));let a=o(t,s);s.hooks&&(a=s.hooks.processAllTokens(a)),s.walkTokens&&this.walkTokens(a,s.walkTokens);let c=l(a,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(a){return i(a)}}}onError(e,t){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){const r="

    An error occurred:

    "+Pn(n.message+"",!0)+"
    ";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}},fs=new kL;function Pe(e,t){return fs.parse(e,t)}Pe.options=Pe.setOptions=function(e){return fs.setOptions(e),Pe.defaults=fs.defaults,P_(Pe.defaults),Pe};Pe.getDefaults=kf;Pe.defaults=gs;Pe.use=function(...e){return fs.use(...e),Pe.defaults=fs.defaults,P_(Pe.defaults),Pe};Pe.walkTokens=function(e,t){return fs.walkTokens(e,t)};Pe.parseInline=fs.parseInline;Pe.Parser=cr;Pe.parser=cr.parse;Pe.Renderer=Ol;Pe.TextRenderer=Tf;Pe.Lexer=ar;Pe.lexer=ar.lex;Pe.Tokenizer=Nl;Pe.Hooks=Go;Pe.parse=Pe;Pe.options;Pe.setOptions;Pe.use;Pe.walkTokens;Pe.parseInline;cr.parse;ar.lex;const vL={name:"AIAssistant",components:{Bot:af,Settings:MT,X:ma,Send:n_,Save:PT,Zap:HT,AlertCircle:CT},props:{hideButton:{type:Boolean,default:!1}},setup(e){const{t}=mn(),n=te(!1),r=te(!1),s=te(""),i=te([]),o=te(!1),l=te(!1),a=te(null),c=te(!1),u=te(null),f=te(null),p=te(!1),h=Ht({x:0,y:0}),d=Ht({x:0,y:0}),_=te(!1),C=te(""),S=Ht({x:0,y:0}),b=Ht({width:0,height:0}),g=Ht({width:430,height:770}),m=pe(()=>({transform:`translate(${d.x}px, ${d.y}px)`,width:`${g.width}px`,height:`${g.height}px`,cursor:p.value?"grabbing":"default"})),y=Ht({}),k=pe({get(){var F;return((F=y.models)==null?void 0:F[y.provider])||{}},set(F){y.models&&y.provider&&(Object.assign(y.models[y.provider],F),vs(y))}}),T=pe(()=>G1(y).isValid),L=pe(()=>s.value.trim()&&T.value&&!o.value);At(()=>k.value,(F,P)=>{F&&y.provider&&JSON.stringify(F)!==JSON.stringify(P)&&(vs(y),a.value=null)},{deep:!0}),At(()=>y.provider,(F,P)=>{F&&F!==P&&(vs(y),a.value=null)});const A=()=>{i.value=[],ke("ai",t("ai.welcome")),ke("user",t("ai.demoMessages.user1")),ke("ai",t("ai.demoMessages.ai1")),ke("user",t("ai.demoMessages.user2")),ke("ai",t("ai.demoMessages.ai2"))},O=()=>{A()};gt(async()=>{const F=pa();Object.assign(y,F),A(),window.addEventListener("locale-changed",O)});const H=()=>{n.value=!n.value,n.value&&(c.value=!1,r.value=!1,qn(()=>{var F;(F=f.value)==null||F.focus()}))},M=()=>{n.value=!1,r.value=!1},V=()=>{r.value=!r.value},oe=(F,P)=>{y.models&&y.provider&&(y.models[y.provider]||(y.models[y.provider]={}),y.models[y.provider][F]=P,vs(y),a.value=null)},ie=()=>{vs(y)},Z=()=>{ie(),a.value=null},G=async()=>{l.value=!0,a.value=null;try{const F={...y};F.models[F.provider]={...k.value};const P=await aT();a.value=P}catch(F){a.value={success:!1,message:`${t("settings.errors.connectionFailed")}: ${F.message}`}}finally{l.value=!1}},K=()=>{vs(y),r.value=!1,ke("ai",t("settings.saveSuccess"))},ue=async()=>{if(!L.value)return;const F=s.value.trim();s.value="",ke("user",F),await Wt(F)},ye=F=>{F.key==="Enter"&&!F.shiftKey&&(F.preventDefault(),ue())},ke=(F,P)=>{const U={id:Date.now()+Math.random(),type:F,text:P,timestamp:new Date};i.value.push(U),qn(()=>{He()}),F==="ai"&&!n.value&&(c.value=!0)},He=()=>{u.value&&(u.value.scrollTop=u.value.scrollHeight)},Wt=async F=>{o.value=!0;try{if(!T.value)throw new Error("AI配置不完整,请先完成配置");const{sendAIMessage:P}=await A0(()=>import("./aiService-C9Fe_Phd-d1533d53.js"),[]),U={history:i.value.slice(-6),currentPage:window.location.pathname},Y=await P(F,U);if(!Y)throw new Error("AI返回了空响应");ke("ai",Y)}catch(P){console.error("AI请求失败:",P);let U="AI服务暂时不可用,请稍后重试。";P.message.includes("API密钥")?U="请检查API密钥配置是否正确。":P.message.includes("网络")?U="网络连接失败,请检查网络设置。":P.message.includes("配额")?U="API配额不足,请检查账户余额。":P.message.includes("频率")&&(U="请求过于频繁,请稍后重试。"),ke("ai",`抱歉,${U} + +错误详情:${P.message}`)}finally{o.value=!1}},Bt=F=>F.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),gn=F=>{if(!F)return"";if(F.startsWith("settings.errors."))return t(F);if(F.includes("settings.errors."))return F.split(", ").map(P=>P.startsWith("settings.errors.")?t(P):P).join(", ");if(F.startsWith("settings.errors.connectionFailed:")){const[P,U]=F.split(": ");return`${t(P)}: ${U}`}return F},it=F=>{try{return Pe.setOptions({breaks:!0,gfm:!0,sanitize:!1,highlight:function(P,U){return`${j(P)}`}}),Pe(F)}catch(P){return console.error("Markdown渲染失败:",P),j(F)}},j=F=>{const P=document.createElement("div");return P.textContent=F,P.innerHTML},ne=F=>{const P=u.value;if(!P){F.stopPropagation();return}const{scrollTop:U,scrollHeight:Y,clientHeight:E}=P,w=U<=2,N=Math.abs(U+E-Y)<=2,z=F.deltaY<0,D=F.deltaY>0;if(z&&w||D&&N){F.preventDefault(),F.stopPropagation();return}if(Y<=E){F.preventDefault(),F.stopPropagation();return}F.stopPropagation()},J=F=>{var P,U,Y,E;if(window.innerWidth<=768||_.value)return;F.preventDefault(),p.value=!0;const w=F.clientX||((U=(P=F.touches)==null?void 0:P[0])==null?void 0:U.clientX)||0,N=F.clientY||((E=(Y=F.touches)==null?void 0:Y[0])==null?void 0:E.clientY)||0;h.x=w-d.x,h.y=N-d.y,document.addEventListener("mousemove",le,{passive:!1}),document.addEventListener("mouseup",be,{passive:!0}),document.addEventListener("touchmove",le,{passive:!1}),document.addEventListener("touchend",be,{passive:!0}),document.body.style.userSelect="none"},le=F=>{var P,U,Y,E;if(!p.value)return;const w=F.clientX||((U=(P=F.touches)==null?void 0:P[0])==null?void 0:U.clientX)||0,N=F.clientY||((E=(Y=F.touches)==null?void 0:Y[0])==null?void 0:E.clientY)||0;d.x=w-h.x,d.y=N-h.y},be=()=>{p.value=!1,document.removeEventListener("mousemove",le,{passive:!1}),document.removeEventListener("mouseup",be,{passive:!0}),document.removeEventListener("touchmove",le,{passive:!1}),document.removeEventListener("touchend",be,{passive:!0}),document.body.style.userSelect=""},De=(F,P)=>{window.innerWidth<=768||(_.value=!0,C.value=F,S.x=P.clientX,S.y=P.clientY,b.width=g.width,b.height=g.height,S.panelX=d.x,S.panelY=d.y,document.addEventListener("mousemove",x,{passive:!1}),document.addEventListener("mouseup",v,{passive:!0}),document.body.style.userSelect="none",document.body.style.cursor=R(F),P.preventDefault(),P.stopPropagation())},x=F=>{if(!_.value)return;const P=F.clientX-S.x,U=F.clientY-S.y,Y=C.value;let E=b.width,w=b.height,N=S.panelX,z=S.panelY;if(Y.includes("e")&&(E=Math.max(300,Math.min(window.innerWidth-50,b.width+P))),Y.includes("w")){const D=S.panelX+b.width-50;E=Math.max(300,Math.min(D,b.width-P)),N=S.panelX+b.width-E}if(Y.includes("s")&&(w=Math.max(400,Math.min(window.innerHeight-50,b.height+U))),Y.includes("n")){const D=S.panelY+b.height-50;w=Math.max(400,Math.min(D,b.height-U)),z=S.panelY+b.height-w}g.width=E,g.height=w,d.x=N,d.y=z},v=()=>{_.value=!1,C.value="",document.removeEventListener("mousemove",x,{passive:!1}),document.removeEventListener("mouseup",v,{passive:!0}),document.body.style.userSelect="",document.body.style.cursor=""},R=F=>({n:"n-resize",s:"s-resize",w:"w-resize",e:"e-resize",nw:"nw-resize",ne:"ne-resize",sw:"sw-resize",se:"se-resize"})[F]||"default";return Mt(()=>{be(),v(),window.removeEventListener("locale-changed",O)}),{isOpen:n,showSettings:r,currentMessage:s,messages:i,isLoading:o,testing:l,testResult:a,hasUnreadMessages:c,messagesContainer:u,messageInput:f,currentConfig:y,currentProviderConfig:k,isConfigured:T,canSend:L,toggleAI:H,closeAI:M,toggleSettings:V,updateProviderConfig:oe,onConfigChange:ie,onProviderChange:Z,testConnection:G,saveSettings:K,sendMessage:ue,handleKeydown:ye,formatTime:Bt,formatErrorMessage:gn,renderMarkdown:it,escapeHtml:j,handleChatWheel:ne,startDrag:J,startResize:De,panelStyle:m,t,toggleAI:H,closeAI:M,isOpen:n}}},EL=["title"],CL={key:0,class:"notification-dot"},wL={class:"ai-title"},AL={class:"drag-hint"},SL={class:"ai-actions"},xL=["title"],TL=["title"],IL={class:"setting-group"},LL={value:"custom"},DL={class:"setting-group"},NL=["value","placeholder"],OL={class:"setting-group"},FL=["value","placeholder"],RL={class:"setting-group"},PL=["value","placeholder"],ML={class:"setting-actions"},$L=["disabled"],BL={key:1,class:"ai-chat"},zL={class:"message-content"},UL=["innerHTML"],HL={class:"message-time"},jL={key:0,class:"message ai loading"},VL={class:"chat-input"},qL={class:"input-wrapper"},WL=["placeholder","disabled"],KL=["disabled"],GL={key:0,class:"config-notice"},YL={class:"resize-handles"};function ZL(e,t,n,r,s,i){const o=$e("Bot"),l=$e("Settings"),a=$e("X"),c=$e("Zap"),u=$e("AlertCircle"),f=$e("Save"),p=$e("Send");return B(),q("div",{class:Se(["ai-assistant",{"ai-assistant--open":r.isOpen}])},[n.hideButton?de("",!0):(B(),q("button",{key:0,class:"ai-trigger-btn",onClick:t[0]||(t[0]=(...h)=>r.toggleAI&&r.toggleAI(...h)),title:r.isOpen?r.t("ai.close"):r.t("ai.open")},[X(o,{size:20}),r.hasUnreadMessages?(B(),q("span",CL)):de("",!0)],8,EL)),r.isOpen?(B(),q("div",{key:1,class:"ai-panel",style:Vn(r.panelStyle),onWheel:t[40]||(t[40]=je(()=>{},["stop"])),onClick:t[41]||(t[41]=je(()=>{},["stop"])),onTouchstart:t[42]||(t[42]=je(()=>{},["stop"])),onTouchend:t[43]||(t[43]=je(()=>{},["stop"]))},[I("div",{class:"ai-header",onMousedown:t[4]||(t[4]=(...h)=>r.startDrag&&r.startDrag(...h)),onTouchstart:t[5]||(t[5]=(...h)=>r.startDrag&&r.startDrag(...h)),onClick:t[6]||(t[6]=je(()=>{},["stop"]))},[I("div",wL,[X(o,{size:18}),I("span",null,W(r.t("ai.assistant")),1),I("span",AL,W(r.t("common.draggable")),1)]),I("div",SL,[I("button",{class:"settings-btn",onClick:t[1]||(t[1]=je((...h)=>r.toggleSettings&&r.toggleSettings(...h),["stop"])),onTouchstart:t[2]||(t[2]=je(()=>{},["stop"])),title:r.t("ai.settings")},[X(l,{size:16})],40,xL),I("button",{class:"close-btn",onClick:t[3]||(t[3]=(...h)=>r.closeAI&&r.closeAI(...h)),title:r.t("common.close")},[X(a,{size:16})],8,TL)])],32),r.showSettings?(B(),q("div",{key:0,class:"ai-settings",onClick:t[23]||(t[23]=je(()=>{},["stop"])),onTouchstart:t[24]||(t[24]=je(()=>{},["stop"])),onTouchend:t[25]||(t[25]=je(()=>{},["stop"])),onTouchmove:t[26]||(t[26]=je(()=>{},["stop"]))},[I("div",IL,[I("label",null,W(r.t("settings.provider")),1),xn(I("select",{"onUpdate:modelValue":t[7]||(t[7]=h=>r.currentConfig.provider=h),onChange:t[8]||(t[8]=(...h)=>r.onProviderChange&&r.onProviderChange(...h)),onClick:t[9]||(t[9]=je(()=>{},["stop"])),onTouchstart:t[10]||(t[10]=je(()=>{},["stop"]))},[t[44]||(t[44]=il('',5)),I("option",LL,W(r.t("common.custom")),1)],544),[[ea,r.currentConfig.provider]])]),I("div",DL,[I("label",null,W(r.t("settings.model")),1),I("input",{value:r.currentProviderConfig.modelId,onInput:t[11]||(t[11]=h=>r.updateProviderConfig("modelId",h.target.value)),type:"text",placeholder:r.t("settings.modelPlaceholder"),onClick:t[12]||(t[12]=je(()=>{},["stop"])),onTouchstart:t[13]||(t[13]=je(()=>{},["stop"]))},null,40,NL)]),I("div",OL,[I("label",null,W(r.t("settings.apiKey")),1),I("input",{value:r.currentProviderConfig.apiKey,onInput:t[14]||(t[14]=h=>r.updateProviderConfig("apiKey",h.target.value)),type:"password",placeholder:r.t("settings.apiKeyPlaceholder"),onClick:t[15]||(t[15]=je(()=>{},["stop"])),onTouchstart:t[16]||(t[16]=je(()=>{},["stop"]))},null,40,FL)]),I("div",RL,[I("label",null,W(r.t("settings.baseUrl")),1),I("input",{value:r.currentProviderConfig.baseUrl,onInput:t[17]||(t[17]=h=>r.updateProviderConfig("baseUrl",h.target.value)),type:"text",placeholder:r.t("settings.baseUrlPlaceholder"),onClick:t[18]||(t[18]=je(()=>{},["stop"])),onTouchstart:t[19]||(t[19]=je(()=>{},["stop"]))},null,40,PL)]),I("div",ML,[I("button",{class:"test-btn",onClick:t[20]||(t[20]=(...h)=>r.testConnection&&r.testConnection(...h)),disabled:r.testing},[X(c,{size:14}),We(" "+W(r.testing?r.t("settings.testing"):r.t("settings.testConnection")),1)],8,$L),I("button",{class:"debug-btn",onClick:t[21]||(t[21]=(...h)=>e.debugConfig&&e.debugConfig(...h))},[X(u,{size:14}),t[45]||(t[45]=We(" 调试配置 "))]),I("button",{class:"save-btn",onClick:t[22]||(t[22]=(...h)=>r.saveSettings&&r.saveSettings(...h))},[X(f,{size:14}),We(" "+W(r.t("settings.closeSettings")),1)])]),r.testResult?(B(),q("div",{key:0,class:Se(["test-result",r.testResult.success?"success":"error"])},W(r.formatErrorMessage(r.testResult.message)),3)):de("",!0)],32)):(B(),q("div",BL,[I("div",{class:"chat-messages",ref:"messagesContainer",onMousedown:t[27]||(t[27]=je(()=>{},["stop"])),onWheel:t[28]||(t[28]=(...h)=>r.handleChatWheel&&r.handleChatWheel(...h))},[(B(!0),q(Ce,null,wt(r.messages,h=>(B(),q("div",{key:h.id,class:Se(["message",h.type])},[I("div",zL,[I("div",{class:"message-text",innerHTML:h.type==="ai"?r.renderMarkdown(h.text):r.escapeHtml(h.text)},null,8,UL),I("div",HL,W(r.formatTime(h.timestamp)),1)])],2))),128)),r.isLoading?(B(),q("div",jL,t[46]||(t[46]=[I("div",{class:"message-content"},[I("div",{class:"loading-dots"},[I("span"),I("span"),I("span")])],-1)]))):de("",!0)],544),I("div",VL,[I("div",qL,[xn(I("textarea",{"onUpdate:modelValue":t[29]||(t[29]=h=>r.currentMessage=h),onKeydown:t[30]||(t[30]=(...h)=>r.handleKeydown&&r.handleKeydown(...h)),placeholder:r.t("ai.placeholder"),rows:"1",ref:"messageInput",disabled:!r.isConfigured||r.isLoading},null,40,WL),[[zr,r.currentMessage]]),I("button",{class:"send-btn",onClick:t[31]||(t[31]=(...h)=>r.sendMessage&&r.sendMessage(...h)),disabled:!r.canSend},[X(p,{size:16})],8,KL)]),r.isConfigured?de("",!0):(B(),q("div",GL,[X(u,{size:14}),We(" "+W(r.t("ai.configNotice")),1)]))])])),I("div",YL,[I("div",{class:"resize-handle resize-handle-n",onMousedown:t[32]||(t[32]=h=>r.startResize("n",h))},null,32),I("div",{class:"resize-handle resize-handle-s",onMousedown:t[33]||(t[33]=h=>r.startResize("s",h))},null,32),I("div",{class:"resize-handle resize-handle-w",onMousedown:t[34]||(t[34]=h=>r.startResize("w",h))},null,32),I("div",{class:"resize-handle resize-handle-e",onMousedown:t[35]||(t[35]=h=>r.startResize("e",h))},null,32),I("div",{class:"resize-handle resize-handle-nw",onMousedown:t[36]||(t[36]=h=>r.startResize("nw",h))},null,32),I("div",{class:"resize-handle resize-handle-ne",onMousedown:t[37]||(t[37]=h=>r.startResize("ne",h))},null,32),I("div",{class:"resize-handle resize-handle-sw",onMousedown:t[38]||(t[38]=h=>r.startResize("sw",h))},null,32),I("div",{class:"resize-handle resize-handle-se",onMousedown:t[39]||(t[39]=h=>r.startResize("se",h))},null,32)])],36)):de("",!0)],2)}const XL=rn(vL,[["render",ZL],["__scopeId","data-v-7cb4e82d"]]),QL={class:"search-header"},JL={class:"search-input-wrapper"},eD={key:0,class:"search-shortcut"},tD={class:"search-content"},nD={key:0,class:"search-loading"},rD={key:1,class:"no-results"},sD={key:2,class:"search-results"},iD={class:"results-count"},oD=["onClick","onMouseenter"],lD={class:"result-title"},aD=["innerHTML"],cD={class:"result-path"},uD=["innerHTML"],fD={key:3,class:"search-suggestions"},hD={class:"suggestion-tags"},pD=["onClick"],dD={__name:"SearchModal",setup(e,{expose:t}){const n=la(),r=tt("docsConfig",{}),s=te(!1),i=te(""),o=te([]),l=te(0),a=te(!1),c=te(null),u=te(["安装","配置","快速开始","API","组件","主题"]),f=te([]),p=()=>{s.value=!0,qn(()=>{var m;(m=c.value)==null||m.focus()})},h=()=>{s.value=!1,i.value="",o.value=[],l.value=0},d=async()=>{const m=[],y=(r.sidebar||{}).sections||[];for(const k of y)if(m.push({id:`section-${k.title}`,title:k.title,path:k.path||"",type:"section",content:k.description||""}),k.children)for(const T of k.children)m.push({id:`page-${T.title}`,title:T.title,path:T.path||"",type:"page",content:""});f.value=m},_=async()=>{if(!i.value.trim()){o.value=[];return}a.value=!0,l.value=0,await new Promise(k=>setTimeout(k,100));const m=i.value.toLowerCase(),y=[];for(const k of f.value){let T=0,L="";if(k.title.toLowerCase().includes(m)&&(T+=10),k.path.toLowerCase().includes(m)&&(T+=5),k.content&&k.content.toLowerCase().includes(m)){T+=1;const A=k.content.toLowerCase().indexOf(m),O=Math.max(0,A-50),H=Math.min(k.content.length,A+m.length+50);L=k.content.substring(O,H),O>0&&(L="..."+L),H0&&y.push({...k,score:T,content:L||k.content})}y.sort((k,T)=>T.score-k.score),o.value=y,a.value=!1},C=(m,y)=>{if(!y||!m)return m;const k=new RegExp(`(${y})`,"gi");return m.replace(k,"$1")},S=m=>{m.path&&(n.push(m.path),h())},b=m=>{switch(m.key){case"ArrowDown":m.preventDefault(),l.value=Math.min(l.value+1,o.value.length-1);break;case"ArrowUp":m.preventDefault(),l.value=Math.max(l.value-1,0);break;case"Enter":m.preventDefault(),o.value[l.value]&&S(o.value[l.value]);break;case"Escape":h();break}},g=m=>{(m.ctrlKey||m.metaKey)&&m.key==="k"||m.key==="/"&&!s.value?(m.preventDefault(),p()):m.key==="Escape"&&s.value&&h()};return gt(async()=>{await d(),document.addEventListener("keydown",g)}),Mt(()=>{document.removeEventListener("keydown",g)}),t({openSearch:p,closeSearch:h,isOpen:s}),(m,y)=>s.value?(B(),q("div",{key:0,class:"search-modal-overlay",onClick:h},[I("div",{class:"search-modal",onClick:y[1]||(y[1]=je(()=>{},["stop"]))},[I("div",QL,[I("div",JL,[X(Q(cf),{size:20,class:"search-icon"}),xn(I("input",{ref_key:"searchInput",ref:c,"onUpdate:modelValue":y[0]||(y[0]=k=>i.value=k),onInput:_,onKeydown:b,placeholder:"搜索文档...",class:"search-input",autofocus:""},null,544),[[zr,i.value]]),i.value?de("",!0):(B(),q("kbd",eD,"ESC"))]),I("button",{onClick:h,class:"close-btn"},[X(Q(ma),{size:20})])]),I("div",tD,[a.value?(B(),q("div",nD,y[2]||(y[2]=[I("div",{class:"loading-spinner"},null,-1),I("span",null,"搜索中...",-1)]))):i.value&&o.value.length===0?(B(),q("div",rD,[X(Q(IT),{size:48,class:"no-results-icon"}),y[3]||(y[3]=I("h3",null,"未找到结果",-1)),y[4]||(y[4]=I("p",null,"尝试使用不同的关键词搜索",-1))])):o.value.length>0?(B(),q("div",sD,[I("div",iD," 找到 "+W(o.value.length)+" 个结果 ",1),(B(!0),q(Ce,null,wt(o.value,(k,T)=>(B(),q("div",{key:k.id,class:Se(["search-result-item",{active:l.value===T}]),onClick:L=>S(k),onMouseenter:L=>l.value=T},[I("div",lD,[X(Q(J1),{size:16,class:"result-icon"}),I("span",{innerHTML:C(k.title,i.value)},null,8,aD)]),I("div",cD,W(k.path),1),k.content?(B(),q("div",{key:0,class:"result-content",innerHTML:C(k.content,i.value)},null,8,uD)):de("",!0)],42,oD))),128))])):(B(),q("div",fD,[y[5]||(y[5]=I("h3",null,"搜索建议",-1)),I("div",hD,[(B(!0),q(Ce,null,wt(u.value,k=>(B(),q("button",{key:k,onClick:T=>{i.value=k,_()},class:"suggestion-tag"},W(k),9,pD))),128))])]))]),y[6]||(y[6]=I("div",{class:"search-footer"},[I("div",{class:"search-tips"},[I("kbd",null,"↑"),I("kbd",null,"↓"),We(" 导航 "),I("kbd",null,"Enter"),We(" 选择 "),I("kbd",null,"ESC"),We(" 关闭 ")])],-1))])])):de("",!0)}},mD=rn(dD,[["__scopeId","data-v-194cf630"]]),gD={class:"progress-bar"},_D={class:"reading-stats"},yD={class:"stat-item"},bD={class:"stat-item"},kD={class:"stat-item"},vD={class:"reading-controls"},ED=["title"],CD=["title"],wD=["title"],AD={key:0,class:"chapter-minimap"},SD=["onClick","title"],xD=200,TD=50,ID={__name:"ReadingProgress",setup(e,{expose:t}){const n=ri(),{t:r}=mn(),s=te(0),i=te(0),o=te(0),l=te(!1),a=te(!1),c=te(0),u=te([]),f=te(!1),p=te(!1),h=te(!1);let d=null,_=null;const C=()=>{const G=document.querySelector(".docs-content");if(!G)return 0;const K=G.innerText||G.textContent||"",ue=(K.match(/[\u4e00-\u9fff]/g)||[]).length,ye=(K.match(/[a-zA-Z]+/g)||[]).length;return ue+ye},S=G=>Math.ceil(G/xD),b=()=>{const G=window.pageYOffset||document.documentElement.scrollTop,K=document.documentElement.scrollHeight-window.innerHeight;if(K<=0){s.value=0;return}const ue=G/K*100;s.value=Math.min(100,Math.max(0,ue)),g(G),M()},g=G=>{for(let K=u.value.length-1;K>=0;K--)if(G>=u.value[K].offsetTop-100){c.value=K;const ue=u.value[K],ye=u.value[K+1];if(ye){const ke=ye.offsetTop-ue.offsetTop,He=Math.min(100,(G+100-ue.offsetTop)/ke*100);ue.progress=Math.max(0,He)}else{const ke=document.documentElement.scrollHeight-ue.offsetTop,He=Math.min(100,(G+100-ue.offsetTop)/ke*100);ue.progress=Math.max(0,He)}break}},m=()=>{const G=document.querySelector(".docs-content");if(!G)return;const K=G.querySelectorAll("h1, h2, h3"),ue=document.documentElement.scrollHeight;u.value=Array.from(K).map((ye,ke)=>({id:`chapter-${ke}`,title:ye.textContent||"",element:ye,offsetTop:ye.offsetTop,position:ye.offsetTop/ue*100,progress:0}))},y=G=>{G.element.scrollIntoView({behavior:"smooth",block:"start"})},k=()=>{window.scrollTo({top:0,behavior:"smooth"})},T=()=>{l.value=!l.value},L=()=>{a.value?O():A()},A=()=>{_||(a.value=!0,_=setInterval(()=>{const G=window.pageYOffset,K=document.documentElement.scrollHeight-window.innerHeight;if(G>=K){O();return}window.scrollBy(0,TD/10)},100))},O=()=>{_&&(clearInterval(_),_=null),a.value=!1},H=()=>{const G=navigator.userAgent||navigator.vendor||window.opera,K=/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(G),ue="ontouchstart"in window||navigator.maxTouchPoints>0,ye=window.innerWidth<=768;return K||ue&&ye},M=()=>{window.innerWidth<=768&&(f.value||(f.value=!0),h.value||(h.value=!0),p.value=!0,d&&clearTimeout(d),d=setTimeout(()=>{p.value=!1},1e3))},V=G=>{if(!f.value)return;const K=G.target;K.closest(".reading-progress-container")&&!K.closest(".reading-controls")&&(G.preventDefault(),G.stopPropagation())},oe=async()=>{await qn(),f.value=H(),setTimeout(()=>{const G=C();i.value=G,o.value=S(G),m(),b()},500)},ie=()=>{d&&(clearTimeout(d),d=null)};At(()=>n.path,()=>{O(),ie(),setTimeout(oe,100)});const Z=G=>{if(G.ctrlKey||G.metaKey)switch(G.key){case"j":G.preventDefault(),L();break;case"Home":G.preventDefault(),k();break}};return gt(()=>{window.addEventListener("scroll",b,{passive:!0}),window.addEventListener("resize",m,{passive:!0}),document.addEventListener("keydown",Z),document.addEventListener("touchstart",V,{passive:!1}),oe()}),Mt(()=>{window.removeEventListener("scroll",b),window.removeEventListener("resize",m),document.removeEventListener("keydown",Z),document.removeEventListener("touchstart",V),O(),ie()}),t({initializeReadingProgress:oe,scrollToTop:k,toggleAutoScroll:L,forceShowMobile:()=>{f.value=!0,h.value=!0,p.value=!0,setTimeout(()=>{p.value=!1},3e3)}}),(G,K)=>(B(),q("div",{class:Se(["reading-progress-container",{"is-mobile":f.value,"mobile-scrolling":f.value&&p.value,"mobile-hidden":f.value&&h.value&&!p.value}])},[I("div",gD,[I("div",{class:"progress-fill",style:Vn({width:`${s.value}%`})},null,4)]),I("div",{class:Se(["reading-info",{visible:l.value}])},[I("div",_D,[I("div",yD,[X(Q(AT),{size:16}),I("span",null,W(Q(r)("readingProgress.estimatedTime"))+": "+W(o.value)+" "+W(Q(r)("readingProgress.minutes")),1)]),I("div",bD,[X(Q(BT),{size:16}),I("span",null,W(Q(r)("readingProgress.progress"))+": "+W(Math.round(s.value))+"%",1)]),I("div",kD,[X(Q(J1),{size:16}),I("span",null,W(i.value)+" "+W(Q(r)("readingProgress.words")),1)])]),I("div",vD,[I("button",{onClick:L,class:Se(["control-btn",{active:a.value}]),title:a.value?Q(r)("readingProgress.stopAutoScroll"):Q(r)("readingProgress.startAutoScroll")},[a.value?(B(),Be(Q(OT),{key:1,size:16})):(B(),Be(Q(FT),{key:0,size:16}))],10,ED),I("button",{onClick:k,class:"control-btn",title:Q(r)("readingProgress.backToTop")},[X(Q(ET),{size:16})],8,CD),I("button",{onClick:T,class:"control-btn info-toggle",title:l.value?Q(r)("readingProgress.hideInfo"):Q(r)("readingProgress.showInfo")},[l.value?(B(),Be(Q(xT),{key:1,size:16})):(B(),Be(Q(TT),{key:0,size:16}))],8,wD)])],2),u.value.length>0?(B(),q("div",AD,[(B(!0),q(Ce,null,wt(u.value,(ue,ye)=>(B(),q("div",{key:ue.id,class:Se(["chapter-dot",{active:c.value===ye,read:ue.progress>=100}]),style:Vn({top:`${ue.position}%`}),onClick:ke=>y(ue),title:ue.title},null,14,SD))),128))])):de("",!0)],2))}},LD=rn(ID,[["__scopeId","data-v-4e387aed"]]),DD={class:"feedback-system"},ND=["title"],OD={key:0,class:"notification-dot"},FD={key:1,class:"feedback-panel"},RD={class:"feedback-header"},PD={class:"quick-rating"},MD={class:"rating-buttons"},$D={key:0,class:"detailed-feedback"},BD={class:"feedback-type"},zD={value:""},UD={value:"content"},HD={value:"typo"},jD={value:"missing"},VD={value:"suggestion"},qD={value:"bug"},WD={value:"question"},KD={value:"other"},GD={class:"feedback-content"},YD=["placeholder"],ZD={class:"feedback-contact"},XD=["placeholder"],QD={class:"feedback-actions"},JD=["disabled"],eN={class:"page-stats"},tN={class:"stats-grid"},nN={class:"stat-item"},rN={class:"stat-item"},sN={class:"stat-item"},iN={key:2,class:"success-toast"},oN={__name:"FeedbackSystem",props:{hideButton:{type:Boolean,default:!1}},setup(e,{expose:t}){const n=ri(),{t:r}=mn();tt("docsConfig",{});const s=te(!1),i=te(""),o=te(!1),l=te(!1),a=te(!1),c=te({type:"",content:"",allowContact:!1,email:""}),u=te({visitors:0,helpful:0,feedback:0}),f=pe(()=>c.value.type&&c.value.content.trim().length>=10),p=()=>{s.value=!s.value,s.value&&S()},h=async g=>{i.value=g;try{await C({type:"quick-rating",rating:g,page:n.path,timestamp:Date.now()}),l.value=!0,setTimeout(()=>{l.value=!1},3e3),g==="not-helpful"&&setTimeout(()=>{o.value=!0},1e3),u.value.helpful+=g==="helpful"?1:0}catch(m){console.error("Failed to submit quick rating:",m)}},d=async()=>{if(f.value)try{const g={type:c.value.type,content:c.value.content,page:n.path,timestamp:Date.now(),allowContact:c.value.allowContact,email:c.value.email,userAgent:navigator.userAgent,url:window.location.href};await C(g),c.value={type:"",content:"",allowContact:!1,email:""},o.value=!1,l.value=!0,setTimeout(()=>{l.value=!1},3e3),u.value.feedback+=1}catch(g){console.error("Failed to submit detailed feedback:",g)}},_=()=>{o.value=!1,c.value={type:"",content:"",allowContact:!1,email:""}},C=async g=>{const m=JSON.parse(localStorage.getItem("docs-feedback")||"[]");m.push(g),localStorage.setItem("docs-feedback",JSON.stringify(m)),await new Promise(y=>setTimeout(y,500))},S=()=>{try{const g=JSON.parse(localStorage.getItem("docs-feedback")||"[]").filter(m=>m.page===n.path);u.value={visitors:Math.floor(Math.random()*1e3)+100,helpful:g.filter(m=>m.rating==="helpful").length,feedback:g.filter(m=>m.type!=="quick-rating").length}}catch(g){console.error("Failed to load page stats:",g)}},b=g=>{g.key==="Escape"&&s.value&&p()};return At(()=>n.path,()=>{s.value=!1,i.value="",o.value=!1}),gt(()=>{document.addEventListener("keydown",b),setTimeout(()=>{a.value=Math.random()>.8},2e3)}),Mt(()=>{document.removeEventListener("keydown",b)}),t({toggleFeedbackPanel:p,submitQuickRating:h,hasNewNotifications:a}),(g,m)=>(B(),q("div",DD,[!s.value&&!e.hideButton?(B(),q("button",{key:0,onClick:p,class:"feedback-trigger",title:Q(r)("feedback.triggerTitle")},[X(Q(Sl),{size:20}),a.value?(B(),q("span",OD)):de("",!0)],8,ND)):de("",!0),s.value?(B(),q("div",FD,[I("div",RD,[I("h3",null,"📝 "+W(Q(r)("feedback.title")),1),I("button",{onClick:p,class:"close-btn"},[X(Q(ma),{size:18})])]),I("div",PD,[I("p",null,W(Q(r)("feedback.quickQuestion")),1),I("div",MD,[I("button",{onClick:m[0]||(m[0]=y=>h("helpful")),class:Se(["rating-btn","helpful",{active:i.value==="helpful"}])},[X(Q(Xp),{size:16}),I("span",null,W(Q(r)("feedback.helpful")),1)],2),I("button",{onClick:m[1]||(m[1]=y=>h("not-helpful")),class:Se(["rating-btn","not-helpful",{active:i.value==="not-helpful"}])},[X(Q($T),{size:16}),I("span",null,W(Q(r)("feedback.notHelpful")),1)],2)])]),o.value?(B(),q("div",$D,[I("div",BD,[I("label",null,W(Q(r)("feedback.feedbackType"))+":",1),xn(I("select",{"onUpdate:modelValue":m[2]||(m[2]=y=>c.value.type=y),class:"feedback-select"},[I("option",zD,W(Q(r)("feedback.selectType")),1),I("option",UD,W(Q(r)("feedback.types.content")),1),I("option",HD,W(Q(r)("feedback.types.typo")),1),I("option",jD,W(Q(r)("feedback.types.missing")),1),I("option",VD,W(Q(r)("feedback.types.suggestion")),1),I("option",qD,W(Q(r)("feedback.types.bug")),1),I("option",WD,W(Q(r)("feedback.types.question")),1),I("option",KD,W(Q(r)("feedback.types.other")),1)],512),[[ea,c.value.type]])]),I("div",GD,[I("label",null,W(Q(r)("feedback.detailLabel"))+":",1),xn(I("textarea",{"onUpdate:modelValue":m[3]||(m[3]=y=>c.value.content=y),placeholder:Q(r)("feedback.detailPlaceholder"),class:"feedback-textarea",rows:"4"},null,8,YD),[[zr,c.value.content]])]),I("div",ZD,[I("label",null,[xn(I("input",{type:"checkbox","onUpdate:modelValue":m[4]||(m[4]=y=>c.value.allowContact=y)},null,512),[[Jl,c.value.allowContact]]),We(" "+W(Q(r)("feedback.contactLabel")),1)]),c.value.allowContact?xn((B(),q("input",{key:0,"onUpdate:modelValue":m[5]||(m[5]=y=>c.value.email=y),type:"email",placeholder:Q(r)("feedback.emailPlaceholder"),class:"feedback-email"},null,8,XD)),[[zr,c.value.email]]):de("",!0)]),I("div",QD,[I("button",{onClick:d,disabled:!f.value,class:"submit-btn"},[X(Q(n_),{size:16}),We(" "+W(Q(r)("feedback.submit")),1)],8,JD),I("button",{onClick:_,class:"cancel-btn"},W(Q(r)("feedback.cancel")),1)])])):de("",!0),I("div",eN,[I("div",tN,[I("div",nN,[X(Q(UT),{size:16}),I("span",null,W(u.value.visitors||0)+" "+W(Q(r)("feedback.stats.visitors")),1)]),I("div",rN,[X(Q(Xp),{size:16}),I("span",null,W(u.value.helpful||0)+" "+W(Q(r)("feedback.stats.helpful")),1)]),I("div",sN,[X(Q(Sl),{size:16}),I("span",null,W(u.value.feedback||0)+" "+W(Q(r)("feedback.stats.feedback")),1)])])])])):de("",!0),l.value?(B(),q("div",iN,[X(Q(wT),{size:16}),I("span",null,W(Q(r)("feedback.successMessage")),1)])):de("",!0)]))}},lN=rn(oN,[["__scopeId","data-v-ddb1b7ef"]]),aN={class:"floating-action-buttons"},cN=["title"],uN={key:0,class:"notification-dot"},fN={key:0,class:"notification-dot"},hN={__name:"FloatingActionButton",props:{hasAINotifications:{type:Boolean,default:!1},hasFeedbackNotifications:{type:Boolean,default:!1}},emits:["ai-click","feedback-click","search-click"],setup(e,{emit:t}){const n=e,r=t,s=te(!1),i=()=>{s.value=!s.value},o=()=>{r("ai-click"),setTimeout(()=>{s.value=!1},200)},l=()=>{r("feedback-click"),setTimeout(()=>{s.value=!1},200)},a=()=>{r("search-click"),setTimeout(()=>{s.value=!1},200)};return pe(()=>n.hasAINotifications||n.hasFeedbackNotifications),(c,u)=>(B(),q("div",aN,[I("button",{onClick:i,class:Se(["fab-main",{expanded:s.value}]),title:s.value?"收起":"展开功能"},[X(Xl,{name:"rotate",mode:"out-in"},{default:Ot(()=>[s.value?(B(),Be(Q(ma),{key:1,size:20})):(B(),Be(Q(RT),{key:0,size:20}))]),_:1})],10,cN),X(mg,{name:"fab-items",tag:"div",class:"fab-items"},{default:Ot(()=>[xn(I("button",{key:"search",onClick:a,class:"fab-item search-button",title:"搜索文档"},[X(Q(cf),{size:18}),u[0]||(u[0]=I("span",{class:"fab-label"},"搜索",-1))],512),[[wi,s.value]]),xn(I("button",{key:"ai",onClick:o,class:"fab-item ai-button",title:"AI助手"},[X(Q(af),{size:18}),u[1]||(u[1]=I("span",{class:"fab-label"},"AI助手",-1)),e.hasAINotifications?(B(),q("span",uN)):de("",!0)],512),[[wi,s.value]]),xn(I("button",{key:"feedback",onClick:l,class:"fab-item feedback-button",title:"文档反馈"},[X(Q(Sl),{size:18}),u[2]||(u[2]=I("span",{class:"fab-label"},"文档反馈",-1)),e.hasFeedbackNotifications?(B(),q("span",fN)):de("",!0)],512),[[wi,s.value]])]),_:1}),s.value?(B(),q("div",{key:0,class:"fab-backdrop",onClick:i})):de("",!0)]))}},pN=rn(hN,[["__scopeId","data-v-bff4674e"]]),dN={name:"SocialIcons",components:{Github:e_,Mail:LT,Twitter:zT,MessageCircle:Sl},props:{name:{type:String,required:!0},size:{type:[Number,String],default:20}}},mN=["width","height"],gN=["width","height"],_N=["width","height"],yN=["width","height"],bN=["width","height"],kN=["width","height"],vN=["width","height"],EN=["width","height"],CN=["width","height"],wN=["width","height"];function AN(e,t,n,r,s,i){const o=$e("Github"),l=$e("Mail"),a=$e("Twitter"),c=$e("MessageCircle");return n.name==="bilibili"?(B(),q("svg",{key:0,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[0]||(t[0]=[I("path",{d:"M17.813 4.653h.854c1.51.054 2.769.578 3.773 1.574 1.004.995 1.524 2.249 1.56 3.76v7.36c-.036 1.51-.556 2.769-1.56 3.773s-2.262 1.524-3.773 1.56H5.333c-1.51-.036-2.769-.556-3.773-1.56S.036 18.858 0 17.347v-7.36c.036-1.511.556-2.765 1.56-3.76 1.004-.996 2.262-1.52 3.773-1.574h.774l-1.174-1.12a1.234 1.234 0 0 1-.373-.906c0-.356.124-.658.373-.907l.027-.027c.267-.249.573-.373.92-.373.347 0 .653.124.92.373L9.653 4.44c.071.071.134.142.187.213h4.267a.836.836 0 0 1 .16-.213l2.853-2.747c.267-.249.573-.373.92-.373.347 0 .662.151.929.4.267.249.391.551.391.907 0 .356-.124.657-.373.906L17.813 4.653zM5.333 7.24c-.746.018-1.373.276-1.88.773-.506.498-.769 1.13-.789 1.894v7.52c.02.764.283 1.396.789 1.893.507.498 1.134.756 1.88.773h13.334c.746-.017 1.373-.275 1.88-.773.506-.497.769-1.129.789-1.893v-7.52c-.02-.765-.283-1.396-.789-1.894-.507-.497-1.134-.755-1.88-.773H5.333zM8 11.107c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c.017-.391.15-.711.4-.96.249-.249.56-.373.933-.373zm8 0c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c.017-.391.15-.711.4-.96.249-.249.56-.373.933-.373z"},null,-1)]),8,mN)):n.name==="qq"?(B(),q("svg",{key:1,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"none"},t[1]||(t[1]=[il('',15)]),8,gN)):n.name==="wechat"?(B(),q("svg",{key:2,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"none"},t[2]||(t[2]=[il('',6)]),8,_N)):n.name==="weibo"?(B(),q("svg",{key:3,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[3]||(t[3]=[I("path",{d:"M9.797 2.312c3.506 0 6.844 1.991 6.844 6.094 0 .78-.156 1.547-.469 2.25 1.234.328 2.297 1.094 2.984 2.156.688 1.063 1.031 2.297 1.031 3.594 0 3.938-3.719 7.219-8.344 7.219S3.5 20.344 3.5 16.406c0-2.391 1.281-4.594 3.281-6.094-.438-.719-.656-1.5-.656-2.344 0-2.078 1.438-3.656 3.672-3.656zm0 1.125c-1.578 0-2.859 1.156-2.859 2.578 0 .703.266 1.359.75 1.875.484.516 1.172.844 1.891.844 1.578 0 2.859-1.156 2.859-2.578S11.375 3.437 9.797 3.437zm1.359 6.094c-2.156 0-4.031 1.281-4.031 3.094 0 1.125.75 2.031 1.875 2.531 1.125.5 2.531.5 3.656 0 1.125-.5 1.875-1.406 1.875-2.531 0-1.813-1.875-3.094-4.031-3.094zm8.031-4.875c.781 0 1.406.625 1.406 1.406s-.625 1.406-1.406 1.406-1.406-.625-1.406-1.406.625-1.406 1.406-1.406z"},null,-1)]),8,yN)):n.name==="douyin"?(B(),q("svg",{key:4,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[4]||(t[4]=[I("path",{d:"M12.53.02C13.84 0 15.14.01 16.44 0c.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"},null,-1)]),8,bN)):n.name==="zhihu"?(B(),q("svg",{key:5,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[5]||(t[5]=[I("path",{d:"M13.354 22.705c-.176.067-.402.118-.672.152a6.86 6.86 0 0 1-.865.059c-.734 0-1.427-.194-2.081-.583-.653-.388-1.147-.93-1.481-1.627-.1-.226-.164-.482-.193-.768-.029-.286-.043-.764-.043-1.435V4.717H5.791a.953.953 0 0 1-.672-.269.91.91 0 0 1-.278-.684c0-.294.093-.528.278-.703.185-.176.394-.264.628-.264h2.509V1.222c0-.286.095-.528.286-.726.19-.198.428-.296.715-.296.294 0 .537.098.728.295.19.198.286.44.286.726v1.575h6.472c.227 0 .42.088.58.264.16.176.24.407.24.694 0 .294-.08.528-.24.703-.16.176-.353.264-.58.264h-6.472v12.785c0 .647.014 1.047.043 1.198.029.152.08.264.152.336.072.073.189.117.351.133.162.017.407.026.736.026.1 0 .202-.003.306-.009.103-.005.189-.014.256-.026l.168-.034c.1-.017.176-.026.227-.026.1 0 .19.034.269.101.08.068.119.168.119.302 0 .251-.127.435-.38.551zm-1.481-9.417c-.1-.394-.248-.782-.443-1.165-.196-.382-.443-.726-.742-1.031-.3-.305-.651-.548-1.057-.728a2.919 2.919 0 0 0-1.31-.302c-.461 0-.896.101-1.31.302-.413.201-.764.464-1.056.789-.293.325-.52.693-.682 1.105-.162.412-.243.835-.243 1.269 0 .434.081.857.243 1.269.162.412.389.78.682 1.105.292.325.643.588 1.056.789.414.201.849.302 1.31.302.461 0 .896-.101 1.31-.302.406-.18.758-.423 1.057-.728.299-.305.546-.649.742-1.031.195-.383.343-.771.443-1.165zm-3.552 1.165c-.1 0-.19-.029-.269-.085a.617.617 0 0 1-.177-.227.653.653 0 0 1-.067-.302c0-.118.022-.218.067-.302a.616.616 0 0 1 .177-.227.465.465 0 0 1 .269-.085c.1 0 .19.028.269.085a.616.616 0 0 1 .177.227c.045.084.067.184.067.302 0 .118-.022.218-.067.302a.617.617 0 0 1-.177.227.465.465 0 0 1-.269.085z"},null,-1)]),8,kN)):n.name==="youtube"?(B(),q("svg",{key:6,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[6]||(t[6]=[I("path",{d:"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"},null,-1)]),8,vN)):n.name==="tiktok"?(B(),q("svg",{key:7,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[7]||(t[7]=[I("path",{d:"M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"},null,-1)]),8,EN)):n.name==="discord"?(B(),q("svg",{key:8,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[8]||(t[8]=[I("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"},null,-1)]),8,CN)):n.name==="telegram"?(B(),q("svg",{key:9,width:n.size,height:n.size,viewBox:"0 0 24 24",fill:"currentColor"},t[9]||(t[9]=[I("path",{d:"M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"},null,-1)]),8,wN)):n.name==="github"?(B(),Be(o,{key:10,size:n.size},null,8,["size"])):n.name==="mail"?(B(),Be(l,{key:11,size:n.size},null,8,["size"])):n.name==="twitter"?(B(),Be(a,{key:12,size:n.size},null,8,["size"])):(B(),Be(c,{key:13,size:n.size},null,8,["size"]))}const SN=rn(dN,[["render",AN]]),xN={name:"FooterNav",components:{ExternalLink:ST,SocialIcons:SN},props:{config:{type:Object,default:()=>({})}},setup(e){const t=la(),{t:n}=mn(),r=Ht({}),s=te([]),i=te({enabled:!1,social:[],repository:{}}),o=te("1.0.10"),l=te("");e.config||tt("docsConfig",{});const a=_=>{if(!_||typeof _!="string")return!1;const C=_.match(/^(https?:\/\/|\/|\.\/|\.\.\/)/i),S=_.match(/\.(jpg|jpeg|png|gif|svg|webp|ico)(\?.*)?$/i);return!!C&&!!S},c=async()=>{const _=i.value.repository;if(!_||!_.url)return new Date().toLocaleDateString("zh-CN");try{const C=_.url.match(/github\.com\/([^\/]+)\/([^\/]+)/);if(!C)return new Date().toLocaleDateString("zh-CN");const[,S,b]=C,g=`https://api.github.com/repos/${S}/${b}/commits?per_page=1`,m=new AbortController,y=setTimeout(()=>m.abort(),5e3),k=await fetch(g,{signal:m.signal,headers:{Accept:"application/vnd.github.v3+json","User-Agent":"Vue-Docs-UI"}});if(clearTimeout(y),k.ok){const T=await k.json();if(T.length>0)return new Date(T[0].commit.committer.date).toLocaleDateString("zh-CN")}else if(k.status===403)return u()}catch(C){C.name}return u()},u=()=>{var _;const C=(_=i.value)==null?void 0:_.lastUpdated;if(C)try{return new Date(C).toLocaleDateString("zh-CN")}catch{}const S="2024-12-19";try{return new Date(S).toLocaleDateString("zh-CN")}catch{return new Date().toLocaleDateString("zh-CN")}},f=async()=>{try{await ii();const _=of(),C=Z1(),S=fT();Object.assign(r,_),s.value=C.items||[],S?i.value={enabled:S.enabled!==!1,social:S.social||[],repository:S.repository||{url:"https://github.com/shenjianZ/vue-docs-ui",branch:"master"},copyright:S.copyright||"© 2024 Vue Docs UI. All rights reserved."}:i.value={enabled:!0,social:[{name:"email",url:"mailto:contact@example.com",icon:"mail"},{name:"github",url:"https://github.com/shenjianZ",icon:"github"}],repository:{url:"https://github.com/shenjianZ/vue-docs-ui",branch:"master"},copyright:"© 2024 Vue Docs UI. All rights reserved."},l.value=await c()}catch(_){console.error("配置加载失败:",_),i.value={enabled:!0,social:[{name:"email",url:"mailto:contact@example.com",icon:"mail"},{name:"github",url:"https://github.com/shenjianZ",icon:"github"}],repository:{url:"https://github.com/shenjianZ/vue-docs-ui",branch:"master"},copyright:"© 2024 Vue Docs UI. All rights reserved."},l.value=new Date().toLocaleDateString("zh-CN")}},p=()=>{f()},h=()=>{window.scrollTo({top:0,behavior:"smooth"})},d=_=>{var C;const S=(C=i.value)==null?void 0:C.repository;if(!S||!S.url)return"#";const b=S.url,g=S.branch||"master";let m="";switch(_){case"discussions":m=`${b}/discussions`;break;case"issues":m=`${b}/issues`;break;case"contributing":m=`${b}/blob/${g}/CONTRIBUTING.md`;break;case"releases":m=`${b}/releases`;break;case"source":m=b;break;case"license":m=`${b}/blob/${g}/LICENSE`;break;default:m=b}return m};return gt(async()=>{await f(),window.addEventListener("locale-changed",p)}),{siteInfo:r,navItems:s,footerConfig:i,packageVersion:o,lastUpdated:l,isImageLogo:a,scrollToTop:h,getRepositoryLink:d,handleNavClick:_=>{_.external||t.push(_.link)},handleLinkClick:_=>{if(typeof _=="string"){d(_);return}_.external||t.push(_.link)},getTargetForSocial:_=>{if(!(_.url.startsWith("mailto:")||_.url.startsWith("weixin://")||_.url.startsWith("mqqapi://")))return"_blank"},getRelForSocial:_=>{if(!(_.url.startsWith("mailto:")||_.url.startsWith("weixin://")||_.url.startsWith("mqqapi://")))return"noopener noreferrer"},getWeChatTitle:_=>_.name==="wechat"?"点击添加微信好友(移动端)":_.name==="qq"?"点击查看QQ名片(移动端)":n(`footer.${_.name}`),handleSocialClick:(_,C)=>{const S=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);if(_.name==="wechat"&&_.url.startsWith("weixin://")&&!S){C.preventDefault();const b=_.url.split("?")[1];return alert("请在手机上点击此链接,或直接添加微信号:"+b),!1}if(_.name==="qq"&&_.url.startsWith("mqqapi://")&&!S){C.preventDefault();const b=_.url.match(/uin=(\d+)/),g=b?b[1]:"未知";return alert("请在手机上点击此链接,或直接添加QQ号:"+g),!1}return!0},t:n}}},TN={key:0,class:"footer-nav"},IN={class:"footer-container"},LN={class:"footer-main"},DN={class:"footer-brand"},NN={class:"brand-logo"},ON=["src","alt"],FN={key:1,class:"logo-text"},RN={class:"brand-title"},PN={class:"brand-description"},MN={key:0,class:"connect-section"},$N={class:"connect-links"},BN=["href","target","rel","title","onClick"],zN={class:"footer-links"},UN={class:"links-section"},HN={class:"section-title"},jN={class:"links-list"},VN={class:"link-item"},qN=["href"],WN={class:"link-item"},KN=["href"],GN={class:"link-item"},YN=["href"],ZN={class:"link-item"},XN=["href"],QN={class:"links-section"},JN={class:"section-title"},e5={class:"links-list"},t5={class:"link-item"},n5={class:"link-item"},r5=["href"],s5={class:"link-item"},i5=["href"],o5={class:"link-item"},l5={class:"footer-bottom"},a5={class:"footer-copyright"},c5={class:"build-info"},u5={class:"footer-meta"},f5={class:"version-info"},h5={class:"version-badge"},p5={class:"update-time"};function d5(e,t,n,r,s,i){const o=$e("SocialIcons"),l=$e("ExternalLink"),a=$e("router-link");return r.footerConfig.enabled?(B(),q("footer",TN,[I("div",IN,[I("div",LN,[I("div",DN,[I("div",NN,[r.isImageLogo(r.siteInfo.logo)?(B(),q("img",{key:0,src:r.siteInfo.logo,alt:r.siteInfo.title,class:"logo-image"},null,8,ON)):(B(),q("span",FN,W(r.siteInfo.logo),1))]),I("h3",RN,W(r.siteInfo.title),1),I("p",PN,W(r.siteInfo.description),1),r.footerConfig&&r.footerConfig.social&&r.footerConfig.social.length>0?(B(),q("div",MN,[I("div",$N,[(B(!0),q(Ce,null,wt(r.footerConfig.social,c=>(B(),q("a",{key:c.name,href:c.url,target:r.getTargetForSocial(c),rel:r.getRelForSocial(c),class:"connect-link",title:r.getWeChatTitle(c),onClick:u=>r.handleSocialClick(c,u)},[X(o,{name:c.icon||c.name,size:20},null,8,["name"])],8,BN))),128))])])):de("",!0)]),I("div",zN,[I("div",UN,[I("h4",HN,W(r.t("footer.community")),1),I("ul",jN,[I("li",VN,[I("a",{href:r.getRepositoryLink("discussions"),target:"_blank",rel:"noopener noreferrer",class:"footer-link external",onClick:t[0]||(t[0]=c=>r.handleLinkClick("discussions"))},[We(W(r.t("footer.discussions"))+" ",1),X(l,{size:14,class:"external-icon"})],8,qN)]),I("li",WN,[I("a",{href:r.getRepositoryLink("issues"),target:"_blank",rel:"noopener noreferrer",class:"footer-link external"},[We(W(r.t("footer.issues"))+" ",1),X(l,{size:14,class:"external-icon"})],8,KN)]),I("li",GN,[I("a",{href:r.getRepositoryLink("contributing"),target:"_blank",rel:"noopener noreferrer",class:"footer-link external"},[We(W(r.t("footer.contributing"))+" ",1),X(l,{size:14,class:"external-icon"})],8,YN)]),I("li",ZN,[I("a",{href:r.getRepositoryLink("releases"),target:"_blank",rel:"noopener noreferrer",class:"footer-link external"},[We(W(r.t("footer.releases"))+" ",1),X(l,{size:14,class:"external-icon"})],8,XN)])])]),I("div",QN,[I("h4",JN,W(r.t("footer.support")),1),I("ul",e5,[I("li",t5,[X(a,{to:"/examples",class:"footer-link"},{default:Ot(()=>[We(W(r.t("footer.examples")),1)]),_:1})]),I("li",n5,[I("a",{href:r.getRepositoryLink("source"),target:"_blank",rel:"noopener noreferrer",class:"footer-link external"},[We(W(r.t("footer.sourceCode"))+" ",1),X(l,{size:14,class:"external-icon"})],8,r5)]),I("li",s5,[I("a",{href:r.getRepositoryLink("license"),target:"_blank",rel:"noopener noreferrer",class:"footer-link external"},[We(W(r.t("footer.license"))+" ",1),X(l,{size:14,class:"external-icon"})],8,i5)]),I("li",o5,[I("a",{href:"#",class:"footer-link",onClick:t[1]||(t[1]=je((...c)=>r.scrollToTop&&r.scrollToTop(...c),["prevent"]))},W(r.t("footer.backToTop")),1)])])])])]),t[4]||(t[4]=I("div",{class:"footer-divider"},null,-1)),I("div",l5,[I("div",a5,[I("p",null,W(r.footerConfig.copyright),1),I("p",c5,[We(W(r.t("footer.builtWith"))+" ",1),t[2]||(t[2]=I("a",{href:"https://vuejs.org",target:"_blank",rel:"noopener noreferrer",class:"tech-link"},"Vue.js",-1)),We(" "+W(r.t("common.and"))+" ",1),t[3]||(t[3]=I("a",{href:"https://vitejs.dev",target:"_blank",rel:"noopener noreferrer",class:"tech-link"},"Vite",-1))])]),I("div",u5,[I("div",f5,[I("span",h5,"v"+W(r.packageVersion),1),I("span",p5,W(r.t("footer.lastUpdated"))+": "+W(r.lastUpdated),1)])])])])])):de("",!0)}const m5=rn(xN,[["render",d5],["__scopeId","data-v-2f06e240"]]);function g5(e){const t=e.split(` +`),n={};let r=0;function s(l){const a=l.trim();return a==="true"?!0:a==="false"?!1:/^\d+$/.test(a)?parseInt(a):a.startsWith('"')&&a.endsWith('"')?a.slice(1,-1):a}function i(l){const a={};for(;rf&&C.startsWith("- ")?a[h]=o(S):S>f?a[h]=i(S):a[h]={}}else a[h]={}}else r++}return a}function o(l){const a=[];for(;rf?C[d]=i(b):C[d]={}}else C[d]={};for(;rg?T.trim().startsWith("- ")?C[y]=o(L):C[y]=i(L):C[y]={}}else C[y]={}}else break}a.push(C)}else a.push(s(p)),r++}else r++}return a}for(;r0&&h.startsWith("- ")?n[u]=o(d):d>0?n[u]=i(d):n[u]={}}else n[u]={}}else r++}return n}async function _5(e){try{const t=await(await fetch(e)).text();return g5(t)}catch(t){throw console.error("Failed to load config:",t),t}}function Fl(e){var t;return{text:e.text||e.title,title:e.title||e.text,link:e.link||e.path,path:e.path||e.link,children:(t=e.children)==null?void 0:t.map(Fl),collapsed:e.collapsed}}function Xc(e){let t=[];return e.sidebar&&(Array.isArray(e.sidebar)?t=e.sidebar:e.sidebar.sections&&(t=e.sidebar.sections)),t.map(Fl)}function y5(e,t){const n=[];let r=[];Array.isArray(e)?r=e.map(Fl):e!=null&&e.sections&&(r=e.sections.map(Fl));function s(i,o=""){const l=i.link||i.path;if(l){const a={path:l,name:i.text||i.title,component:t||(()=>Promise.resolve({template:"
    Page not found
    "})),props:{title:i.text||i.title}};n.push(a)}i.children&&i.children.forEach(a=>s(a,l||o))}return r.forEach(i=>s(i)),n}function b5(e,t=2){const n=[],r=e.split(` +`);for(const s of r){const i=s.match(/^(#{1,6})\s+(.+)/);if(i){const o=i[1].length,l=i[2].trim();if(o<=t){const a=l.toLowerCase().replace(/[^\w\s\u4e00-\u9fff-]/g,"").replace(/\s+/g,"-").replace(/^-+|-+$/g,"");n.push({text:l,anchor:a,level:o})}}}return k5(n)}function k5(e){const t=[],n=[];for(const r of e){for(;n.length>0&&n[n.length-1].level>=r.level;)n.pop();if(n.length===0)t.push(r);else{const s=n[n.length-1];s.children||(s.children=[]),s.children.push(r)}n.push(r)}return t}function K_(e){var t,n;return{depth:((t=e==null?void 0:e.toc)==null?void 0:t.depth)||2,enabled:((n=e==null?void 0:e.toc)==null?void 0:n.enabled)!==!1}}const v5={class:"docs-layout"},E5={class:"docs-container"},C5={class:"docs-main"},w5={class:"docs-content"},Ad=Cn({__name:"DocsLayout",props:{config:{},showToc:{type:Boolean,default:!0}},setup(e,{expose:t}){const n=e;ri();const r=te(!1),s=te([]),i=te(null),o=te(null),l=te(null),a=te(null),c=te(!1),u=te(!1),f=pe(()=>K_(n.config));rs("docsConfig",n.config),rs("updateTocHeaders",_);function p(){r.value=!r.value}function h(){r.value=!1}function d(){const y=document.documentElement;y.classList.contains("dark")?(y.classList.remove("dark"),localStorage.setItem("theme","light")):(y.classList.add("dark"),localStorage.setItem("theme","dark"))}function _(y){s.value=y}function C(){var y;(y=i.value)==null||y.toggleAI()}function S(){var y;(y=o.value)==null||y.openSearch()}function b(){var y;(y=i.value)==null||y.toggleAI()}function g(){var y;(y=a.value)==null||y.toggleFeedbackPanel()}function m(){var y;(y=o.value)==null||y.openSearch()}return gt(()=>{var y;const k=(y=n.config)==null?void 0:y.theme,T=localStorage.getItem("theme"),L=window.matchMedia("(prefers-color-scheme: dark)").matches;let A=!1;if(T)A=T==="dark";else if(k!=null&&k.defaultMode)switch(k.defaultMode){case"dark":A=!0;break;case"light":A=!1;break;case"auto":default:A=L;break}else A=L;A?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark"),setTimeout(()=>{var O,H;(O=i.value)!=null&&O.hasUnreadMessages&&(c.value=i.value.hasUnreadMessages),(H=a.value)!=null&&H.hasNewNotifications&&(u.value=a.value.hasNewNotifications)},1e3)}),t({updateTocHeaders:_}),(y,k)=>{const T=$e("router-view");return B(),q("div",v5,[X(i_,{config:y.config,onToggleSidebar:p,onToggleTheme:d,onToggleAi:C,onToggleSearch:S},null,8,["config"]),I("div",E5,[X(o_,{config:y.config,"is-open":r.value,onClose:h},null,8,["config","is-open"]),r.value?(B(),q("div",{key:0,class:"sidebar-overlay",onClick:h})):de("",!0),I("main",C5,[I("div",w5,[X(T,{onTocUpdated:_})]),X(m5,{config:y.config},null,8,["config"])]),y.showToc&&f.value.enabled?(B(),Be(R_,{key:1,headers:s.value,class:"docs-toc"},null,8,["headers"])):de("",!0)]),X(XL,{ref_key:"aiAssistant",ref:i,"hide-button":!0},null,512),X(mD,{ref_key:"searchModal",ref:o},null,512),X(LD,{ref_key:"readingProgress",ref:l},null,512),X(lN,{ref_key:"feedbackSystem",ref:a,"hide-button":!0},null,512),X(pN,{"has-ai-notifications":c.value,"has-feedback-notifications":u.value,onAiClick:b,onFeedbackClick:g,onSearchClick:m},null,8,["has-ai-notifications","has-feedback-notifications"])])}}}),A5={class:"default-home"},S5={class:"hero"},x5={class:"hero-content"},T5={class:"hero-title"},I5={class:"hero-logo"},L5=["src","alt"],D5={key:1,class:"logo-text"},N5={class:"hero-description"},O5={class:"chapters"},F5={class:"chapter-grid"},R5=["onClick"],P5={class:"chapter-sections"},M5={key:0,class:"more-sections"},$5=Cn({__name:"DefaultHome",props:{config:{}},setup(e){const t=e,n=tt("docsConfig"),r=pe(()=>t.config||n),{t:s}=mn(),i=la(),o=Ht({title:"",description:"",logo:"",author:""}),l=te(null),a=pe(()=>{const h=l.value||r.value;return h?Xc(h):[]}),c=h=>{if(!h||typeof h!="string")return!1;const d=h.match(/^(https?:\/\/|\/|\.\/|\.\.\/)/i),_=h.match(/\.(jpg|jpeg|png|gif|svg|webp|ico)(\?.*)?$/i);return!!d&&!!_},u=async()=>{try{const h=await ii();l.value=h;const d=of();Object.assign(o,d)}catch(h){console.error("DefaultHome: 加载配置失败:",h),Object.assign(o,{title:"Documentation",description:"Welcome to our documentation",logo:"📚",author:""}),l.value=null}},f=()=>{u()};function p(h){const d=h.link||h.path;if(d)i.push(d);else if(h.children&&h.children.length>0){const _=h.children[0],C=_.link||_.path;C&&i.push(C)}}return gt(async()=>{await u(),window.addEventListener("locale-changed",f)}),Mt(()=>{window.removeEventListener("locale-changed",f)}),(h,d)=>{const _=$e("router-link");return B(),q("div",A5,[I("div",S5,[I("div",x5,[I("h1",T5,[I("div",I5,[c(o.logo)?(B(),q("img",{key:0,src:o.logo,alt:o.title,class:"logo-image"},null,8,L5)):(B(),q("span",D5,W(o.logo),1))]),We(" "+W(o.title),1)]),I("p",N5,W(o.description),1)])]),I("div",O5,[I("h2",null,W(Q(s)("nav.tableOfContents")),1),I("div",F5,[(B(!0),q(Ce,null,wt(a.value,C=>{var S;return B(),q("div",{key:C.text||C.title,class:"chapter-card",onClick:b=>p(C)},[I("h3",null,W(C.text||C.title),1),I("div",P5,[(B(!0),q(Ce,null,wt((S=C.children)==null?void 0:S.slice(0,3),b=>(B(),q("div",{key:b.text||b.title,class:"section-item"},[b.link||b.path?(B(),Be(_,{key:0,to:b.link||b.path,class:"section-link"},{default:Ot(()=>[We(W(b.text||b.title),1)]),_:2},1032,["to"])):de("",!0)]))),128)),C.children&&C.children.length>3?(B(),q("div",M5," +"+W(C.children.length-3)+" "+W(Q(s)("nav.more"))+"... ",1)):de("",!0)])],8,R5)}),128))])])])}}}),B5=rn($5,[["__scopeId","data-v-cf6c7637"]]),z5=["innerHTML"],G_=Cn({__name:"MarkdownRenderer",props:{content:{},enableToc:{type:Boolean,default:!0},tocDepth:{}},emits:["tocGenerated"],setup(e,{emit:t}){const n=e,r=t,s=tt("docsConfig"),i=K_(s),o=new hn({html:!0,linkify:!0,typographer:!0}).use(lr,{permalink:lr.permalink.linkInsideHeader({symbol:"#",renderAttrs:()=>({"aria-hidden":"true"})})}),l=o.renderer.rules.fence||function(c,u,f,p,h){return h.renderToken(c,u,f)};o.renderer.rules.fence=function(c,u,f,p,h){const d=c[u],_=d.info?d.info.trim():"",C=_?_.split(/\s+/g)[0]:"";if(C){const S=`
    ${C}
    `,b=l(c,u,f,p,h);return`
    ${S}${b}
    `}return l(c,u,f,p,h)};const a=pe(()=>o.render(n.content));return At(()=>n.content,c=>{if(n.enableToc&&i.enabled&&c){const u=n.tocDepth||i.depth,f=b5(c,u);r("tocGenerated",f)}},{immediate:!0}),(c,u)=>(B(),q("div",{class:"markdown-body",innerHTML:a.value},null,8,z5))}}),U5={class:"default-article"},H5={key:0,class:"breadcrumb"},j5={key:0,class:"current"},V5={key:1,class:"loading"},q5={key:2,class:"error"},W5={key:3,class:"article-content"},K5={key:4,class:"page-nav"},G5={class:"nav-content"},Y5={class:"nav-label"},Z5={class:"nav-title"},X5={class:"nav-content"},Q5={class:"nav-label"},J5={class:"nav-title"},eO=Cn({__name:"DefaultArticle",props:{config:{}},setup(e){const t=e,n=ri(),{t:r}=mn(),s=tt("docsConfig"),i=tt("updateTocHeaders"),o=te(null),l=pe(()=>o.value||t.config||s),a=te(""),c=te(!0),u=te(""),f=pe(()=>{const g=n.path,m=l.value;if(!(m!=null&&m.sidebar))return[];const y=Xc(m),k=[];function T(L,A){for(const O of L){if(O.link===A||O.path===A)return k.push({title:O.text||O.title||"",path:O.link||O.path||""}),!0;if(O.children&&O.children.length>0){const H={title:O.text||O.title||"",path:O.link||O.path||""};if(T(O.children,A))return k.unshift(H),!0}}return!1}return T(y,g),k}),p=pe(()=>{var g;if(!((g=l.value)!=null&&g.sidebar))return{prevPage:null,nextPage:null};const m=[];function y(T,L=""){T.forEach(A=>{(A.link||A.path)&&m.push({text:A.text||A.title,link:A.link||A.path}),A.children&&y(A.children,A.link||A.path||L)})}y(Xc(l.value));const k=m.findIndex(T=>T.link===n.path);return{prevPage:k>0?m[k-1]:null,nextPage:kp.value.prevPage),d=pe(()=>p.value.nextPage),_=async()=>{try{const g=await ii();o.value=g}catch(g){console.error("DefaultArticle: 加载配置失败:",g),o.value=null}};async function C(){var g,m;c.value=!0,u.value="";try{let y=function(){return localStorage.getItem("language")||localStorage.getItem("vue-docs-locale")||((navigator.language||navigator.userLanguage).startsWith("zh")?"zh":"en")};const k=n.path,T=`/docs/${y()==="en"?"en":"zh-cn"}${k}.md`,L=await fetch(T);if(L.ok)a.value=await L.text();else if(L.status===404){const A=((g=n.meta)==null?void 0:g.title)||((m=f.value[f.value.length-1])==null?void 0:m.title)||r("common.articleTitle");a.value=`# ${A} + +${r("common.noContent")} + +${r("common.loadError")}`}else throw new Error(`HTTP ${L.status}: ${L.statusText}`)}catch(y){console.error("加载Markdown内容失败:",y),u.value=y instanceof Error?y.message:r("common.error")}finally{c.value=!1}}function S(g){i&&i(g)}const b=()=>{_().then(()=>{C()})};return At(()=>n.path,()=>{C()},{immediate:!1}),gt(async()=>{await _(),await C(),window.addEventListener("locale-changed",b)}),Mt(()=>{window.removeEventListener("locale-changed",b)}),(g,m)=>{const y=$e("router-link");return B(),q("div",U5,[f.value.length>0?(B(),q("nav",H5,[X(y,{to:"/"},{default:Ot(()=>[We(W(Q(r)("nav.home")),1)]),_:1}),(B(!0),q(Ce,null,wt(f.value,(k,T)=>(B(),q("span",{key:T},[m[0]||(m[0]=I("span",{class:"separator"}," / ",-1)),T===f.value.length-1?(B(),q("span",j5,W(k.title),1)):(B(),Be(y,{key:1,to:k.path},{default:Ot(()=>[We(W(k.title),1)]),_:2},1032,["to"]))]))),128))])):de("",!0),c.value?(B(),q("div",V5,[I("p",null,W(Q(r)("common.loading")),1)])):u.value?(B(),q("div",q5,[I("h2",null,"⚠️ "+W(Q(r)("common.error")),1),I("p",null,W(u.value),1),I("button",{onClick:C,class:"retry-btn"},W(Q(r)("common.retry")),1)])):(B(),q("div",W5,[X(G_,{content:a.value,"enable-toc":!0,onTocGenerated:S},null,8,["content"])])),!c.value&&!u.value?(B(),q("nav",K5,[h.value?(B(),Be(y,{key:0,to:h.value.link,class:"nav-link prev"},{default:Ot(()=>[m[1]||(m[1]=I("span",{class:"nav-arrow"},"←",-1)),I("div",G5,[I("div",Y5,W(Q(r)("common.prev")),1),I("div",Z5,W(h.value.text),1)])]),_:1,__:[1]},8,["to"])):de("",!0),d.value?(B(),Be(y,{key:1,to:d.value.link,class:"nav-link next"},{default:Ot(()=>[I("div",X5,[I("div",Q5,W(Q(r)("common.next")),1),I("div",J5,W(d.value.text),1)]),m[2]||(m[2]=I("span",{class:"nav-arrow"},"→",-1))]),_:1,__:[2]},8,["to"])):de("",!0)])):de("",!0)])}}}),tO=rn(eO,[["__scopeId","data-v-45369187"]]);function nO(e){if(e&&(e.title&&(document.title=e.title),e.description)){let t=document.querySelector('meta[name="description"]');t?t.setAttribute("content",e.description):(t=document.createElement("meta"),t.setAttribute("name","description"),t.setAttribute("content",e.description),document.head.appendChild(t))}}async function rO(e={}){const{configPath:t="/config/site.yaml",el:n="#app",customComponents:r={}}=e;try{const s=document.querySelector(n);if(!s)throw new Error(`目标元素 "${n}" 不存在,请确保DOM已加载完成`);s.innerHTML="";const i=await _5(t);i.site&&nO(i.site);const o=[{path:"/",name:"Home",component:r.home||B5,props:{config:i}},...y5(i.sidebar,r.article||tO)],l=DC({history:oC(),routes:o}),a=Bi({render(){return Dt(Ad,{config:i,showToc:!0})},setup(){return{config:i}}});a.component("DocsLayout",Ad),a.component("HeaderNav",i_),a.component("SidebarNav",o_),a.component("TableOfContents",R_),a.component("MarkdownRenderer",G_),a.component("ThemeSwitcher",s_),a.use(l),a.use(lf),a.provide("docsConfig",i);const c=a.mount(n);return{app:a,router:l,config:i,mountedApp:c}}catch(s){console.error("创建文档应用失败:",s);const i=s instanceof Error?s.message:"未知错误",o=s instanceof Error?s.stack:String(s);throw document.querySelector(n)&&Bi({render(){return Dt("div",{style:{padding:"2rem",textAlign:"center",color:"#ef4444"}},[Dt("h2","❌ 加载失败"),Dt("p",i),Dt("details",[Dt("summary","详细信息"),Dt("pre",{style:{textAlign:"left",fontSize:"12px"}},o)])])}}).mount(n),s}}document.addEventListener("DOMContentLoaded",()=>{rO({configPath:"/config/site.yaml",el:"#app"}).catch(e=>{console.error("启动文档应用失败:",e);const t=document.getElementById("app");t&&(t.innerHTML=` +
    +

    ❌ 加载失败

    +

    ${e.message||"未知错误"}

    + +
    + `)})});export{K1 as G,pa as j,sO as u}; diff --git a/docs/dist/config/ai.json b/docs/dist/config/ai.json new file mode 100644 index 0000000..4430a75 --- /dev/null +++ b/docs/dist/config/ai.json @@ -0,0 +1,59 @@ +{ + "enabled": true, + "provider": "openai", + "models": { + "openai": { + "modelId": "gpt-3.5-turbo", + "apiKey": "", + "baseUrl": "https://api.openai.com/v1", + "maxTokens": 4000, + "temperature": 0.7 + }, + "claude": { + "modelId": "claude-3-sonnet-20240229", + "apiKey": "", + "baseUrl": "https://api.anthropic.com", + "maxTokens": 4000, + "temperature": 0.7 + }, + "gemini": { + "modelId": "gemini-pro", + "apiKey": "", + "baseUrl": "https://generativelanguage.googleapis.com/v1", + "maxTokens": 4000, + "temperature": 0.7 + }, + "deepseek-v3": { + "modelId": "deepseek-chat", + "apiKey": "", + "baseUrl": "https://api.deepseek.com", + "maxTokens": 4000, + "temperature": 0.7 + }, + "deepseek-r1": { + "modelId": "deepseek-reasoner", + "apiKey": "", + "baseUrl": "https://api.deepseek.com", + "maxTokens": 4000, + "temperature": 0.7 + }, + "custom": { + "modelId": "", + "apiKey": "", + "baseUrl": "", + "maxTokens": 4000, + "temperature": 0.7 + } + }, + "features": { + "chatAssistant": true, + "documentSummary": true, + "codeExplanation": true, + "searchEnhancement": false + }, + "ui": { + "position": "bottom-right", + "theme": "auto", + "size": "medium" + } +} \ No newline at end of file diff --git a/docs/dist/config/site.en.yaml b/docs/dist/config/site.en.yaml new file mode 100644 index 0000000..8181530 --- /dev/null +++ b/docs/dist/config/site.en.yaml @@ -0,0 +1,133 @@ +# Website Configuration +site: + title: "Agricultural Stock Data Analysis System" + description: "Big data-driven agricultural stock data analysis platform" + # Logo formats supported: + # 1. emoji: "🤖" + # 2. image URL: "https://example.com/logo.png" + # 3. local image: "/images/logo.png" + # 4. relative path: "./assets/logo.svg" + logo: "🌾" + author: "Agricultural Stock Platform Team" + +# Navigation Bar Configuration +navbar: + items: + - title: "Home" + link: "/" + active: true + - title: "Guide" + link: "/guide" + - title: "Gitea" + link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + external: true + +# Sidebar Navigation Configuration +sidebar: + sections: + - title: "System Guide" + path: "/guide" + children: + - title: "Data Collector" + path: "/guide/data-collector" + - title: "Spark Processor" + path: "/guide/spark-processor" + - title: "Backend API" + path: "/guide/backend" + - title: "Frontend Interface" + path: "/guide/frontend" + + +# Theme Configuration +theme: + # Default theme mode: 'light' | 'dark' | 'auto' + # light: Force light mode + # dark: Force dark mode + # auto: Follow system preference (default) + defaultMode: "auto" + + # Allow users to toggle theme (show theme toggle button) + allowToggle: true + + # Color Configuration + colors: + primary: "#3b82f6" + secondary: "#64748b" + accent: "#06b6d4" + background: "#ffffff" + surface: "#f8fafc" + text: "#1e293b" + textSecondary: "#64748b" + border: "#e2e8f0" + + fonts: + primary: "Inter, -apple-system, BlinkMacSystemFont, sans-serif" + mono: "JetBrains Mono, Consolas, monospace" + +# Table of Contents Configuration +toc: + # Maximum heading level to display in TOC (1-6) + maxLevel: 2 + + # Enable table of contents + enabled: true + + # TOC title + title: "On This Page" + +# Footer Configuration +footer: + enabled: true + copyright: "© 2024 Vue Docs UI. All rights reserved." + repository: + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + branch: "master" + lastUpdated: "2024-12-19" + links: + - title: "Documentation" + link: "/guide/introduction" + - title: "GitHub" + link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + external: true + - title: "License" + link: "/license" + social: + - name: "email" + url: "mailto:15202078626@163.com" + icon: "mail" + - name: "gitea" + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + icon: "gitea" + # - name: "youtube" + # url: "https://youtube.com/@yourhandle" + # icon: "youtube" + # - name: "twitter" + # url: "https://twitter.com/yourhandle" + # icon: "twitter" + # - name: "discord" + # url: "https://discord.gg/yourinvite" + # icon: "discord" + # - name: "telegram" + # url: "https://t.me/yourhandle" + # icon: "telegram" + # - name: "tiktok" + # url: "https://tiktok.com/@yourhandle" + # icon: "tiktok" + - name: "bilibili" + url: "https://space.bilibili.com/443299209" + icon: "bilibili" + - name: "qq" + url: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=2934674522&card_type=person&source=qrcode" + icon: "qq" + - name: "wechat" + url: "weixin://dl/add?zlt2629496476520" + icon: "wechat" + # - name: "weibo" + # url: "https://weibo.com/yourhandle" + # icon: "weibo" + # - name: "douyin" + # url: "https://www.douyin.com/user/yourhandle" + # icon: "douyin" + # - name: "zhihu" + # url: "https://www.zhihu.com/people/yourhandle" + # icon: "zhihu" \ No newline at end of file diff --git a/docs/dist/config/site.yaml b/docs/dist/config/site.yaml new file mode 100644 index 0000000..4024397 --- /dev/null +++ b/docs/dist/config/site.yaml @@ -0,0 +1,164 @@ +# 网站基本配置 +site: + title: "农业股票数据分析系统" + description: "基于大数据技术的农业股票数据分析平台" + # logo支持以下格式: + # 1. emoji: "🤖" + # 2. 图片URL: "https://example.com/logo.png" + # 3. 本地图片: "/images/logo.png" + # 4. 相对路径: "./assets/logo.svg" + logo: "🌾" + author: "Agricultural Stock Platform Team" + +# 顶部导航配置 +navbar: + items: + - title: "首页" + link: "/" + active: true + - title: "指南" + link: "/guide" + - title: "Gitea" + link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + external: true + +# 侧边栏导航配置 +sidebar: + sections: + - title: "系统指南" + path: "/guide" + children: + - title: "数据采集器" + path: "/guide/data-collector" + - title: "Spark数据处理器" + path: "/guide/spark-processor" + - title: "后端API服务" + path: "/guide/backend" + - title: "前端界面" + path: "/guide/frontend" + + +# Theme Configuration +theme: + # Default theme mode: 'light' | 'dark' | 'auto' + # light: Force light mode + # dark: Force dark mode + # auto: Follow system preference (default) + defaultMode: "auto" + + # Allow users to toggle theme (show theme toggle button) + allowToggle: true + + # Color Configuration + colors: + primary: "#3b82f6" + secondary: "#64748b" + accent: "#06b6d4" + background: "#ffffff" + surface: "#f8fafc" + text: "#1e293b" + textSecondary: "#64748b" + border: "#e2e8f0" + success: "#10b981" + warning: "#f59e0b" + error: "#ef4444" + + fonts: + primary: "Inter, -apple-system, BlinkMacSystemFont, sans-serif" + mono: "JetBrains Mono, Consolas, Monaco, monospace" + + # Layout Configuration + layout: + headerHeight: "60px" + sidebarWidth: "280px" + tocWidth: "240px" + contentMaxWidth: "1200px" + +# Table of Contents Configuration +toc: + # Maximum heading level to display in TOC (1-6) + maxLevel: 3 + + # Enable table of contents + enabled: true + + # TOC title + title: "本页目录" + + # Show TOC on mobile devices + showOnMobile: false + +# Footer Configuration +footer: + enabled: true + copyright: "© 2024 Vue Docs UI. All rights reserved." + repository: + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + branch: "master" + lastUpdated: "2024-12-19" + links: + - title: "Documentation" + link: "/guide/introduction" + - title: "GitHub" + link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + external: true + - title: "License" + link: "/license" + social: + - name: "email" + url: "mailto:15202078626@163.com" + icon: "mail" + - name: "gitea" + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + icon: "gitea" + # - name: "youtube" + # url: "https://youtube.com/@yourhandle" + # icon: "youtube" + # - name: "twitter" + # url: "https://twitter.com/yourhandle" + # icon: "twitter" + # - name: "discord" + # url: "https://discord.gg/yourinvite" + # icon: "discord" + # - name: "telegram" + # url: "https://t.me/yourhandle" + # icon: "telegram" + # - name: "tiktok" + # url: "https://tiktok.com/@yourhandle" + # icon: "tiktok" + - name: "bilibili" + url: "https://space.bilibili.com/443299209" + icon: "bilibili" + - name: "qq" + url: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=2934674522&card_type=person&source=qrcode" + icon: "qq" + - name: "wechat" + url: "weixin://contacts/profile/zlt2629496476520" + icon: "wechat" + # - name: "weibo" + # url: "https://weibo.com/yourhandle" + # icon: "weibo" + # - name: "douyin" + # url: "https://www.douyin.com/user/yourhandle" + # icon: "douyin" + # - name: "zhihu" + # url: "https://www.zhihu.com/people/yourhandle" + # icon: "zhihu" + +# Analytics Configuration +analytics: + # Google Analytics + google: + enabled: false + id: "" + + # Other analytics providers can be added here + +# PWA Configuration +pwa: + enabled: false + name: "农业股票数据分析系统" + shortName: "AgricStock" + description: "基于大数据技术的农业股票数据分析平台" + themeColor: "#3b82f6" + backgroundColor: "#ffffff" \ No newline at end of file diff --git a/docs/dist/docs/en/guide.md b/docs/dist/docs/en/guide.md new file mode 100644 index 0000000..3ab21e4 --- /dev/null +++ b/docs/dist/docs/en/guide.md @@ -0,0 +1,83 @@ +# 🌾 Agricultural Stock Data Analysis System Development Guide + +## 📋 Project Collaboration Overview + +The Agricultural Stock Data Analysis System consists of four core sub-projects that implement a complete data pipeline from data collection to user presentation through a sophisticated collaboration mechanism. This guide provides detailed explanations of the collaboration relationships, development processes, and operational mechanisms of each sub-project. + +## 🏗️ System Architecture & Data Flow + +### Overall Data Flow + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ External APIs │ │ Data Collector │ │ Spark Processor │ │ Backend API │ +│ │───▶│ data-collector │───▶│ spark-processor │───▶│ backend │ +│ │ │ │ │ │ │ │ +│ • Tencent API │ │ • Python Crawler│ │ • Data Cleaning │ │ • RESTful API │ +│ • Sina Finance │ │ • Real-time Col │ │ • Tech Indicators│ │ • Data Caching │ +│ • East Money │ │ • Data Validation│ │ • Market Analysis│ │ • WebSocket │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ MySQL DB │ │ Frontend UI │ + │ Database │ │ frontend │ + │ │ │ │ + │ • Raw Data │ │ • Vue.js UI │ + │ • Analysis Data │ │ • Chart Display │ + │ • Index Opt │◀───│ • User Interact │ + └─────────────────┘ └─────────────────┘ +``` + +### 2. Deployment Collaboration Checklist + +#### Database Team Responsibilities +- [ ] MySQL 8.0 environment setup completed +- [ ] Database table structure creation completed +- [ ] Index optimization configuration completed +- [ ] Database connection pool configuration completed +- [ ] Backup strategy configuration completed + +#### Data Collector Team Responsibilities +- [ ] Python 3.8+ environment configuration completed +- [ ] Dependency package installation completed +- [ ] Configuration file environment variables setup completed +- [ ] Scheduled task configuration completed +- [ ] Log monitoring configuration completed + +#### Spark Processor Team Responsibilities +- [ ] Java 8 environment configuration completed +- [ ] Spark 3.4.0 cluster setup completed +- [ ] Maven dependency management configuration completed +- [ ] Job scheduling configuration completed +- [ ] Performance monitoring configuration completed + +#### Backend API Team Responsibilities +- [ ] Spring Boot application packaging completed +- [ ] Redis cache service configuration completed +- [ ] API interface testing passed +- [ ] WebSocket service configuration completed +- [ ] Load balancing configuration completed + +#### Frontend UI Team Responsibilities +- [ ] Node.js environment configuration completed +- [ ] Vue project build completed +- [ ] Static resource deployment completed +- [ ] CDN configuration optimization completed +- [ ] Browser compatibility testing completed + +## 📋 Key Success Factors for Collaboration + +### 1. Unified Technology Stack +- **Standardized Development Languages**: Python 3.8+, Java 8+, Node.js 16+ +- **Unified Database**: MySQL 8.0 + Redis 6.0 +- **Containerized Deployment**: Docker + Kubernetes +- **Unified Monitoring Tools**: ELK Stack + Prometheus + +### 2. Documentation Collaboration Standards +- **API Documentation**: Using Swagger/OpenAPI 3.0 +- **Database Documentation**: Auto-generated using DbDoc +- **Deployment Documentation**: Using Markdown + Flowcharts +- **User Manual**: Using GitBook or VuePress + +Through the above collaborative development process, the four sub-projects can organically combine to form an efficient, stable, and scalable agricultural stock data analysis system. While each team focuses on developing their own modules, they ensure overall system consistency and reliability through standardized interfaces and collaboration mechanisms. diff --git a/docs/dist/docs/en/guide/backend.md b/docs/dist/docs/en/guide/backend.md new file mode 100644 index 0000000..02f28fd --- /dev/null +++ b/docs/dist/docs/en/guide/backend.md @@ -0,0 +1,500 @@ +# 🏠 Backend API Service Documentation + +## 📋 Module Overview + +**backend** is the API service module of the Agricultural Stock Data Analysis System, built on Spring Boot 2.7.0. It provides RESTful API interfaces, business logic processing, real-time data push, and data caching optimization services. + +## 🏗️ Technical Architecture + +### Core Technology Stack +- **Spring Boot 2.7.0** - Main Application Framework +- **Spring Data JPA** - Data Access Layer +- **MyBatis Plus 3.5.2** - Enhanced MyBatis Framework +- **MySQL 8.0** - Primary Database +- **Redis 6.0** - Caching and Session Management +- **WebSocket** - Real-time Data Push +- **SpringDoc OpenAPI 3** - API Documentation Generation +- **Lombok** - Code Simplification Tool + +### Swagger UI Access + +After starting the application, you can access the API documentation through: +- **Swagger UI:** http://localhost:8080/swagger-ui/index.html +- **OpenAPI JSON:** http://localhost:8080/v3/api-docs + +## 📁 Project Structure + +``` +backend/ +├── src/main/java/com/agricultural/stock/ +│ ├── StockApplication.java # Main application class +│ ├── controller/ # Controller layer +│ │ ├── StockController.java # Stock data interfaces +│ │ ├── MarketController.java # Market analysis interfaces +│ │ └── HealthController.java # Health check interfaces +│ ├── service/ # Service layer +│ │ ├── StockService.java # Stock business logic +│ │ ├── MarketAnalysisService.java # Market analysis service +│ │ └── CacheService.java # Cache management service +│ ├── entity/ # Entity classes +│ │ ├── StockData.java # Stock data entity +│ │ ├── MarketAnalysis.java # Market analysis entity +│ │ └── TechnicalIndicator.java # Technical indicator entity +│ ├── mapper/ # Data access layer +│ │ ├── StockMapper.java # Stock data mapper +│ │ └── MarketMapper.java # Market data mapper +│ └── vo/ # View objects +│ ├── ApiResponse.java # Unified response format +│ ├── StockVO.java # Stock view object +│ └── MarketAnalysisVO.java # Market analysis view object +├── src/main/resources/ +│ ├── application.yml # Application configuration +│ ├── mapper/ # MyBatis mapping files +│ └── static/ # Static resources +└── pom.xml # Maven configuration +``` + +## 🔧 Core Functional Modules + +### 1. Stock Data Controller (StockController) + +**Description:** Provides stock data query and management interfaces. + +**Main Interfaces:** +- `GET /api/stock/realtime` - Get real-time stock data +- `GET /api/stock/history/{stockCode}` - Get historical stock data +- `GET /api/stock/search` - Search stocks +- `GET /api/stock/ranking/growth` - Get growth ranking +- `GET /api/stock/ranking/volume` - Get volume ranking +- `GET /api/stock/detail/{stockCode}` - Get stock details + +### 2. Market Analysis Controller (MarketController) + +**Description:** Provides market analysis data interfaces. + +**Main Interfaces:** +- `GET /api/market/latest` - Get latest market analysis +- `GET /api/market/recent/{days}` - Get recent market data +- `GET /api/market/range` - Get market data by date range +- `GET /api/market/industry` - Get industry analysis +- `GET /api/market/trends` - Get market trends + +### 3. Health Check Controller (HealthController) + +**Description:** Provides system health monitoring interfaces. + +**Main Interfaces:** +- `GET /api/health/status` - Get system status +- `GET /api/health/database` - Check database connection +- `GET /api/health/cache` - Check cache status + +## 🗄️ Database Integration + +### Entity Design + +**StockData Entity:** +```java +@Entity +@Table(name = "stock_data") +public class StockData { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "stock_code") + private String stockCode; + + @Column(name = "stock_name") + private String stockName; + + @Column(name = "open_price") + private BigDecimal openPrice; + + @Column(name = "close_price") + private BigDecimal closePrice; + + // Other fields... +} +``` + +### Data Access Layer + +**Using MyBatis Plus for efficient data operations:** +```java +@Mapper +public interface StockMapper extends BaseMapper { + + @Select("SELECT * FROM stock_data WHERE stock_code = #{stockCode} ORDER BY trade_date DESC LIMIT #{limit}") + List getHistoryData(@Param("stockCode") String stockCode, @Param("limit") int limit); + + @Select("SELECT * FROM stock_data WHERE trade_date = #{date}") + List getStockDataByDate(@Param("date") LocalDate date); +} +``` + +## ⚙️ Configuration Management + +### Application Configuration (application.yml) + +```yaml +server: + port: 8080 + servlet: + context-path: / + +spring: + application: + name: agricultural-stock-backend + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/agricultural_stock?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: 123456 + hikari: + minimum-idle: 5 + maximum-pool-size: 20 + idle-timeout: 300000 + connection-timeout: 20000 + + redis: + host: localhost + port: 6379 + password: + database: 0 + timeout: 2000ms + lettuce: + pool: + max-active: 20 + max-idle: 10 + min-idle: 5 + + jpa: + hibernate: + ddl-auto: none + show-sql: false + database-platform: org.hibernate.dialect.MySQL8Dialect + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.agricultural.stock.entity + configuration: + map-underscore-to-camel-case: true + cache-enabled: true + +springdoc: + api-docs: + path: /v3/api-docs + swagger-ui: + path: /swagger-ui.html +``` + +## 🚀 Deployment and Running + +### 1. Environment Requirements + +```bash +# Java 8+ +java -version + +# Maven 3.6+ +mvn -version + +# MySQL 8.0 +mysql --version + +# Redis 6.0 +redis-server --version +``` + +### 2. Database Setup + +```bash +# Start MySQL service +systemctl start mysql + +# Create database +mysql -u root -p -e "CREATE DATABASE agricultural_stock CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" + +# Import data structure +mysql -u root -p agricultural_stock < ../spark-processor/database_tables.sql +``` + +### 3. Redis Setup + +```bash +# Start Redis service +systemctl start redis + +# Test Redis connection +redis-cli ping +``` + +### 4. Application Startup + +```bash +# Compile and package +mvn clean package + +# Run application +java -jar target/agricultural-stock-backend-1.0.0.jar + +# Or use Maven to run directly +mvn spring-boot:run +``` + +## 📊 API Interface Documentation + +### Unified Response Format + +```json +{ + "code": 200, + "message": "Success", + "data": { + // Actual data content + }, + "timestamp": 1705123456789 +} +``` + +### Stock Data Interfaces + +**Get Real-time Stock Data:** +```http +GET /api/stock/realtime +Response: +{ + "code": 200, + "message": "Success", + "data": [ + { + "stockCode": "sz000876", + "stockName": "New Hope", + "currentPrice": 15.68, + "changePercent": 2.34, + "volume": 1234567, + "marketCap": 6789012345 + } + ] +} +``` + +**Get Stock Details:** +```http +GET /api/stock/detail/sz000876 +Response: +{ + "code": 200, + "message": "Success", + "data": { + "stockCode": "sz000876", + "stockName": "New Hope", + "currentPrice": 15.68, + "openPrice": 15.32, + "highPrice": 15.89, + "lowPrice": 15.21, + "volume": 1234567, + "turnover": 19456789, + "changePercent": 2.34, + "changeAmount": 0.36, + "peRatio": 12.5, + "marketCap": 6789012345 + } +} +``` + +### Market Analysis Interfaces + +**Get Latest Market Analysis:** +```http +GET /api/market/latest +Response: +{ + "code": 200, + "message": "Success", + "data": { + "analysisDate": "2024-01-15", + "upCount": 7, + "downCount": 2, + "flatCount": 1, + "totalCount": 10, + "totalMarketCap": 38147.05, + "totalVolume": 1878844, + "avgChangePercent": 0.33 + } +} +``` + +## 🔄 Real-time Data Push + +### WebSocket Configuration + +```java +@Configuration +@EnableWebSocket +public class WebSocketConfig implements WebSocketConfigurer { + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(new StockWebSocketHandler(), "/ws/stock/*") + .setAllowedOrigins("*"); + } +} +``` + +### Real-time Data Handler + +```java +@Component +public class StockWebSocketHandler extends TextWebSocketHandler { + + @Override + public void afterConnectionEstablished(WebSocketSession session) { + // Handle connection establishment + String stockCode = extractStockCode(session.getUri()); + subscribeToStockUpdates(session, stockCode); + } + + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) { + // Handle received messages + } + + public void broadcastStockUpdate(String stockCode, StockData data) { + // Broadcast stock updates to subscribed clients + } +} +``` + +## 🎯 Caching Strategy + +### Redis Cache Configuration + +```java +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager(RedisConnectionFactory factory) { + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofMinutes(10)) + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); + + return RedisCacheManager.builder(factory).cacheDefaults(config).build(); + } +} +``` + +### Cache Usage + +```java +@Service +public class StockService { + + @Cacheable(value = "stock:realtime", key = "#stockCode") + public StockData getRealtimeData(String stockCode) { + // Query from database + return stockMapper.getByStockCode(stockCode); + } + + @CacheEvict(value = "stock:realtime", key = "#stockCode") + public void updateStockData(String stockCode, StockData data) { + // Update database and clear cache + stockMapper.updateByStockCode(stockCode, data); + } +} +``` + +## 📈 Performance Optimization + +### Database Query Optimization + +- **Index Creation:** Create appropriate indexes for frequently queried fields +- **Query Optimization:** Use efficient SQL queries and avoid N+1 problems +- **Connection Pool:** Use HikariCP for optimal connection management +- **Pagination:** Implement proper pagination for large datasets + +### Cache Optimization + +- **Multi-level Caching:** Combine local cache and Redis +- **Cache Warming:** Pre-load frequently accessed data +- **Cache Invalidation:** Implement proper cache invalidation strategies +- **Cache Monitoring:** Monitor cache hit rates and performance + +## 🔒 Security Measures + +### Data Validation + +```java +@RestController +@Validated +public class StockController { + + @GetMapping("/stock/detail/{stockCode}") + public ApiResponse getStockDetail( + @PathVariable @Pattern(regexp = "^(sz|sh)\\d{6}$", message = "Invalid stock code format") + String stockCode) { + // Implementation + } +} +``` + +### SQL Injection Prevention + +- Use parameterized queries +- Input validation and sanitization +- ORM framework usage (JPA/MyBatis) + +### CORS Configuration + +```java +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOrigins("http://localhost:3000") + .allowedMethods("GET", "POST", "PUT", "DELETE") + .allowedHeaders("*") + .allowCredentials(true); + } +} +``` + +## 📋 Development Guidelines + +### Code Standards + +- Follow Spring Boot best practices +- Use proper layer separation (Controller-Service-Repository) +- Implement comprehensive error handling +- Add proper logging +- Write unit and integration tests + +### Testing Strategy + +```bash +# Run unit tests +mvn test + +# Run integration tests +mvn verify + +# Generate test coverage report +mvn jacoco:report +``` + +## 📄 License + +This module is licensed under the MIT License. See the LICENSE file in the project root directory for details. + +--- + +**Contact Information:** +- Project Repository: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- Technical Support: support@agricultural-stock.com +- Development Team: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/en/guide/data-collector.md b/docs/dist/docs/en/guide/data-collector.md new file mode 100644 index 0000000..b55f360 --- /dev/null +++ b/docs/dist/docs/en/guide/data-collector.md @@ -0,0 +1,179 @@ +# 📊 Python Data Collector Documentation + +## 📋 Module Overview + +**data-collector** is the data collection module of the Agricultural Stock Data Analysis System, built on Python 3.8+. It is responsible for real-time collection of agricultural listed companies' stock data from external data sources and storing the data in MySQL database for subsequent analysis. + +## 🏗️ Technical Architecture + +### Core Technology Stack +- **Python 3.8+** - Programming Language +- **Requests 2.31.0** - HTTP Request Library +- **Pandas 2.1.0** - Data Processing Library +- **BeautifulSoup4 4.12.2** - HTML Parsing Library +- **MySQL Connector 8.1.0** - MySQL Database Connector +- **Schedule 1.2.0** - Task Scheduling Library +- **NumPy 1.26.0** - Numerical Computing Library + +## 📁 Project Structure + +``` +data-collector/ +├── stock_crawler.py # Main crawler program +├── config.ini # Configuration file +├── requirements.txt # Python dependencies +└── stock_crawler.log # Runtime logs +``` + +## 🔧 Core Features + +### 1. Stock Data Collection + +Supports collecting agricultural stock data from Tencent Finance API: +- New Hope (sz000876) +- Muyuan Foodstuff (sz002714) +- Kweichow Moutai (sh600519) +- Wuliangye Yibin (sz000858) +- Inner Mongolia Yili (sh600887) +- Jiangsu Yanghe (sz002304) + +### 2. Data Processing Features + +- Real-time price data acquisition +- Automatic percentage change calculation +- Trading volume calculation +- Data format standardization +- Anomalous data filtering + +### 3. Database Storage + +- MySQL batch writing +- Duplicate data updates +- Transaction management +- Connection pool management + +### 4. Task Scheduling + +- Scheduled data collection +- Error retry mechanism +- Logging +- Status monitoring + +## ⚙️ Configuration Management + +### config.ini Configuration File + +```ini +[database] +host = localhost +port = 3306 +user = root +password = 123456 +database = agricultural_stock + +[crawler] +request_interval = 0.5 +request_timeout = 10 +max_retries = 3 +user_agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 + +[logging] +level = INFO +file = stock_crawler.log +``` + +## 🚀 Deployment and Running + +### 1. Environment Setup + +```bash +# Check Python version +python --version # Requires 3.8+ + +# Install dependencies +pip install -r requirements.txt +``` + +### 2. Configuration Setup + +```bash +# Edit configuration file +vim config.ini + +# Configure database connection +[database] +host = localhost +port = 3306 +user = your_username +password = your_password +database = agricultural_stock +``` + +### 3. Running Methods + +```bash +# Execute data collection once +python stock_crawler.py + +# Run in background +nohup python stock_crawler.py > /dev/null 2>&1 & +``` + +## 📊 Data Quality Assurance + +### Data Validation Mechanism + +- Required field completeness check +- Price data rationality validation +- Percentage change anomaly detection +- Trading volume negative value filtering + +### Exception Handling + +- Network request retry mechanism +- Database connection failure recovery +- Detailed error logging +- Graceful exception handling + +## 📈 Monitoring and Maintenance + +### Log Management + +The system automatically records the following information: +- Data collection start/end time +- Number of successfully collected stocks +- Failed stock codes and reasons +- Database operation results +- Exception error details + +### Performance Monitoring + +- Collection time statistics +- Success rate monitoring +- Error rate statistics +- Database performance monitoring + +## 📋 Dependency Management + +### requirements.txt + +```txt +requests>=2.31.0 +pandas>=2.1.0 +beautifulsoup4>=4.12.2 +lxml>=4.9.3 +mysql-connector-python>=8.1.0 +schedule>=1.2.0 +numpy>=1.26.0 +``` + +## 📄 License + +This module is licensed under the MIT License. See the LICENSE file in the project root directory for details. + +--- + +**Contact Information:** +- Project Repository: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- Technical Support: support@agricultural-stock.com +- Development Team: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/en/guide/frontend.md b/docs/dist/docs/en/guide/frontend.md new file mode 100644 index 0000000..18adb6f --- /dev/null +++ b/docs/dist/docs/en/guide/frontend.md @@ -0,0 +1,205 @@ +# 🎨 Frontend Interface Documentation + +## 📋 Module Overview + +**frontend** is the user interface module of the Agricultural Stock Data Analysis System, built on Vue.js 3.3.0. It provides real-time stock data display, interactive charts, market analysis visualization, and responsive user experience. + +## 🏗️ Technical Architecture + +### Core Technology Stack +- **Vue.js 3.3.0** - Progressive JavaScript Framework +- **Vue Router 4.2.0** - Official Router for Vue.js +- **Vuex 4.0.2** - State Management Pattern and Library +- **Element Plus 2.3.0** - Vue 3 Component Library +- **ECharts 5.4.0** - Data Visualization Library +- **Axios 1.4.0** - HTTP Client Library +- **Vite 4.3.0** - Build Tool and Development Server + +## 📁 Project Structure + +``` +frontend/ +├── src/ +│ ├── main.ts # Application entry point +│ ├── App.vue # Root component +│ ├── views/ # Page components +│ │ ├── Dashboard.vue # Dashboard overview +│ │ ├── MarketAnalysis.vue # Market analysis +│ │ ├── StockDetail.vue # Stock details +│ │ ├── StockSearch.vue # Stock search +│ │ └── Rankings.vue # Stock rankings +│ ├── components/ # Reusable components +│ ├── router/ # Routing configuration +│ ├── store/ # State management +│ ├── api/ # API interface encapsulation +│ └── utils/ # Utility functions +├── package.json # Dependencies and scripts +└── vite.config.js # Vite configuration +``` + +## 🔧 Core Functional Modules + +### 1. Dashboard Overview (Dashboard.vue) + +**Main Features:** +- Real-time market summary cards +- Market trend charts +- Industry distribution visualization +- Top gainers/losers lists +- Market news display + +### 2. Market Analysis Page (MarketAnalysis.vue) + +**Main Features:** +- Market trend analysis +- Technical indicator charts +- Industry comparison analysis +- Historical data backtesting + +### 3. Stock Detail Page (StockDetail.vue) + +**Main Features:** +- Real-time price information +- Interactive price charts +- Trading volume analysis +- Financial metrics +- Related news + +### 4. Stock Search Page (StockSearch.vue) + +**Main Features:** +- Keyword-based search +- Advanced filtering options +- Search result display +- Search history tracking + +### 5. Rankings Page (Rankings.vue) + +**Main Features:** +- Top gainers/losers rankings +- Volume rankings +- Market cap rankings +- Custom sorting options + +## 🚀 Deployment and Running + +### 1. Environment Requirements + +```bash +# Node.js 16+ +node --version + +# npm or yarn +npm --version +``` + +### 2. Installation and Setup + +```bash +# Install dependencies +npm install + +# Start development server +npm run dev + +# Build for production +npm run build +``` + +### 3. Environment Configuration + +```env +# Development +VITE_API_BASE_URL=http://localhost:8080 +VITE_WS_BASE_URL=ws://localhost:8080 + +# Production +VITE_API_BASE_URL=https://api.agricultural-stock.com +VITE_WS_BASE_URL=wss://api.agricultural-stock.com +``` + +## 📊 Data Visualization + +### ECharts Integration + +The system uses ECharts for creating interactive charts: +- Stock price trend charts +- Market distribution pie charts +- Technical indicator visualizations +- Volume analysis charts + +## 🎯 State Management + +### Vuex Store + +Global state management for: +- Stock data caching +- User interface state +- Real-time data updates +- Application configuration + +## 🔌 API Integration + +### HTTP Client + +Axios-based HTTP client with: +- Request/response interceptors +- Error handling +- Loading state management +- API response standardization + +## ⚙️ Build Configuration + +### Vite Configuration + +- Hot module replacement +- Proxy configuration for development +- Production build optimization +- Asset bundling and compression + +## 📱 Responsive Design + +### Mobile Adaptation + +- Responsive grid layouts +- Mobile-optimized navigation +- Touch-friendly interactions +- Adaptive chart sizing + +## 🔒 Security Measures + +### Client-side Security + +- XSS protection +- Input validation +- CSRF token handling +- Secure API communication + +## 📈 Performance Optimization + +### Optimization Strategies + +- Component lazy loading +- Virtual scrolling for large lists +- Data caching strategies +- Bundle size optimization + +## 📋 Development Guidelines + +### Code Standards + +- ESLint + Prettier configuration +- TypeScript support +- Component naming conventions +- Testing best practices + +## 📄 License + +This module is licensed under the MIT License. See the LICENSE file in the project root directory for details. + +--- + +**Contact Information:** +- Project Repository: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- Technical Support: support@agricultural-stock.com +- Development Team: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/en/guide/spark-processor.md b/docs/dist/docs/en/guide/spark-processor.md new file mode 100644 index 0000000..a38c114 --- /dev/null +++ b/docs/dist/docs/en/guide/spark-processor.md @@ -0,0 +1,330 @@ +# 🌾 Spark Data Processing Module Documentation + +## 📋 Module Overview + +**spark-processor** is the core data processing engine of the Agricultural Stock Data Analysis System, built on Apache Spark 3.4.0. It is responsible for large-scale processing, technical analysis, and market analysis of agricultural listed companies' stock data. + +## 🏗️ Technical Architecture + +### Core Technology Stack +- **Apache Spark 3.4.0** - Distributed Big Data Processing Framework +- **Spark SQL** - Structured Data Query and Processing +- **Spark Streaming** - Real-time Stream Data Processing +- **MySQL 8.0** - Data Storage and Persistence +- **Java 8** - Programming Language +- **Maven 3.6+** - Project Build Management + +### Architecture Design + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Spark Data Processing Module │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ +│ │ Data Cleaning │ │ Technical │ │ Market │ │ +│ │ Service │ │ Indicator │ │ Analysis │ │ +│ │ │ │ Service │ │ Service │ │ +│ └─────────────────┘ └─────────────────┘ └─────────────┘ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ Database Save │ │ Configuration │ │ +│ │ Service │ │ SparkConfig │ │ +│ │ │ │ │ │ +│ └─────────────────┘ └─────────────────┘ │ +├─────────────────────────────────────────────────────────────┤ +│ StockDataProcessor (Main Processing Class) │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 📁 Project Structure + +``` +spark-processor/ +├── src/main/java/com/agricultural/spark/ +│ ├── StockDataProcessor.java # Main processing class +│ ├── config/ +│ │ └── SparkConfig.java # Configuration management +│ └── service/ +│ ├── DataCleaningService.java # Data cleaning service +│ ├── TechnicalIndicatorService.java # Technical indicator service +│ ├── MarketAnalysisService.java # Market analysis service +│ └── DatabaseSaveService.java # Database save service +├── src/main/resources/ +│ ├── application.conf # Application configuration +│ └── logback.xml # Logging configuration +├── database_tables.sql # Database table structure +├── pom.xml # Maven configuration +└── README_DATABASE.md # Database documentation +``` + +## 🔧 Core Functional Modules + +### 1. Main Data Processor (StockDataProcessor) + +**Description:** The core scheduler of the system, responsible for coordinating the workflow of various service modules. + +**Main Responsibilities:** +- Spark session management and initialization +- Data loading and preprocessing coordination +- Batch processing and stream processing mode switching +- Exception handling and resource management + +**Key Methods:** +```java +// Batch processing mode +public void runBatchProcessing() + +// Stream processing mode +public void runStreamProcessing() + +// Load data from MySQL +public Dataset loadStockDataFromMySQL() +``` + +### 2. Data Cleaning Service (DataCleaningService) + +**Description:** Standardized cleaning and preprocessing of raw stock data. + +**Processing Flow:** +1. **Deduplication** - Remove duplicate records based on stock code and trading date +2. **Missing Value Handling** - Fill numerical fields with 0, string fields with empty values +3. **Data Type Conversion** - Ensure field type correctness +4. **Outlier Detection** - Identify and handle anomalous data in prices, volumes, etc. +5. **Derived Field Calculation** - Calculate percentage changes, market cap, and other derived metrics + +**Key Functions:** +```java +// Main cleaning method +public Dataset cleanData(Dataset rawData) + +// Missing value handling +private Dataset handleMissingValues(Dataset data) + +// Outlier handling +private Dataset handleOutliers(Dataset data) +``` + +### 3. Technical Indicator Service (TechnicalIndicatorService) + +**Description:** Calculate various technical analysis indicators to provide data support for quantitative analysis. + +**Supported Technical Indicators:** +- **Moving Averages (MA)** - MA5, MA10, MA20, MA30 +- **Relative Strength Index (RSI)** - 14-day RSI indicator +- **MACD Indicator** - Fast line, slow line, histogram +- **Bollinger Bands** - Upper band, middle band, lower band +- **Volume Moving Average** - Volume technical analysis + +**Calculation Methods:** +```java +// Calculate technical indicators +public Dataset calculateTechnicalIndicators(Dataset data) + +// Moving averages calculation +private Dataset calculateMovingAverages(Dataset data) + +// RSI indicator calculation +private Dataset calculateRSI(Dataset data) +``` + +### 4. Market Analysis Service (MarketAnalysisService) + +**Description:** Analyze overall market performance and industry distribution from a macro perspective. + +**Analysis Dimensions:** +- **Market Overview** - Rise/fall statistics, average percentage change, total market cap +- **Industry Performance** - Stock performance statistics by industry classification +- **Market Trends** - Historical trend analysis and forecasting +- **Sector Rotation** - Fund flow analysis between different sectors + +**Core Analysis:** +```java +// Market overview analysis +public Map analyzeMarketOverview(Dataset data) + +// Industry performance analysis +public Dataset analyzeIndustryPerformance(Dataset data) + +// Market trend analysis +public Dataset analyzeTrends(Dataset data) +``` + +### 5. Database Save Service (DatabaseSaveService) + +**Description:** Persist Spark-processed result data to MySQL database. + +**Save Strategy:** +- **Incremental Updates** - Save only new or changed data +- **Batch Writing** - Improve data writing efficiency +- **Transaction Management** - Ensure data consistency +- **Connection Pool Management** - Optimize database connection performance + +**Main Functions:** +```java +// Save market analysis results +public void saveMarketAnalysis(Map analysisResult) + +// Save technical indicator data +public void saveTechnicalIndicators(Dataset indicators) + +// Batch save processing results +public void batchSaveResults(List> datasets) +``` + +## 🗄️ Database Design + +### Main Data Tables + +| Table Name | Description | Key Fields | +|------------|-------------|------------| +| `stock_data` | Stock basic data | stock_code, stock_name, open_price, close_price, volume, trade_date | +| `market_analysis` | Market analysis results | analysis_date, up_count, down_count, total_market_cap, avg_change_percent | +| `stock_technical_indicators` | Technical indicator data | stock_code, trade_date, ma5, ma10, ma20, rsi, macd | +| `industry_analysis` | Industry analysis data | industry_name, stock_count, avg_change_percent, total_market_cap | +| `market_trends` | Market trend data | trade_date, avg_price, total_volume, stock_count | + +## ⚙️ Configuration Management + +### Configuration File (application.conf) + +```hocon +# Spark configuration +spark { + master = "local[*]" + app.name = "AgriculturalStockDataProcessor" +} + +# MySQL database configuration +mysql { + host = "localhost" + port = 3306 + database = "agricultural_stock" + username = "root" + password = "123456" +} + +# Processing configuration +processing { + batch.size = 1000 + window.duration = "10 seconds" + checkpoint.location = "/tmp/spark-checkpoint" +} +``` + +## 🚀 Deployment and Running + +### 1. Environment Requirements + +```bash +# Java 8+ (recommended OpenJDK 8) +java -version + +# Maven 3.6+ +mvn -version + +# MySQL 8.0+ +mysql --version +``` + +### 2. Database Setup + +```bash +# Create database +mysql -u root -p -e "CREATE DATABASE agricultural_stock CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" + +# Import table structure +mysql -u root -p agricultural_stock < database_tables.sql +``` + +### 3. Build and Run + +```bash +# Compile project +mvn clean compile + +# Run batch processing +mvn exec:java -Dexec.mainClass="com.agricultural.spark.StockDataProcessor" + +# Run with custom parameters +mvn exec:java -Dexec.mainClass="com.agricultural.spark.StockDataProcessor" -Dexec.args="--mode batch --date 2024-01-01" +``` + +## 📊 Performance Optimization + +### Spark Optimization Strategies + +- **Memory Management** - Optimize heap size and garbage collection +- **Parallelism Tuning** - Adjust partition and executor numbers +- **Cache Strategy** - Cache frequently accessed datasets +- **Broadcast Variables** - Use broadcast for small lookup tables + +### Database Optimization + +- **Index Creation** - Create appropriate indexes for query optimization +- **Connection Pooling** - Use HikariCP for connection management +- **Batch Operations** - Use batch inserts for better performance +- **Query Optimization** - Optimize SQL queries and use prepared statements + +## 📈 Monitoring and Maintenance + +### Performance Monitoring + +- **Spark UI** - Monitor job execution and resource usage +- **Application Metrics** - Track processing time and throughput +- **Database Metrics** - Monitor connection pool and query performance +- **System Resources** - Monitor CPU, memory, and disk usage + +### Log Management + +```xml + + + + logs/spark-processor.log + + logs/spark-processor.%d{yyyy-MM-dd}.log + 30 + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + +``` + +## 📋 Development Guidelines + +### Code Standards + +- Follow Java coding conventions +- Use meaningful variable and method names +- Add comprehensive comments and documentation +- Implement proper error handling +- Write unit tests for critical components + +### Testing Strategy + +```bash +# Run unit tests +mvn test + +# Run integration tests +mvn verify + +# Generate coverage report +mvn jacoco:report +``` + +## 📄 License + +This module is licensed under the MIT License. See the LICENSE file in the project root directory for details. + +--- + +**Contact Information:** +- Project Repository: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- Technical Support: support@agricultural-stock.com +- Development Team: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/en/index.md b/docs/dist/docs/en/index.md new file mode 100644 index 0000000..b875723 --- /dev/null +++ b/docs/dist/docs/en/index.md @@ -0,0 +1,64 @@ +# Welcome to Agricultural Stock Data Analysis System + +The Agricultural Stock Data Analysis System is a comprehensive big data-driven platform focused on agricultural listed companies' stock data collection, processing, analysis, and visualization. + +## 🌟 Key Features + +- **🚀 Real-time Data Collection** - Automated collection of agricultural stock data from multiple sources +- **🎨 Interactive Visualization** - Beautiful charts and dashboards with real-time updates +- **📱 Responsive Design** - Perfect experience across desktop and mobile devices +- **🌐 Comprehensive Analysis** - Technical indicators, market trends, and industry analysis +- **🤖 Big Data Processing** - Apache Spark-powered large-scale data processing +- **⚡ High Performance** - Optimized for handling millions of data points +- **🔍 Advanced Search** - Intelligent stock search and filtering capabilities +- **📝 Rich Documentation** - Complete technical documentation and user guides + +## 🏗️ System Architecture + +- **Microservices Design** - Modular architecture with independent services +- **Scalable Processing** - Distributed computing with Apache Spark +- **Modern Tech Stack** - Vue.js 3, Spring Boot, Python, and MySQL +- **Real-time Updates** - WebSocket-based live data streaming + +## 📦 System Components + +```bash +# Data Collection Layer +├── Python Data Collector # Real-time stock data collection +├── External APIs Integration # Tencent Finance, Sina Finance + +# Data Processing Layer +├── Apache Spark Processor # Big data processing engine +├── Technical Indicators # MA, RSI, MACD, Bollinger Bands +├── Market Analysis # Industry trends, market overview + +# Service Layer +├── Spring Boot Backend # RESTful API services +├── WebSocket Services # Real-time data streaming +├── Redis Caching # Performance optimization + +# Presentation Layer +├── Vue.js Frontend # Interactive user interface +├── ECharts Visualization # Charts and graphs +└── Responsive Design # Mobile-friendly UI +``` + +## 📊 Supported Agricultural Stocks + +- **New Hope (sz000876)** - Leading livestock and feed company +- **Muyuan Foodstuff (sz002714)** - Major pig farming enterprise +- **Kweichow Moutai (sh600519)** - Premium liquor producer +- **Wuliangye Yibin (sz000858)** - Famous Chinese spirits brand +- **Inner Mongolia Yili (sh600887)** - Dairy industry leader +- **Jiangsu Yanghe (sz002304)** - Renowned liquor manufacturer + +## 🚀 Getting Started + +Visit our [System Guide](/guide) to learn about each component and how to deploy the platform. + +## 🔗 Related Links + +- [GitHub Repository](https://github.com/agricultural-stock-platform) +- [System Guide](/guide) +- [Data Collector](/guide/data-collector) +- [Spark Processor](/guide/spark-processor) \ No newline at end of file diff --git a/docs/dist/docs/zh-cn/guide.md b/docs/dist/docs/zh-cn/guide.md new file mode 100644 index 0000000..6174a5b --- /dev/null +++ b/docs/dist/docs/zh-cn/guide.md @@ -0,0 +1,87 @@ +# 🌾 农业股票数据分析系统开发指南 + +## 📋 项目协作概述 + +农业股票数据分析系统由四个核心子项目组成,通过精密的协作机制实现从数据采集到用户展示的完整数据流水线。本指南详细说明各子项目的协作关系、开发流程和运作机制。 + +## 🏗️ 系统架构与数据流 + +### 整体数据流向 + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ 外部数据源 │ │ 数据采集器 │ │ Spark处理器 │ │ 后端API服务 │ +│ External APIs │───▶│ data-collector │───▶│ spark-processor │───▶│ backend │ +│ │ │ │ │ │ │ │ +│ • 腾讯财经API │ │ • Python爬虫 │ │ • 数据清洗 │ │ • RESTful API │ +│ • 新浪财经API │ │ • 实时采集 │ │ • 技术指标计算 │ │ • 数据缓存 │ +│ • 东方财富API │ │ • 数据验证 │ │ • 市场分析 │ │ • WebSocket │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ MySQL数据库 │ │ 前端界面 │ + │ Database │ │ frontend │ + │ │ │ │ + │ • 原始数据存储 │ │ • Vue.js界面 │ + │ • 分析结果存储 │ │ • 图表展示 │ + │ • 索引优化 │◀───│ • 用户交互 │ + └─────────────────┘ └─────────────────┘ +``` + + + +### 2. 部署协作检查清单 + +#### 数据库团队责任 +- [ ] MySQL 8.0环境搭建完成 +- [ ] 数据库表结构创建完成 +- [ ] 索引优化配置完成 +- [ ] 数据库连接池配置完成 +- [ ] 备份策略配置完成 + +#### 数据采集器团队责任 +- [ ] Python 3.8+环境配置完成 +- [ ] 依赖包安装完成 +- [ ] 配置文件环境变量设置完成 +- [ ] 定时任务调度配置完成 +- [ ] 日志监控配置完成 + +#### Spark处理器团队责任 +- [ ] Java 8环境配置完成 +- [ ] Spark 3.4.0集群搭建完成 +- [ ] Maven依赖管理配置完成 +- [ ] 作业调度配置完成 +- [ ] 性能监控配置完成 + +#### 后端API团队责任 +- [ ] Spring Boot应用打包完成 +- [ ] Redis缓存服务配置完成 +- [ ] API接口测试通过 +- [ ] WebSocket服务配置完成 +- [ ] 负载均衡配置完成 + +#### 前端界面团队责任 +- [ ] Node.js环境配置完成 +- [ ] Vue项目构建完成 +- [ ] 静态资源部署完成 +- [ ] CDN配置优化完成 +- [ ] 浏览器兼容性测试完成 + + +## 📋 协作成功要素 + +### 1. 技术栈统一 +- **开发语言标准化**:Python 3.8+, Java 8+, Node.js 16+ +- **数据库统一**:MySQL 8.0 + Redis 6.0 +- **容器化部署**:Docker + Kubernetes +- **监控工具统一**:ELK Stack + Prometheus + +### 2. 文档协作规范 +- **API文档**:使用Swagger/OpenAPI 3.0 +- **数据库文档**:使用DbDoc自动生成 +- **部署文档**:使用Markdown + 流程图 +- **用户手册**:使用GitBook或VuePress + + +通过以上协作开发流程,四个子项目能够有机结合,形成一个高效、稳定、可扩展的农业股票数据分析系统。每个团队在专注自身模块开发的同时,通过标准化的接口和协作机制,确保系统整体的一致性和可靠性。 diff --git a/docs/dist/docs/zh-cn/guide/backend.md b/docs/dist/docs/zh-cn/guide/backend.md new file mode 100644 index 0000000..7a28b18 --- /dev/null +++ b/docs/dist/docs/zh-cn/guide/backend.md @@ -0,0 +1,280 @@ +# 🏠 Spring Boot后端API文档 + +## 📋 模块概述 + +**backend** 是农业股票数据分析系统的后端API服务模块,基于Spring Boot 2.7.0构建,负责提供RESTful API接口、业务逻辑处理、数据库操作和系统集成服务。 + +## Swagger UI访问 + +启动应用后,可通过以下地址访问API文档: +- **Swagger UI:** http://localhost:8080/swagger-ui/index.html +- **OpenAPI JSON:** http://localhost:8080/v3/api-docs + + +## 🏗️ 技术架构 + +### 核心技术栈 +- **Spring Boot 2.7.0** - 核心框架 +- **Spring Web** - RESTful API支持 +- **Spring Data JPA** - 数据持久化 +- **MyBatis Plus 3.5.2** - 数据库操作增强 +- **MySQL 8.0** - 关系型数据库 +- **Redis** - 缓存与会话管理 +- **WebSocket** - 实时数据推送 +- **SpringDoc OpenAPI 3** - API文档生成 +- **Lombok** - 代码简化工具 + + +### 系统架构图 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Spring Boot 后端服务 │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ +│ │ 控制器层 │ │ 服务层 │ │ 数据层 │ │ +│ │ Controllers │ │ Services │ │ Mappers │ │ +│ │ │ │ │ │ │ │ +│ │ • 股票数据API │ │ • 股票数据服务 │ │ • 数据访问 │ │ +│ │ • 市场分析API │ │ • 市场分析服务 │ │ • SQL映射 │ │ +│ │ • 健康检查API │ │ • 缓存服务 │ │ • 实体映射 │ │ +│ └─────────────────┘ └─────────────────┘ └─────────────┘ │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ +│ │ 实体层 │ │ 配置层 │ │ 工具层 │ │ +│ │ Entities │ │ Configurations │ │ Utils │ │ +│ │ │ │ │ │ │ │ +│ │ • 数据模型 │ │ • 数据库配置 │ │ • 响应封装 │ │ +│ │ • VO对象 │ │ • Redis配置 │ │ • 异常处理 │ │ +│ │ • DTO对象 │ │ • WebSocket配置 │ │ • 工具类 │ │ +│ └─────────────────┘ └─────────────────┘ └─────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 📁 项目结构 + +``` +backend/ +├── src/main/java/com/agricultural/stock/ +│ ├── StockPlatformApplication.java # 应用启动类 +│ ├── controller/ # 控制器层 +│ │ ├── StockController.java # 股票数据API控制器 +│ │ ├── MarketAnalysisController.java # 市场分析API控制器 +│ │ └── HealthController.java # 健康检查控制器 +│ ├── service/ # 服务层 +│ │ ├── StockService.java # 股票数据服务接口 +│ │ ├── MarketAnalysisService.java # 市场分析服务 +│ │ └── impl/ +│ │ └── StockServiceImpl.java # 股票数据服务实现 +│ ├── entity/ # 实体层 +│ │ ├── StockData.java # 股票数据实体 +│ │ ├── MarketAnalysis.java # 市场分析实体 +│ │ └── MarketTrends.java # 市场趋势实体 +│ ├── mapper/ # 数据访问层 +│ │ ├── StockDataMapper.java # 股票数据Mapper +│ │ └── MarketAnalysisMapper.java # 市场分析Mapper +│ ├── vo/ # 视图对象 +│ │ ├── Result.java # 统一响应结果 +│ │ ├── StockAnalysisVO.java # 股票分析视图对象 +│ │ └── StockTrendVO.java # 股票趋势视图对象 +│ └── config/ # 配置类 +│ ├── WebConfig.java # Web配置 +│ ├── RedisConfig.java # Redis配置 +│ └── WebSocketConfig.java # WebSocket配置 +├── src/main/resources/ +│ ├── application.yml # 应用配置文件 +│ ├── mapper/ # MyBatis映射文件 +│ └── static/ # 静态资源 +└── pom.xml # Maven配置文件 +``` + +## 🔧 核心功能模块 + +### 1. 股票数据API (StockController) + +**功能描述:** 提供股票数据的增删改查、排行榜、搜索等核心API接口。 + +**主要接口:** + +| HTTP方法 | 路径 | 描述 | 响应格式 | +|---------|------|------|----------| +| GET | `/api/stock/realtime` | 获取实时股票数据 | `Result>` | +| GET | `/api/stock/history/{stockCode}` | 获取历史数据 | `Result>` | +| GET | `/api/stock/ranking/growth` | 涨幅排行榜 | `Result>` | +| GET | `/api/stock/ranking/market-cap` | 市值排行榜 | `Result>` | +| GET | `/api/stock/ranking/volume` | 成交量排行榜 | `Result>` | +| GET | `/api/stock/trend/{stockCode}` | 股票趋势分析 | `Result` | +| GET | `/api/stock/analysis` | 市场综合分析 | `Result` | +| GET | `/api/stock/search` | 股票搜索 | `Result>` | +| POST | `/api/stock/save` | 保存股票数据 | `Result` | +| POST | `/api/stock/batch-save` | 批量保存数据 | `Result` | + + + + +### 2. 市场分析API (MarketAnalysisController) + +**功能描述:** 提供市场分析数据的查询和统计接口。 + +**主要接口:** + +| HTTP方法 | 路径 | 描述 | 参数 | +|---------|------|------|------| +| GET | `/api/market/latest` | 获取最新市场分析 | 无 | +| GET | `/api/market/recent/{days}` | 获取最近N天数据 | days: 天数 | +| GET | `/api/market/range` | 获取日期范围数据 | startDate, endDate | + + +## 🚀 部署与运行 + +### 1. 环境准备 + +```bash +# 检查Java版本 +java -version + +# 检查Maven版本 +mvn -version + +# 启动MySQL服务 +sudo systemctl start mysql + +# 启动Redis服务 +sudo systemctl start redis +``` + +### 2. 数据库初始化 + +```sql +# 创建数据库 +CREATE DATABASE agricultural_stock CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +# 导入表结构 +mysql -u root -p agricultural_stock < ../agricultural_stock.sql +``` + +### 3. 编译运行 + +```bash +# 进入后端目录 +cd backend + +# 清理编译 +mvn clean compile + +# 运行应用 +mvn spring-boot:run + +# 或打包后运行 +mvn package +java -jar target/stock-platform-backend-1.0.0.jar +``` + +### 4. Docker部署 + +**Dockerfile:** +```dockerfile +FROM openjdk:8-jre-alpine +VOLUME /tmp +COPY target/stock-platform-backend-1.0.0.jar app.jar +EXPOSE 8080 +ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] +``` + +**构建镜像:** +```bash +# 构建Docker镜像 +docker build -t agricultural-stock-backend . + +# 运行容器 +docker run -d -p 8080:8080 \ + -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/agricultural_stock \ + -e SPRING_REDIS_HOST=redis \ + --name backend agricultural-stock-backend +``` + +## 📊 API文档 + +### Swagger UI访问 + +启动应用后,可通过以下地址访问API文档: +- **Swagger UI:** http://localhost:8080/swagger-ui/index.html +- **OpenAPI JSON:** http://localhost:8080/v3/api-docs + + +## 📈 性能优化 + +### 1. 数据库优化 + +**连接池配置:** +```yaml +spring: + datasource: + hikari: + minimum-idle: 5 # 最小空闲连接 + maximum-pool-size: 20 # 最大连接池大小 + max-lifetime: 1800000 # 连接最大生存时间 + connection-timeout: 30000 # 连接超时时间 +``` + +**索引优化:** +```sql +# 股票代码索引 +CREATE INDEX idx_stock_code ON stock_data(stock_code); + +# 交易日期索引 +CREATE INDEX idx_trade_date ON stock_data(trade_date); + +# 复合索引 +CREATE INDEX idx_stock_trade ON stock_data(stock_code, trade_date); +``` + + + + +## 📋 监控与维护 + +### 1. 健康检查 +**健康检查接口:** +```java +@RestController +@RequestMapping("/api/health") +public class HealthController { + @GetMapping("/check") + public Result> healthCheck() { + Map status = new HashMap<>(); + status.put("status", "UP"); + status.put("timestamp", System.currentTimeMillis()); + status.put("database", checkDatabase()); + status.put("redis", checkRedis()); + return Result.success(status); + } +} +``` +### 2. 日志管理 + +**日志配置示例:** +```yaml +logging: + level: + root: INFO + com.agricultural.stock: DEBUG + pattern: + console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" + file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" + file: + name: logs/backend.log + max-size: 100MB + max-history: 30 +``` + +## 📄 许可证 + +本模块采用 MIT 许可证,详见项目根目录 LICENSE 文件。 + +--- + +**联系信息:** +- 项目仓库: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- 技术支持: support@agricultural-stock.com +- 开发团队: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/zh-cn/guide/data-collector.md b/docs/dist/docs/zh-cn/guide/data-collector.md new file mode 100644 index 0000000..2a18584 --- /dev/null +++ b/docs/dist/docs/zh-cn/guide/data-collector.md @@ -0,0 +1,179 @@ +# 📊 Python数据采集器文档 + +## 📋 模块概述 + +**data-collector** 是农业股票数据分析系统的数据采集模块,基于Python 3.8+构建,负责从外部数据源实时采集农业类上市公司的股票数据,并将数据存储到MySQL数据库中供后续分析使用。 + +## 🏗️ 技术架构 + +### 核心技术栈 +- **Python 3.8+** - 编程语言 +- **Requests 2.31.0** - HTTP请求库 +- **Pandas 2.1.0** - 数据处理库 +- **BeautifulSoup4 4.12.2** - HTML解析库 +- **MySQL Connector 8.1.0** - MySQL数据库连接器 +- **Schedule 1.2.0** - 任务调度库 +- **NumPy 1.26.0** - 数值计算库 + +## 📁 项目结构 + +``` +data-collector/ +├── stock_crawler.py # 主要爬虫程序 +├── config.ini # 配置文件 +├── requirements.txt # Python依赖 +└── stock_crawler.log # 运行日志 +``` + +## 🔧 核心功能 + +### 1. 股票数据采集 + +支持从腾讯财经API采集以下农业股票数据: +- 新希望 (sz000876) +- 牧原股份 (sz002714) +- 贵州茅台 (sh600519) +- 五粮液 (sz000858) +- 伊利股份 (sh600887) +- 洋河股份 (sz002304) + +### 2. 数据处理功能 + +- 实时价格数据获取 +- 涨跌幅自动计算 +- 成交额计算 +- 数据格式标准化 +- 异常数据过滤 + +### 3. 数据库存储 + +- MySQL批量写入 +- 重复数据更新 +- 事务管理 +- 连接池管理 + +### 4. 任务调度 + +- 定时数据采集 +- 错误重试机制 +- 日志记录 +- 状态监控 + +## ⚙️ 配置管理 + +### config.ini 配置文件 + +```ini +[database] +host = localhost +port = 3306 +user = root +password = 123456 +database = agricultural_stock + +[crawler] +request_interval = 0.5 +request_timeout = 10 +max_retries = 3 +user_agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 + +[logging] +level = INFO +file = stock_crawler.log +``` + +## 🚀 部署与运行 + +### 1. 环境准备 + +```bash +# 检查Python版本 +python --version # 需要 3.8+ + +# 安装依赖 +pip install -r requirements.txt +``` + +### 2. 配置设置 + +```bash +# 编辑配置文件 +vim config.ini + +# 配置数据库连接信息 +[database] +host = localhost +port = 3306 +user = your_username +password = your_password +database = agricultural_stock +``` + +### 3. 运行方式 + +```bash +# 执行一次数据采集 +python stock_crawler.py + +# 后台运行 +nohup python stock_crawler.py > /dev/null 2>&1 & +``` + +## 📊 数据质量保证 + +### 数据验证机制 + +- 必填字段完整性检查 +- 价格数据合理性验证 +- 涨跌幅异常值检测 +- 成交量负值过滤 + +### 异常处理 + +- 网络请求重试机制 +- 数据库连接故障恢复 +- 错误日志详细记录 +- 优雅异常处理 + +## 📈 监控与维护 + +### 日志管理 + +系统自动记录以下信息: +- 数据采集开始/结束时间 +- 成功采集的股票数量 +- 失败的股票代码和原因 +- 数据库操作结果 +- 异常错误详情 + +### 性能监控 + +- 采集耗时统计 +- 成功率监控 +- 错误率统计 +- 数据库性能监控 + +## 📋 依赖管理 + +### requirements.txt + +```txt +requests>=2.31.0 +pandas>=2.1.0 +beautifulsoup4>=4.12.2 +lxml>=4.9.3 +mysql-connector-python>=8.1.0 +schedule>=1.2.0 +numpy>=1.26.0 +``` + +## 📄 许可证 + +本模块采用 MIT 许可证,详见项目根目录 LICENSE 文件。 + +--- + +**联系信息:** +- 项目仓库: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- 技术支持: support@agricultural-stock.com +- 开发团队: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/zh-cn/guide/frontend.md b/docs/dist/docs/zh-cn/guide/frontend.md new file mode 100644 index 0000000..7b7b8a6 --- /dev/null +++ b/docs/dist/docs/zh-cn/guide/frontend.md @@ -0,0 +1,248 @@ +# 🎨 Vue.js前端界面文档 + +## 📋 模块概述 + +**frontend** 是农业股票数据分析系统的前端用户界面模块,基于Vue.js 3.3.0构建,提供现代化的响应式Web界面,支持实时数据展示、交互式图表、股票分析和市场监控功能。 + +## 🏗️ 技术架构 + +### 核心技术栈 +- **Vue 3.3.0** - 渐进式JavaScript框架 +- **Vue Router 4.2.0** - 官方路由管理器 +- **Vuex 4.0.2** - 状态管理模式 +- **Element Plus 2.3.0** - Vue 3组件库 +- **ECharts 5.4.0** - 数据可视化图表库 +- **Axios 1.4.0** - HTTP客户端 +- **Vite 4.3.0** - 构建工具 +- **SASS 1.62.0** - CSS预处理器 +- **WebSocket** - 实时数据通信 + +### 系统架构图 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Vue.js 前端应用 │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ +│ │ 视图层 │ │ 状态管理 │ │ 路由管理 │ │ +│ │ Views │ │ Vuex │ │ Vue Router │ │ +│ │ │ │ │ │ │ │ +│ │ • 仪表板页面 │ │ • 股票数据状态 │ │ • 路由配置 │ │ +│ │ • 市场分析页面 │ │ • 用户界面状态 │ │ • 导航守卫 │ │ +│ │ • 股票详情页面 │ │ • 异步操作 │ │ • 懒加载 │ │ +│ │ • 数据管理页面 │ │ • 缓存管理 │ │ • 嵌套路由 │ │ +│ └─────────────────┘ └─────────────────┘ └─────────────┘ │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ +│ │ 组件层 │ │ 服务层 │ │ 工具层 │ │ +│ │ Components │ │ Services │ │ Utils │ │ +│ │ │ │ │ │ │ │ +│ │ • 图表组件 │ │ • API接口 │ │ • 工具函数 │ │ +│ │ • 表格组件 │ │ • WebSocket │ │ • 常量定义 │ │ +│ │ • 搜索组件 │ │ • 数据处理 │ │ • 格式化 │ │ +│ │ • 排行榜组件 │ │ • 错误处理 │ │ • 验证器 │ │ +│ └─────────────────┘ └─────────────────┘ └─────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 📁 项目结构 + +``` +frontend/ +├── public/ +│ ├── index.html # 入口HTML文件 +│ └── favicon.ico # 网站图标 +├── src/ +│ ├── main.js # 应用入口文件 +│ ├── App.vue # 根组件 +│ ├── views/ # 页面视图 +│ │ ├── Dashboard.vue # 仪表板页面 +│ │ ├── MarketAnalysis.vue # 市场分析页面 +│ │ ├── StockDetail.vue # 股票详情页面 +│ │ ├── StockSearch.vue # 股票搜索页面 +│ │ ├── Rankings.vue # 排行榜页面 +│ │ ├── DataManagement.vue # 数据管理页面 +│ │ └── HealthCheck.vue # 健康检查页面 +│ ├── components/ # 可复用组件 +│ │ └── MarketOverview.vue # 市场总览组件 +│ ├── router/ # 路由配置 +│ │ └── index.js # 路由定义 +│ ├── store/ # 状态管理 +│ │ ├── index.js # Vuex store +│ │ └── modules/ # 模块化store +│ ├── api/ # API接口 +│ │ ├── stock.js # 股票数据API +│ │ └── market.js # 市场分析API +│ ├── utils/ # 工具函数 +│ │ ├── request.js # HTTP请求封装 +│ │ ├── format.js # 数据格式化 +│ │ └── constants.js # 常量定义 +│ └── styles/ # 样式文件 +│ ├── main.scss # 主样式文件 +│ └── variables.scss # 样式变量 +├── package.json # 项目依赖配置 +├── vite.config.js # Vite构建配置 +└── .eslintrc.js # ESLint配置 +``` + +## 🔧 核心功能模块 + +### 1. 仪表板页面 (Dashboard.vue) + +**功能描述:** 系统主页面,提供股票市场的整体概览和关键指标展示。 + +**主要功能:** +- 实时市场数据展示 +- 涨跌分布统计图表 +- 成交量趋势分析 +- 热门股票快速入口 +- 市场新闻资讯展示 + + +### 2. 市场分析页面 (MarketAnalysis.vue) + +**功能描述:** 提供深度的市场分析功能,包括技术指标、趋势分析和预测模型。 + +**主要功能:** +- K线图表展示 +- 技术指标分析(MA、RSI、MACD) +- 市场热力图 +- 行业对比分析 +- 历史数据回测 + +### 3. 股票详情页面 (StockDetail.vue) + +**功能描述:** 展示单个股票的详细信息,包括实时价格、历史走势和基本面分析。 + +**主要功能:** +- 实时价格展示 +- 历史价格走势图 +- 成交量分析 +- 基本面数据(PE、PB、市值等) +- 相关新闻和公告 + + + +### 4. 股票搜索页面 (StockSearch.vue) + +**功能描述:** 提供智能的股票搜索功能,支持多种搜索条件和筛选器。 + +**主要功能:** +- 关键词搜索(股票代码、名称) +- 高级筛选(价格区间、市值、行业) +- 搜索结果排序 +- 收藏夹功能 +- 搜索历史记录 + + +### 5. 排行榜页面 (Rankings.vue) + +**功能描述:** 展示各类股票排行榜,帮助用户快速发现市场热点。 + +**主要功能:** +- 涨幅排行榜 +- 跌幅排行榜 +- 成交量排行榜 +- 市值排行榜 +- 换手率排行榜 + +### 6. 数据管理页面 (DataManagement.vue) + +**功能描述:** 为管理员提供数据管理功能,包括数据导入、导出和系统监控。 + +**主要功能:** +- 股票数据批量导入 +- 历史数据导出 +- 数据同步状态监控 +- 系统健康检查 +- 错误日志查看 + + +## 🚀 部署与运行 + +### 1. 开发环境 + +```bash +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 代码检查 +npm run lint + +# 代码格式化 +npm run format +``` + +### 2. 生产构建 + +```bash +# 构建生产版本 +npm run build + +# 预览构建结果 +npm run preview +``` + +### 3. Docker部署 + +**Dockerfile:** +```dockerfile +# 构建阶段 +FROM node:16-alpine as builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci --only=production + +COPY . . +RUN npm run build + +# 生产阶段 +FROM nginx:alpine +COPY --from=builder /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/nginx.conf +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] +``` + +**nginx.conf:** +```nginx +server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_pass http://backend:8080; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location /ws { + proxy_pass http://backend:8080; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} +``` + + + +## 📄 许可证 + +本模块采用 MIT 许可证,详见项目根目录 LICENSE 文件。 + +--- + +**联系信息:** +- 项目仓库: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- 技术支持: support@agricultural-stock.com +- 开发团队: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/zh-cn/guide/spark-processor.md b/docs/dist/docs/zh-cn/guide/spark-processor.md new file mode 100644 index 0000000..bc62398 --- /dev/null +++ b/docs/dist/docs/zh-cn/guide/spark-processor.md @@ -0,0 +1,422 @@ +# 🌾 Spark数据处理模块文档 + +## 📋 模块概述 + +**spark-processor** 是农业股票数据分析系统的核心数据处理引擎,基于Apache Spark 3.4.0构建,负责对农业相关上市公司的股票数据进行大规模处理、技术分析和市场分析。 + +## 🏗️ 技术架构 + +### 核心技术栈 +- **Apache Spark 3.4.0** - 分布式大数据处理框架 +- **Spark SQL** - 结构化数据查询与处理 +- **Spark Streaming** - 实时流数据处理 +- **MySQL 8.0** - 数据存储与持久化 +- **Java 8** - 编程语言 +- **Maven 3.6+** - 项目构建管理 + +### 架构设计 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Spark数据处理模块 │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ +│ │ 数据清洗服务 │ │ 技术指标服务 │ │ 市场分析服务 │ │ +│ │ DataCleaning │ │ TechnicalIndica │ │ MarketAnaly │ │ +│ │ Service │ │ torService │ │ sisService │ │ +│ └─────────────────┘ └─────────────────┘ └─────────────┘ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ 数据库保存服务 │ │ 配置管理 │ │ +│ │ DatabaseSave │ │ SparkConfig │ │ +│ │ Service │ │ │ │ +│ └─────────────────┘ └─────────────────┘ │ +├─────────────────────────────────────────────────────────────┤ +│ StockDataProcessor (主处理类) │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 📁 项目结构 + +``` +spark-processor/ +├── src/main/java/com/agricultural/spark/ +│ ├── StockDataProcessor.java # 主处理类 +│ ├── config/ +│ │ └── SparkConfig.java # 配置管理类 +│ └── service/ +│ ├── DataCleaningService.java # 数据清洗服务 +│ ├── TechnicalIndicatorService.java # 技术指标计算服务 +│ ├── MarketAnalysisService.java # 市场分析服务 +│ └── DatabaseSaveService.java # 数据库保存服务 +├── src/main/resources/ +│ ├── application.conf # 应用配置文件 +│ └── logback.xml # 日志配置 +├── database_tables.sql # 数据库表结构 +├── pom.xml # Maven配置文件 +└── README_DATABASE.md # 数据库文档 +``` + +## 🔧 核心功能模块 + +### 1. 数据处理主类 (StockDataProcessor) + +**功能描述:** 系统的核心调度器,负责协调各个服务模块的工作流程。 + +**主要职责:** +- Spark会话管理与初始化 +- 数据加载与预处理协调 +- 批处理与流处理模式切换 +- 异常处理与资源管理 + +**关键方法:** +```java +// 批处理模式 +public void runBatchProcessing() + +// 流处理模式 +public void runStreamProcessing() + +// 从MySQL加载数据 +public Dataset loadStockDataFromMySQL() +``` + +### 2. 数据清洗服务 (DataCleaningService) + +**功能描述:** 对原始股票数据进行标准化清洗和预处理。 + +**处理流程:** +1. **去重处理** - 基于股票代码和交易日期去除重复记录 +2. **缺失值处理** - 数值字段填充0,字符串字段填充空值 +3. **数据类型转换** - 确保字段类型正确性 +4. **异常值检测** - 识别并处理价格、成交量等异常数据 +5. **派生字段计算** - 计算涨跌幅、市值等衍生指标 + +**关键功能:** +```java +// 主要清洗方法 +public Dataset cleanData(Dataset rawData) + +// 缺失值处理 +private Dataset handleMissingValues(Dataset data) + +// 异常值处理 +private Dataset handleOutliers(Dataset data) +``` + +### 3. 技术指标服务 (TechnicalIndicatorService) + +**功能描述:** 计算各种技术分析指标,为量化分析提供数据支撑。 + +**支持的技术指标:** +- **移动平均线 (MA)** - MA5, MA10, MA20, MA30 +- **相对强弱指数 (RSI)** - 14日RSI指标 +- **MACD指标** - 快线、慢线、柱状图 +- **布林带 (Bollinger Bands)** - 上轨、中轨、下轨 +- **成交量移动平均** - 成交量技术分析 + +**计算方法:** +```java +// 计算技术指标 +public Dataset calculateTechnicalIndicators(Dataset data) + +// 移动平均线计算 +private Dataset calculateMovingAverages(Dataset data) + +// RSI指标计算 +private Dataset calculateRSI(Dataset data) +``` + +### 4. 市场分析服务 (MarketAnalysisService) + +**功能描述:** 从宏观角度分析市场整体表现和行业分布。 + +**分析维度:** +- **市场总览** - 涨跌统计、平均涨跌幅、总市值 +- **行业表现** - 按行业分类的股票表现统计 +- **市场趋势** - 历史走势分析和预测 +- **板块轮动** - 不同板块间的资金流向分析 + +**核心分析:** +```java +// 市场总览分析 +public Map analyzeMarketOverview(Dataset data) + +// 行业表现分析 +public Dataset analyzeIndustryPerformance(Dataset data) + +// 市场趋势分析 +public Dataset analyzeTrends(Dataset data) +``` + +### 5. 数据库保存服务 (DatabaseSaveService) + +**功能描述:** 将Spark处理后的结果数据持久化到MySQL数据库。 + +**保存策略:** +- **增量更新** - 仅保存新增或变更的数据 +- **批量写入** - 提高数据写入效率 +- **事务管理** - 保证数据一致性 +- **连接池管理** - 优化数据库连接性能 + +**主要功能:** +```java +// 保存市场分析结果 +public void saveMarketAnalysis(Map analysisResult) + +// 保存技术指标数据 +public void saveTechnicalIndicators(Dataset indicators) + +// 批量保存处理结果 +public void batchSaveResults(List> datasets) +``` + +## 🗄️ 数据库设计 + +### 主要数据表 + +| 表名 | 描述 | 主要字段 | +|------|------|----------| +| `stock_data` | 股票基础数据 | stock_code, stock_name, open_price, close_price, volume, trade_date | +| `market_analysis` | 市场分析结果 | analysis_date, up_count, down_count, total_market_cap, avg_change_percent | +| `stock_technical_indicators` | 技术指标数据 | stock_code, trade_date, ma5, ma10, ma20, rsi, macd | +| `industry_analysis` | 行业分析数据 | industry_name, stock_count, avg_change_percent, total_market_cap | +| `market_trends` | 市场趋势数据 | trade_date, avg_price, total_volume, stock_count | + +## ⚙️ 配置管理 + +### 配置文件 (application.conf) + +```hocon +# Spark配置 +spark { + master = "local[*]" + app.name = "AgriculturalStockDataProcessor" +} + +# MySQL数据库配置 +mysql { + host = "localhost" + port = 3306 + database = "agricultural_stock" + user = "root" + password = "your_password" +} + +# 输出路径配置 +output { + path = "/tmp/spark-output" +} +``` + +### 环境配置说明 + +**开发环境:** +- Spark Master: `local[*]` (使用所有可用CPU核心) +- 内存设置: 建议4GB以上 +- MySQL: 本地实例 + +**生产环境:** +- Spark Master: `spark://master:7077` (集群模式) +- 内存设置: 根据数据量调整 +- MySQL: 高可用集群 + +## 🚀 部署与运行 + +### 1. 环境准备 + +```bash +# 检查Java版本 +java -version + +# 检查Maven版本 +mvn -version + +# 启动MySQL服务 +systemctl start mysql +``` + +### 2. 编译打包 + +```bash +# 进入项目目录 +cd spark-processor + +# 清理并编译 +mvn clean compile + +# 打包为可执行JAR +mvn package +``` + +### 3. 运行方式 + +**批处理模式:** +```bash +# 方式1: 使用Maven运行 +mvn exec:java -Dexec.mainClass="com.agricultural.spark.StockDataProcessor" + +# 方式2: 使用JAR包运行 +java -jar target/spark-data-processor-1.0.0.jar +``` + +**流处理模式:** +```bash +# 启动流处理 +java -jar target/spark-data-processor-1.0.0.jar stream +``` + +### 4. 集群部署 + +```bash +# 提交到Spark集群 +spark-submit \ + --class com.agricultural.spark.StockDataProcessor \ + --master spark://master:7077 \ + --executor-memory 2g \ + --total-executor-cores 4 \ + target/spark-data-processor-1.0.0.jar +``` + +## 📊 性能优化 + +### Spark优化配置 + +```java +SparkSession spark = SparkSession.builder() + .appName("AgriculturalStockDataProcessor") + .config("spark.sql.adaptive.enabled", "true") // 启用自适应查询 + .config("spark.sql.adaptive.coalescePartitions.enabled", "true") // 分区合并 + .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") // 序列化优化 + .config("spark.sql.shuffle.partitions", "200") // 调整分区数 + .getOrCreate(); +``` + +### 数据处理优化策略 + +1. **分区策略** + - 按交易日期分区,提高查询效率 + - 控制分区大小在128MB-1GB之间 + +2. **缓存策略** + - 对频繁使用的数据集进行缓存 + - 使用`MEMORY_AND_DISK`存储级别 + +3. **SQL优化** + - 使用列式存储减少I/O + - 谓词下推减少数据传输 + +## 📈 监控与日志 + +### 日志配置 + +**logback.xml配置:** +```xml + + + logs/spark-processor.log + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + +``` + +### 性能监控指标 + +- **处理速度:** 每秒处理记录数 +- **内存使用:** 堆内存和Off-heap内存使用情况 +- **任务执行时间:** 各阶段耗时统计 +- **错误率:** 数据处理错误比例 + +## 🔧 故障排查 + +### 常见问题 + +**1. 内存不足 (OutOfMemoryError)** +```bash +# 解决方案:增加executor内存 +--executor-memory 4g --driver-memory 2g +``` + +**2. 连接超时** +```bash +# 检查数据库连接 +telnet localhost 3306 +# 调整超时配置 +--conf spark.sql.execution.arrow.pyspark.enabled=false +``` + +**3. 数据倾斜** +```java +// 使用salting技术解决 +data.withColumn("salt", rand().multiply(100).cast("int")) +``` + +## 📋 API接口 + +### 核心处理接口 + +**批量数据处理:** +```java +// 处理全量历史数据 +processor.runBatchProcessing(); + +// 处理增量数据 +processor.processIncrementalData(startDate, endDate); +``` + +**实时数据处理:** +```java +// 启动流处理 +processor.runStreamProcessing(); + +// 停止流处理 +processor.stopStreamProcessing(); +``` + +## 🤝 开发指南 + +### 添加新的技术指标 + +1. **在TechnicalIndicatorService中添加计算方法** +```java +private Dataset calculateNewIndicator(Dataset data) { + // 指标计算逻辑 + return data; +} +``` + +2. **在主流程中调用** +```java +Dataset withIndicators = technicalIndicatorService + .calculateNewIndicator(cleanedData); +``` + +3. **更新数据库表结构** +```sql +ALTER TABLE stock_technical_indicators +ADD COLUMN new_indicator DECIMAL(10,2); +``` + +### 扩展市场分析功能 + +1. **实现新的分析算法** +2. **添加相应的数据存储表** +3. **更新保存服务方法** +4. **编写单元测试** + +## 📄 许可证 + +本模块采用 MIT 许可证,详见项目根目录 LICENSE 文件。 + +--- + +**联系信息:** +- 项目仓库: [Agricultural Stock Platform](https://github.com/agricultural-stock-platform) +- 技术支持: support@agricultural-stock.com +- 开发团队: Agricultural Stock Platform Team \ No newline at end of file diff --git a/docs/dist/docs/zh-cn/index.md b/docs/dist/docs/zh-cn/index.md new file mode 100644 index 0000000..ab9b552 --- /dev/null +++ b/docs/dist/docs/zh-cn/index.md @@ -0,0 +1,58 @@ +# 欢迎使用 Vue Docs UI + +Vue Docs UI 是一个现代化的文档网站构建工具,基于 Vue 3 开发,提供开箱即用的文档解决方案。 + +## 🌟 主要特性 + +- **🚀 开箱即用** - 只需 3 行代码即可启动文档网站 +- **🎨 现代设计** - 精美的界面设计,支持明暗主题切换 +- **📱 移动端适配** - 完美的响应式设计 +- **🌐 国际化支持** - 内置多语言支持 +- **🤖 AI 助手** - 集成 AI 聊天助手,支持多种模型 +- **⚡ 高性能** - 基于 Vite 构建,快速热重载 +- **🔍 全文搜索** - 智能搜索功能 +- **📝 Markdown 增强** - 丰富的 Markdown 扩展 + +## 🏗️ 架构特点 + +- **组件化设计** - 模块化组件,易于扩展 +- **TypeScript 支持** - 完整的类型支持 +- **可自定义主题** - 灵活的主题配置 +- **插件系统** - 可扩展的插件架构 + +## 📦 快速开始 + +```bash +# 创建新项目 +npm create vue-docs-ui@latest my-docs + +# 进入项目目录 +cd my-docs + +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev +``` + +## 📖 使用方式 + +```javascript +import { createDocsApp } from 'vue-docs-ui' +import 'vue-docs-ui/dist/vue-docs-ui.css' + +createDocsApp({ + configPath: '/config/site.yaml', + el: '#app' +}) +``` + +就这么简单!无需复杂配置,立即拥有一个功能完整的文档网站。 + +## 🔗 相关链接 + +- [GitHub 仓库](https://github.com/shenjianZ/vue-docs-ui) +- [在线演示](https://vue-docs-ui.example.com) +- [使用指南](/guide/introduction) +- [API 文档](/advanced/api) \ No newline at end of file diff --git a/docs/dist/images/logo.png b/docs/dist/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf802bb65f2f480e8e0a1e369b43788adf7db59 GIT binary patch literal 12463 zcmdsecT|*5v!(>eIVTYTNg|F2h(l5wKoEvBBN8MCB2fv0^m9w(dSZc^(icb(dW!mcHhiM99h#a!EsN_z?zm;W- zBZ2d+AoHj4L7jpOhsL{?lyWLfC&!;2&j;iupz>|LeT|;{^VHpH#E4D05cb zQi}0Ln|X17d_5%WsW6eXcJ@aTmdo`>52b~NgjTZch4Tw#N7usVPtsd$w-w%C$%1mo0~(Hw zT!fi!Fp!PeNJKt*$9V(0wO;iOdkIOjHZ?WfGq}MQgA>!pNO}ru_?k@5#$IXAGx7ZqUv%?*?k0|0 zx-l$gd2{|e=Zo27O$Zc9cHP23DNPgET=m55odRzc85FO_==@|PLiS{-2Q8(fsQ6}c zs>XS9%7`Q{^QIxbcpc5Z7ryGgR>*ARL2JOq&i>G}7ZRq|e;--f#7$>@8GUJSu3 zD1#z<-x^#A?J_@8B;>}D|G4E47U`dZvE+)$GIOlZqbBrwAV$gQb!5^AfhS4}&JL_) zM87M2MNW(s`L-r1{Yq0qnloaYu5tW6%d?U0+I<&k*(7ybNlS}j#nN``RVAf+ib+Ld z!r^Ag8xH!%v||rr=tvK&_?MC-in(LqL+Q{ditc+v_;`cx!4|Kbc7Do6maA8Z#kO5I zU@Dn7Tvn*>#j#+tZ*K_@rsm;O-P*+4Nz7X{ht9lw_UsB)@Y%?j*SWga4t*o!J;yzK z#j{1Z^S4}BG6NR4F!$T#CN){db{#Hv=|pAJfLLx#%@yqG%8Hm8c~E0K=Ip3dPJ)7m zGa{|#bGsQ`aFeiybNsb%nLKpIh{Tig>mr{}Uq@CI2#dFt(jwRb-zw7`d&shdJDBzc z>~C4}A$K;+M4(vcyO&=$Q|V85tLd4C5LutI982@^sJvyio9F}NuQ7%8t1jTaJ8n~3 z%|$|T*xd=`#`z8NM;3Q!r}l15g(uz5UxmK&m(3zEDwFOTAJ;Q7dTq|&62Sj)dUM3- z%1xO)#lC2AM?Q?^9qO;#;Anp=`@iJn{4`?VNLgh)M`biOHwSDVJcD7+ZES=&BchE3 z7yW-0r8gxT=J(cFM?$7Kezb%!6Yud~t5=jo0{DpuMn4u(-^FF~Pu?22Vxo^(Y!qL#nc=tY) zJV8vLseomFM+rU16vefF{2kM~cqdMsiTT&AtMs^XLAnvbKv=Ml_THCnbI~}PgXo18 z;80>zGH{kCM}6D1($Z2BEFp#~<<4BB5@&q^=~wY|CtNc%)${l^#`l5rp^uEAG0EEP zO34lPB|T4u;m00{Z0;^%#vH>|rV-Ga9WN~ncdk9JO-m3= zOLz*y$7K_td=E7>x)uh6Ocm6vbKJhR+{Gzl3WJz+_BQ(oy;nBe!KK(emj1+^>MNvO zWWB>&_>K^xO$v?im`1Y1b}kGoi^aPRTKO6aGWX-gqv+Tp9VYzrN+z`u@r&hWgu*vH#r|mA9rZ zR2}wiJ*OpA%~UsMv0qP5AI(msf5$)-l)b7xvQK=~qYo1HFo?<|iqLi<$dX=VtsLur zq3Pgdvr-1qxf|))N=n3$E8b5OO(dX-F0HMt{Zl#cP6L;6`e?n6C0~3w{EVq4x(9_wFK}GK0V=hSR{FPu&8UU|1GY~aHpTydC@|Y3{|N;Wl?uhC z_YDmAZe5XjGw)FOR5)9A22NwL;%pQQiSDx_rp{VM5}Y{N?Zj~G_6f;ins9y{NDiC=u3qoS_;AGyq+Y6q_a z>e?^BtcD2&`R&8+-?4E{=nk~gK6`BiWHfp6c0 z?&Ox&HhCkY;Ep2{&2-aP^MCoy#R5zXml)pp^YCg~n_QKvR_f=Yzplf9t#bMcCB-#+ zgMTzAtfDVbhcmt!Ex-#W%v`@U<<>m4^B{AbVVRjxDRUX&z(V$R>Aq4gVUJ{!m*-P! z3O{A0$x9l*1O=aqo0qc?}^fV7h;;b1XC&=@bYwWa=LJyeR~a@ zKIWD4YGdRGU!D$rTstS>Wii1S*fR?ZyQ(Hgf*)`?0FsW_!AUj2-F5s;|mJC|7+-In``yj+Dpb6sbjY_$aaWPfC9 zGCMn)G`)e-vnsD{tATv!=Y!z8oliC&GZ-er|s;x=onLsVLYj@R@^OWn$<`701 z85sfs0`Ro8wLLpK^Yrv|WPApmj}4w1k8N5wh^<*TO>D zO?Z>Qt2I(%%`06ft@Zwa6FXrsICm3&)l-t*2}E-n}Io3XsPO z3s+2YaZbg{vQ*#;BwD&JF9(+Jx$UBX2Libg6F({%7=w;MenC&sm7TRDOw zinM-jq=&#$XK#>YX5TI8BK_k3ZdRX?S?xgqwsrZ4TS_4S=z2#L*@(tO4}H14c^hIm z6OBY(pVPmIxgLYK)`vx_W(xU;Ix)d|*8DCuR`c+PdK7f>s`$x*7&>`+ATw;ouG$mY8iNsS=nog?qbly z@Z~O1r1 zLacJvD^wKoOt|3h1phEF`m)0LGm{Lld!bAI$b`{X9dp|T?(3xs>c1r@{CZ|mGaOh% z9jcy*Y42;hQ)j|VD^qYNEo5F-E`^v#-%D$x+=labQu4J_?YJUqmX_&12j#%V7uzCv zf~c;zEux(b!DP-yfZDh_$j36d=0fv2({PMlyVh8HMp`kdPOk(`EpFVx+{&Kfh3#ywt zXvJt`0CoXB>vYRD3rEff^O?vCwp(2Ed)E;v+z z6X@&vd3fq6Yb3zX;8E8>PSYyp&c#7BGBR@NA-g-(Ieju*ZZ3!x78kQ-852UoFl>R5 zk9eU_C}fP9lF{+lcr1!I>rF$8po_#LkOq!Z_Rk-(^Kw2(M?SbIMt6yKe=T?-#B+Z9 z#}C02=UGu^@=rGoeJZt55lD-*;H^@&yjVE=?f_!BTu&-^rx`(%(8WkXD5l2apk-;C z;z0f3u&cW2?BEAF4-GrgqtyAm!CPfp9^ePh(aFb{GGDs)^Q%Wq^aYGAsjOs$;iq*e zr0hh^Tc}o#F?&PfvndxqI!S4cicXDKEc@|_J|-y+8Wy^9ulrz3Tb{oW5+5ILH-Qev zZ&FrqyEK{Z0-1E^ys63`No+uyhkeswCJF!?8KK+3Ql>khrnir~u>bYZbfXa`Hm9v) z5B)M5T1GaoGhnS1LQvK~`?b-+Uay1V&d;}uip<)JUUc@zo~~s){+!tU`6jine%V^r zon8)3PQx-A)`<$6v7$|nMXA(=dK8^220MdYVhC64*Lg2;CBE)usnWZ-MuMlos%NGF z@+K%0gWTg!)EI5$a)guyBU&_$0!{L%cM)VNe9cczy)Yf>gAc`#RcyZ_9Ifes2_Yeh zX@yT!&4_Wz^Ksa~oK$)&MwQRcip=UxT-XmQc3Sj=IX}}ed*E#e3B^@G%@;AkS5-5k zUS+>Y7J`O{hnw6Zq8e@FmSGm@qd6W4Ks8i_nTZD9=8!B7JGQU z?w+4ze3?mOpeUs?ZHq($U?0-u7ECl*fEqy71#HNR8s*9<<4_RSh~ zS8!upyPHqfG#kh+vp1$)Z$;ZI)#uJce{GJ_Joex`?bJF;=v?@4IU^O9(KVOJAW#$( zrA`Oi&JDzcGmyuAWC(38kR&6|=-S0uGHm~>_hXq(`_^I>DW9V8b=dG7cKcz4{W$ep z4+N^2o$)OGPMoT25wjh$Qmo( zXf3IJ!CtC#M2RvtshH8Cg_Nz|n_}>gf+bUUNE(ud`xI!%{fWn!ICDL^JJ}g#J+wt6 zfwQp(^01T2H$ro9D`(<<%l;~XhSXhZ-wZ@PtMc`4@v!y%U=ZI0OoV2q!O%z7)&ixd z4(%90Rs*RRdw9$r2jC-LKSW54^%49@E>6)9FcXbyYPuX~Cd&Gp?M287K9Gd~SCsX+ zOPt-~vPj(6i%;1SUwEIEPAhs~qA4>4;j?0Bz8I{Em(cQ9+VN)7TkvMMqTKJTMi}?o z7S1P;KmFqi3kzMO6IJ;luFCy6`0@JcJqKQpq-hD3T(V4|wUSPV*WR&Uuiw_}81{^L zo3xB*xraQlCc=>pUWbN9L?lVO?rhC8f}EX%5M+HQ(KuLh3_LTfe+k6>f+!AKd2Xb{ zm&=jgOQKM8;y;93-y`TURSQ9aYX5$=4hBgxW_(Q%xDP_F>CyAXKuU{S!Cms?D=Rtq zwKIY2ud26OzPzehUZo$|XUbRmA~9*#NXdTpRrQ~fRqrjos}ml(-K)d7r@t5F>YP@G zfz$Qg{WAT#KffDBqI?wEz8NsCAHmX+3UQJfL=)7>|`9^hrdZacdD(vSz*Zp1q zpG-SXdyW`+pFO0ODRErv0T6fblm4qpr`f9Q7WQ(mC|HI4RmIG=>9dV0u(`Zvr|Yl1 z-N9yndpbU7+W$^K4Lr@ld#R04urF%wqsC3oO?Mqb*M%V+BTo>W{?r9q<1lJWlXho; z!K+oPd8a2Mb+wi_%xd1Z4X|OCgRz&(A8(3j%)F_d>uy`{I}Yx2nuCLA{+CAU>4EPR zJob8CT>Jh#6dq-zp&qg#kKmhdgJd3*i_=4B_=%t4H)%^v;z;d8C z4FUhPm5nSEX(n&t*vHeqcG2OVq#*Q zJcBWyp^1rVFy;~Oz~p3&MSrR>garNKRpq=<^iq)fM42r+F1rOLe}GKZ=8jxiTN7iZ zV*etfO_x9N1Bdg|%2++oeTjAg(8J_TYo+5N6*YBvY3b0&h_=VGk%uW7+S=NkO+ynC zYrDrxw+y9U_Hfiq%SlQ~zMiTM3=9P4s4@zK9vqzCcDeXndbbOt@MmCGjg5^j6YLe0 zl$2h-e(mk;?dVvXx4QeQ+uFv4BB&9B;#an|>zkWKh0hh9J)7KF==7`q$y~b?08%o? zUKwUNeLcOClars6q7HP*9p{5iS29oghKKdbU%h~KGeH601bskoS)pXXD$cHMI>Nhg zX6xrqu2NTU7)4W4hJ!aBK75EqqqDM?wl@z?!DK+2V7^~H=pWP5au5haQgU>Bd}a3- zpbTc=rw|~|#>Pfsa86B)=UCATAV5{#ErSX>!0v*XA|IufmO6o-nV+Hh!4X_$Hh_4~ zT3K7~y43*7rKF^c$9S60Hpoy>PVEdAQaXLWxo<>{MClD2Nt&(4iKb5sOieMM#PK zWRvnUGF}|-EXXFkj@r4;1@6EY4u=EV93Ez(3L@qc;gId?>+?~;WMo`+>H!z!$=9d- z;DB3xtPJI(Y=zzFsn{EM{9}9^^=xx_Sr^1M?o)rA=J ze0Aay5+NN*3o|aC=+SoY!SPb-etG~Dfp%%Ag8FH8+-gvN)Epfh-Q7<9Jang5`VI>PpuNZGr5VUl zoFCvyz*Yg64IpPOD=Tx8PE-hG%6(eM%|T@yUj{DvpFe+!d!Xd6Q8#q*U^*~BVOjA< zw3^B;l*!9!l&Ye0;xT_=Tc+-VOc3(g&Fr|sD+Lfw-MacU9uwl@p*VjoUSMnp#7Eol zld!I+_a6_`((#$sN>Z|i{qrP@<>SvH=sPc|_MsXgE~C^`RHK0oK zVa2V7zv`D$W%oc=zvkpstvoh5831+zj93B!0UD9v>;)=X>`j^mb%mj!q0v#7Zt;<$ zvp?4#f3k=#bK75Gyzzw4uRbyHLN>5+G1Bb&NBp6hUx#@=Ue|ek8c^O_*(|f`hlpsT zEAfO&1+TS!urM{{(c=?1MDSsRWqy%Zw1JykUQ&`Q3^W9$O8_~Bi_?Q8Vt(g#&CB0u0uvHAJb0rD@CJP&>!?*jV)3A4MK z8yg#21HI0}hmF8h{QzI%<5g8vOd?FJVi zGc7F*STV59dgH!{h}X58^U$@N#9=jnmW`R`p~Dvr@_&YOPJvPYoqB6|o%%ANlXy;XbE zY4m4Dr|x9v@vWM@CVKUYt$@KtXPe&V7qLHp*>JS{^)%QSczS{LH^xg>0iFeud7Uh0 zZr|FO1k$|rKK*gA($;qZb(#Ia;$GQrrmgQIBO_lXy0)aUA8<(886PJ31zf*$iN@-p z7hq!&C}gtuC3V#6>Dse=?=$N--z>AJND?FVnPeK<+0cVfN^q7Y!~N~mI5~7OUY_1b zlZUNGA^>c;d5MF}3kFhl=IwTeF| zO~5mY$84ZzS+C!c-HOc*sZOUKN-&G>-Oze`C0ZNrN6=L-m!-aI33mgouLi?XH3WF+ zg6a9;9((;t%P2NVPZCfniBnCKw4Yt-Pm2|PY%NwawwCfRXv$+(ZK>5317g}8B3y3- zr_9O8YJQTWJ-3YgjOwY%hNl+C7CjHm(p#>>PrNZXR{XJKVQp`J?SKCCNSuAy{|>q> z0+8Y{Dlvq$s>ULp)6#}DXaG-7>suyCBQJAb*Vs*D$k>N$FSZHV2+0y6aD10gAeYqJ zI%iKq{WY*OnM~f8H00LG)p_~&cDkmNfZ!LeJO+$ne~^_Li?>M##vfSdEj1g!_lvtXhCWX`PGi)-Nl%{b!jh}wF<&iMCrYCYJn!153_A%BobEp(V%?$nije!FPMxek*QV zsM6rQl{AE7%8#|+Q&BP**&251K#)yr?wUf3p{t%yN;I~Jtk+Kt#!n(q6nm|d{#VrY zFCdv{@o>rk%+~pS%LsRh zCA8rnV|}=cjt}B3t!gG&!n_AV9y;OBUfki|yd5fjKmo^%k85Xy+(sMV`IXSB@>?=v zHIhT%v8q0-6fCys?NV*2JL+y}Y1`VnVP87-KZXhJ=(e|&QmXPrvwUx^rextMO8SRg z!;A9JA>1<-x-S|R);hNkw54!2`;CK&y+|}BZlHHIwv;kOnQ>1b&f$lKYRWssGyuAv zsw>=REqF-pB)n~J34fad*2O3bH<*~kUV7DzQWcc1@fQ@zS`Zc#q}LT|%utPr|E*B$ zmDVrt#;JvuFY>m5RIs!*VBS%_i7;+^aEsd(W^Oq~lj+zqEy@q|^QK6e+di~VlrZOo z>(1OkTZN8fR_3H?L(we~$Nd%z;+K|qv6QfxW^I1U@d|<9j4fs1)TB=z5&S!#SV0#I z6N+g-9PTs+EF-4mkS98fXo|+#sq$j-76Rse(c4gx2paMQ5xsSOGx#ugq00YIN7G+ssNDx*P$>4?bQT!b9w zl`G+`b6YcjcsoDt_2!iGGC)Yi!nu19;s&6^RZ;Wp+qb+t_=uCuAC_R)im)L_I2g!4 zFjwG?w3D=961Eb$az)CE(fiZ;XWuk9418=)s=j>#nFBA~am(G>YeF1=H+qR>%liNd zp`7}2+Cgg{e;C;lMiTe6+8(60&Qnq44sb*pa6hE?pI!3ZJdk;!JSm8LqDaZb{ zMQ3TW5S=JG7Ctem-OLxh+=O}#y^WUj%%Q27^E`2GHkug4b>Hgi=ok^!ZYrf8fg4B( z^2mVN-o-%A@vym;DgIXOG)Wg}&Nfs>=gI!6iK01}(#>y0lhf*=4(L7@N-a7R8eGBV<#IZA3|-UJz8R8K46Z`R8D z1cy@VQXRPiq(N#Io^bR?iYXM_K^yCY5(kqvTB32hcI90 z3+I$^E9s&u0@Rz-<7I>Z!*_wMfaW56J)O`$ab$9qWHyBwDS>gcl%?UWy)SKi42yi9 zLt{{nO9?c0LNdSW8*>9iT3Mpp_;Bw z$Kb|($A-X1Ur#|O)=rYT&Fy`O)=i93d`io+K3n9IkT6=svi4h0iW)?An=cn+M=b;{ zBL;2`Q6UsEK`pR2BAI4UdsOmvipwzy7MJj_Jn+o+HNYJllf++Kl1CZ#-hJM@79!A-k-~ z&uI9yh65lZ};WGY0i@Qvr3f#16xN5^&wyDeeZZhZYmho@4em*#2mHH9; z;zy;rN*0-t^hV~Hth;Ka@Tl>Vi6S)X@U^+cpNT6DTlsnL&}Yo0hhwAxmP* zd*3M8CHnq+ea{wVU_4|qm1Zz+M!S!ooD10j6g8RBN5Y#@Y9cu(hm$ggN&~*=dQI9m zRU(2`nuH!Vy(Lg%z$PS?$8?v5ypDk*3+Ny2qx@k`R?R{apQD5mFwt~8DKOIa zNyG4?c#$MPSO&AXBP)2~PhjCP(7U;0mEWYvGndo14j5;%hOBa2a*i83V?YVUi+wwk z-CcsJtT1x3s+lXtRjP2+Owpb=MemF7$Mj#?^IM6H5WD{*h_kca%%Z~vk1JH- z&3AU{g(@|m>=))cnd$=qFK;X`g8Px+LMXidsL_auvP=9HB?=7sZyD@=bKVd%!#yo| zN}O_o>xN1PuxHMN<#bCuE}A|u+q08>0P4Px>poL%*=BURk9aN`rwT>)EI0(ixLGLN zq&bs%m6W6bRN$@?q+;$TedI5nVki04a=iQQv<-`*P>j6CA5;plLuG;qh#jegg_^h$ z4S}ZC3_4=Cw(HP`c?{okX((Pz#M(+0vHE_l8 znB}S-Q1e?bviBE7fmXi3(Jy-?JVk{+>8Ou9WNpIV4f{`TwyMXrhRZaU&}P&3ljhhz z$OODna_Z{Id167wbm_K_NQIc%?&;b6ZUe#FXxR1XNIP0|AHiD*0d;3}?M$Ll4SmjdL{v$*@&$m<^E?HN}^7j?QNOPv&m;Jvf2kmIljMXESnfoglM&~1Tg zquXfAufiG@<8uY(XTXdeJ|u|uU?CJfHcs?E`6%~T=yn7Io^4{TWH&A+M)cy%+|~0V zCC6~HPwO$Mvxwr7H$n_#pg{yMhOI7_mk^+X?Vy(3tRJUm_GRb@zDm2S!zfZ^#P&l$ zC%SbGa7G{r69?O7rf)QC6V9MNAZiTD2dU;E$T-hi<^F7U+{mvMsW2>cAswuKrP-Zx zezOARM%aI@&tSxmrxNkVoALK9NZwXK%H6yO63NeU00Zr*G|IRia56O@0!_jqBGTHK z!xbqT-?h#Kng~ccJPj6l`t-M;mLUiIwbY|jJER-z1R3zTkp6~s0o$b{&_VZ$tzDR$ zJfvC9+;ZK_N$|ZwzTW#hGNMk_-abNZ4|MG_q~z@F+qNy}gf}_JGpunz{H<1yt)+Woztxy69VX#g_UjxGr0);NRogZcUKInMI`Z0DHfrKb*Fa=22a^RG6gEFPw zgOC$LjEVku8bWsm9bzE*1wR&khrkxhS3Isf7%4>N%w~gxNZKx<`sF6=6Umr^qwbSv@ZMo(@2f|+eMv1MkL51Sy)1hm}x^r`N}i?tE2j2Jn!WIA(r&8 zpG^at8UZ{wWim44zxuU-ufJ&4#u|SR^`(F8exLEZD!-rr;$My1K7ZxV$O3YZz=hZG zN+oyP_`mpM1=M3`6I90utn4qE&0#kw{%M}p2;~8N=v-DN1(t;T(FZ_$^X@G zJva+mp-A89vDmQHx2MY_Gl8Ym?hiKntDpL>SH}PAmF+|=sk53d8sTY5A^-GXgPlo- z-S~eb2NDE;^kj|yy#jAiTx$F+_=1B!ZxjeRZ!!^b#oG;53W*ISJl>l)`mD|QkGyaz l6JzL@{{v{89>=*{=bNZaz8^-@;2#k#DJ#HXdGf}-{|#bM0-FE; literal 0 HcmV?d00001 diff --git a/docs/dist/images/placeholder.md b/docs/dist/images/placeholder.md new file mode 100644 index 0000000..c8984e2 --- /dev/null +++ b/docs/dist/images/placeholder.md @@ -0,0 +1,25 @@ +# 图片目录 + +将您的图片文件放在这个目录中。 + +支持的格式: +- PNG +- JPG/JPEG +- SVG +- WebP +- GIF + +## 使用方式 + +在 Markdown 中引用图片: + +```markdown +![图片描述](/images/your-image.png) +``` + +在配置文件中使用: + +```yaml +site: + logo: "/images/logo.png" +``` \ No newline at end of file diff --git a/docs/dist/index.html b/docs/dist/index.html new file mode 100644 index 0000000..3e4427c --- /dev/null +++ b/docs/dist/index.html @@ -0,0 +1,16 @@ + + + + + + + Vue Docs UI + + + + + +
    + + + \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json index b462d00..68d2d6c 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "vue": "^3.3.0", - "vue-docs-ui": "^1.0.9", + "vue-docs-ui": "^1.0.11", "vue-router": "^4.2.0" }, "devDependencies": { @@ -998,9 +998,9 @@ } }, "node_modules/vue-docs-ui": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/vue-docs-ui/-/vue-docs-ui-1.0.9.tgz", - "integrity": "sha512-ULjwsw3OoLlb4EGVQ5roevTlPS1GksMCvJ98AK98V/Mn3+Wldu2mW6O4KsHQ6jov2ZXOu92JyL/dV/2Ggm2GuA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vue-docs-ui/-/vue-docs-ui-1.0.11.tgz", + "integrity": "sha512-dVt5HBAw+jxmfilB9rDalr2iSJrErww9MqmM7050Eua/s4CYQTuPdg7CplMnOsBhoXSN2zl0ripyJmP5/aIG6A==", "dependencies": { "@types/js-yaml": "^4.0.9", "@types/markdown-it": "^14.1.2", diff --git a/docs/package.json b/docs/package.json index 210f744..67cb5c1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,7 +11,7 @@ "dependencies": { "vue": "^3.3.0", "vue-router": "^4.2.0", - "vue-docs-ui": "^1.0.9" + "vue-docs-ui": "^1.0.11" }, "devDependencies": { "@vitejs/plugin-vue": "^4.4.0", diff --git a/docs/public/config/site.en.yaml b/docs/public/config/site.en.yaml index 2d8c8cc..8181530 100644 --- a/docs/public/config/site.en.yaml +++ b/docs/public/config/site.en.yaml @@ -18,7 +18,7 @@ navbar: active: true - title: "Guide" link: "/guide" - - title: "GitHub" + - title: "Gitea" link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" external: true @@ -73,4 +73,61 @@ toc: enabled: true # TOC title - title: "On This Page" \ No newline at end of file + title: "On This Page" + +# Footer Configuration +footer: + enabled: true + copyright: "© 2024 Vue Docs UI. All rights reserved." + repository: + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + branch: "master" + lastUpdated: "2024-12-19" + links: + - title: "Documentation" + link: "/guide/introduction" + - title: "GitHub" + link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + external: true + - title: "License" + link: "/license" + social: + - name: "email" + url: "mailto:15202078626@163.com" + icon: "mail" + - name: "gitea" + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + icon: "gitea" + # - name: "youtube" + # url: "https://youtube.com/@yourhandle" + # icon: "youtube" + # - name: "twitter" + # url: "https://twitter.com/yourhandle" + # icon: "twitter" + # - name: "discord" + # url: "https://discord.gg/yourinvite" + # icon: "discord" + # - name: "telegram" + # url: "https://t.me/yourhandle" + # icon: "telegram" + # - name: "tiktok" + # url: "https://tiktok.com/@yourhandle" + # icon: "tiktok" + - name: "bilibili" + url: "https://space.bilibili.com/443299209" + icon: "bilibili" + - name: "qq" + url: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=2934674522&card_type=person&source=qrcode" + icon: "qq" + - name: "wechat" + url: "weixin://dl/add?zlt2629496476520" + icon: "wechat" + # - name: "weibo" + # url: "https://weibo.com/yourhandle" + # icon: "weibo" + # - name: "douyin" + # url: "https://www.douyin.com/user/yourhandle" + # icon: "douyin" + # - name: "zhihu" + # url: "https://www.zhihu.com/people/yourhandle" + # icon: "zhihu" \ No newline at end of file diff --git a/docs/public/config/site.yaml b/docs/public/config/site.yaml index 0c4e42c..4024397 100644 --- a/docs/public/config/site.yaml +++ b/docs/public/config/site.yaml @@ -18,7 +18,7 @@ navbar: active: true - title: "指南" link: "/guide" - - title: "GitHub" + - title: "Gitea" link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" external: true @@ -91,16 +91,59 @@ toc: # Footer Configuration footer: enabled: true - copyright: "© 2024 农业股票数据分析系统. All rights reserved." + copyright: "© 2024 Vue Docs UI. All rights reserved." + repository: + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + branch: "master" + lastUpdated: "2024-12-19" links: - - title: "系统指南" - link: "/guide" + - title: "Documentation" + link: "/guide/introduction" - title: "GitHub" link: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" external: true - - title: "许可证" + - title: "License" link: "/license" - + social: + - name: "email" + url: "mailto:15202078626@163.com" + icon: "mail" + - name: "gitea" + url: "https://gitea.shenjianl.cn/shenjianZ/agricultural-sock-amalysis" + icon: "gitea" + # - name: "youtube" + # url: "https://youtube.com/@yourhandle" + # icon: "youtube" + # - name: "twitter" + # url: "https://twitter.com/yourhandle" + # icon: "twitter" + # - name: "discord" + # url: "https://discord.gg/yourinvite" + # icon: "discord" + # - name: "telegram" + # url: "https://t.me/yourhandle" + # icon: "telegram" + # - name: "tiktok" + # url: "https://tiktok.com/@yourhandle" + # icon: "tiktok" + - name: "bilibili" + url: "https://space.bilibili.com/443299209" + icon: "bilibili" + - name: "qq" + url: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=2934674522&card_type=person&source=qrcode" + icon: "qq" + - name: "wechat" + url: "weixin://contacts/profile/zlt2629496476520" + icon: "wechat" + # - name: "weibo" + # url: "https://weibo.com/yourhandle" + # icon: "weibo" + # - name: "douyin" + # url: "https://www.douyin.com/user/yourhandle" + # icon: "douyin" + # - name: "zhihu" + # url: "https://www.zhihu.com/people/yourhandle" + # icon: "zhihu" # Analytics Configuration analytics: diff --git a/docs/新建 文本文档.txt b/docs/新建 文本文档.txt new file mode 100644 index 0000000..8be48ac --- /dev/null +++ b/docs/新建 文本文档.txt @@ -0,0 +1,14 @@ +server { + listen 443 ssl; + server_name a1.shenjianl.cn; + ssl_certificate /usr/local/nginx/conf/ssl_certificate/a1/a1.shenjianl.cn_bundle.pem; + ssl_certificate_key /usr/local/nginx/conf/ssl_certificate/a1/a1.shenjianl.cn.key; + location / { + root /data/a1; + index index.html; + } +error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } \ No newline at end of file