From 7bd866831780abcf5a59c4cbb7d1be456eea7c99 Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期五, 14 八月 2026 10:13:57 +0800
Subject: [PATCH] add shop module

---
 packages/vite-plugin/src/index.ts                                                      |   38 
 build/cool/eps.d.ts                                                                    | 3347 ++++++++
 packages/vite-plugin/dist/utils/index.d.ts                                             |    8 
 src/modules/cs/components/message.vue                                                  |  526 +
 src/modules/cs/static/audio/ding.wav                                                   |    0 
 src/modules/order/components/pay-item.vue                                              |   20 
 src/modules/cs/static/emoji/face-without-mouth.png                                     |    0 
 src/modules/market/views/coupon/user.vue                                               |  129 
 src/modules/cs/static/emoji/astonished-face.png                                        |    0 
 src/modules/goods/views/search-keyword.vue                                             |   85 
 src/modules/cs/static/emoji/face-savouring-delicious-food.png                          |    0 
 src/modules/cs/components/tools/emoji.vue                                              |  162 
 src/modules/cs/hooks/message.ts                                                        |  128 
 src/modules/cs/static/emoji/face-with-cowboy-hat.png                                   |    0 
 src/modules/cs/static/emoji/nauseated-face.png                                         |    0 
 src/modules/market/views/coupon/info.vue                                               |  282 
 src/modules/cs/static/emoji/face-with-one-eyebrow-raised.png                           |    0 
 src/modules/monitor/components/site-tree.vue                                           |   92 
 src/modules/cs/static/emoji/fearful-face.png                                           |    0 
 src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png     |    0 
 src/modules/helper/static/svg/arrow-down.svg                                           |    1 
 src/modules/cs/static/emoji/pensive-face.png                                           |    0 
 src/modules/cs/hooks/socket.ts                                                         |   95 
 src/modules/cs/static/emoji/sleeping-face.png                                          |    0 
 src/modules/cs/static/emoji/weary-face.png                                             |    0 
 packages/vite-plugin/src/utils/index.ts                                                |   86 
 packages/vite-plugin/pnpm-lock.yaml                                                    | 2269 +++++
 src/modules/cs/types/index.d.ts                                                        |   13 
 src/modules/app/views/goods.vue                                                        |  188 
 src/modules/cs/config.ts                                                               |   10 
 src/modules/cs/hooks/notice.tsx                                                        |   68 
 src/modules/cs/static/emoji/face-with-finger-covering-closed-lips.png                  |    0 
 src/modules/cs/static/emoji/face-with-pleading-eyes.png                                |    0 
 packages/vite-plugin/types/index.d.ts                                                  |   47 
 src/modules/order/views/refund.vue                                                     |  272 
 src/modules/cs/static/emoji/smiling-face-with-smiling-eyes.png                         |    0 
 packages/vite-plugin/src/eps/index.ts                                                  |  597 -
 src/modules/cs/static/emoji/relieved-face.png                                          |    0 
 src/modules/cs/static/emoji/smirking-face.png                                          |    0 
 src/modules/cs/static/emoji/confounded-face.png                                        |    0 
 packages/vite-plugin/src/ctx/index.ts                                                  |    9 
 packages/vite-plugin/dist/eps/index.d.ts                                               |    2 
 src/modules/goods/components/select.vue                                                |  371 
 src/modules/cs/static/emoji/pouting-face.png                                           |    0 
 src/modules/cs/static/emoji/smiling-face-with-horns.png                                |    0 
 src/modules/cs/utils/index.ts                                                          |   52 
 packages/crud/package.json                                                             |    4 
 src/modules/cs/static/emoji/grimacing-face.png                                         |    0 
 src/modules/base/static/svg/icon-track.svg                                             |   12 
 src/modules/helper/static/svg/quick.svg                                                |   18 
 package-lock.json                                                                      | 9594 +++++++++++++++++++++++
 src/modules/cs/static/emoji/expressionless-face.png                                    |    0 
 src/modules/base/static/svg/icon-scan.svg                                              |    1 
 src/modules/cs/static/emoji/rolling-on-the-floor-laughing.png                          |    0 
 src/modules/cs/static/emoji/face-with-party-horn-and-party-hat.png                     |    0 
 src/modules/cs/static/emoji/face-with-thermometer.png                                  |    0 
 src/modules/cs/static/emoji/money-mouth-face.png                                       |    0 
 src/modules/cs/static/emoji/grinning-face-with-star-eyes.png                           |    0 
 src/modules/app/views/complain.vue                                                     |  148 
 src/modules/cs/static/emoji/smiling-face-with-halo.png                                 |    0 
 src/modules/goods/views/info.vue                                                       |  277 
 src/modules/app/views/feedback.vue                                                     |  148 
 src/modules/base/static/svg/icon-theme.svg                                             |   12 
 src/modules/cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png                   |    0 
 src/modules/cs/static/emoji/shocked-face-with-exploding-head.png                       |    0 
 src/modules/cs/static/emoji/kissing-face-with-closed-eyes.png                          |    0 
 src/modules/cs/static/emoji/nerd-face.png                                              |    0 
 src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png             |    0 
 src/modules/cs/index.ts                                                                |   13 
 src/modules/cs/static/emoji/face-with-medical-mask.png                                 |    0 
 src/modules/cs/static/emoji/face-with-cold-sweat.png                                   |    0 
 build/cool/eps.json                                                                    |    2 
 src/modules/cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png         |    0 
 src/modules/cs/static/emoji/confused-face.png                                          |    0 
 src/modules/cs/static/emoji/slightly-frowning-face.png                                 |    0 
 src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png        |    0 
 src/modules/order/components/remark-item.vue                                           |   26 
 src/modules/order/views/info.vue                                                       |  165 
 src/modules/order/dict/index.ts                                                        |   16 
 src/modules/cs/static/emoji/face-screaming-in-fear.png                                 |    0 
 src/modules/cs/static/emoji/winking-face.png                                           |    0 
 src/modules/cs/static/emoji/face-with-stuck-out-tongue.png                             |    0 
 src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png   |    0 
 src/modules/cs/static/emoji/smiling-face-with-open-mouth.png                           |    0 
 src/modules/cs/static/emoji/tired-face.png                                             |    0 
 src/modules/order/components/discount-item.vue                                         |   45 
 pnpm-lock.yaml                                                                         | 3014 +++---
 src/modules/base/static/svg/icon-pending.svg                                           |    1 
 src/modules/base/static/svg/icon-upload.svg                                            |    1 
 src/modules/demo/views/test/crud.vue                                                   |  205 
 src/modules/cs/static/emoji/kissing-face.png                                           |    0 
 src/modules/cs/static/emoji/lying-face.png                                             |    0 
 src/modules/cs/static/emoji/kissing-face-with-smiling-eyes.png                         |    0 
 src/modules/demo/views/home/components/goods-rank.vue                                  |   93 
 src/modules/order/components/user-item.vue                                             |   20 
 src/modules/cs/static/emoji/hugging-face.png                                           |    0 
 packages/vite-plugin/src/svg/index.ts                                                  |   22 
 src/modules/app/views/version.vue                                                      |  177 
 src/modules/cs/static/emoji/loudly-crying-face.png                                     |    0 
 src/modules/cs/static/emoji/sneezing-face.png                                          |    0 
 src/modules/cs/static/emoji/face-with-open-mouth.png                                   |    0 
 src/modules/cs/static/emoji/thinking-face.png                                          |    0 
 src/modules/helper/static/svg/code.svg                                                 |    1 
 src/modules/cs/static/emoji/dizzy-face.png                                             |    0 
 src/modules/base/static/svg/icon-fx.svg                                                |   29 
 src/modules/cs/static/emoji/upside-down-face.png                                       |    0 
 src/modules/cs/components/session.vue                                                  |  223 
 src/config/index.ts                                                                    |    5 
 src/modules/base/static/svg/icon-message.svg                                           |    1 
 src/modules/cs/static/emoji/drooling-face.png                                          |    0 
 src/modules/cs/static/emoji/overheated-face.png                                        |    0 
 src/modules/cs/static/emoji/worried-face.png                                           |    0 
 src/modules/base/static/css/animation.scss                                             |   29 
 src/modules/cs/static/emoji/face-throwing-a-kiss.png                                   |    0 
 src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png          |    0 
 packages/vite-plugin/package.json                                                      |    3 
 src/modules/cs/static/emoji/disappointed-but-relieved-face.png                         |    0 
 src/modules/cs/static/emoji/white-smiling-face.png                                     |    0 
 src/modules/order/components/info-item.vue                                             |   24 
 src/modules/cs/components/index.vue                                                    |  186 
 src/modules/cs/static/emoji/imp.png                                                    |    0 
 src/modules/cs/static/emoji/freezing-face.png                                          |    0 
 src/modules/cs/static/emoji/smiling-face-with-heart-shaped-eyes.png                    |    0 
 src/modules/goods/views/type.vue                                                       |  163 
 src/modules/cs/static/emoji/smiling-face-with-sunglasses.png                           |    0 
 src/modules/goods/components/spec.vue                                                  |  322 
 src/modules/cs/static/emoji/grinning-face.png                                          |    0 
 src/modules/cs/static/emoji/zipper-mouth-face.png                                      |    0 
 src/modules/helper/hooks/ai.ts                                                         |  102 
 src/modules/cs/static/emoji/white-frowning-face.png                                    |    0 
 src/modules/cs/hooks/session.ts                                                        |   97 
 src/modules/order/components/logistics-item.vue                                        |  229 
 src/modules/base/static/svg/icon-system.svg                                            |    1 
 src/modules/shop/views/recycleorderitem.vue                                            |    4 
 src/modules/base/static/svg/icon-living.svg                                            |    1 
 src/modules/cs/static/emoji/persevering-face.png                                       |    0 
 src/modules/demo/views/home/components/count-category.vue                              |  128 
 src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png |    0 
 src/modules/cs/hooks/index.ts                                                          |    5 
 src/modules/cs/hooks/tools.ts                                                          |   28 
 src/modules/cs/static/emoji/hushed-face.png                                            |    0 
 src/modules/base/static/svg/icon-command.svg                                           |    1 
 src/modules/cs/static/emoji/anguished-face.png                                         |    0 
 src/modules/cs/static/emoji/face-with-monocle.png                                      |    0 
 src/modules/info/views/banner.vue                                                      |  137 
 src/modules/cs/static/emoji/face-with-rolling-eyes.png                                 |    0 
 src/modules/cs/static/emoji/face-with-look-of-triumph.png                              |    0 
 src/modules/cs/static/emoji/flushed-face.png                                           |    0 
 src/modules/cs/static/emoji/sleepy-face.png                                            |    0 
 src/modules/cs/static/emoji/angry-face.png                                             |    0 
 src/modules/cs/static/emoji/frowning-face-with-open-mouth.png                          |    0 
 src/modules/cs/static/emoji/grinning-face-with-smiling-eyes.png                        |    0 
 src/modules/base/static/svg/icon-new.svg                                               |    1 
 src/modules/cs/static/emoji/crying-face.png                                            |    0 
 src/modules/cs/static/emoji/serious-face-with-symbols-covering-mouth.png               |    0 
 src/modules/cs/static/emoji/face-with-head-bandage.png                                 |    0 
 package.json                                                                           |    3 
 src/modules/cs/static/emoji/slightly-smiling-face.png                                  |    0 
 src/modules/cs/static/emoji/disappointed-face.png                                      |    0 
 src/modules/goods/views/comment.vue                                                    |   72 
 packages/vite-plugin/src/config.ts                                                     |   28 
 src/modules/helper/hooks/index.ts                                                      |    1 
 src/modules/user/locales/zh-cn.json                                                    |   12 
 src/modules/cs/static/emoji/neutral-face.png                                           |    0 
 src/modules/order/components/goods.vue                                                 |  145 
 src/modules/cs/static/emoji/face-with-open-mouth-and-cold-sweat.png                    |    0 
 src/modules/cs/static/emoji/face-with-open-mouth-vomiting.png                          |    0 
 167 files changed, 22,564 insertions(+), 2,328 deletions(-)

diff --git a/build/cool/eps.d.ts b/build/cool/eps.d.ts
index cc93768..617a3a1 100644
--- a/build/cool/eps.d.ts
+++ b/build/cool/eps.d.ts
@@ -1,4 +1,292 @@
 declare namespace Eps {
+	interface AppComplainEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 绫诲瀷
+		 */
+		type?: number;
+
+		/**
+		 * 鑱旂郴鏂瑰紡
+		 */
+		contact?: string;
+
+		/**
+		 * 鍐呭
+		 */
+		content?: string;
+
+		/**
+		 * 鍥剧墖
+		 */
+		images?: any;
+
+		/**
+		 * 鐘舵�� 0-鏈鐞� 1-宸插鐞�
+		 */
+		status?: number;
+
+		/**
+		 * 澶勭悊浜篒D
+		 */
+		handlerId?: number;
+
+		/**
+		 * 澶囨敞
+		 */
+		remark?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
+
+		/**
+		 * 濮撳悕
+		 */
+		handlerName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface AppFeedbackEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 鑱旂郴鏂瑰紡
+		 */
+		contact?: string;
+
+		/**
+		 * 绫诲瀷
+		 */
+		type?: number;
+
+		/**
+		 * 鍐呭
+		 */
+		content?: string;
+
+		/**
+		 * 鍥剧墖
+		 */
+		images?: any;
+
+		/**
+		 * 鐘舵�� 0-鏈鐞� 1-宸插鐞�
+		 */
+		status?: number;
+
+		/**
+		 * 澶勭悊浜篒D
+		 */
+		handlerId?: number;
+
+		/**
+		 * 澶囨敞
+		 */
+		remark?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
+
+		/**
+		 * 濮撳悕
+		 */
+		handlerName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface AppGoodsEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鏍囬
+		 */
+		title?: string;
+
+		/**
+		 * 浠锋牸
+		 */
+		price?: number;
+
+		/**
+		 * 鍘熶环
+		 */
+		originalPrice?: number;
+
+		/**
+		 * 鎻忚堪
+		 */
+		description?: string;
+
+		/**
+		 * 鐘舵�� 0-绂佺敤 1-鍚敤
+		 */
+		status?: number;
+
+		/**
+		 * 鎺掑簭
+		 */
+		sort?: number;
+
+		/**
+		 * 绫诲瀷 0-澶� 1-鏈� 2-骞� 3-姘镐箙
+		 */
+		type?: number;
+
+		/**
+		 * 鏃堕暱
+		 */
+		duration?: number;
+
+		/**
+		 * 鏍囩
+		 */
+		tag?: string;
+
+		/**
+		 * 鏍囩棰滆壊
+		 */
+		tagColor?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface AppVersionEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鍚嶇О
+		 */
+		name?: string;
+
+		/**
+		 * 鐗堟湰鍙�
+		 */
+		version?: string;
+
+		/**
+		 * 绫诲瀷
+		 */
+		type?: number;
+
+		/**
+		 * 涓嬭浇鍦板潃
+		 */
+		url?: string;
+
+		/**
+		 * 寮哄埗鏇存柊 0-鍚� 1-鏄�
+		 */
+		forceUpdate?: number;
+
+		/**
+		 * 鐘舵�� 0-绂佺敤 1-鍚敤
+		 */
+		status?: number;
+
+		/**
+		 * 鐑洿鏂� 0-鍚� 1-鏄�
+		 */
+		hotUpdate?: number;
+
+		/**
+		 * 鎻忚堪
+		 */
+		description?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
 	interface BaseSysDepartmentEntity {
 		/**
 		 * ID
@@ -711,9 +999,29 @@
 		phone?: string;
 
 		/**
+		 * 瀵嗙爜
+		 */
+		password?: string;
+
+		/**
+		 * 鎬у埆
+		 */
+		sex?: string;
+
+		/**
+		 * 鐢熸棩
+		 */
+		birthday?: Date;
+
+		/**
 		 * 鍏ヨ亴鏃ユ湡
 		 */
 		hireDate?: Date;
+
+		/**
+		 * 绂昏亴鏃ユ湡
+		 */
+		leaveDate?: Date;
 
 		/**
 		 * 鐘舵��
@@ -920,6 +1228,120 @@
 		[key: string]: any;
 	}
 
+	interface CsMsgEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 浼氳瘽ID
+		 */
+		sessionId?: number;
+
+		/**
+		 * 娑堟伅鍐呭
+		 */
+		content?: any;
+
+		/**
+		 * 绫诲瀷 0-鍙嶉 1-鍥炲
+		 */
+		type?: number;
+
+		/**
+		 * 鐘舵�� 0-鏈 1-宸茶
+		 */
+		status?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
+
+		/**
+		 * 濮撳悕
+		 */
+		adminUserName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		adminUserHeadImg?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface CsSessionEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 鏈�鍚庝竴鏉℃秷鎭�
+		 */
+		lastMsg?: any;
+
+		/**
+		 * 瀹㈡湇鏈娑堟伅鏁�
+		 */
+		adminUnreadCount?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
 	interface DemoGoodsEntity {
 		/**
 		 * ID
@@ -1064,6 +1486,457 @@
 		 * 鏇存柊鏃堕棿
 		 */
 		updateTime?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface GoodsCommentEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 鍟嗗搧ID
+		 */
+		goodsId?: number;
+
+		/**
+		 * 璁㈠崟ID
+		 */
+		orderId?: number;
+
+		/**
+		 * 鍐呭
+		 */
+		content?: string;
+
+		/**
+		 * 鏄熸暟
+		 */
+		starCount?: number;
+
+		/**
+		 * 鍥剧墖
+		 */
+		pics?: any;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
+
+		/**
+		 * 鏍囬
+		 */
+		title?: string;
+
+		/**
+		 * 涓诲浘
+		 */
+		mainPic?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface GoodsInfoEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 绫诲瀷ID
+		 */
+		typeId?: number;
+
+		/**
+		 * 鏍囬
+		 */
+		title?: string;
+
+		/**
+		 * 鍓爣棰�
+		 */
+		subTitle?: string;
+
+		/**
+		 * 涓诲浘
+		 */
+		mainPic?: string;
+
+		/**
+		 * 鍥剧墖
+		 */
+		pics?: any;
+
+		/**
+		 * 浠锋牸
+		 */
+		price?: number;
+
+		/**
+		 * 宸插敭
+		 */
+		sold?: number;
+
+		/**
+		 * 璇︽儏
+		 */
+		content?: string;
+
+		/**
+		 * 鐘舵�� 0-涓嬫灦 1-涓婃灦
+		 */
+		status?: number;
+
+		/**
+		 * 鎺掑簭
+		 */
+		sortNum?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鍚嶇О
+		 */
+		typeName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface GoodsSearchKeywordEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鍚嶇О
+		 */
+		name?: string;
+
+		/**
+		 * 鎺掑簭
+		 */
+		sortNum?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface GoodsSpecEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鍟嗗搧ID
+		 */
+		goodsId?: number;
+
+		/**
+		 * 鍚嶇О
+		 */
+		name?: string;
+
+		/**
+		 * 浠锋牸
+		 */
+		price?: number;
+
+		/**
+		 * 搴撳瓨
+		 */
+		stock?: number;
+
+		/**
+		 * 鎺掑簭
+		 */
+		sortNum?: number;
+
+		/**
+		 * 鍥剧墖
+		 */
+		images?: any;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface GoodsTypeEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鍚嶇О
+		 */
+		name?: string;
+
+		/**
+		 * 鐖禝D
+		 */
+		parentId?: number;
+
+		/**
+		 * 鎺掑簭
+		 */
+		sortNum?: number;
+
+		/**
+		 * 鍥剧墖
+		 */
+		pic?: string;
+
+		/**
+		 * 鐘舵��  0-绂佺敤 1-鍚敤
+		 */
+		status?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface InfoBannerEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鎻忚堪
+		 */
+		description?: string;
+
+		/**
+		 * 璺宠浆璺緞
+		 */
+		path?: string;
+
+		/**
+		 * 鍥剧墖
+		 */
+		pic?: string;
+
+		/**
+		 * 鎺掑簭
+		 */
+		sortNum?: number;
+
+		/**
+		 * 鐘舵�� 1:鍚敤 2:绂佺敤
+		 */
+		status?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface MarketCouponInfoEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鏍囬
+		 */
+		title?: string;
+
+		/**
+		 * 鎻忚堪
+		 */
+		description?: string;
+
+		/**
+		 * 绫诲瀷 0-婊″噺
+		 */
+		type?: number;
+
+		/**
+		 * 閲戦
+		 */
+		amount?: number;
+
+		/**
+		 * 鏁伴噺
+		 */
+		num?: number;
+
+		/**
+		 * 宸查鍙�
+		 */
+		receivedNum?: number;
+
+		/**
+		 * 寮�濮嬫椂闂�
+		 */
+		startTime?: Date;
+
+		/**
+		 * 缁撴潫鏃堕棿
+		 */
+		endTime?: Date;
+
+		/**
+		 * 鐘舵�� 0-绂佺敤 1-鍚敤
+		 */
+		status?: number;
+
+		/**
+		 * 鏉′欢
+		 */
+		condition?: any;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface MarketCouponUserEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 浼樻儬鍒窱D
+		 */
+		couponId?: number;
+
+		/**
+		 * 鐘舵�� 0-鏈娇鐢� 1-宸蹭娇鐢�
+		 */
+		status?: number;
+
+		/**
+		 * 浣跨敤鏃堕棿
+		 */
+		useTime?: Date;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
 
 		/**
 		 * 浠绘剰閿��
@@ -1315,6 +2188,128 @@
 		 * 鍚嶇О
 		 */
 		buyerName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface OrderInfoEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: number;
+
+		/**
+		 * 鏍囬
+		 */
+		title?: string;
+
+		/**
+		 * 鏀粯鏂瑰紡 0-寰呮敮浠� 1-寰俊 2-鏀粯瀹�
+		 */
+		payType?: number;
+
+		/**
+		 * 鏀粯鏃堕棿
+		 */
+		payTime?: Date;
+
+		/**
+		 * 璁㈠崟鍙�
+		 */
+		orderNum?: string;
+
+		/**
+		 * 鐘舵�� 0-寰呬粯娆� 1-寰呭彂璐� 2-寰呮敹璐� 3-寰呰瘎浠� 4-浜ゆ槗瀹屾垚 5-閫�娆句腑 6-宸查��娆� 7-宸插叧闂�
+		 */
+		status?: number;
+
+		/**
+		 * 浠锋牸
+		 */
+		price?: number;
+
+		/**
+		 * 浼樻儬閲戦
+		 */
+		discountPrice?: number;
+
+		/**
+		 * 浼樻儬鏉ユ簮
+		 */
+		discountSource?: any;
+
+		/**
+		 * 鍦板潃
+		 */
+		address?: any;
+
+		/**
+		 * 鐗╂祦淇℃伅
+		 */
+		logistics?: any;
+
+		/**
+		 * 閫�娆�
+		 */
+		refund?: any;
+
+		/**
+		 * 閫�娆剧姸鎬�
+		 */
+		refundStatus?: number;
+
+		/**
+		 * 閫�娆剧敵璇锋椂闂�
+		 */
+		refundApplyTime?: Date;
+
+		/**
+		 * 澶囨敞
+		 */
+		remark?: string;
+
+		/**
+		 * 鍏抽棴澶囨敞
+		 */
+		closeRemark?: string;
+
+		/**
+		 * 宸插紑绁�: 0-鏈紑绁� 1-宸插紑绁�
+		 */
+		invoice?: number;
+
+		/**
+		 * 寰俊绫诲瀷 0-灏忕▼搴� 1-鍏紬鍙� 2-App
+		 */
+		wxType?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: Date;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: Date;
+
+		/**
+		 * 鏄电О
+		 */
+		nickName?: string;
+
+		/**
+		 * 澶村儚
+		 */
+		avatarUrl?: string;
 
 		/**
 		 * 浠绘剰閿��
@@ -1792,6 +2787,294 @@
 		 * 绔欑偣绫诲瀷
 		 */
 		siteType?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface PushSorterAlarmEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 韬唤璇佸彿
+		 */
+		idCard?: string;
+
+		/**
+		 * 鎵�灞炲崟浣�
+		 */
+		departmentId?: number;
+
+		/**
+		 * 鏁版嵁鏃堕棿
+		 */
+		uploadTime?: Date;
+
+		/**
+		 * 鎶ヨ绫诲瀷
+		 */
+		alarmType?: string;
+
+		/**
+		 * 鎶ヨ鍐呭
+		 */
+		content?: string;
+
+		/**
+		 * 鎶ヨ绾у埆
+		 */
+		alarmLevel?: string;
+
+		/**
+		 * 澶勭悊鐘舵��
+		 */
+		status?: number;
+
+		/**
+		 * 澶勭悊浜篒D
+		 */
+		handleUser?: number;
+
+		/**
+		 * 澶勭悊鏃堕棿
+		 */
+		handleTime?: Date;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface PushSorterAttendanceEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 韬唤璇佸彿
+		 */
+		idCard?: string;
+
+		/**
+		 * 鎵�灞炲崟浣�
+		 */
+		departmentId?: number;
+
+		/**
+		 * 鏁版嵁鏃堕棿
+		 */
+		uploadTime?: Date;
+
+		/**
+		 * 宸ヤ綔鏃ユ湡
+		 */
+		workDate?: Date;
+
+		/**
+		 * 绛惧埌鏃堕棿
+		 */
+		checkInTime?: Date;
+
+		/**
+		 * 绛鹃��鏃堕棿
+		 */
+		checkOutTime?: Date;
+
+		/**
+		 * 绛惧埌鍦扮偣
+		 */
+		checkInLocation?: string;
+
+		/**
+		 * 绛鹃��鍦扮偣
+		 */
+		checkOutLocation?: string;
+
+		/**
+		 * 宸ヤ綔鏃堕暱
+		 */
+		workHours?: number;
+
+		/**
+		 * 鑰冨嫟鐘舵��
+		 */
+		status?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface PushSorterGpsEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 韬唤璇佸彿
+		 */
+		idCard?: string;
+
+		/**
+		 * 濮撳悕
+		 */
+		name?: string;
+
+		/**
+		 * 鎵�灞炲崟浣�
+		 */
+		departmentId?: number;
+
+		/**
+		 * 鏁版嵁鏃堕棿
+		 */
+		uploadTime?: Date;
+
+		/**
+		 * 缁忓害
+		 */
+		longitude?: number;
+
+		/**
+		 * 绾害
+		 */
+		latitude?: number;
+
+		/**
+		 * 楂樼▼
+		 */
+		height?: number;
+
+		/**
+		 * 閫熷害
+		 */
+		speed?: number;
+
+		/**
+		 * 绮惧害
+		 */
+		accuracy?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface PushSorterHealthEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 韬唤璇佸彿
+		 */
+		idCard?: string;
+
+		/**
+		 * 鎵�灞炲崟浣�
+		 */
+		departmentId?: number;
+
+		/**
+		 * 鏁版嵁鏃堕棿
+		 */
+		uploadTime?: Date;
+
+		/**
+		 * 浣撴俯
+		 */
+		temperature?: number;
+
+		/**
+		 * 蹇冪巼
+		 */
+		heartRate?: number;
+
+		/**
+		 * 鏀剁缉鍘�
+		 */
+		bloodPressureHigh?: number;
+
+		/**
+		 * 鑸掑紶鍘�
+		 */
+		bloodPressureLow?: number;
+
+		/**
+		 * 琛�姘чケ鍜屽害
+		 */
+		bloodOxygen?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
 
 		/**
 		 * 浠绘剰閿��
@@ -2708,6 +3991,438 @@
 		[key: string]: any;
 	}
 
+	interface RecycleAppointmentEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 棰勭害缂栧彿
+		 */
+		appointmentNo?: string;
+
+		/**
+		 * 瀛︽牎ID
+		 */
+		departmentId?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		campusUserId?: string;
+
+		/**
+		 * 鑱旂郴浜�
+		 */
+		contactName?: string;
+
+		/**
+		 * 鑱旂郴鐢佃瘽
+		 */
+		contactPhone?: string;
+
+		/**
+		 * 璇︾粏鍦板潃
+		 */
+		address?: string;
+
+		/**
+		 * 缁忓害
+		 */
+		longitude?: number;
+
+		/**
+		 * 绾害
+		 */
+		latitude?: number;
+
+		/**
+		 * 棰勭害鏃ユ湡
+		 */
+		appointmentDate?: string;
+
+		/**
+		 * 棰勭害鏃堕棿娈�
+		 */
+		appointmentSlot?: string;
+
+		/**
+		 * 棰勮閲嶉噺
+		 */
+		expectedWeight?: number;
+
+		/**
+		 * 鐘舵��
+		 */
+		status?: string;
+
+		/**
+		 * 鍒嗘嫞鍛業D
+		 */
+		sorterId?: string;
+
+		/**
+		 * 鍥炴敹璁㈠崟ID
+		 */
+		recycleOrderId?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 濮撳悕
+		 */
+		sorterName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface RecycleAppointmentLogEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 棰勭害ID
+		 */
+		appointmentId?: number;
+
+		/**
+		 * 鎿嶄綔绫诲瀷
+		 */
+		action?: string;
+
+		/**
+		 * 鎿嶄綔浜虹被鍨�
+		 */
+		operatorType?: string;
+
+		/**
+		 * 鎿嶄綔浜篒D
+		 */
+		operatorId?: number;
+
+		/**
+		 * 鎻忚堪
+		 */
+		remark?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface RecycleItemEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鎵�灞炲崟浣�
+		 */
+		departmentId?: string;
+
+		/**
+		 * 鍒嗙被ID
+		 */
+		itemId?: string;
+
+		/**
+		 * 鍚嶇О
+		 */
+		itemName?: string;
+
+		/**
+		 * 鍖呭惈鍝佺被
+		 */
+		including?: string;
+
+		/**
+		 * 鍗曚綅
+		 */
+		unit?: string;
+
+		/**
+		 * 浠锋牸
+		 */
+		price?: number;
+
+		/**
+		 * 纰崇Н鍒�
+		 */
+		carbonPoint?: number;
+
+		/**
+		 * 搴熷搧绫诲埆缂栫爜
+		 */
+		category?: string;
+
+		/**
+		 * 鐘舵��
+		 */
+		status?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface RecycleOrderEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 璁㈠崟缂栧彿
+		 */
+		orderNo?: string;
+
+		/**
+		 * 璁㈠崟绫诲瀷
+		 */
+		orderType?: string;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		campusUserId?: string;
+
+		/**
+		 * 瀛︽牎ID
+		 */
+		departmentId?: number;
+
+		/**
+		 * 绔欑偣ID
+		 */
+		siteId?: string;
+
+		/**
+		 * 鍒嗘嫞鍛業D
+		 */
+		sorterId?: string;
+
+		/**
+		 * 棰勭害ID
+		 */
+		appointmentId?: number;
+
+		/**
+		 * 鐘舵��
+		 */
+		status?: string;
+
+		/**
+		 * 鎬婚噸閲�
+		 */
+		totalWeight?: number;
+
+		/**
+		 * 鎬婚噾棰�
+		 */
+		totalAmount?: number;
+
+		/**
+		 * 鎬荤⒊绉垎
+		 */
+		totalCarbonPoint?: number;
+
+		/**
+		 * 瀹屾垚鏃堕棿
+		 */
+		finishTime?: Date;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface RecycleOrderItemEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 璁㈠崟NO
+		 */
+		orderNo?: string;
+
+		/**
+		 * 鍨冨溇鍒嗙被ID
+		 */
+		itemId?: string;
+
+		/**
+		 * 鍨冨溇鍒嗙被鍚嶇О
+		 */
+		itemName?: string;
+
+		/**
+		 * 鍥哄簾鍥芥爣鍒嗙被
+		 */
+		category?: string;
+
+		/**
+		 * 閲嶉噺
+		 */
+		weight?: number;
+
+		/**
+		 * 鍗曚环
+		 */
+		unitPrice?: number;
+
+		/**
+		 * 閲戦
+		 */
+		amount?: number;
+
+		/**
+		 * 纰崇Н鍒�
+		 */
+		carbonPoint?: number;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface RecycleTransactionEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 鐢ㄦ埛ID
+		 */
+		userId?: string;
+
+		/**
+		 * 鏈烘瀯ID
+		 */
+		departmentId?: number;
+
+		/**
+		 * 娴佹按绫诲瀷
+		 */
+		type?: string;
+
+		/**
+		 * 閲戦
+		 */
+		amount?: number;
+
+		/**
+		 * 鏉ユ簮绫诲瀷
+		 */
+		sourceType?: string;
+
+		/**
+		 * 澶囨敞
+		 */
+		remark?: string;
+
+		/**
+		 * 璁㈠崟ID
+		 */
+		orderId?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
 	interface SpaceInfoEntity {
 		/**
 		 * ID
@@ -2998,9 +4713,59 @@
 		phone?: string;
 
 		/**
+		 * 鐢熸棩
+		 */
+		birthday?: Date;
+
+		/**
 		 * 鎬у埆
 		 */
 		gender?: number;
+
+		/**
+		 * 瑙掕壊
+		 */
+		role?: string;
+
+		/**
+		 * 瀛︽牎ID
+		 */
+		departmentId?: number;
+
+		/**
+		 * 纰崇Н鍒�
+		 */
+		carbonBalance?: number;
+
+		/**
+		 * 瀛﹂櫌ID
+		 */
+		collegeId?: number;
+
+		/**
+		 * 瀛﹂櫌鍚嶇О
+		 */
+		collegeName?: string;
+
+		/**
+		 * 涓撲笟ID
+		 */
+		majorId?: number;
+
+		/**
+		 * 涓撲笟鍚嶇О
+		 */
+		majorName?: string;
+
+		/**
+		 * 鐝骇ID
+		 */
+		classId?: number;
+
+		/**
+		 * 鐝骇鍚嶇О
+		 */
+		className?: string;
 
 		/**
 		 * 鐘舵��
@@ -3033,6 +4798,11 @@
 		updateTime?: string;
 
 		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
 		 * 浠绘剰閿��
 		 */
 		[key: string]: any;
@@ -3041,8 +4811,13 @@
 	type json = any;
 
 	type DictKey =
+		| "upgradeType"
+		| "complainType"
+		| "feedbackType"
 		| "ratedpayload"
 		| "iottype"
+		| "brand"
+		| "occupation"
 		| "sitetype"
 		| "datachanel"
 		| "vehicletype"
@@ -3060,6 +4835,26 @@
 		pagination: PagePagination;
 		list: T[];
 		[key: string]: any;
+	}
+
+	interface AppComplainPageResponse {
+		pagination: PagePagination;
+		list: AppComplainEntity[];
+	}
+
+	interface AppFeedbackPageResponse {
+		pagination: PagePagination;
+		list: AppFeedbackEntity[];
+	}
+
+	interface AppGoodsPageResponse {
+		pagination: PagePagination;
+		list: AppGoodsEntity[];
+	}
+
+	interface AppVersionPageResponse {
+		pagination: PagePagination;
+		list: AppVersionEntity[];
 	}
 
 	interface BaseSysLogPageResponse {
@@ -3122,6 +4917,16 @@
 		list: BasicdataWastetypeEntity[];
 	}
 
+	interface CsMsgPageResponse {
+		pagination: PagePagination;
+		list: CsMsgEntity[];
+	}
+
+	interface CsSessionPageResponse {
+		pagination: PagePagination;
+		list: CsSessionEntity[];
+	}
+
 	interface DemoGoodsPageResponse {
 		pagination: PagePagination;
 		list: DemoGoodsEntity[];
@@ -3137,6 +4942,46 @@
 		list: DictTypeEntity[];
 	}
 
+	interface GoodsCommentPageResponse {
+		pagination: PagePagination;
+		list: GoodsCommentEntity[];
+	}
+
+	interface GoodsInfoPageResponse {
+		pagination: PagePagination;
+		list: GoodsInfoEntity[];
+	}
+
+	interface GoodsSearchKeywordPageResponse {
+		pagination: PagePagination;
+		list: GoodsSearchKeywordEntity[];
+	}
+
+	interface GoodsSpecPageResponse {
+		pagination: PagePagination;
+		list: GoodsSpecEntity[];
+	}
+
+	interface GoodsTypePageResponse {
+		pagination: PagePagination;
+		list: GoodsTypeEntity[];
+	}
+
+	interface InfoBannerPageResponse {
+		pagination: PagePagination;
+		list: InfoBannerEntity[];
+	}
+
+	interface MarketCouponInfoPageResponse {
+		pagination: PagePagination;
+		list: MarketCouponInfoEntity[];
+	}
+
+	interface MarketCouponUserPageResponse {
+		pagination: PagePagination;
+		list: MarketCouponUserEntity[];
+	}
+
 	interface MonitorCapturetaskPageResponse {
 		pagination: PagePagination;
 		list: PushCaptureTaskEntity[];
@@ -3150,6 +4995,11 @@
 	interface OperationWastesalePageResponse {
 		pagination: PagePagination;
 		list: OperationWastesaleEntity[];
+	}
+
+	interface OrderInfoPageResponse {
+		pagination: PagePagination;
+		list: OrderInfoEntity[];
 	}
 
 	interface PluginInfoPageResponse {
@@ -3180,6 +5030,26 @@
 	interface PushSiteweightPageResponse {
 		pagination: PagePagination;
 		list: PushSiteweightEntity[];
+	}
+
+	interface PushSorteralarmPageResponse {
+		pagination: PagePagination;
+		list: PushSorterAlarmEntity[];
+	}
+
+	interface PushSorterattendancePageResponse {
+		pagination: PagePagination;
+		list: PushSorterAttendanceEntity[];
+	}
+
+	interface PushSortergpsPageResponse {
+		pagination: PagePagination;
+		list: PushSorterGpsEntity[];
+	}
+
+	interface PushSorterhealthPageResponse {
+		pagination: PagePagination;
+		list: PushSorterHealthEntity[];
 	}
 
 	interface PushVehiclegpsPageResponse {
@@ -3217,6 +5087,36 @@
 		list: ReportJoblogEntity[];
 	}
 
+	interface ShopRecycleappointmentPageResponse {
+		pagination: PagePagination;
+		list: RecycleAppointmentEntity[];
+	}
+
+	interface ShopRecycleappointmentlogPageResponse {
+		pagination: PagePagination;
+		list: RecycleAppointmentLogEntity[];
+	}
+
+	interface ShopRecycleitemPageResponse {
+		pagination: PagePagination;
+		list: RecycleItemEntity[];
+	}
+
+	interface ShopRecycleorderPageResponse {
+		pagination: PagePagination;
+		list: RecycleOrderEntity[];
+	}
+
+	interface ShopRecycleorderitemPageResponse {
+		pagination: PagePagination;
+		list: RecycleOrderItemEntity[];
+	}
+
+	interface ShopTransactionPageResponse {
+		pagination: PagePagination;
+		list: RecycleTransactionEntity[];
+	}
+
 	interface SpaceInfoPageResponse {
 		pagination: PagePagination;
 		list: SpaceInfoEntity[];
@@ -3240,6 +5140,238 @@
 	interface UserInfoPageResponse {
 		pagination: PagePagination;
 		list: UserInfoEntity[];
+	}
+
+	interface AppComplain {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<AppComplainEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<AppComplainEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<AppComplainPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface AppFeedback {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<AppFeedbackEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<AppFeedbackEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<AppFeedbackPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface AppGoods {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<AppGoodsEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<AppGoodsEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<AppGoodsPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface AppVersion {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<AppVersionEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<AppVersionEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<AppVersionPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
 	}
 
 	interface BaseCoding {
@@ -4155,6 +6287,112 @@
 		request: Request;
 	}
 
+	interface CountHome {
+		/**
+		 * 鍟嗗搧鍒嗙被
+		 */
+		goodsCategory(data?: any): Promise<any>;
+
+		/**
+		 * 璁㈠崟姒傚喌
+		 */
+		orderSummary(data?: any): Promise<any>;
+
+		/**
+		 * 鐢ㄦ埛姒傚喌
+		 */
+		userSummary(data?: any): Promise<any>;
+
+		/**
+		 * 璁㈠崟鍥捐〃
+		 */
+		orderChart(data?: any): Promise<any>;
+
+		/**
+		 * 鐢ㄦ埛鍥捐〃
+		 */
+		userChart(data?: any): Promise<any>;
+
+		/**
+		 * 鍟嗗搧鎺掕
+		 */
+		goodsRank(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			goodsCategory: string;
+			orderSummary: string;
+			userSummary: string;
+			orderChart: string;
+			userChart: string;
+			goodsRank: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			goodsCategory: boolean;
+			orderSummary: boolean;
+			userSummary: boolean;
+			orderChart: boolean;
+			userChart: boolean;
+			goodsRank: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface CsMsg {
+		/**
+		 * 鏈娑堟伅鏁�
+		 */
+		unreadCount(data?: any): Promise<any>;
+
+		/**
+		 * 鏍囪宸茶
+		 */
+		read(data?: any): Promise<any>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<CsMsgPageResponse>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: { unreadCount: string; read: string; page: string };
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: { unreadCount: boolean; read: boolean; page: boolean };
+
+		request: Request;
+	}
+
+	interface CsSession {
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<CsSessionPageResponse>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: { page: string };
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: { page: boolean };
+
+		request: Request;
+	}
+
 	interface DemoGoods {
 		/**
 		 * 鍒犻櫎
@@ -4339,6 +6577,431 @@
 		 * 鍒嗛〉鏌ヨ
 		 */
 		page(data?: any): Promise<DictTypePageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface GoodsComment {
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<GoodsCommentPageResponse>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: { page: string };
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: { page: boolean };
+
+		request: Request;
+	}
+
+	interface GoodsInfo {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<GoodsInfoEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<GoodsInfoEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<GoodsInfoPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface GoodsSearchKeyword {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<GoodsSearchKeywordEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<GoodsSearchKeywordEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<GoodsSearchKeywordPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface GoodsSpec {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<GoodsSpecEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<GoodsSpecEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<GoodsSpecPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface GoodsType {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<GoodsTypeEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<GoodsTypeEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<GoodsTypePageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface InfoBanner {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<InfoBannerEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<InfoBannerEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<InfoBannerPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface MarketCouponInfo {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<MarketCouponInfoEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<MarketCouponInfoEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<MarketCouponInfoPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface MarketCouponUser {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<MarketCouponUserEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<MarketCouponUserEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<MarketCouponUserPageResponse>;
 
 		/**
 		 * 鏂板
@@ -4567,6 +7230,78 @@
 			list: boolean;
 			page: boolean;
 			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface OrderInfo {
+		/**
+		 * 閫�娆惧鐞�
+		 */
+		refundHandle(data?: any): Promise<any>;
+
+		/**
+		 * 鐗╂祦淇℃伅
+		 */
+		logistics(data?: any): Promise<any>;
+
+		/**
+		 * 鍙戣揣
+		 */
+		deliver(data?: any): Promise<any>;
+
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<OrderInfoEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<OrderInfoEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<OrderInfoPageResponse>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			refundHandle: string;
+			logistics: string;
+			deliver: string;
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			refundHandle: boolean;
+			logistics: boolean;
+			deliver: boolean;
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
 		};
 
 		request: Request;
@@ -4894,6 +7629,238 @@
 		 * 鍒嗛〉鏌ヨ
 		 */
 		page(data?: any): Promise<PushSiteweightPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface PushSorteralarm {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<PushSorterAlarmEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<PushSorterAlarmEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<PushSorteralarmPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface PushSorterattendance {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<PushSorterAttendanceEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<PushSorterAttendanceEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<PushSorterattendancePageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface PushSortergps {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<PushSorterGpsEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<PushSorterGpsEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<PushSortergpsPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface PushSorterhealth {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<PushSorterHealthEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<PushSorterHealthEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<PushSorterhealthPageResponse>;
 
 		/**
 		 * 鏂板
@@ -5304,6 +8271,361 @@
 		request: Request;
 	}
 
+	interface ShopRecycleappointment {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<RecycleAppointmentEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<RecycleAppointmentEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<ShopRecycleappointmentPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface ShopRecycleappointmentlog {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<RecycleAppointmentLogEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<RecycleAppointmentLogEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<ShopRecycleappointmentlogPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface ShopRecycleitem {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<RecycleItemEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<RecycleItemEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<ShopRecycleitemPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface ShopRecycleorder {
+		/**
+		 * saveWithSummary
+		 */
+		saveWithSummary(data?: any): Promise<any>;
+
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<RecycleOrderEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<RecycleOrderEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<ShopRecycleorderPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			saveWithSummary: string;
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			saveWithSummary: boolean;
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface ShopRecycleorderitem {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<RecycleOrderItemEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<RecycleOrderItemEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<ShopRecycleorderitemPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
+	interface ShopTransaction {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<RecycleTransactionEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<RecycleTransactionEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<ShopTransactionPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
 	interface SpaceInfo {
 		/**
 		 * 鍒犻櫎
@@ -5630,6 +8952,7 @@
 	type Service = {
 		request: Request;
 
+		app: { complain: AppComplain; feedback: AppFeedback; goods: AppGoods; version: AppVersion };
 		base: {
 			coding: BaseCoding;
 			comm: BaseComm;
@@ -5652,10 +8975,22 @@
 			vehicle: BasicdataVehicle;
 			wastetype: BasicdataWastetype;
 		};
+		count: { home: CountHome };
+		cs: { msg: CsMsg; session: CsSession };
 		demo: { goods: DemoGoods; tenant: DemoTenant };
 		dict: { info: DictInfo; type: DictType };
+		goods: {
+			comment: GoodsComment;
+			info: GoodsInfo;
+			searchKeyword: GoodsSearchKeyword;
+			spec: GoodsSpec;
+			type: GoodsType;
+		};
+		info: { banner: InfoBanner };
+		market: { coupon: { info: MarketCouponInfo; user: MarketCouponUser } };
 		monitor: { capturetask: MonitorCapturetask; ys7: MonitorYs7 };
 		operation: { traderecord: OperationTraderecord; wastesale: OperationWastesale };
+		order: { info: OrderInfo };
 		plugin: { info: PluginInfo };
 		push: {
 			auditlog: PushAuditlog;
@@ -5663,6 +8998,10 @@
 			devicealarm: PushDevicealarm;
 			deviceonoff: PushDeviceonoff;
 			siteweight: PushSiteweight;
+			sorteralarm: PushSorteralarm;
+			sorterattendance: PushSorterattendance;
+			sortergps: PushSortergps;
+			sorterhealth: PushSorterhealth;
 			vehiclegps: PushVehiclegps;
 			weight: PushWeight;
 		};
@@ -5673,6 +9012,14 @@
 			dailyvehicle: ReportDailyvehicle;
 			joblog: ReportJoblog;
 		};
+		shop: {
+			recycleappointment: ShopRecycleappointment;
+			recycleappointmentlog: ShopRecycleappointmentlog;
+			recycleitem: ShopRecycleitem;
+			recycleorder: ShopRecycleorder;
+			recycleorderitem: ShopRecycleorderitem;
+			transaction: ShopTransaction;
+		};
 		space: { info: SpaceInfo; type: SpaceType };
 		task: { info: TaskInfo };
 		user: { address: UserAddress; info: UserInfo };
diff --git a/build/cool/eps.json b/build/cool/eps.json
index 365aed4..2e245af 100644
--- a/build/cool/eps.json
+++ b/build/cool/eps.json
@@ -1 +1 @@
-[{"prefix":"/admin/base/coding","name":"","api":[{"method":"get","path":"/getModuleTree"},{"method":"post","path":"/createCode"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/comm","name":"","api":[{"method":"post","path":"/personUpdate"},{"method":"get","path":"/uploadMode"},{"method":"get","path":"/permmenu"},{"method":"get","path":"/program"},{"method":"get","path":"/person"},{"method":"post","path":"/upload"},{"method":"post","path":"/logout"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/open","name":"","api":[{"method":"get","path":"/refreshToken"},{"method":"get","path":"/captcha"},{"method":"post","path":"/login"},{"method":"get","path":"/html"},{"method":"get","path":"/eps"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/department","name":"BaseSysDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/order"},{"method":"post","path":"/list"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/log","name":"BaseSysLogEntity","api":[{"method":"post","path":"/setKeep"},{"method":"get","path":"/getKeep"},{"method":"post","path":"/clear"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"濮撳悕","nullable":true,"source":"b.name"},{"propertyName":"action","type":"string","length":"","comment":"琛屼负","nullable":false,"source":"a.action"},{"propertyName":"ip","type":"string","length":"","comment":"ip","nullable":true,"source":"a.ip"}]}},{"prefix":"/admin/base/sys/menu","name":"BaseSysMenuEntity","api":[{"method":"post","path":"/create"},{"method":"post","path":"/export"},{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/parse"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/param","name":"BaseSysParamEntity","api":[{"method":"get","path":"/stringbykey"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/html"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataType","type":"number","length":"","comment":"鏁版嵁绫诲瀷 0-瀛楃涓� 1-瀵屾枃鏈� 2-鏂囦欢 ","nullable":false,"defaultValue":0,"source":"a.dataType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"keyName","type":"string","length":"","comment":"閿�","nullable":false,"source":"a.keyName"}]}},{"prefix":"/admin/base/sys/role","name":"BaseSysRoleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"label","type":"string","length":"50","comment":"瑙掕壊鏍囩","nullable":true,"source":"a.label"}]}},{"prefix":"/admin/base/sys/user","name":"BaseSysUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/move"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/buyer","name":"BasicdataBuyerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"閮ㄩ棬ID","nullable":true,"source":"a.departmentId"},{"propertyName":"name","type":"string","length":"200","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"contact","type":"string","length":"50","comment":"鑱旂郴浜�","nullable":true,"source":"a.contact"}],"fieldLike":[{"propertyName":"name","type":"string","length":"200","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"address","type":"string","length":"255","comment":"鍦板潃","nullable":true,"source":"a.address"}],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/driver","name":"BasicdataDriverEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"鎵�灞炲崟浣�","nullable":true,"source":"a.departmentId"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["婵�娲�","绂佺敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"64","comment":"韬唤璇佸彿","nullable":false,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"鎵嬫満鍙�","nullable":true,"source":"a.phone"},{"propertyName":"licenseNo","type":"string","length":"64","comment":"椹鹃┒璇佸彿","nullable":true,"source":"a.licenseNo"}]}},{"prefix":"/admin/basicdata/iot","name":"BasicdataIotEntity","api":[{"method":"post","path":"/getYsDevices"},{"method":"post","path":"/getSitelist"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"iotTypeCode","type":"string","length":"","comment":"缁堢绫诲瀷","nullable":false,"source":"a.iotTypeCode"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"iotName","type":"string","length":"","comment":"缁堢鍚嶇О","nullable":false,"source":"a.iotName"},{"propertyName":"iotCode","type":"string","length":"","comment":"缁堢缂栫爜","nullable":false,"source":"a.iotCode"}]}},{"prefix":"/admin/basicdata/site","name":"BasicdataSiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/sorter","name":"BasicdataSorterEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["鍦ㄨ亴","绂昏亴","绂佺敤"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"鎵�灞炲崟浣�","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessName","type":"string","length":"64","comment":"濮撳悕","nullable":false,"source":"a.businessName"},{"propertyName":"businessId","type":"string","length":"32","comment":"韬唤璇佸彿","nullable":true,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"鎵嬫満鍙�","nullable":true,"source":"a.phone"}]}},{"prefix":"/admin/basicdata/vehicle","name":"BasicdataVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"vehicleType","type":"string","length":"","comment":"杞﹀瀷","nullable":false,"defaultValue":"鍘㈠紡璐ц溅","dict":"vehicletype","source":"a.vehicleType"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["鍚敤","绂佺敤"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"鎵�灞炲崟浣�","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"32","comment":"杞︾墝鍙�","nullable":false,"source":"a.businessId"},{"propertyName":"defaultDriver","type":"bigint","length":"","comment":"榛樿鍙告満","nullable":true,"source":"a.defaultDriver"}]}},{"prefix":"/admin/basicdata/wastetype","name":"BasicdataWastetypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"isRecyclable","type":"number","length":"","comment":"鏄惁鍙洖鏀�","nullable":false,"defaultValue":0,"dict":["鍚�","鏄�"],"source":"a.isRecyclable"},{"propertyName":"status","type":"number","length":"","comment":"鏄惁鍚敤","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"code","type":"string","length":"","comment":"浠g爜","nullable":false,"source":"a.code"}]}},{"prefix":"/admin/demo/goods","name":"DemoGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[{"propertyName":"title","type":"string","length":"50","comment":"鏍囬","nullable":false,"source":"a.title"}],"keyWordLikeFields":[{"propertyName":"description","type":"string","length":"","comment":"鎻忚堪","nullable":true,"source":"a.description"}]}},{"prefix":"/admin/demo/tenant","name":"DemoGoodsEntity","api":[{"method":"post","path":"/noTenant"},{"method":"post","path":"/noUse"},{"method":"post","path":"/use"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/info","name":"DictInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/types"},{"method":"post","path":"/data"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/type","name":"DictTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/monitor/capturetask","name":"PushCaptureTaskEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"鎶撴媿鐘舵��","nullable":false,"defaultValue":"PENDING","dict":["PENDING","SUCCESS","FAILED"],"source":"a.status"},{"propertyName":"captureDate","type":"string","length":"","comment":"浠诲姟鎵ц鏃ユ湡","nullable":true,"source":"a.captureDate"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceSerial","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.deviceSerial"},{"propertyName":"captureTaskId","type":"string","length":"","comment":"鎶撳浘浠诲姟ID(钀ょ煶杩斿洖)","nullable":true,"source":"a.captureTaskId"}]}},{"prefix":"/admin/monitor/ys7","name":"","api":[{"method":"post","path":"/getToken"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/operation/traderecord","name":"OperationTradeRecordEntity","api":[{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"transactionType","type":"string","length":"","comment":"浜ゆ槗绫诲瀷","nullable":true,"source":"a.transactionType"},{"propertyName":"incomeType","type":"string","length":"","comment":"鏀舵敮绫诲瀷","nullable":false,"defaultValue":"鏀跺叆","dict":["鏀跺叆","鏀嚭","鍏朵粬"],"source":"a.incomeType"},{"propertyName":"payMethod","type":"string","length":"","comment":"鏀粯鏂瑰紡","nullable":true,"source":"a.payMethod"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"goodsName","type":"string","length":"","comment":"鍟嗗搧鍚嶇О","nullable":true,"source":"a.goodsName"},{"propertyName":"opponent","type":"string","length":"","comment":"浜ゆ槗瀵规柟","nullable":true,"source":"a.opponent"}]}},{"prefix":"/admin/operation/wastesale","name":"OperationWastesaleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"閮ㄩ棬ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/plugin/info","name":"PluginInfoEntity","api":[{"method":"post","path":"/install"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/auditlog","name":"PushAuditlogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"瀹㈡埛绔疘D","nullable":false,"source":"a.deviceNo"},{"propertyName":"pushType","type":"string","length":"","comment":"鎺ㄩ�佺被鍨�","nullable":false,"defaultValue":"weight","dict":["weight","health_gps","vehicle_gps","driver_anomaly","others"],"source":"a.pushType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"errorMessage","type":"text","length":"","comment":"閿欒杩斿洖淇℃伅","nullable":true,"source":"a.errorMessage"}]}},{"prefix":"/admin/push/cameragps","name":"PushCameraGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"瀹氫綅绮惧害","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.sn"}]}},{"prefix":"/admin/push/devicealarm","name":"PushDevicealarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"devSerial","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.devSerial"},{"propertyName":"departmentName","type":"string","length":"","comment":"閮ㄩ棬鍚嶇О","nullable":false,"source":"c.name"}]}},{"prefix":"/admin/push/deviceonoff","name":"PushDeviceOnoffEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceId","type":"string","length":"","comment":"璁惧ID","nullable":false,"source":"a.deviceId"},{"propertyName":"subSerial","type":"string","length":"","comment":"瀛愬簭鍒楀彿","nullable":true,"source":"a.subSerial"},{"propertyName":"deviceName","type":"string","length":"","comment":"璁惧鍚嶇О","nullable":true,"source":"a.deviceName"}]}},{"prefix":"/admin/push/siteweight","name":"PushSiteweightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"璁惧鍙�","nullable":false,"source":"a.deviceNo"},{"propertyName":"siteType","type":"string","length":"","comment":"绔欑偣绫诲瀷","nullable":false,"defaultValue":"鏀堕泦鐐�","dict":"sitetype","source":"d.siteType"}],"fieldLike":[{"propertyName":"deviceNo","type":"string","length":"","comment":"璁惧鍙�","nullable":false,"source":"a.deviceNo"}],"keyWordLikeFields":[]}},{"prefix":"/admin/push/vehiclegps","name":"PushVehicleGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"瀹氫綅绮惧害","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.sn"},{"propertyName":"vehicleNo","type":"string","length":"","comment":"杞︾墝鍙�","nullable":true,"source":"a.vehicleNo"}]}},{"prefix":"/admin/push/weight","name":"PushWeightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"璁惧鍙�","nullable":false,"source":"a.deviceNo"},{"propertyName":"garbageType","type":"string","length":"","comment":"鍨冨溇绫诲瀷","nullable":false,"source":"a.garbageType"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/recycle/data","name":"RecycleDataEntity","api":[{"method":"post","path":"/restore"},{"method":"get","path":"/info"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"userName","type":"string","length":"","comment":"濮撳悕","nullable":true,"source":"b.name"},{"propertyName":"url","type":"string","length":"","comment":"璇锋眰鐨勬帴鍙�","nullable":true,"source":"a.url"}]}},{"prefix":"/admin/report/dailydepartment","name":"ReportDailyDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"鏃ユ湡","nullable":false,"source":"a.date"},{"propertyName":"departmentId","type":"number","length":"","comment":"閮ㄩ棬ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"departmentName","type":"string","length":"","comment":"閮ㄩ棬鍚嶇О","nullable":false,"source":"a.departmentName"}]}},{"prefix":"/admin/report/dailysite","name":"ReportDailysiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"鏃ユ湡","nullable":false,"source":"a.date"},{"propertyName":"siteId","type":"number","length":"","comment":"绔欑偣ID","nullable":false,"source":"a.siteId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"siteName","type":"string","length":"","comment":"绔欑偣鍚嶇О","nullable":false,"source":"a.siteName"}]}},{"prefix":"/admin/report/dailyvehicle","name":"ReportDailyVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"鏃ユ湡","nullable":false,"source":"a.date"},{"propertyName":"vehicleNo","type":"string","length":"32","comment":"杞︾墝鍙�","nullable":false,"source":"a.vehicleNo"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"vehicleNo","type":"string","length":"32","comment":"杞︾墝鍙�","nullable":false,"source":"a.vehicleNo"}]}},{"prefix":"/admin/report/joblog","name":"ReportJoblogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataDate","type":"date","length":"","comment":"鏁版嵁鐩爣鏃ユ湡","nullable":false,"source":"a.dataDate"},{"propertyName":"status","type":"enum","length":"","comment":"鐘舵��: 鏈紑濮�, 杩愯涓�, 鎴愬姛, 澶辫触","nullable":false,"defaultValue":"INIT","source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"jobName","type":"string","length":"","comment":"浠诲姟绫诲瀷: SITE_DAILY(绔欑偣鏃ユ眹鎬�), DEPT_DAILY(閮ㄩ棬鏃ユ眹鎬�)","nullable":false,"source":"a.jobName"}]}},{"prefix":"/admin/space/info","name":"SpaceInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"type","type":"string","length":"","comment":"绫诲瀷","nullable":false,"source":"a.type"},{"propertyName":"classifyId","type":"number","length":"","comment":"鍒嗙被ID","nullable":true,"source":"a.classifyId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/space/type","name":"SpaceTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/task/info","name":"TaskInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/start"},{"method":"post","path":"/once"},{"method":"post","path":"/stop"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"get","path":"/log"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-鍋滄 1-杩愯","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"鐘舵�� 0-绯荤粺 1-鐢ㄦ埛","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/address","name":"UserAddressEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/info","name":"UserInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":1,"dict":["绂佺敤","姝e父","宸叉敞閿�"],"source":"a.status"},{"propertyName":"gender","type":"number","length":"","comment":"鎬у埆","nullable":false,"defaultValue":0,"dict":["鏈煡","鐢�","濂�"],"source":"a.gender"},{"propertyName":"loginType","type":"number","length":"","comment":"鐧诲綍鏂瑰紡","nullable":false,"defaultValue":0,"dict":["灏忕▼搴�","鍏紬鍙�","H5"],"source":"a.loginType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"a.nickName"},{"propertyName":"phone","type":"string","length":"","comment":"鎵嬫満鍙�","nullable":true,"source":"a.phone"}]}}]
\ No newline at end of file
+[{"prefix":"/admin/app/complain","name":"AppComplainEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-鏈鐞� 1-宸插鐞�","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"绫诲瀷","nullable":false,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"contact","type":"string","length":"","comment":"鑱旂郴鏂瑰紡","nullable":false,"source":"a.contact"},{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"b.nickName"},{"propertyName":"handlerName","type":"string","length":"","comment":"濮撳悕","nullable":true,"source":"c.name"}]}},{"prefix":"/admin/app/feedback","name":"AppFeedbackEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-鏈鐞� 1-宸插鐞�","nullable":false,"defaultValue":0,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"contact","type":"string","length":"","comment":"鑱旂郴鏂瑰紡","nullable":false,"source":"a.contact"},{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"b.nickName"},{"propertyName":"handlerName","type":"string","length":"","comment":"濮撳悕","nullable":true,"source":"c.name"}]}},{"prefix":"/admin/app/goods","name":"AppGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-绂佺敤 1-鍚敤","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"绫诲瀷 0-澶� 1-鏈� 2-骞� 3-姘镐箙","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"鏍囬","nullable":false,"source":"a.title"}]}},{"prefix":"/admin/app/version","name":"AppVersionEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-绂佺敤 1-鍚敤","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"绫诲瀷","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"version","type":"string","length":"","comment":"鐗堟湰鍙�","nullable":false,"source":"a.version"}]}},{"prefix":"/admin/base/coding","name":"","api":[{"method":"get","path":"/getModuleTree"},{"method":"post","path":"/createCode"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/comm","name":"","api":[{"method":"post","path":"/personUpdate"},{"method":"get","path":"/uploadMode"},{"method":"get","path":"/permmenu"},{"method":"get","path":"/program"},{"method":"get","path":"/person"},{"method":"post","path":"/upload"},{"method":"post","path":"/logout"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/open","name":"","api":[{"method":"get","path":"/refreshToken"},{"method":"get","path":"/captcha"},{"method":"post","path":"/login"},{"method":"get","path":"/html"},{"method":"get","path":"/eps"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/department","name":"BaseSysDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/order"},{"method":"post","path":"/list"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/log","name":"BaseSysLogEntity","api":[{"method":"post","path":"/setKeep"},{"method":"get","path":"/getKeep"},{"method":"post","path":"/clear"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"濮撳悕","nullable":true,"source":"b.name"},{"propertyName":"action","type":"string","length":"","comment":"琛屼负","nullable":false,"source":"a.action"},{"propertyName":"ip","type":"string","length":"","comment":"ip","nullable":true,"source":"a.ip"}]}},{"prefix":"/admin/base/sys/menu","name":"BaseSysMenuEntity","api":[{"method":"post","path":"/create"},{"method":"post","path":"/export"},{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/parse"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/param","name":"BaseSysParamEntity","api":[{"method":"get","path":"/stringbykey"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/html"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataType","type":"number","length":"","comment":"鏁版嵁绫诲瀷 0-瀛楃涓� 1-瀵屾枃鏈� 2-鏂囦欢 ","nullable":false,"defaultValue":0,"source":"a.dataType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"keyName","type":"string","length":"","comment":"閿�","nullable":false,"source":"a.keyName"}]}},{"prefix":"/admin/base/sys/role","name":"BaseSysRoleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"label","type":"string","length":"50","comment":"瑙掕壊鏍囩","nullable":true,"source":"a.label"}]}},{"prefix":"/admin/base/sys/user","name":"BaseSysUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/move"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/buyer","name":"BasicdataBuyerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"閮ㄩ棬ID","nullable":true,"source":"a.departmentId"},{"propertyName":"name","type":"string","length":"200","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"contact","type":"string","length":"50","comment":"鑱旂郴浜�","nullable":true,"source":"a.contact"}],"fieldLike":[{"propertyName":"name","type":"string","length":"200","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"address","type":"string","length":"255","comment":"鍦板潃","nullable":true,"source":"a.address"}],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/driver","name":"BasicdataDriverEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"鎵�灞炲崟浣�","nullable":true,"source":"a.departmentId"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["婵�娲�","绂佺敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"64","comment":"韬唤璇佸彿","nullable":false,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"鎵嬫満鍙�","nullable":true,"source":"a.phone"},{"propertyName":"licenseNo","type":"string","length":"64","comment":"椹鹃┒璇佸彿","nullable":true,"source":"a.licenseNo"}]}},{"prefix":"/admin/basicdata/iot","name":"BasicdataIotEntity","api":[{"method":"post","path":"/getYsDevices"},{"method":"post","path":"/getSitelist"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"iotTypeCode","type":"string","length":"","comment":"缁堢绫诲瀷","nullable":false,"source":"a.iotTypeCode"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"iotName","type":"string","length":"","comment":"缁堢鍚嶇О","nullable":false,"source":"a.iotName"},{"propertyName":"iotCode","type":"string","length":"","comment":"缁堢缂栫爜","nullable":false,"source":"a.iotCode"}]}},{"prefix":"/admin/basicdata/site","name":"BasicdataSiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/sorter","name":"BasicdataSorterEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["鍦ㄨ亴","绂昏亴","绂佺敤"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"鎵�灞炲崟浣�","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessName","type":"string","length":"64","comment":"濮撳悕","nullable":false,"source":"a.businessName"},{"propertyName":"businessId","type":"string","length":"32","comment":"韬唤璇佸彿","nullable":true,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"鎵嬫満鍙�","nullable":false,"source":"a.phone"}]}},{"prefix":"/admin/basicdata/vehicle","name":"BasicdataVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"vehicleType","type":"string","length":"","comment":"杞﹀瀷","nullable":false,"defaultValue":"鍘㈠紡璐ц溅","dict":"vehicletype","source":"a.vehicleType"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["鍚敤","绂佺敤"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"鎵�灞炲崟浣�","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"32","comment":"杞︾墝鍙�","nullable":false,"source":"a.businessId"},{"propertyName":"defaultDriver","type":"bigint","length":"","comment":"榛樿鍙告満","nullable":true,"source":"a.defaultDriver"}]}},{"prefix":"/admin/basicdata/wastetype","name":"BasicdataWastetypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"isRecyclable","type":"number","length":"","comment":"鏄惁鍙洖鏀�","nullable":false,"defaultValue":0,"dict":["鍚�","鏄�"],"source":"a.isRecyclable"},{"propertyName":"status","type":"number","length":"","comment":"鏄惁鍚敤","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"},{"propertyName":"code","type":"string","length":"","comment":"浠g爜","nullable":false,"source":"a.code"}]}},{"prefix":"/admin/count/home","name":"","api":[{"method":"post","path":"/goodsCategory"},{"method":"post","path":"/orderSummary"},{"method":"post","path":"/userSummary"},{"method":"post","path":"/orderChart"},{"method":"post","path":"/userChart"},{"method":"post","path":"/goodsRank"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/cs/msg","name":"CsMsgEntity","api":[{"method":"get","path":"/unreadCount"},{"method":"post","path":"/read"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/cs/session","name":"CsSessionEntity","api":[{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/demo/goods","name":"DemoGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[{"propertyName":"title","type":"string","length":"50","comment":"鏍囬","nullable":false,"source":"a.title"}],"keyWordLikeFields":[{"propertyName":"description","type":"string","length":"","comment":"鎻忚堪","nullable":true,"source":"a.description"}]}},{"prefix":"/admin/demo/tenant","name":"DemoGoodsEntity","api":[{"method":"post","path":"/noTenant"},{"method":"post","path":"/noUse"},{"method":"post","path":"/use"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/info","name":"DictInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/types"},{"method":"post","path":"/data"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/type","name":"DictTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/goods/comment","name":"GoodsCommentEntity","api":[{"method":"post","path":"/page"}],"search":{"fieldEq":[{"propertyName":"goodsId","type":"number","length":"","comment":"鍟嗗搧ID","nullable":false,"source":"a.goodsId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"content","type":"string","length":"","comment":"鍐呭","nullable":false,"source":"a.content"},{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/goods/info","name":"GoodsInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-涓嬫灦 1-涓婃灦","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"typeId","type":"number","length":"","comment":"绫诲瀷ID","nullable":false,"source":"a.typeId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"鏍囬","nullable":false,"source":"a.title"},{"propertyName":"subTitle","type":"string","length":"","comment":"鍓爣棰�","nullable":true,"source":"a.subTitle"}]}},{"prefix":"/admin/goods/searchKeyword","name":"GoodsSearchKeywordEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"}]}},{"prefix":"/admin/goods/spec","name":"GoodsSpecEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/goods/type","name":"GoodsTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"parentId","type":"number","length":"","comment":"鐖禝D","nullable":true,"source":"a.parentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"鍚嶇О","nullable":false,"source":"a.name"}]}},{"prefix":"/admin/info/banner","name":"InfoBannerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 1:鍚敤 2:绂佺敤","nullable":false,"defaultValue":1,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/market/coupon/info","name":"MarketCouponInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-绂佺敤 1-鍚敤","nullable":false,"defaultValue":0,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"鏍囬","nullable":false,"source":"a.title"}]}},{"prefix":"/admin/market/coupon/user","name":"MarketCouponUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-鏈娇鐢� 1-宸蹭娇鐢�","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"couponId","type":"number","length":"","comment":"浼樻儬鍒窱D","nullable":false,"source":"a.couponId"},{"propertyName":"userId","type":"number","length":"","comment":"鐢ㄦ埛ID","nullable":false,"source":"a.userId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/monitor/capturetask","name":"PushCaptureTaskEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"鎶撴媿鐘舵��","nullable":false,"defaultValue":"PENDING","dict":["PENDING","SUCCESS","FAILED"],"source":"a.status"},{"propertyName":"captureDate","type":"string","length":"","comment":"浠诲姟鎵ц鏃ユ湡","nullable":true,"source":"a.captureDate"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceSerial","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.deviceSerial"},{"propertyName":"captureTaskId","type":"string","length":"","comment":"鎶撳浘浠诲姟ID(钀ょ煶杩斿洖)","nullable":true,"source":"a.captureTaskId"}]}},{"prefix":"/admin/monitor/ys7","name":"","api":[{"method":"post","path":"/getToken"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/operation/traderecord","name":"OperationTradeRecordEntity","api":[{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"transactionType","type":"string","length":"","comment":"浜ゆ槗绫诲瀷","nullable":true,"source":"a.transactionType"},{"propertyName":"incomeType","type":"string","length":"","comment":"鏀舵敮绫诲瀷","nullable":false,"defaultValue":"鏀跺叆","dict":["鏀跺叆","鏀嚭","鍏朵粬"],"source":"a.incomeType"},{"propertyName":"payMethod","type":"string","length":"","comment":"鏀粯鏂瑰紡","nullable":true,"source":"a.payMethod"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"goodsName","type":"string","length":"","comment":"鍟嗗搧鍚嶇О","nullable":true,"source":"a.goodsName"},{"propertyName":"opponent","type":"string","length":"","comment":"浜ゆ槗瀵规柟","nullable":true,"source":"a.opponent"}]}},{"prefix":"/admin/operation/wastesale","name":"OperationWastesaleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"閮ㄩ棬ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/order/info","name":"OrderInfoEntity","api":[{"method":"post","path":"/refundHandle"},{"method":"get","path":"/logistics"},{"method":"post","path":"/deliver"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"}],"search":{"fieldEq":[{"propertyName":"status","type":"tinyint","length":"","comment":"鐘舵�� 0-寰呬粯娆� 1-寰呭彂璐� 2-寰呮敹璐� 3-寰呰瘎浠� 4-浜ゆ槗瀹屾垚 5-閫�娆句腑 6-宸查��娆� 7-宸插叧闂�","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"payType","type":"number","length":"","comment":"鏀粯鏂瑰紡 0-寰呮敮浠� 1-寰俊 2-鏀粯瀹�","nullable":false,"defaultValue":0,"source":"a.payType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"鏍囬","nullable":true,"source":"a.title"},{"propertyName":"orderNum","type":"string","length":"","comment":"璁㈠崟鍙�","nullable":true,"source":"a.orderNum"},{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/plugin/info","name":"PluginInfoEntity","api":[{"method":"post","path":"/install"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/auditlog","name":"PushAuditlogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"瀹㈡埛绔疘D","nullable":false,"source":"a.deviceNo"},{"propertyName":"pushType","type":"string","length":"","comment":"鎺ㄩ�佺被鍨�","nullable":false,"defaultValue":"weight","dict":["weight","health_gps","vehicle_gps","driver_anomaly","others"],"source":"a.pushType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"errorMessage","type":"text","length":"","comment":"閿欒杩斿洖淇℃伅","nullable":true,"source":"a.errorMessage"}]}},{"prefix":"/admin/push/cameragps","name":"PushCameraGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"瀹氫綅绮惧害","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.sn"}]}},{"prefix":"/admin/push/devicealarm","name":"PushDevicealarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"devSerial","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.devSerial"},{"propertyName":"departmentName","type":"string","length":"","comment":"閮ㄩ棬鍚嶇О","nullable":false,"source":"c.name"}]}},{"prefix":"/admin/push/deviceonoff","name":"PushDeviceOnoffEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceId","type":"string","length":"","comment":"璁惧ID","nullable":false,"source":"a.deviceId"},{"propertyName":"subSerial","type":"string","length":"","comment":"瀛愬簭鍒楀彿","nullable":true,"source":"a.subSerial"},{"propertyName":"deviceName","type":"string","length":"","comment":"璁惧鍚嶇О","nullable":true,"source":"a.deviceName"}]}},{"prefix":"/admin/push/siteweight","name":"PushSiteweightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"璁惧鍙�","nullable":false,"source":"a.deviceNo"},{"propertyName":"siteType","type":"string","length":"","comment":"绔欑偣绫诲瀷","nullable":false,"defaultValue":"鏀堕泦鐐�","dict":"sitetype","source":"d.siteType"}],"fieldLike":[{"propertyName":"deviceNo","type":"string","length":"","comment":"璁惧鍙�","nullable":false,"source":"a.deviceNo"}],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorteralarm","name":"PushSorterAlarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"鎵�灞炲崟浣�","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorterattendance","name":"PushSorterAttendanceEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"鎵�灞炲崟浣�","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sortergps","name":"PushSorterGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"鎵�灞炲崟浣�","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorterhealth","name":"PushSorterHealthEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"鎵�灞炲崟浣�","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/vehiclegps","name":"PushVehicleGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"瀹氫綅绮惧害","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"璁惧搴忓垪鍙�","nullable":false,"source":"a.sn"},{"propertyName":"vehicleNo","type":"string","length":"","comment":"杞︾墝鍙�","nullable":true,"source":"a.vehicleNo"}]}},{"prefix":"/admin/push/weight","name":"PushWeightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"璁惧鍙�","nullable":false,"source":"a.deviceNo"},{"propertyName":"garbageType","type":"string","length":"","comment":"鍨冨溇绫诲瀷","nullable":false,"source":"a.garbageType"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/recycle/data","name":"RecycleDataEntity","api":[{"method":"post","path":"/restore"},{"method":"get","path":"/info"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"userName","type":"string","length":"","comment":"濮撳悕","nullable":true,"source":"b.name"},{"propertyName":"url","type":"string","length":"","comment":"璇锋眰鐨勬帴鍙�","nullable":true,"source":"a.url"}]}},{"prefix":"/admin/report/dailydepartment","name":"ReportDailyDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"鏃ユ湡","nullable":false,"source":"a.date"},{"propertyName":"departmentId","type":"number","length":"","comment":"閮ㄩ棬ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"departmentName","type":"string","length":"","comment":"閮ㄩ棬鍚嶇О","nullable":false,"source":"a.departmentName"}]}},{"prefix":"/admin/report/dailysite","name":"ReportDailysiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"鏃ユ湡","nullable":false,"source":"a.date"},{"propertyName":"siteId","type":"number","length":"","comment":"绔欑偣ID","nullable":false,"source":"a.siteId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"siteName","type":"string","length":"","comment":"绔欑偣鍚嶇О","nullable":false,"source":"a.siteName"}]}},{"prefix":"/admin/report/dailyvehicle","name":"ReportDailyVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"鏃ユ湡","nullable":false,"source":"a.date"},{"propertyName":"vehicleNo","type":"string","length":"32","comment":"杞︾墝鍙�","nullable":false,"source":"a.vehicleNo"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"vehicleNo","type":"string","length":"32","comment":"杞︾墝鍙�","nullable":false,"source":"a.vehicleNo"}]}},{"prefix":"/admin/report/joblog","name":"ReportJoblogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataDate","type":"date","length":"","comment":"鏁版嵁鐩爣鏃ユ湡","nullable":false,"source":"a.dataDate"},{"propertyName":"status","type":"enum","length":"","comment":"鐘舵��: 鏈紑濮�, 杩愯涓�, 鎴愬姛, 澶辫触","nullable":false,"defaultValue":"INIT","source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"jobName","type":"string","length":"","comment":"浠诲姟绫诲瀷: SITE_DAILY(绔欑偣鏃ユ眹鎬�), DEPT_DAILY(閮ㄩ棬鏃ユ眹鎬�)","nullable":false,"source":"a.jobName"}]}},{"prefix":"/admin/shop/recycleappointment","name":"RecycleAppointmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"鐘舵��","nullable":false,"defaultValue":"鏈煡","dict":["寰呭鏍�","寰呮帴鍗�","宸叉帴鍗�","涓婇棬涓�","宸插畬鎴�","宸插彇娑�","鏈煡"],"source":"a.status"},{"propertyName":"departmentId","type":"number","length":"","comment":"瀛︽牎ID","nullable":true,"source":"a.departmentId"},{"propertyName":"sorterId","type":"string","length":"","comment":"鍒嗘嫞鍛業D","nullable":true,"defaultValue":0,"source":"a.sorterId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"appointmentNo","type":"string","length":"","comment":"棰勭害缂栧彿","nullable":false,"source":"a.appointmentNo"},{"propertyName":"contactName","type":"string","length":"","comment":"鑱旂郴浜�","nullable":false,"source":"a.contactName"},{"propertyName":"contactPhone","type":"string","length":"","comment":"鑱旂郴鐢佃瘽","nullable":false,"source":"a.contactPhone"}]}},{"prefix":"/admin/shop/recycleappointmentlog","name":"RecycleAppointmentLogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"appointmentId","type":"number","length":"","comment":"棰勭害ID","nullable":false,"source":"a.appointmentId"},{"propertyName":"action","type":"string","length":"","comment":"鎿嶄綔绫诲瀷","nullable":false,"dict":["鍒涘缓棰勭害","瀹℃牳閫氳繃","鍒嗛厤浜哄憳","鎺ュ崟","鍒拌揪","寮�濮嬪洖鏀�","瀹屾垚","鍙栨秷","鏀规湡"],"source":"a.action"},{"propertyName":"operatorType","type":"string","length":"","comment":"鎿嶄綔浜虹被鍨�","nullable":false,"source":"a.operatorType"},{"propertyName":"operatorId","type":"number","length":"","comment":"鎿嶄綔浜篒D","nullable":false,"source":"a.operatorId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleitem","name":"RecycleItemEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"itemId","type":"string","length":"","comment":"鍒嗙被ID","nullable":false,"source":"a.itemId"},{"propertyName":"category","type":"string","length":"","comment":"搴熷搧绫诲埆缂栫爜","nullable":false,"source":"a.category"},{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":0,"dict":["鍚敤","绂佺敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleorder","name":"RecycleOrderEntity","api":[{"method":"post","path":"/saveWithSummary"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"orderType","type":"string","length":"","comment":"璁㈠崟绫诲瀷","nullable":false,"defaultValue":"鐜板満","dict":["鐜板満","棰勭害","澶у睆","娲诲姩"],"source":"a.orderType"},{"propertyName":"status","type":"string","length":"","comment":"鐘舵��","nullable":false,"defaultValue":"宸插畬鎴�","dict":["寰呭鐞�","杩涜涓�","宸插畬鎴�","宸插彇娑�"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"orderNo","type":"string","length":"","comment":"璁㈠崟缂栧彿","nullable":false,"source":"a.orderNo"}]}},{"prefix":"/admin/shop/recycleorderitem","name":"RecycleOrderItemEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"orderNo","type":"string","length":"","comment":"璁㈠崟NO","nullable":false,"source":"a.orderNo"},{"propertyName":"itemId","type":"string","length":"","comment":"鍨冨溇鍒嗙被ID","nullable":false,"source":"a.itemId"}],"fieldLike":[{"propertyName":"itemName","type":"string","length":"","comment":"鍨冨溇鍒嗙被鍚嶇О","nullable":false,"source":"a.itemName"}],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/transaction","name":"RecycleTransactionEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"remark","type":"string","length":"","comment":"澶囨敞","nullable":true,"source":"a.remark"}]}},{"prefix":"/admin/space/info","name":"SpaceInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"type","type":"string","length":"","comment":"绫诲瀷","nullable":false,"source":"a.type"},{"propertyName":"classifyId","type":"number","length":"","comment":"鍒嗙被ID","nullable":true,"source":"a.classifyId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/space/type","name":"SpaceTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/task/info","name":"TaskInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/start"},{"method":"post","path":"/once"},{"method":"post","path":"/stop"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"get","path":"/log"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵�� 0-鍋滄 1-杩愯","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"鐘舵�� 0-绯荤粺 1-鐢ㄦ埛","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/address","name":"UserAddressEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/info","name":"UserInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"鐘舵��","nullable":false,"defaultValue":1,"dict":["绂佺敤","姝e父","宸叉敞閿�"],"source":"a.status"},{"propertyName":"gender","type":"number","length":"","comment":"鎬у埆","nullable":false,"defaultValue":0,"dict":["鏈煡","鐢�","濂�"],"source":"a.gender"},{"propertyName":"loginType","type":"number","length":"","comment":"鐧诲綍鏂瑰紡","nullable":false,"defaultValue":0,"dict":["灏忕▼搴�","鍏紬鍙�","H5"],"source":"a.loginType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"鏄电О","nullable":true,"source":"a.nickName"},{"propertyName":"phone","type":"string","length":"","comment":"鎵嬫満鍙�","nullable":true,"source":"a.phone"}]}}]
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..d109819
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,9594 @@
+{
+	"name": "cool-admin-vue",
+	"version": "8.0.0",
+	"lockfileVersion": 3,
+	"requires": true,
+	"packages": {
+		"": {
+			"name": "cool-admin-vue",
+			"version": "8.0.0",
+			"dependencies": {
+				"@cool-vue/crud": "^8.0.6",
+				"@element-plus/icons-vue": "^2.3.1",
+				"@vueuse/core": "^12.5.0",
+				"@wangeditor/editor": "^5.1.23",
+				"@wangeditor/editor-for-vue": "^5.1.12",
+				"axios": "^1.7.9",
+				"chardet": "^2.0.0",
+				"core-js": "^3.40.0",
+				"dayjs": "^1.11.13",
+				"echarts": "^5.6.0",
+				"element-plus": "2.10.2",
+				"ezuikit-js": "^9.0.15",
+				"file-saver": "^2.0.5",
+				"lodash-es": "^4.17.21",
+				"marked": "^14.1.3",
+				"mitt": "^3.0.1",
+				"nprogress": "^0.2.0",
+				"pinia": "^2.3.1",
+				"socket.io-client": "^4.7.2",
+				"store": "^2.0.12",
+				"vue": "^3.5.13",
+				"vue-echarts": "^7.0.3",
+				"vue-i18n": "^11.0.1",
+				"vue-router": "^4.5.0",
+				"vue-tianditu2": "^3.0.1",
+				"vuedraggable": "^4.1.0",
+				"xlsx": "^0.18.5"
+			},
+			"devDependencies": {
+				"@cool-vue/vite-plugin": "^8.2.2",
+				"@intlify/unplugin-vue-i18n": "^6.0.3",
+				"@rushstack/eslint-patch": "^1.10.5",
+				"@tsconfig/node20": "^20.1.4",
+				"@types/file-saver": "^2.0.7",
+				"@types/lodash-es": "^4.17.12",
+				"@types/mockjs": "^1.0.10",
+				"@types/node": "^20.17.17",
+				"@types/nprogress": "^0.2.3",
+				"@types/store": "^2.0.5",
+				"@vitejs/plugin-vue": "^5.2.1",
+				"@vitejs/plugin-vue-jsx": "^4.1.1",
+				"@vue/compiler-sfc": "^3.5.13",
+				"@vue/eslint-config-prettier": "^10.2.0",
+				"@vue/eslint-config-typescript": "^14.3.0",
+				"@vue/test-utils": "^2.4.6",
+				"@vue/tsconfig": "^0.5.1",
+				"autoprefixer": "^10.4.20",
+				"eslint": "^9.19.0",
+				"eslint-plugin-prettier": "^5.2.3",
+				"eslint-plugin-vue": "^9.32.0",
+				"postcss": "^8.5.1",
+				"prettier": "^3.4.2",
+				"rollup-plugin-visualizer": "^5.14.0",
+				"sass": "1.81.0",
+				"tailwindcss": "^3.4.17",
+				"terser": "^5.36.0",
+				"typescript": "~5.5.4",
+				"vite": "^5.4.14",
+				"vite-plugin-compression": "^0.5.1",
+				"vite-plugin-vue-devtools": "^7.7.1",
+				"vue-tsc": "^2.2.0"
+			}
+		},
+		"node_modules/@alloc/quick-lru": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+			"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/@antfu/utils": {
+			"version": "0.7.10",
+			"resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz",
+			"integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
+			"dev": true,
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/@babel/code-frame": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+			"integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-validator-identifier": "^7.29.7",
+				"js-tokens": "^4.0.0",
+				"picocolors": "^1.1.1"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/compat-data": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+			"integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/core": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+			"integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@babel/code-frame": "^7.29.7",
+				"@babel/generator": "^7.29.7",
+				"@babel/helper-compilation-targets": "^7.29.7",
+				"@babel/helper-module-transforms": "^7.29.7",
+				"@babel/helpers": "^7.29.7",
+				"@babel/parser": "^7.29.7",
+				"@babel/template": "^7.29.7",
+				"@babel/traverse": "^7.29.7",
+				"@babel/types": "^7.29.7",
+				"@jridgewell/remapping": "^2.3.5",
+				"convert-source-map": "^2.0.0",
+				"debug": "^4.1.0",
+				"gensync": "^1.0.0-beta.2",
+				"json5": "^2.2.3",
+				"semver": "^6.3.1"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/babel"
+			}
+		},
+		"node_modules/@babel/core/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"dev": true,
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/@babel/generator": {
+			"version": "7.29.8",
+			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+			"integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/parser": "^7.29.8",
+				"@babel/types": "^7.29.8",
+				"@jridgewell/gen-mapping": "^0.3.12",
+				"@jridgewell/trace-mapping": "^0.3.28",
+				"jsesc": "^3.0.2"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-annotate-as-pure": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz",
+			"integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-compilation-targets": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+			"integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/compat-data": "^7.29.7",
+				"@babel/helper-validator-option": "^7.29.7",
+				"browserslist": "^4.24.0",
+				"lru-cache": "^5.1.1",
+				"semver": "^6.3.1"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"dev": true,
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/@babel/helper-create-class-features-plugin": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz",
+			"integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-annotate-as-pure": "^7.29.7",
+				"@babel/helper-member-expression-to-functions": "^7.29.7",
+				"@babel/helper-optimise-call-expression": "^7.29.7",
+				"@babel/helper-replace-supers": "^7.29.7",
+				"@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+				"@babel/traverse": "^7.29.7",
+				"semver": "^6.3.1"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0"
+			}
+		},
+		"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"dev": true,
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/@babel/helper-globals": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+			"integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-member-expression-to-functions": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz",
+			"integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/traverse": "^7.29.7",
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-module-imports": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+			"integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/traverse": "^7.29.7",
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-module-transforms": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+			"integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-module-imports": "^7.29.7",
+				"@babel/helper-validator-identifier": "^7.29.7",
+				"@babel/traverse": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0"
+			}
+		},
+		"node_modules/@babel/helper-optimise-call-expression": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz",
+			"integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-plugin-utils": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+			"integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-replace-supers": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz",
+			"integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-member-expression-to-functions": "^7.29.7",
+				"@babel/helper-optimise-call-expression": "^7.29.7",
+				"@babel/traverse": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0"
+			}
+		},
+		"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz",
+			"integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/traverse": "^7.29.7",
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-string-parser": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+			"integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-validator-identifier": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+			"integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helper-validator-option": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+			"integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/helpers": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+			"integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/template": "^7.29.7",
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/parser": {
+			"version": "7.29.8",
+			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+			"integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/types": "^7.29.8"
+			},
+			"bin": {
+				"parser": "bin/babel-parser.js"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/@babel/plugin-proposal-decorators": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.7.tgz",
+			"integrity": "sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-create-class-features-plugin": "^7.29.7",
+				"@babel/helper-plugin-utils": "^7.29.7",
+				"@babel/plugin-syntax-decorators": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-syntax-decorators": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.29.7.tgz",
+			"integrity": "sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-plugin-utils": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-syntax-import-attributes": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz",
+			"integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-plugin-utils": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-syntax-import-meta": {
+			"version": "7.10.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+			"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-plugin-utils": "^7.10.4"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-syntax-jsx": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz",
+			"integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-plugin-utils": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-syntax-typescript": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz",
+			"integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-plugin-utils": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-transform-typescript": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz",
+			"integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-annotate-as-pure": "^7.29.7",
+				"@babel/helper-create-class-features-plugin": "^7.29.7",
+				"@babel/helper-plugin-utils": "^7.29.7",
+				"@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+				"@babel/plugin-syntax-typescript": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/runtime": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+			"integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/template": {
+			"version": "7.29.7",
+			"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+			"integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/code-frame": "^7.29.7",
+				"@babel/parser": "^7.29.7",
+				"@babel/types": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/traverse": {
+			"version": "7.29.8",
+			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
+			"integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/code-frame": "^7.29.7",
+				"@babel/generator": "^7.29.8",
+				"@babel/helper-globals": "^7.29.7",
+				"@babel/parser": "^7.29.8",
+				"@babel/template": "^7.29.7",
+				"@babel/types": "^7.29.8",
+				"debug": "^4.3.1"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/types": {
+			"version": "7.29.8",
+			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+			"integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-string-parser": "^7.29.7",
+				"@babel/helper-validator-identifier": "^7.29.7"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@cool-vue/crud": {
+			"version": "8.0.6",
+			"resolved": "https://registry.npmjs.org/@cool-vue/crud/-/crud-8.0.6.tgz",
+			"integrity": "sha512-be6nKaUhdRmr2OQD6kJS6C+d1QTf6ibkp5fRSqs3x+lDuZOnyCh4/f/xg6ShKh2vtf+Bidwc2ftuxyEWx3A8SA==",
+			"dependencies": {
+				"@vue/runtime-core": "^3.5.13",
+				"element-plus": "^2.10.4",
+				"lodash-es": "^4.17.21",
+				"vue": "^3.5.13"
+			}
+		},
+		"node_modules/@cool-vue/crud/node_modules/@ctrl/tinycolor": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz",
+			"integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/@cool-vue/crud/node_modules/@vueuse/core": {
+			"version": "14.3.0",
+			"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz",
+			"integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/web-bluetooth": "^0.0.21",
+				"@vueuse/metadata": "14.3.0",
+				"@vueuse/shared": "14.3.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"vue": "^3.5.0"
+			}
+		},
+		"node_modules/@cool-vue/crud/node_modules/@vueuse/metadata": {
+			"version": "14.3.0",
+			"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz",
+			"integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/@cool-vue/crud/node_modules/@vueuse/shared": {
+			"version": "14.3.0",
+			"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz",
+			"integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"vue": "^3.5.0"
+			}
+		},
+		"node_modules/@cool-vue/crud/node_modules/element-plus": {
+			"version": "2.14.4",
+			"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.4.tgz",
+			"integrity": "sha512-vMKR9tFcLeNrJgFXA3zhUn6YuRKUQW9d0btakBR8U1Iq8MfzkjMOGcgs5de2VgiLldHt69brmuBHpxc3bK4ZgQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@ctrl/tinycolor": "^4.2.0",
+				"@element-plus/icons-vue": "^2.3.2",
+				"@floating-ui/dom": "^1.8.0",
+				"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8",
+				"@types/lodash": "^4.17.24",
+				"@types/lodash-es": "^4.17.12",
+				"@vueuse/core": "14.3.0",
+				"async-validator": "^4.2.5",
+				"dayjs": "^1.11.20",
+				"lodash": "^4.18.1",
+				"lodash-es": "^4.18.1",
+				"lodash-unified": "^1.0.3",
+				"memoize-one": "^6.0.0",
+				"normalize-wheel-es": "^1.2.0",
+				"vue-component-type-helpers": "^3.3.9"
+			},
+			"peerDependencies": {
+				"vue": "^3.3.7"
+			}
+		},
+		"node_modules/@cool-vue/vite-plugin": {
+			"version": "8.2.20",
+			"resolved": "https://registry.npmjs.org/@cool-vue/vite-plugin/-/vite-plugin-8.2.20.tgz",
+			"integrity": "sha512-QW3kJGih31/mlpf1bnP1cE7YB2ua8w6KWa7kxfTibSc6cWejEAmqjbVl0pWuuXjCi5hgxLiFofIVt/FOjLhz1w==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"@vue/compiler-sfc": "^3.5.13",
+				"axios": "^1.6.8",
+				"glob": "^10.3.12",
+				"lodash": "^4.17.21",
+				"magic-string": "^0.30.17",
+				"prettier": "^3.4.2",
+				"svgo": "^3.3.2"
+			}
+		},
+		"node_modules/@ctrl/tinycolor": {
+			"version": "3.6.1",
+			"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+			"integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/@element-plus/icons-vue": {
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
+			"integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
+			"license": "MIT",
+			"peerDependencies": {
+				"vue": "^3.2.0"
+			}
+		},
+		"node_modules/@esbuild/aix-ppc64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+			"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+			"cpu": [
+				"ppc64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"aix"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/android-arm": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+			"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/android-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+			"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/android-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+			"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/darwin-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+			"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/darwin-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+			"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/freebsd-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+			"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/freebsd-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+			"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-arm": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+			"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+			"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-ia32": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+			"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+			"cpu": [
+				"ia32"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-loong64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+			"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+			"cpu": [
+				"loong64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-mips64el": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+			"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+			"cpu": [
+				"mips64el"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-ppc64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+			"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+			"cpu": [
+				"ppc64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-riscv64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+			"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+			"cpu": [
+				"riscv64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-s390x": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+			"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+			"cpu": [
+				"s390x"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+			"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/netbsd-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+			"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"netbsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/openbsd-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+			"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"openbsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/sunos-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+			"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"sunos"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/win32-arm64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+			"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/win32-ia32": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+			"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+			"cpu": [
+				"ia32"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/win32-x64": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+			"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@eslint-community/eslint-utils": {
+			"version": "4.10.1",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
+			"integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"eslint-visitor-keys": "^3.4.3"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+			}
+		},
+		"node_modules/@eslint-community/regexpp": {
+			"version": "4.12.2",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+			"integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+			}
+		},
+		"node_modules/@eslint/config-array": {
+			"version": "0.21.2",
+			"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+			"integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@eslint/object-schema": "^2.1.7",
+				"debug": "^4.3.1",
+				"minimatch": "^3.1.5"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			}
+		},
+		"node_modules/@eslint/config-array/node_modules/balanced-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@eslint/config-array/node_modules/brace-expansion": {
+			"version": "1.1.18",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
+			"integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0",
+				"concat-map": "0.0.1"
+			}
+		},
+		"node_modules/@eslint/config-array/node_modules/minimatch": {
+			"version": "3.1.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+			"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/@eslint/config-helpers": {
+			"version": "0.4.2",
+			"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+			"integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@eslint/core": "^0.17.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			}
+		},
+		"node_modules/@eslint/core": {
+			"version": "0.17.0",
+			"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+			"integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@types/json-schema": "^7.0.15"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			}
+		},
+		"node_modules/@eslint/eslintrc": {
+			"version": "3.3.6",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz",
+			"integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ajv": "^6.14.0",
+				"debug": "^4.3.2",
+				"espree": "^10.0.1",
+				"globals": "^14.0.0",
+				"ignore": "^5.2.0",
+				"import-fresh": "^3.2.1",
+				"js-yaml": "^4.3.0",
+				"minimatch": "^3.1.5",
+				"strip-json-comments": "^3.1.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@eslint/eslintrc/node_modules/balanced-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+			"version": "1.1.18",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
+			"integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0",
+				"concat-map": "0.0.1"
+			}
+		},
+		"node_modules/@eslint/eslintrc/node_modules/minimatch": {
+			"version": "3.1.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+			"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/@eslint/js": {
+			"version": "9.39.5",
+			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+			"integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://eslint.org/donate"
+			}
+		},
+		"node_modules/@eslint/object-schema": {
+			"version": "2.1.7",
+			"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+			"integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			}
+		},
+		"node_modules/@eslint/plugin-kit": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+			"integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@eslint/core": "^0.17.0",
+				"levn": "^0.4.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			}
+		},
+		"node_modules/@ezuikit/control-aichat": {
+			"version": "0.1.1-beta.1",
+			"resolved": "https://registry.npmjs.org/@ezuikit/control-aichat/-/control-aichat-0.1.1-beta.1.tgz",
+			"integrity": "sha512-vj5u4QnxGIbeVN1kIyDTifV1gFUTd4Pnz5JeAA8OlYexY0FcHCaKNarXDIBFVJwppAxdkrXMW6AuAlURr2lfUw==",
+			"dependencies": {
+				"@ezuikit/utils-i18n": "^2.0.1"
+			}
+		},
+		"node_modules/@ezuikit/player-ezopen": {
+			"version": "9.0.7-beta.4",
+			"resolved": "https://registry.npmjs.org/@ezuikit/player-ezopen/-/player-ezopen-9.0.7-beta.4.tgz",
+			"integrity": "sha512-obr6jinQSmM1qVsveDQ3yC/rWcJnAfQXUkkpre/oLBpwI3TopZ888627FdPO7t7P4G2ixoD5Jx34VPKpL1q5zg==",
+			"license": "MIT",
+			"dependencies": {
+				"@ezuikit/player-plugin-record": "9.1.1-beta.1",
+				"@ezuikit/utils-i18n": "^2.0.1",
+				"@ezuikit/utils-logger": "^2.0.1",
+				"@ezuikit/utils-service": "2.0.0",
+				"@ezuikit/utils-tools": "^2.0.6",
+				"dayjs": "^1.11.10",
+				"deepmerge": "^4.3.1",
+				"eventemitter3": "^5.0.1",
+				"screenfull": "^5.2.0",
+				"ua-parser-js": "1.0.37"
+			}
+		},
+		"node_modules/@ezuikit/player-plugin-record": {
+			"version": "9.1.1-beta.1",
+			"resolved": "https://registry.npmjs.org/@ezuikit/player-plugin-record/-/player-plugin-record-9.1.1-beta.1.tgz",
+			"integrity": "sha512-T76aR7Gdaoo0+b4/mJ3grrWjVglE6po5O1ZY6CcGjJkX73XRoUl9szCB3iy/7ENQwruSgI+U2co29ghpCY5SWw==",
+			"license": "MIT",
+			"dependencies": {
+				"@ezuikit/utils-tools": "^2.0.6"
+			}
+		},
+		"node_modules/@ezuikit/utils-collect": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmjs.org/@ezuikit/utils-collect/-/utils-collect-0.1.1.tgz",
+			"integrity": "sha512-BgEOnTtAq8rQRBAKv5rLXbQLGOnfOZ6NS0QTmiviey80JbMJlxrLiqmjL5lxvkm4JtCcXCtSgPA4tskQKN4eDA==",
+			"license": "MIT"
+		},
+		"node_modules/@ezuikit/utils-i18n": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@ezuikit/utils-i18n/-/utils-i18n-2.0.1.tgz",
+			"integrity": "sha512-846z2bDpCxioTBO3KG8Uw8QUFa6hzquSzmZKWPO6fjT3P4v6zNnXRz+Z3JCPlXnc4eesi03A+JmMAU6m5KI4gg==",
+			"license": "MIT",
+			"dependencies": {
+				"deepmerge": "^4.3.1"
+			}
+		},
+		"node_modules/@ezuikit/utils-logger": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@ezuikit/utils-logger/-/utils-logger-2.0.1.tgz",
+			"integrity": "sha512-AeLLR9ZQJkSJFfCicpkVBcnOE4zyQMp4W4997sTEGyF3k3I8Upkfn4Cye2A44MIphdw6eytKlaJp6H4joSafQw==",
+			"license": "MIT"
+		},
+		"node_modules/@ezuikit/utils-service": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/@ezuikit/utils-service/-/utils-service-2.0.0.tgz",
+			"integrity": "sha512-CBCPMw3uwd/vCh/YS+fZPMJrmg0LmCPO5bVkAon6VxjJJxwpVNcVb15sNbZyGR52JYt3wq7UEhnqHMprHnCSEA==",
+			"license": "MIT",
+			"dependencies": {
+				"@ezuikit/utils-tools": "^2.0.5"
+			}
+		},
+		"node_modules/@ezuikit/utils-tools": {
+			"version": "2.0.6",
+			"resolved": "https://registry.npmjs.org/@ezuikit/utils-tools/-/utils-tools-2.0.6.tgz",
+			"integrity": "sha512-1XUk8IY28FpspjzgbbVEfcsRiwKx9l5ltjOYw9RYh3BK2XAKv2B2N+79RCQ1qfmjLVsHLx2H8xTwSJECSWcnqg==",
+			"license": "MIT"
+		},
+		"node_modules/@floating-ui/core": {
+			"version": "1.8.0",
+			"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz",
+			"integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@floating-ui/utils": "^0.2.12"
+			}
+		},
+		"node_modules/@floating-ui/dom": {
+			"version": "1.8.0",
+			"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz",
+			"integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
+			"license": "MIT",
+			"dependencies": {
+				"@floating-ui/core": "^1.8.0",
+				"@floating-ui/utils": "^0.2.12"
+			}
+		},
+		"node_modules/@floating-ui/utils": {
+			"version": "0.2.12",
+			"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz",
+			"integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
+			"license": "MIT"
+		},
+		"node_modules/@humanfs/core": {
+			"version": "0.19.2",
+			"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+			"integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@humanfs/types": "^0.15.0"
+			},
+			"engines": {
+				"node": ">=18.18.0"
+			}
+		},
+		"node_modules/@humanfs/node": {
+			"version": "0.16.8",
+			"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+			"integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@humanfs/core": "^0.19.2",
+				"@humanfs/types": "^0.15.0",
+				"@humanwhocodes/retry": "^0.4.0"
+			},
+			"engines": {
+				"node": ">=18.18.0"
+			}
+		},
+		"node_modules/@humanfs/types": {
+			"version": "0.15.0",
+			"resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+			"integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=18.18.0"
+			}
+		},
+		"node_modules/@humanwhocodes/module-importer": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+			"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=12.22"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/nzakas"
+			}
+		},
+		"node_modules/@humanwhocodes/retry": {
+			"version": "0.4.3",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+			"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=18.18"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/nzakas"
+			}
+		},
+		"node_modules/@intlify/bundle-utils": {
+			"version": "10.0.1",
+			"resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-10.0.1.tgz",
+			"integrity": "sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/message-compiler": "^11.1.2",
+				"@intlify/shared": "^11.1.2",
+				"acorn": "^8.8.2",
+				"escodegen": "^2.1.0",
+				"estree-walker": "^2.0.2",
+				"jsonc-eslint-parser": "^2.3.0",
+				"mlly": "^1.2.0",
+				"source-map-js": "^1.0.1",
+				"yaml-eslint-parser": "^1.2.2"
+			},
+			"engines": {
+				"node": ">= 18"
+			},
+			"peerDependenciesMeta": {
+				"petite-vue-i18n": {
+					"optional": true
+				},
+				"vue-i18n": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@intlify/core-base": {
+			"version": "11.4.8",
+			"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.4.8.tgz",
+			"integrity": "sha512-A+Q7SKm5oEcy1E/cghqd7n/St4XjTqLhiiyDuieNcMrJcrHlkY5n0jp7Q9dD3txvVHzvsmBVV5M9wD5/s1zfzw==",
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/devtools-types": "11.4.8",
+				"@intlify/message-compiler": "11.4.8",
+				"@intlify/shared": "11.4.8"
+			},
+			"engines": {
+				"node": ">= 22"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/devtools-types": {
+			"version": "11.4.8",
+			"resolved": "https://registry.npmjs.org/@intlify/devtools-types/-/devtools-types-11.4.8.tgz",
+			"integrity": "sha512-MGpID+rlfzGUbNcnC20bm5NMSBHPrvx0atLTfv9dftn3kjXw1hGKDcIcwrO99tSrZEc2i+hczRL7ks8qXsHPkQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/core-base": "11.4.8",
+				"@intlify/shared": "11.4.8"
+			},
+			"engines": {
+				"node": ">= 22"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/message-compiler": {
+			"version": "11.4.8",
+			"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.4.8.tgz",
+			"integrity": "sha512-vbzk17dYwduYiv52EK61+FDCyhfVg1uPUtPmiD/d45W99uJIcXywrweOBcHv7n9/iEqmXiMGT52bgJbZDQqK3w==",
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/shared": "11.4.8",
+				"source-map-js": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 22"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/shared": {
+			"version": "11.4.8",
+			"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.4.8.tgz",
+			"integrity": "sha512-XbRgrv+XEuvDr7UCY55oibVrh+o4u+A0VB6nSL0F5Z8LcZxE/8j573LYG6bCrOigIcHdGpSNI7Rh5UpC5/B/eg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 22"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/unplugin-vue-i18n": {
+			"version": "6.0.8",
+			"resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-6.0.8.tgz",
+			"integrity": "sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"@intlify/bundle-utils": "^10.0.1",
+				"@intlify/shared": "^11.1.2",
+				"@intlify/vue-i18n-extensions": "^8.0.0",
+				"@rollup/pluginutils": "^5.1.0",
+				"@typescript-eslint/scope-manager": "^8.13.0",
+				"@typescript-eslint/typescript-estree": "^8.13.0",
+				"debug": "^4.3.3",
+				"fast-glob": "^3.2.12",
+				"js-yaml": "^4.1.0",
+				"json5": "^2.2.3",
+				"pathe": "^1.0.0",
+				"picocolors": "^1.0.0",
+				"source-map-js": "^1.0.2",
+				"unplugin": "^1.1.0",
+				"vue": "^3.4"
+			},
+			"engines": {
+				"node": ">= 18"
+			},
+			"peerDependencies": {
+				"petite-vue-i18n": "*",
+				"vue": "^3.2.25",
+				"vue-i18n": "*"
+			},
+			"peerDependenciesMeta": {
+				"petite-vue-i18n": {
+					"optional": true
+				},
+				"vue-i18n": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@intlify/vue-i18n-extensions": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/@intlify/vue-i18n-extensions/-/vue-i18n-extensions-8.0.0.tgz",
+			"integrity": "sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/parser": "^7.24.6",
+				"@intlify/shared": "^10.0.0",
+				"@vue/compiler-dom": "^3.2.45",
+				"vue-i18n": "^10.0.0"
+			},
+			"engines": {
+				"node": ">= 18"
+			},
+			"peerDependencies": {
+				"@intlify/shared": "^9.0.0 || ^10.0.0 || ^11.0.0",
+				"@vue/compiler-dom": "^3.0.0",
+				"vue": "^3.0.0",
+				"vue-i18n": "^9.0.0 || ^10.0.0 || ^11.0.0"
+			},
+			"peerDependenciesMeta": {
+				"@intlify/shared": {
+					"optional": true
+				},
+				"@vue/compiler-dom": {
+					"optional": true
+				},
+				"vue": {
+					"optional": true
+				},
+				"vue-i18n": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/core-base": {
+			"version": "10.0.8",
+			"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-10.0.8.tgz",
+			"integrity": "sha512-FoHslNWSoHjdUBLy35bpm9PV/0LVI/DSv9L6Km6J2ad8r/mm0VaGg06C40FqlE8u2ADcGUM60lyoU7Myo4WNZQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/message-compiler": "10.0.8",
+				"@intlify/shared": "10.0.8"
+			},
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/message-compiler": {
+			"version": "10.0.8",
+			"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-10.0.8.tgz",
+			"integrity": "sha512-DV+sYXIkHVd5yVb2mL7br/NEUwzUoLBsMkV3H0InefWgmYa34NLZUvMCGi5oWX+Hqr2Y2qUxnVrnOWF4aBlgWg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/shared": "10.0.8",
+				"source-map-js": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/shared": {
+			"version": "10.0.8",
+			"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-10.0.8.tgz",
+			"integrity": "sha512-BcmHpb5bQyeVNrptC3UhzpBZB/YHHDoEREOUERrmF2BRxsyOEuRrq+Z96C/D4+2KJb8kuHiouzAei7BXlG0YYw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/vue-i18n-extensions/node_modules/vue-i18n": {
+			"version": "10.0.8",
+			"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-10.0.8.tgz",
+			"integrity": "sha512-mIjy4utxMz9lMMo6G9vYePv7gUFt4ztOMhY9/4czDJxZ26xPeJ49MAGa9wBAE3XuXbYCrtVPmPxNjej7JJJkZQ==",
+			"deprecated": "v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/core-base": "10.0.8",
+				"@intlify/shared": "10.0.8",
+				"@vue/devtools-api": "^6.5.0"
+			},
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/@isaacs/cliui": {
+			"version": "8.0.2",
+			"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+			"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"string-width": "^5.1.2",
+				"string-width-cjs": "npm:string-width@^4.2.0",
+				"strip-ansi": "^7.0.1",
+				"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+				"wrap-ansi": "^8.1.0",
+				"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@jridgewell/gen-mapping": {
+			"version": "0.3.13",
+			"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+			"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/sourcemap-codec": "^1.5.0",
+				"@jridgewell/trace-mapping": "^0.3.24"
+			}
+		},
+		"node_modules/@jridgewell/remapping": {
+			"version": "2.3.5",
+			"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+			"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/gen-mapping": "^0.3.5",
+				"@jridgewell/trace-mapping": "^0.3.24"
+			}
+		},
+		"node_modules/@jridgewell/resolve-uri": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+			"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/@jridgewell/source-map": {
+			"version": "0.3.11",
+			"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+			"integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/gen-mapping": "^0.3.5",
+				"@jridgewell/trace-mapping": "^0.3.25"
+			}
+		},
+		"node_modules/@jridgewell/sourcemap-codec": {
+			"version": "1.5.5",
+			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+			"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+			"license": "MIT"
+		},
+		"node_modules/@jridgewell/trace-mapping": {
+			"version": "0.3.31",
+			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+			"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/resolve-uri": "^3.1.0",
+				"@jridgewell/sourcemap-codec": "^1.4.14"
+			}
+		},
+		"node_modules/@juggle/resize-observer": {
+			"version": "3.4.0",
+			"resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+			"integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
+			"license": "Apache-2.0"
+		},
+		"node_modules/@napi-rs/lzma-linux-x64-gnu": {
+			"version": "1.5.1",
+			"resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
+			"integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": "^22.20 || ^24.12 || >=25"
+			}
+		},
+		"node_modules/@nodelib/fs.scandir": {
+			"version": "2.1.5",
+			"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+			"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@nodelib/fs.stat": "2.0.5",
+				"run-parallel": "^1.1.9"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/@nodelib/fs.stat": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+			"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/@nodelib/fs.walk": {
+			"version": "1.2.8",
+			"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+			"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@nodelib/fs.scandir": "2.1.5",
+				"fastq": "^1.6.0"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/@one-ini/wasm": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
+			"integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@parcel/watcher": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz",
+			"integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==",
+			"dev": true,
+			"hasInstallScript": true,
+			"license": "MIT",
+			"optional": true,
+			"dependencies": {
+				"detect-libc": "^2.0.3",
+				"is-glob": "^4.0.3",
+				"node-addon-api": "^7.0.0",
+				"picomatch": "^4.0.4"
+			},
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			},
+			"optionalDependencies": {
+				"@parcel/watcher-android-arm64": "2.6.0",
+				"@parcel/watcher-darwin-arm64": "2.6.0",
+				"@parcel/watcher-darwin-x64": "2.6.0",
+				"@parcel/watcher-freebsd-x64": "2.6.0",
+				"@parcel/watcher-linux-arm-glibc": "2.6.0",
+				"@parcel/watcher-linux-arm-musl": "2.6.0",
+				"@parcel/watcher-linux-arm64-glibc": "2.6.0",
+				"@parcel/watcher-linux-arm64-musl": "2.6.0",
+				"@parcel/watcher-linux-x64-glibc": "2.6.0",
+				"@parcel/watcher-linux-x64-musl": "2.6.0",
+				"@parcel/watcher-win32-arm64": "2.6.0",
+				"@parcel/watcher-win32-x64": "2.6.0"
+			}
+		},
+		"node_modules/@parcel/watcher-android-arm64": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz",
+			"integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-darwin-arm64": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz",
+			"integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-darwin-x64": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz",
+			"integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-freebsd-x64": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz",
+			"integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-linux-arm-glibc": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz",
+			"integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-linux-arm-musl": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz",
+			"integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-linux-arm64-glibc": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz",
+			"integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-linux-arm64-musl": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz",
+			"integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-linux-x64-glibc": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz",
+			"integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-linux-x64-musl": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz",
+			"integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-win32-arm64": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz",
+			"integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@parcel/watcher-win32-x64": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz",
+			"integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">= 10.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/parcel"
+			}
+		},
+		"node_modules/@pkgjs/parseargs": {
+			"version": "0.11.0",
+			"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+			"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/@pkgr/core": {
+			"version": "0.3.6",
+			"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz",
+			"integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^14.18.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/pkgr"
+			}
+		},
+		"node_modules/@polka/url": {
+			"version": "1.0.0-next.29",
+			"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+			"integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@popperjs/core": {
+			"name": "@sxzz/popperjs-es",
+			"version": "2.11.8",
+			"resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz",
+			"integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/popperjs"
+			}
+		},
+		"node_modules/@rolldown/pluginutils": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
+			"integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@rollup/pluginutils": {
+			"version": "5.4.0",
+			"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz",
+			"integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@types/estree": "^1.0.0",
+				"estree-walker": "^2.0.2",
+				"picomatch": "^4.0.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			},
+			"peerDependencies": {
+				"rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+			},
+			"peerDependenciesMeta": {
+				"rollup": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@rollup/rollup-android-arm-eabi": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz",
+			"integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			]
+		},
+		"node_modules/@rollup/rollup-android-arm64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz",
+			"integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			]
+		},
+		"node_modules/@rollup/rollup-darwin-arm64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz",
+			"integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			]
+		},
+		"node_modules/@rollup/rollup-darwin-x64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz",
+			"integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			]
+		},
+		"node_modules/@rollup/rollup-freebsd-arm64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz",
+			"integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			]
+		},
+		"node_modules/@rollup/rollup-freebsd-x64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz",
+			"integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz",
+			"integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-arm-musleabihf": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz",
+			"integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==",
+			"cpu": [
+				"arm"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-arm64-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz",
+			"integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-arm64-musl": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz",
+			"integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-loong64-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz",
+			"integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==",
+			"cpu": [
+				"loong64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-loong64-musl": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz",
+			"integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==",
+			"cpu": [
+				"loong64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-ppc64-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz",
+			"integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==",
+			"cpu": [
+				"ppc64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-ppc64-musl": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz",
+			"integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==",
+			"cpu": [
+				"ppc64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-riscv64-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz",
+			"integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==",
+			"cpu": [
+				"riscv64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-riscv64-musl": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz",
+			"integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==",
+			"cpu": [
+				"riscv64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-s390x-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz",
+			"integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==",
+			"cpu": [
+				"s390x"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-x64-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz",
+			"integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-linux-x64-musl": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz",
+			"integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			]
+		},
+		"node_modules/@rollup/rollup-openbsd-x64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz",
+			"integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"openbsd"
+			]
+		},
+		"node_modules/@rollup/rollup-openharmony-arm64": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz",
+			"integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"openharmony"
+			]
+		},
+		"node_modules/@rollup/rollup-win32-arm64-msvc": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz",
+			"integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==",
+			"cpu": [
+				"arm64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			]
+		},
+		"node_modules/@rollup/rollup-win32-ia32-msvc": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz",
+			"integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==",
+			"cpu": [
+				"ia32"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			]
+		},
+		"node_modules/@rollup/rollup-win32-x64-gnu": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz",
+			"integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			]
+		},
+		"node_modules/@rollup/rollup-win32-x64-msvc": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz",
+			"integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==",
+			"cpu": [
+				"x64"
+			],
+			"dev": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			]
+		},
+		"node_modules/@rushstack/eslint-patch": {
+			"version": "1.16.1",
+			"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.16.1.tgz",
+			"integrity": "sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@sec-ant/readable-stream": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+			"integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@sindresorhus/merge-streams": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+			"integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/@skax/delegate": {
+			"version": "4.0.2",
+			"resolved": "https://registry.npmjs.org/@skax/delegate/-/delegate-4.0.2.tgz",
+			"integrity": "sha512-8imP+fGESjlbU4mFhZMEuR3/qmYVtqQjXXzZ/C/imbzKqyaMWYpEDqQXNf6yGHzWHUJhZwn5AWNm645U1GjQsQ==",
+			"license": "MIT"
+		},
+		"node_modules/@socket.io/component-emitter": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+			"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+			"license": "MIT"
+		},
+		"node_modules/@transloadit/prettier-bytes": {
+			"version": "0.0.7",
+			"resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
+			"integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==",
+			"license": "MIT"
+		},
+		"node_modules/@tsconfig/node20": {
+			"version": "20.1.9",
+			"resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.9.tgz",
+			"integrity": "sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/estree": {
+			"version": "1.0.9",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+			"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/event-emitter": {
+			"version": "0.3.5",
+			"resolved": "https://registry.npmjs.org/@types/event-emitter/-/event-emitter-0.3.5.tgz",
+			"integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==",
+			"license": "MIT"
+		},
+		"node_modules/@types/file-saver": {
+			"version": "2.0.7",
+			"resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz",
+			"integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/json-schema": {
+			"version": "7.0.15",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/lodash": {
+			"version": "4.17.25",
+			"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz",
+			"integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==",
+			"license": "MIT"
+		},
+		"node_modules/@types/lodash-es": {
+			"version": "4.17.12",
+			"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+			"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@types/lodash": "*"
+			}
+		},
+		"node_modules/@types/mockjs": {
+			"version": "1.0.10",
+			"resolved": "https://registry.npmjs.org/@types/mockjs/-/mockjs-1.0.10.tgz",
+			"integrity": "sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/node": {
+			"version": "20.19.43",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz",
+			"integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"undici-types": "~6.21.0"
+			}
+		},
+		"node_modules/@types/nprogress": {
+			"version": "0.2.3",
+			"resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz",
+			"integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/store": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmjs.org/@types/store/-/store-2.0.5.tgz",
+			"integrity": "sha512-5NmTKe3GWdOaykzq7no+Ahf6mafJu0oLc9JNhJ3E26+0oFvd6GnksnZQpMXcH526mfG4xDYjFiKzyDL51PzeWQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/web-bluetooth": {
+			"version": "0.0.21",
+			"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
+			"integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+			"license": "MIT"
+		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz",
+			"integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/regexpp": "^4.12.2",
+				"@typescript-eslint/scope-manager": "8.67.0",
+				"@typescript-eslint/type-utils": "8.67.0",
+				"@typescript-eslint/utils": "8.67.0",
+				"@typescript-eslint/visitor-keys": "8.67.0",
+				"ignore": "^7.0.5",
+				"natural-compare": "^1.4.0",
+				"ts-api-utils": "^2.5.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^8.67.0",
+				"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+			"version": "7.0.6",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
+			"integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz",
+			"integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@typescript-eslint/scope-manager": "8.67.0",
+				"@typescript-eslint/types": "8.67.0",
+				"@typescript-eslint/typescript-estree": "8.67.0",
+				"@typescript-eslint/visitor-keys": "8.67.0",
+				"debug": "^4.4.3"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/project-service": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz",
+			"integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/tsconfig-utils": "^8.67.0",
+				"@typescript-eslint/types": "^8.67.0",
+				"debug": "^4.4.3"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/scope-manager": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz",
+			"integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/types": "8.67.0",
+				"@typescript-eslint/visitor-keys": "8.67.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/tsconfig-utils": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz",
+			"integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/type-utils": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz",
+			"integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/types": "8.67.0",
+				"@typescript-eslint/typescript-estree": "8.67.0",
+				"@typescript-eslint/utils": "8.67.0",
+				"debug": "^4.4.3",
+				"ts-api-utils": "^2.5.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/types": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz",
+			"integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/typescript-estree": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz",
+			"integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/project-service": "8.67.0",
+				"@typescript-eslint/tsconfig-utils": "8.67.0",
+				"@typescript-eslint/types": "8.67.0",
+				"@typescript-eslint/visitor-keys": "8.67.0",
+				"debug": "^4.4.3",
+				"minimatch": "^10.2.2",
+				"semver": "^7.7.3",
+				"tinyglobby": "^0.2.15",
+				"ts-api-utils": "^2.5.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/utils": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz",
+			"integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.9.1",
+				"@typescript-eslint/scope-manager": "8.67.0",
+				"@typescript-eslint/types": "8.67.0",
+				"@typescript-eslint/typescript-estree": "8.67.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/@typescript-eslint/visitor-keys": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz",
+			"integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/types": "8.67.0",
+				"eslint-visitor-keys": "^5.0.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+			"integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^20.19.0 || ^22.13.0 || >=24"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@uppy/companion-client": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-2.2.2.tgz",
+			"integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==",
+			"license": "MIT",
+			"dependencies": {
+				"@uppy/utils": "^4.1.2",
+				"namespace-emitter": "^2.0.1"
+			}
+		},
+		"node_modules/@uppy/core": {
+			"version": "2.3.4",
+			"resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.4.tgz",
+			"integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@transloadit/prettier-bytes": "0.0.7",
+				"@uppy/store-default": "^2.1.1",
+				"@uppy/utils": "^4.1.3",
+				"lodash.throttle": "^4.1.1",
+				"mime-match": "^1.0.2",
+				"namespace-emitter": "^2.0.1",
+				"nanoid": "^3.1.25",
+				"preact": "^10.5.13"
+			}
+		},
+		"node_modules/@uppy/store-default": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-2.1.1.tgz",
+			"integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==",
+			"license": "MIT"
+		},
+		"node_modules/@uppy/utils": {
+			"version": "4.1.3",
+			"resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.1.3.tgz",
+			"integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==",
+			"license": "MIT",
+			"dependencies": {
+				"lodash.throttle": "^4.1.1"
+			}
+		},
+		"node_modules/@uppy/xhr-upload": {
+			"version": "2.1.3",
+			"resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz",
+			"integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@uppy/companion-client": "^2.2.2",
+				"@uppy/utils": "^4.1.2",
+				"nanoid": "^3.1.25"
+			},
+			"peerDependencies": {
+				"@uppy/core": "^2.3.3"
+			}
+		},
+		"node_modules/@vitejs/plugin-vue": {
+			"version": "5.2.4",
+			"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+			"integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^18.0.0 || >=20.0.0"
+			},
+			"peerDependencies": {
+				"vite": "^5.0.0 || ^6.0.0",
+				"vue": "^3.2.25"
+			}
+		},
+		"node_modules/@vitejs/plugin-vue-jsx": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.2.0.tgz",
+			"integrity": "sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/core": "^7.27.1",
+				"@babel/plugin-transform-typescript": "^7.27.1",
+				"@rolldown/pluginutils": "^1.0.0-beta.9",
+				"@vue/babel-plugin-jsx": "^1.4.0"
+			},
+			"engines": {
+				"node": "^18.0.0 || >=20.0.0"
+			},
+			"peerDependencies": {
+				"vite": "^5.0.0 || ^6.0.0",
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/@volar/language-core": {
+			"version": "2.4.15",
+			"resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz",
+			"integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@volar/source-map": "2.4.15"
+			}
+		},
+		"node_modules/@volar/source-map": {
+			"version": "2.4.15",
+			"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz",
+			"integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@volar/typescript": {
+			"version": "2.4.15",
+			"resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz",
+			"integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@volar/language-core": "2.4.15",
+				"path-browserify": "^1.0.1",
+				"vscode-uri": "^3.0.8"
+			}
+		},
+		"node_modules/@vue/babel-helper-vue-transform-on": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+			"integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@vue/babel-plugin-jsx": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+			"integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-module-imports": "^7.27.1",
+				"@babel/helper-plugin-utils": "^7.27.1",
+				"@babel/plugin-syntax-jsx": "^7.27.1",
+				"@babel/template": "^7.27.2",
+				"@babel/traverse": "^7.28.0",
+				"@babel/types": "^7.28.2",
+				"@vue/babel-helper-vue-transform-on": "1.5.0",
+				"@vue/babel-plugin-resolve-type": "1.5.0",
+				"@vue/shared": "^3.5.18"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			},
+			"peerDependenciesMeta": {
+				"@babel/core": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@vue/babel-plugin-resolve-type": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+			"integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/code-frame": "^7.27.1",
+				"@babel/helper-module-imports": "^7.27.1",
+				"@babel/helper-plugin-utils": "^7.27.1",
+				"@babel/parser": "^7.28.0",
+				"@vue/compiler-sfc": "^3.5.18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sxzz"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@vue/compiler-core": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz",
+			"integrity": "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/parser": "^7.29.8",
+				"@vue/shared": "3.5.41",
+				"entities": "^7.0.1",
+				"estree-walker": "^2.0.2",
+				"source-map-js": "^1.2.1"
+			}
+		},
+		"node_modules/@vue/compiler-dom": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz",
+			"integrity": "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@vue/compiler-core": "3.5.41",
+				"@vue/shared": "3.5.41"
+			}
+		},
+		"node_modules/@vue/compiler-sfc": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz",
+			"integrity": "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/parser": "^7.29.8",
+				"@vue/compiler-core": "3.5.41",
+				"@vue/compiler-dom": "3.5.41",
+				"@vue/compiler-ssr": "3.5.41",
+				"@vue/shared": "3.5.41",
+				"estree-walker": "^2.0.2",
+				"magic-string": "^0.30.21",
+				"postcss": "^8.5.19",
+				"source-map-js": "^1.2.1"
+			}
+		},
+		"node_modules/@vue/compiler-ssr": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz",
+			"integrity": "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/compiler-dom": "3.5.41",
+				"@vue/shared": "3.5.41"
+			}
+		},
+		"node_modules/@vue/compiler-vue2": {
+			"version": "2.7.16",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
+			"integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"de-indent": "^1.0.2",
+				"he": "^1.2.0"
+			}
+		},
+		"node_modules/@vue/devtools-api": {
+			"version": "6.6.4",
+			"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+			"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+			"license": "MIT"
+		},
+		"node_modules/@vue/devtools-core": {
+			"version": "7.7.10",
+			"resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.10.tgz",
+			"integrity": "sha512-rpsAY7HuxYUz6G7R0zBGoOgYsn/r3iU0LixLOGNJ3o5if6tkPDGIGV+6CIJbDNbeueP2HsGDCOQ5ni6Wr36xEQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@vue/devtools-kit": "^7.7.10",
+				"@vue/devtools-shared": "^7.7.10",
+				"mitt": "^3.0.1",
+				"nanoid": "^5.1.0",
+				"pathe": "^2.0.3",
+				"vite-hot-client": "^2.0.4"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/@vue/devtools-core/node_modules/nanoid": {
+			"version": "5.1.16",
+			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz",
+			"integrity": "sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"bin": {
+				"nanoid": "bin/nanoid.js"
+			},
+			"engines": {
+				"node": "^18 || >=20"
+			}
+		},
+		"node_modules/@vue/devtools-core/node_modules/pathe": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+			"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@vue/devtools-kit": {
+			"version": "7.7.10",
+			"resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.10.tgz",
+			"integrity": "sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@vue/devtools-shared": "^7.7.10",
+				"birpc": "^2.3.0",
+				"hookable": "^5.5.3",
+				"mitt": "^3.0.1",
+				"perfect-debounce": "^1.0.0",
+				"speakingurl": "^14.0.1",
+				"superjson": "^2.2.2"
+			}
+		},
+		"node_modules/@vue/devtools-shared": {
+			"version": "7.7.10",
+			"resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.10.tgz",
+			"integrity": "sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"rfdc": "^1.4.1"
+			}
+		},
+		"node_modules/@vue/eslint-config-prettier": {
+			"version": "10.2.0",
+			"resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz",
+			"integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"eslint-config-prettier": "^10.0.1",
+				"eslint-plugin-prettier": "^5.2.2"
+			},
+			"peerDependencies": {
+				"eslint": ">= 8.21.0",
+				"prettier": ">= 3.0.0"
+			}
+		},
+		"node_modules/@vue/eslint-config-typescript": {
+			"version": "14.9.0",
+			"resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.9.0.tgz",
+			"integrity": "sha512-E3j9hDlfVf10F30MRcLTPY2IIhWIx1nsvkVukk14kTcuA+oBVot9zsP1hzsO+PAMDxV3Fd9FimBJtUBNBL5KFA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/utils": "^8.60.0",
+				"fast-glob": "^3.3.3",
+				"typescript-eslint": "^8.60.0",
+				"vue-eslint-parser": "^10.4.0"
+			},
+			"bin": {
+				"vue-eslint-config-typescript": "dist/bin.js"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"peerDependencies": {
+				"eslint": "^9.10.0 || ^10.0.0",
+				"eslint-plugin-vue": "^9.28.0 || ^10.0.0",
+				"typescript": ">=4.8.4"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@vue/language-core": {
+			"version": "2.2.12",
+			"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz",
+			"integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@volar/language-core": "2.4.15",
+				"@vue/compiler-dom": "^3.5.0",
+				"@vue/compiler-vue2": "^2.7.16",
+				"@vue/shared": "^3.5.0",
+				"alien-signals": "^1.0.3",
+				"minimatch": "^9.0.3",
+				"muggle-string": "^0.4.1",
+				"path-browserify": "^1.0.1"
+			},
+			"peerDependencies": {
+				"typescript": "*"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@vue/language-core/node_modules/balanced-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@vue/language-core/node_modules/brace-expansion": {
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
+			"integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0"
+			}
+		},
+		"node_modules/@vue/language-core/node_modules/minimatch": {
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^2.0.2"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/@vue/reactivity": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz",
+			"integrity": "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/shared": "3.5.41"
+			}
+		},
+		"node_modules/@vue/runtime-core": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz",
+			"integrity": "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/reactivity": "3.5.41",
+				"@vue/shared": "3.5.41"
+			}
+		},
+		"node_modules/@vue/runtime-dom": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz",
+			"integrity": "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/reactivity": "3.5.41",
+				"@vue/runtime-core": "3.5.41",
+				"@vue/shared": "3.5.41",
+				"csstype": "^3.2.3"
+			}
+		},
+		"node_modules/@vue/server-renderer": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz",
+			"integrity": "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@vue/compiler-ssr": "3.5.41",
+				"@vue/runtime-dom": "3.5.41",
+				"@vue/shared": "3.5.41"
+			}
+		},
+		"node_modules/@vue/shared": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz",
+			"integrity": "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==",
+			"license": "MIT"
+		},
+		"node_modules/@vue/test-utils": {
+			"version": "2.4.11",
+			"resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.11.tgz",
+			"integrity": "sha512-GDqaqZsA6m2E5vNzej0aYiIb6BX8xV9pNSbbbXKOfEYwg7ZNblVX8suyqmUBThq8VIrgAJNxn+z72hVtUeiWHA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"js-beautify": "^1.14.9",
+				"vue-component-type-helpers": "^3.0.0"
+			},
+			"peerDependencies": {
+				"@vue/compiler-dom": "3.x",
+				"@vue/server-renderer": "3.x",
+				"vue": "3.x"
+			},
+			"peerDependenciesMeta": {
+				"@vue/server-renderer": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@vue/tsconfig": {
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz",
+			"integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@vueuse/core": {
+			"version": "12.8.2",
+			"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz",
+			"integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/web-bluetooth": "^0.0.21",
+				"@vueuse/metadata": "12.8.2",
+				"@vueuse/shared": "12.8.2",
+				"vue": "^3.5.13"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/@vueuse/metadata": {
+			"version": "12.8.2",
+			"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz",
+			"integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/@vueuse/shared": {
+			"version": "12.8.2",
+			"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz",
+			"integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==",
+			"license": "MIT",
+			"dependencies": {
+				"vue": "^3.5.13"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/@wangeditor/basic-modules": {
+			"version": "1.1.7",
+			"resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
+			"integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"is-url": "^1.2.4"
+			},
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"lodash.throttle": "^4.1.1",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/code-highlight": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz",
+			"integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==",
+			"license": "MIT",
+			"dependencies": {
+				"prismjs": "^1.23.0"
+			},
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/core": {
+			"version": "1.1.19",
+			"resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz",
+			"integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@types/event-emitter": "^0.3.3",
+				"event-emitter": "^0.3.5",
+				"html-void-elements": "^2.0.0",
+				"i18next": "^20.4.0",
+				"scroll-into-view-if-needed": "^2.2.28",
+				"slate-history": "^0.66.0"
+			},
+			"peerDependencies": {
+				"@uppy/core": "^2.1.1",
+				"@uppy/xhr-upload": "^2.0.3",
+				"dom7": "^3.0.0",
+				"is-hotkey": "^0.2.0",
+				"lodash.camelcase": "^4.3.0",
+				"lodash.clonedeep": "^4.5.0",
+				"lodash.debounce": "^4.0.8",
+				"lodash.foreach": "^4.5.0",
+				"lodash.isequal": "^4.5.0",
+				"lodash.throttle": "^4.1.1",
+				"lodash.toarray": "^4.4.0",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/editor": {
+			"version": "5.1.23",
+			"resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz",
+			"integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@uppy/core": "^2.1.1",
+				"@uppy/xhr-upload": "^2.0.3",
+				"@wangeditor/basic-modules": "^1.1.7",
+				"@wangeditor/code-highlight": "^1.0.3",
+				"@wangeditor/core": "^1.1.19",
+				"@wangeditor/list-module": "^1.0.5",
+				"@wangeditor/table-module": "^1.1.4",
+				"@wangeditor/upload-image-module": "^1.0.2",
+				"@wangeditor/video-module": "^1.1.4",
+				"dom7": "^3.0.0",
+				"is-hotkey": "^0.2.0",
+				"lodash.camelcase": "^4.3.0",
+				"lodash.clonedeep": "^4.5.0",
+				"lodash.debounce": "^4.0.8",
+				"lodash.foreach": "^4.5.0",
+				"lodash.isequal": "^4.5.0",
+				"lodash.throttle": "^4.1.1",
+				"lodash.toarray": "^4.4.0",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/editor-for-vue": {
+			"version": "5.1.12",
+			"resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz",
+			"integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@wangeditor/editor": ">=5.1.0",
+				"vue": "^3.0.5"
+			}
+		},
+		"node_modules/@wangeditor/list-module": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.5.tgz",
+			"integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/table-module": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.4.tgz",
+			"integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"lodash.isequal": "^4.5.0",
+				"lodash.throttle": "^4.1.1",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/upload-image-module": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
+			"integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@uppy/core": "^2.0.3",
+				"@uppy/xhr-upload": "^2.0.3",
+				"@wangeditor/basic-modules": "1.x",
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"lodash.foreach": "^4.5.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/video-module": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.4.tgz",
+			"integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@uppy/core": "^2.1.4",
+				"@uppy/xhr-upload": "^2.0.7",
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/abbrev": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+			"integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+			"dev": true,
+			"license": "ISC",
+			"engines": {
+				"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+			}
+		},
+		"node_modules/abortcontroller-polyfill": {
+			"version": "1.7.8",
+			"resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz",
+			"integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==",
+			"license": "MIT"
+		},
+		"node_modules/acorn": {
+			"version": "8.18.0",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
+			"integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"bin": {
+				"acorn": "bin/acorn"
+			},
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/acorn-jsx": {
+			"version": "5.3.2",
+			"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+			"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+			"dev": true,
+			"license": "MIT",
+			"peerDependencies": {
+				"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/adler-32": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
+			"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/agent-base": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+			"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+			"license": "MIT",
+			"dependencies": {
+				"debug": "4"
+			},
+			"engines": {
+				"node": ">= 6.0.0"
+			}
+		},
+		"node_modules/ajv": {
+			"version": "6.15.0",
+			"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+			"integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"fast-deep-equal": "^3.1.1",
+				"fast-json-stable-stringify": "^2.0.0",
+				"json-schema-traverse": "^0.4.1",
+				"uri-js": "^4.2.2"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/epoberezkin"
+			}
+		},
+		"node_modules/alien-signals": {
+			"version": "1.0.13",
+			"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz",
+			"integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/ansi-regex": {
+			"version": "6.2.2",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+			"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+			}
+		},
+		"node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/any-promise": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+			"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/anymatch": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+			"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"normalize-path": "^3.0.0",
+				"picomatch": "^2.0.4"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/anymatch/node_modules/picomatch": {
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+			"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
+		"node_modules/arg": {
+			"version": "5.0.2",
+			"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+			"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/argparse": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+			"dev": true,
+			"license": "Python-2.0"
+		},
+		"node_modules/async-validator": {
+			"version": "4.2.5",
+			"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
+			"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+			"license": "MIT"
+		},
+		"node_modules/asynckit": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+			"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+			"license": "MIT"
+		},
+		"node_modules/autoprefixer": {
+			"version": "10.5.4",
+			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz",
+			"integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"browserslist": "^4.28.6",
+				"caniuse-lite": "^1.0.30001806",
+				"fraction.js": "^5.3.4",
+				"picocolors": "^1.1.1",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"bin": {
+				"autoprefixer": "bin/autoprefixer"
+			},
+			"engines": {
+				"node": "^10 || ^12 || >=14"
+			},
+			"peerDependencies": {
+				"postcss": "^8.1.0"
+			}
+		},
+		"node_modules/axios": {
+			"version": "1.19.0",
+			"resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz",
+			"integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==",
+			"license": "MIT",
+			"dependencies": {
+				"follow-redirects": "^1.16.0",
+				"form-data": "^4.0.6",
+				"https-proxy-agent": "^5.0.1",
+				"proxy-from-env": "^2.1.0"
+			}
+		},
+		"node_modules/balanced-match": {
+			"version": "4.0.4",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+			"integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "18 || 20 || >=22"
+			}
+		},
+		"node_modules/baseline-browser-mapping": {
+			"version": "2.11.13",
+			"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz",
+			"integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"bin": {
+				"baseline-browser-mapping": "dist/cli.cjs"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/binary-extensions": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+			"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/birpc": {
+			"version": "2.9.0",
+			"resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz",
+			"integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==",
+			"dev": true,
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/boolbase": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+			"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/brace-expansion": {
+			"version": "5.0.9",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
+			"integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^4.0.2"
+			},
+			"engines": {
+				"node": "20 || >=22"
+			}
+		},
+		"node_modules/braces": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"fill-range": "^7.1.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/browserslist": {
+			"version": "4.28.8",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz",
+			"integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/browserslist"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/browserslist"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"baseline-browser-mapping": "^2.11.12",
+				"caniuse-lite": "^1.0.30001809",
+				"electron-to-chromium": "^1.5.402",
+				"node-releases": "^2.0.53",
+				"update-browserslist-db": "^1.3.0"
+			},
+			"bin": {
+				"browserslist": "cli.js"
+			},
+			"engines": {
+				"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+			}
+		},
+		"node_modules/buffer-from": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/bundle-name": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+			"integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"run-applescript": "^7.0.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/call-bind-apply-helpers": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+			"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+			"license": "MIT",
+			"dependencies": {
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/callsites": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+			"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/camelcase-css": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+			"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/caniuse-lite": {
+			"version": "1.0.30001809",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz",
+			"integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/browserslist"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "CC-BY-4.0"
+		},
+		"node_modules/cfb": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
+			"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"adler-32": "~1.3.0",
+				"crc-32": "~1.2.0"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/chalk": {
+			"version": "4.1.2",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+			"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^4.1.0",
+				"supports-color": "^7.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
+		"node_modules/chardet": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz",
+			"integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==",
+			"license": "MIT"
+		},
+		"node_modules/chokidar": {
+			"version": "4.0.3",
+			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+			"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"readdirp": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 14.16.0"
+			},
+			"funding": {
+				"url": "https://paulmillr.com/funding/"
+			}
+		},
+		"node_modules/cliui": {
+			"version": "8.0.1",
+			"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+			"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"string-width": "^4.2.0",
+				"strip-ansi": "^6.0.1",
+				"wrap-ansi": "^7.0.0"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/cliui/node_modules/ansi-regex": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/cliui/node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/cliui/node_modules/string-width": {
+			"version": "4.2.3",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+			"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/cliui/node_modules/strip-ansi": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/cliui/node_modules/wrap-ansi": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+			"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^4.0.0",
+				"string-width": "^4.1.0",
+				"strip-ansi": "^6.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+			}
+		},
+		"node_modules/codepage": {
+			"version": "1.15.0",
+			"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
+			"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/combined-stream": {
+			"version": "1.0.8",
+			"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+			"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+			"license": "MIT",
+			"dependencies": {
+				"delayed-stream": "~1.0.0"
+			},
+			"engines": {
+				"node": ">= 0.8"
+			}
+		},
+		"node_modules/commander": {
+			"version": "10.0.1",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+			"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/compute-scroll-into-view": {
+			"version": "1.0.20",
+			"resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+			"integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==",
+			"license": "MIT"
+		},
+		"node_modules/concat-map": {
+			"version": "0.0.1",
+			"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+			"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/confbox": {
+			"version": "0.1.8",
+			"resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+			"integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/config-chain": {
+			"version": "1.1.13",
+			"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+			"integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ini": "^1.3.4",
+				"proto-list": "~1.2.1"
+			}
+		},
+		"node_modules/convert-source-map": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+			"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/copy-anything": {
+			"version": "4.0.5",
+			"resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
+			"integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-what": "^5.2.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mesqueeb"
+			}
+		},
+		"node_modules/core-js": {
+			"version": "3.50.0",
+			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz",
+			"integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"engines": {
+				"node": "*"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/core-js"
+			}
+		},
+		"node_modules/crc-32": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+			"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+			"license": "Apache-2.0",
+			"bin": {
+				"crc32": "bin/crc32.njs"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/cross-spawn": {
+			"version": "7.0.6",
+			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+			"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"path-key": "^3.1.0",
+				"shebang-command": "^2.0.0",
+				"which": "^2.0.1"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/css-select": {
+			"version": "5.2.2",
+			"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+			"integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"boolbase": "^1.0.0",
+				"css-what": "^6.1.0",
+				"domhandler": "^5.0.2",
+				"domutils": "^3.0.1",
+				"nth-check": "^2.0.1"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/fb55"
+			}
+		},
+		"node_modules/css-tree": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+			"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"mdn-data": "2.0.30",
+				"source-map-js": "^1.0.1"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+			}
+		},
+		"node_modules/css-what": {
+			"version": "6.2.2",
+			"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+			"integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">= 6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/fb55"
+			}
+		},
+		"node_modules/cssesc": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+			"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"cssesc": "bin/cssesc"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/csso": {
+			"version": "5.0.5",
+			"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+			"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"css-tree": "~2.2.0"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+				"npm": ">=7.0.0"
+			}
+		},
+		"node_modules/csso/node_modules/css-tree": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+			"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"mdn-data": "2.0.28",
+				"source-map-js": "^1.0.1"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+				"npm": ">=7.0.0"
+			}
+		},
+		"node_modules/csso/node_modules/mdn-data": {
+			"version": "2.0.28",
+			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+			"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+			"dev": true,
+			"license": "CC0-1.0"
+		},
+		"node_modules/csstype": {
+			"version": "3.2.3",
+			"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+			"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+			"license": "MIT"
+		},
+		"node_modules/d": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+			"integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
+			"license": "ISC",
+			"dependencies": {
+				"es5-ext": "^0.10.64",
+				"type": "^2.7.2"
+			},
+			"engines": {
+				"node": ">=0.12"
+			}
+		},
+		"node_modules/dayjs": {
+			"version": "1.11.21",
+			"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz",
+			"integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
+			"license": "MIT"
+		},
+		"node_modules/de-indent": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+			"integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/debounce-promise": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz",
+			"integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==",
+			"license": "MIT"
+		},
+		"node_modules/debug": {
+			"version": "4.4.3",
+			"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+			"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+			"license": "MIT",
+			"dependencies": {
+				"ms": "^2.1.3"
+			},
+			"engines": {
+				"node": ">=6.0"
+			},
+			"peerDependenciesMeta": {
+				"supports-color": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/deep-is": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+			"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/deepmerge": {
+			"version": "4.3.1",
+			"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+			"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/default-browser": {
+			"version": "5.5.0",
+			"resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
+			"integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"bundle-name": "^4.1.0",
+				"default-browser-id": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/default-browser-id": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
+			"integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/define-lazy-prop": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+			"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/delayed-stream": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+			"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/detect-libc": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+			"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"optional": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/didyoumean": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+			"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+			"dev": true,
+			"license": "Apache-2.0"
+		},
+		"node_modules/dlv": {
+			"version": "1.1.3",
+			"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+			"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/dom-serializer": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+			"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"domelementtype": "^2.3.0",
+				"domhandler": "^5.0.2",
+				"entities": "^4.2.0"
+			},
+			"funding": {
+				"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+			}
+		},
+		"node_modules/dom-serializer/node_modules/entities": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=0.12"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/entities?sponsor=1"
+			}
+		},
+		"node_modules/dom7": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz",
+			"integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"ssr-window": "^3.0.0-alpha.1"
+			}
+		},
+		"node_modules/domelementtype": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+			"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/fb55"
+				}
+			],
+			"license": "BSD-2-Clause"
+		},
+		"node_modules/domhandler": {
+			"version": "5.0.3",
+			"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+			"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"domelementtype": "^2.3.0"
+			},
+			"engines": {
+				"node": ">= 4"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/domhandler?sponsor=1"
+			}
+		},
+		"node_modules/domutils": {
+			"version": "3.2.2",
+			"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+			"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"dom-serializer": "^2.0.0",
+				"domelementtype": "^2.3.0",
+				"domhandler": "^5.0.3"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/domutils?sponsor=1"
+			}
+		},
+		"node_modules/dunder-proto": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+			"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind-apply-helpers": "^1.0.1",
+				"es-errors": "^1.3.0",
+				"gopd": "^1.2.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/eastasianwidth": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+			"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/echarts": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz",
+			"integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+			"license": "Apache-2.0",
+			"peer": true,
+			"dependencies": {
+				"tslib": "2.3.0",
+				"zrender": "5.6.1"
+			}
+		},
+		"node_modules/editorconfig": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.7.tgz",
+			"integrity": "sha512-e0GOtq/aTQhVdNyDU9e02+wz9oDDM+SIOQxWME2QRjzRX5yyLAuHDE+0aE8vHb9XRC8XD37eO2u57+F09JqFhw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@one-ini/wasm": "0.1.1",
+				"commander": "^10.0.0",
+				"minimatch": "^9.0.1",
+				"semver": "^7.5.3"
+			},
+			"bin": {
+				"editorconfig": "bin/editorconfig"
+			},
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/editorconfig/node_modules/balanced-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/editorconfig/node_modules/brace-expansion": {
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
+			"integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0"
+			}
+		},
+		"node_modules/editorconfig/node_modules/minimatch": {
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^2.0.2"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/electron-to-chromium": {
+			"version": "1.5.404",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.404.tgz",
+			"integrity": "sha512-3WJtd7/lVq2Jnuz6wed1l9+1ZD2u2Tet1/1NBc4Iedkmgbu+I7YuAqdAQ8T+VZtnwysMsAf3IqSq9D1gyZjA2g==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/element-plus": {
+			"version": "2.10.2",
+			"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.10.2.tgz",
+			"integrity": "sha512-p2KiAa0jEGXrzdlTAfpiS7HQFAhla4gvx6H7RuDf+OO0uC3DGpolxvdHjFR8gt7+vaWyxQNcHa1sAdBkmjqlgA==",
+			"license": "MIT",
+			"dependencies": {
+				"@ctrl/tinycolor": "^3.4.1",
+				"@element-plus/icons-vue": "^2.3.1",
+				"@floating-ui/dom": "^1.0.1",
+				"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
+				"@types/lodash": "^4.14.182",
+				"@types/lodash-es": "^4.17.6",
+				"@vueuse/core": "^9.1.0",
+				"async-validator": "^4.2.5",
+				"dayjs": "^1.11.13",
+				"escape-html": "^1.0.3",
+				"lodash": "^4.17.21",
+				"lodash-es": "^4.17.21",
+				"lodash-unified": "^1.0.2",
+				"memoize-one": "^6.0.0",
+				"normalize-wheel-es": "^1.2.0"
+			},
+			"peerDependencies": {
+				"vue": "^3.2.0"
+			}
+		},
+		"node_modules/element-plus/node_modules/@types/web-bluetooth": {
+			"version": "0.0.16",
+			"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+			"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
+			"license": "MIT"
+		},
+		"node_modules/element-plus/node_modules/@vueuse/core": {
+			"version": "9.13.0",
+			"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
+			"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/web-bluetooth": "^0.0.16",
+				"@vueuse/metadata": "9.13.0",
+				"@vueuse/shared": "9.13.0",
+				"vue-demi": "*"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/element-plus/node_modules/@vueuse/metadata": {
+			"version": "9.13.0",
+			"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
+			"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/element-plus/node_modules/@vueuse/shared": {
+			"version": "9.13.0",
+			"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
+			"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+			"license": "MIT",
+			"dependencies": {
+				"vue-demi": "*"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/emoji-regex": {
+			"version": "9.2.2",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+			"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/engine.io-client": {
+			"version": "6.6.6",
+			"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.6.tgz",
+			"integrity": "sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q==",
+			"license": "MIT",
+			"dependencies": {
+				"@socket.io/component-emitter": "~3.1.0",
+				"debug": "~4.4.1",
+				"engine.io-parser": "~5.2.1",
+				"ws": "~8.21.0",
+				"xmlhttprequest-ssl": "~2.1.1"
+			}
+		},
+		"node_modules/engine.io-parser": {
+			"version": "5.2.3",
+			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+			"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10.0.0"
+			}
+		},
+		"node_modules/entities": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+			"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=0.12"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/entities?sponsor=1"
+			}
+		},
+		"node_modules/error-stack-parser-es": {
+			"version": "0.1.5",
+			"resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz",
+			"integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==",
+			"dev": true,
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			}
+		},
+		"node_modules/es-define-property": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+			"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es-errors": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es-object-atoms": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+			"integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+			"license": "MIT",
+			"dependencies": {
+				"es-errors": "^1.3.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es-set-tostringtag": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+			"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+			"license": "MIT",
+			"dependencies": {
+				"es-errors": "^1.3.0",
+				"get-intrinsic": "^1.2.6",
+				"has-tostringtag": "^1.0.2",
+				"hasown": "^2.0.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es5-ext": {
+			"version": "0.10.64",
+			"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+			"integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+			"hasInstallScript": true,
+			"license": "ISC",
+			"dependencies": {
+				"es6-iterator": "^2.0.3",
+				"es6-symbol": "^3.1.3",
+				"esniff": "^2.0.1",
+				"next-tick": "^1.1.0"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/es6-iterator": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+			"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+			"license": "MIT",
+			"dependencies": {
+				"d": "1",
+				"es5-ext": "^0.10.35",
+				"es6-symbol": "^3.1.1"
+			}
+		},
+		"node_modules/es6-symbol": {
+			"version": "3.1.4",
+			"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+			"integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+			"license": "ISC",
+			"dependencies": {
+				"d": "^1.0.2",
+				"ext": "^1.7.0"
+			},
+			"engines": {
+				"node": ">=0.12"
+			}
+		},
+		"node_modules/esbuild": {
+			"version": "0.21.5",
+			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+			"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+			"dev": true,
+			"hasInstallScript": true,
+			"license": "MIT",
+			"bin": {
+				"esbuild": "bin/esbuild"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"optionalDependencies": {
+				"@esbuild/aix-ppc64": "0.21.5",
+				"@esbuild/android-arm": "0.21.5",
+				"@esbuild/android-arm64": "0.21.5",
+				"@esbuild/android-x64": "0.21.5",
+				"@esbuild/darwin-arm64": "0.21.5",
+				"@esbuild/darwin-x64": "0.21.5",
+				"@esbuild/freebsd-arm64": "0.21.5",
+				"@esbuild/freebsd-x64": "0.21.5",
+				"@esbuild/linux-arm": "0.21.5",
+				"@esbuild/linux-arm64": "0.21.5",
+				"@esbuild/linux-ia32": "0.21.5",
+				"@esbuild/linux-loong64": "0.21.5",
+				"@esbuild/linux-mips64el": "0.21.5",
+				"@esbuild/linux-ppc64": "0.21.5",
+				"@esbuild/linux-riscv64": "0.21.5",
+				"@esbuild/linux-s390x": "0.21.5",
+				"@esbuild/linux-x64": "0.21.5",
+				"@esbuild/netbsd-x64": "0.21.5",
+				"@esbuild/openbsd-x64": "0.21.5",
+				"@esbuild/sunos-x64": "0.21.5",
+				"@esbuild/win32-arm64": "0.21.5",
+				"@esbuild/win32-ia32": "0.21.5",
+				"@esbuild/win32-x64": "0.21.5"
+			}
+		},
+		"node_modules/escalade": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+			"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/escape-html": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+			"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+			"license": "MIT"
+		},
+		"node_modules/escape-string-regexp": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+			"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/escodegen": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+			"integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"esprima": "^4.0.1",
+				"estraverse": "^5.2.0",
+				"esutils": "^2.0.2"
+			},
+			"bin": {
+				"escodegen": "bin/escodegen.js",
+				"esgenerate": "bin/esgenerate.js"
+			},
+			"engines": {
+				"node": ">=6.0"
+			},
+			"optionalDependencies": {
+				"source-map": "~0.6.1"
+			}
+		},
+		"node_modules/eslint": {
+			"version": "9.39.5",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
+			"integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.8.0",
+				"@eslint-community/regexpp": "^4.12.1",
+				"@eslint/config-array": "^0.21.2",
+				"@eslint/config-helpers": "^0.4.2",
+				"@eslint/core": "^0.17.0",
+				"@eslint/eslintrc": "^3.3.6",
+				"@eslint/js": "9.39.5",
+				"@eslint/plugin-kit": "^0.4.1",
+				"@humanfs/node": "^0.16.6",
+				"@humanwhocodes/module-importer": "^1.0.1",
+				"@humanwhocodes/retry": "^0.4.2",
+				"@types/estree": "^1.0.6",
+				"ajv": "^6.14.0",
+				"chalk": "^4.0.0",
+				"cross-spawn": "^7.0.6",
+				"debug": "^4.3.2",
+				"escape-string-regexp": "^4.0.0",
+				"eslint-scope": "^8.4.0",
+				"eslint-visitor-keys": "^4.2.1",
+				"espree": "^10.4.0",
+				"esquery": "^1.5.0",
+				"esutils": "^2.0.2",
+				"fast-deep-equal": "^3.1.3",
+				"file-entry-cache": "^8.0.0",
+				"find-up": "^5.0.0",
+				"glob-parent": "^6.0.2",
+				"ignore": "^5.2.0",
+				"imurmurhash": "^0.1.4",
+				"is-glob": "^4.0.0",
+				"json-stable-stringify-without-jsonify": "^1.0.1",
+				"lodash.merge": "^4.6.2",
+				"minimatch": "^3.1.5",
+				"natural-compare": "^1.4.0",
+				"optionator": "^0.9.3"
+			},
+			"bin": {
+				"eslint": "bin/eslint.js"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://eslint.org/donate"
+			},
+			"peerDependencies": {
+				"jiti": "*"
+			},
+			"peerDependenciesMeta": {
+				"jiti": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/eslint-config-prettier": {
+			"version": "10.1.8",
+			"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+			"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"eslint-config-prettier": "bin/cli.js"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint-config-prettier"
+			},
+			"peerDependencies": {
+				"eslint": ">=7.0.0"
+			}
+		},
+		"node_modules/eslint-plugin-prettier": {
+			"version": "5.5.6",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz",
+			"integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"prettier-linter-helpers": "^1.0.1",
+				"synckit": "^0.11.13"
+			},
+			"engines": {
+				"node": "^14.18.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint-plugin-prettier"
+			},
+			"peerDependencies": {
+				"@types/eslint": ">=8.0.0",
+				"eslint": ">=8.0.0",
+				"eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
+				"prettier": ">=3.0.0"
+			},
+			"peerDependenciesMeta": {
+				"@types/eslint": {
+					"optional": true
+				},
+				"eslint-config-prettier": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/eslint-plugin-vue": {
+			"version": "9.33.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz",
+			"integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"globals": "^13.24.0",
+				"natural-compare": "^1.4.0",
+				"nth-check": "^2.1.1",
+				"postcss-selector-parser": "^6.0.15",
+				"semver": "^7.6.3",
+				"vue-eslint-parser": "^9.4.3",
+				"xml-name-validator": "^4.0.0"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+			}
+		},
+		"node_modules/eslint-plugin-vue/node_modules/eslint-scope": {
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-vue/node_modules/espree": {
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"acorn": "^8.9.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^3.4.1"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-vue/node_modules/globals": {
+			"version": "13.24.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"type-fest": "^0.20.2"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": {
+			"version": "9.4.3",
+			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+			"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"debug": "^4.3.4",
+				"eslint-scope": "^7.1.1",
+				"eslint-visitor-keys": "^3.3.0",
+				"espree": "^9.3.1",
+				"esquery": "^1.4.0",
+				"lodash": "^4.17.21",
+				"semver": "^7.3.6"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
+			}
+		},
+		"node_modules/eslint-scope": {
+			"version": "8.4.0",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+			"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-visitor-keys": {
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint/node_modules/balanced-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/eslint/node_modules/brace-expansion": {
+			"version": "1.1.18",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
+			"integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0",
+				"concat-map": "0.0.1"
+			}
+		},
+		"node_modules/eslint/node_modules/eslint-visitor-keys": {
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+			"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint/node_modules/minimatch": {
+			"version": "3.1.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+			"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/esniff": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+			"integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+			"license": "ISC",
+			"dependencies": {
+				"d": "^1.0.1",
+				"es5-ext": "^0.10.62",
+				"event-emitter": "^0.3.5",
+				"type": "^2.7.2"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/espree": {
+			"version": "10.4.0",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+			"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"acorn": "^8.15.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/espree/node_modules/eslint-visitor-keys": {
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+			"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/esprima": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+			"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"bin": {
+				"esparse": "bin/esparse.js",
+				"esvalidate": "bin/esvalidate.js"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/esquery": {
+			"version": "1.7.0",
+			"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+			"integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+			"dev": true,
+			"license": "BSD-3-Clause",
+			"dependencies": {
+				"estraverse": "^5.1.0"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/esrecurse": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+			"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/estraverse": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/estree-walker": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+			"license": "MIT"
+		},
+		"node_modules/esutils": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/event-emitter": {
+			"version": "0.3.5",
+			"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+			"integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+			"license": "MIT",
+			"dependencies": {
+				"d": "1",
+				"es5-ext": "~0.10.14"
+			}
+		},
+		"node_modules/eventemitter3": {
+			"version": "5.0.4",
+			"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+			"integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
+			"license": "MIT"
+		},
+		"node_modules/execa": {
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz",
+			"integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@sindresorhus/merge-streams": "^4.0.0",
+				"cross-spawn": "^7.0.6",
+				"figures": "^6.1.0",
+				"get-stream": "^9.0.0",
+				"human-signals": "^8.0.1",
+				"is-plain-obj": "^4.1.0",
+				"is-stream": "^4.0.1",
+				"npm-run-path": "^6.0.0",
+				"pretty-ms": "^9.2.0",
+				"signal-exit": "^4.1.0",
+				"strip-final-newline": "^4.0.0",
+				"yoctocolors": "^2.1.1"
+			},
+			"engines": {
+				"node": "^18.19.0 || >=20.5.0"
+			},
+			"funding": {
+				"url": "https://github.com/sindresorhus/execa?sponsor=1"
+			}
+		},
+		"node_modules/ext": {
+			"version": "1.7.0",
+			"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+			"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+			"license": "ISC",
+			"dependencies": {
+				"type": "^2.7.2"
+			}
+		},
+		"node_modules/ezuikit-js": {
+			"version": "9.0.17",
+			"resolved": "https://registry.npmjs.org/ezuikit-js/-/ezuikit-js-9.0.17.tgz",
+			"integrity": "sha512-3UnfvJjHHv3j4echbLIRCe7SH4Z2J9tfq8i6Iphc1FVs1N+bfKB8tWjOTv+pPxYmXf6nBvSh4R7ek92RQHzQ6w==",
+			"license": "ISC",
+			"dependencies": {
+				"@ezuikit/control-aichat": "0.1.1-beta.1",
+				"@ezuikit/player-ezopen": "9.0.7-beta.4",
+				"@ezuikit/utils-collect": "0.1.1",
+				"@ezuikit/utils-i18n": "2.0.1",
+				"@ezuikit/utils-logger": "2.0.1",
+				"@ezuikit/utils-tools": "2.0.6",
+				"@juggle/resize-observer": "^3.4.0",
+				"@skax/delegate": "4.0.2",
+				"abortcontroller-polyfill": "^1.7.5",
+				"debounce-promise": "^3.1.2",
+				"deepmerge": "^4.3.1",
+				"formdata-polyfill": "^4.0.10",
+				"screenfull": "^5.2.0"
+			}
+		},
+		"node_modules/fast-deep-equal": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/fast-diff": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+			"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+			"dev": true,
+			"license": "Apache-2.0"
+		},
+		"node_modules/fast-glob": {
+			"version": "3.3.3",
+			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+			"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@nodelib/fs.stat": "^2.0.2",
+				"@nodelib/fs.walk": "^1.2.3",
+				"glob-parent": "^5.1.2",
+				"merge2": "^1.3.0",
+				"micromatch": "^4.0.8"
+			},
+			"engines": {
+				"node": ">=8.6.0"
+			}
+		},
+		"node_modules/fast-glob/node_modules/glob-parent": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/fast-json-stable-stringify": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+			"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/fast-levenshtein": {
+			"version": "2.0.6",
+			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/fastq": {
+			"version": "1.20.1",
+			"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+			"integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"reusify": "^1.0.4"
+			}
+		},
+		"node_modules/fdir": {
+			"version": "6.5.0",
+			"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+			"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12.0.0"
+			},
+			"peerDependencies": {
+				"picomatch": "^3 || ^4"
+			},
+			"peerDependenciesMeta": {
+				"picomatch": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/fetch-blob": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+			"integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/jimmywarting"
+				},
+				{
+					"type": "paypal",
+					"url": "https://paypal.me/jimmywarting"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"node-domexception": "^1.0.0",
+				"web-streams-polyfill": "^3.0.3"
+			},
+			"engines": {
+				"node": "^12.20 || >= 14.13"
+			}
+		},
+		"node_modules/figures": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
+			"integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-unicode-supported": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/file-entry-cache": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+			"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"flat-cache": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/file-saver": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+			"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
+			"license": "MIT"
+		},
+		"node_modules/fill-range": {
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"to-regex-range": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/find-up": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+			"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"locate-path": "^6.0.0",
+				"path-exists": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/flat-cache": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+			"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"flatted": "^3.2.9",
+				"keyv": "^4.5.4"
+			},
+			"engines": {
+				"node": ">=16"
+			}
+		},
+		"node_modules/flatted": {
+			"version": "3.4.4",
+			"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
+			"integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/follow-redirects": {
+			"version": "1.16.0",
+			"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+			"integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
+			"funding": [
+				{
+					"type": "individual",
+					"url": "https://github.com/sponsors/RubenVerborgh"
+				}
+			],
+			"license": "MIT",
+			"engines": {
+				"node": ">=4.0"
+			},
+			"peerDependenciesMeta": {
+				"debug": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/foreground-child": {
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+			"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"cross-spawn": "^7.0.6",
+				"signal-exit": "^4.0.1"
+			},
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/form-data": {
+			"version": "4.0.6",
+			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
+			"integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",
+			"license": "MIT",
+			"dependencies": {
+				"asynckit": "^0.4.0",
+				"combined-stream": "^1.0.8",
+				"es-set-tostringtag": "^2.1.0",
+				"hasown": "^2.0.4",
+				"mime-types": "^2.1.35"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/formdata-polyfill": {
+			"version": "4.0.10",
+			"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+			"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+			"license": "MIT",
+			"dependencies": {
+				"fetch-blob": "^3.1.2"
+			},
+			"engines": {
+				"node": ">=12.20.0"
+			}
+		},
+		"node_modules/frac": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
+			"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/fraction.js": {
+			"version": "5.3.4",
+			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
+			"integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "*"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/rawify"
+			}
+		},
+		"node_modules/fs-extra": {
+			"version": "10.1.0",
+			"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+			"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"graceful-fs": "^4.2.0",
+				"jsonfile": "^6.0.1",
+				"universalify": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/fsevents": {
+			"version": "2.3.3",
+			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+			"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+			"dev": true,
+			"hasInstallScript": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+			}
+		},
+		"node_modules/function-bind": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/gensync": {
+			"version": "1.0.0-beta.2",
+			"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+			"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/get-caller-file": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+			"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+			"dev": true,
+			"license": "ISC",
+			"engines": {
+				"node": "6.* || 8.* || >= 10.*"
+			}
+		},
+		"node_modules/get-intrinsic": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+			"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind-apply-helpers": "^1.0.2",
+				"es-define-property": "^1.0.1",
+				"es-errors": "^1.3.0",
+				"es-object-atoms": "^1.1.1",
+				"function-bind": "^1.1.2",
+				"get-proto": "^1.0.1",
+				"gopd": "^1.2.0",
+				"has-symbols": "^1.1.0",
+				"hasown": "^2.0.2",
+				"math-intrinsics": "^1.1.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/get-proto": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+			"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+			"license": "MIT",
+			"dependencies": {
+				"dunder-proto": "^1.0.1",
+				"es-object-atoms": "^1.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/get-stream": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+			"integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@sec-ant/readable-stream": "^0.4.1",
+				"is-stream": "^4.0.1"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/glob": {
+			"version": "10.5.0",
+			"resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+			"integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+			"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"foreground-child": "^3.1.0",
+				"jackspeak": "^3.1.2",
+				"minimatch": "^9.0.4",
+				"minipass": "^7.1.2",
+				"package-json-from-dist": "^1.0.0",
+				"path-scurry": "^1.11.1"
+			},
+			"bin": {
+				"glob": "dist/esm/bin.mjs"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/glob-parent": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+			"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"is-glob": "^4.0.3"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
+		"node_modules/glob/node_modules/balanced-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/glob/node_modules/brace-expansion": {
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz",
+			"integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0"
+			}
+		},
+		"node_modules/glob/node_modules/minimatch": {
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^2.0.2"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/globals": {
+			"version": "14.0.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+			"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/gopd": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+			"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/graceful-fs": {
+			"version": "4.2.11",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+			"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/has-symbols": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+			"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-tostringtag": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+			"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+			"license": "MIT",
+			"dependencies": {
+				"has-symbols": "^1.0.3"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/hasown": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+			"integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+			"license": "MIT",
+			"dependencies": {
+				"function-bind": "^1.1.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/he": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+			"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"he": "bin/he"
+			}
+		},
+		"node_modules/hookable": {
+			"version": "5.5.3",
+			"resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+			"integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/html-void-elements": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
+			"integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
+			"license": "MIT",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
+		"node_modules/https-proxy-agent": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+			"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+			"license": "MIT",
+			"dependencies": {
+				"agent-base": "6",
+				"debug": "4"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/human-signals": {
+			"version": "8.0.1",
+			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
+			"integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=18.18.0"
+			}
+		},
+		"node_modules/i18next": {
+			"version": "20.6.1",
+			"resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz",
+			"integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime": "^7.12.0"
+			}
+		},
+		"node_modules/ignore": {
+			"version": "5.3.2",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+			"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/immer": {
+			"version": "9.0.21",
+			"resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+			"integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/immer"
+			}
+		},
+		"node_modules/immutable": {
+			"version": "5.1.9",
+			"resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz",
+			"integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/import-fresh": {
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+			"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"parent-module": "^1.0.0",
+				"resolve-from": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/imurmurhash": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+			"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.8.19"
+			}
+		},
+		"node_modules/ini": {
+			"version": "1.3.8",
+			"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+			"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/is-binary-path": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+			"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"binary-extensions": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-core-module": {
+			"version": "2.16.2",
+			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+			"integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"hasown": "^2.0.3"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/is-docker": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+			"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"is-docker": "cli.js"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/is-extglob": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+			"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-fullwidth-code-point": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+			"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-glob": {
+			"version": "4.0.3",
+			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+			"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-extglob": "^2.1.1"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-hotkey": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz",
+			"integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/is-inside-container": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+			"integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-docker": "^3.0.0"
+			},
+			"bin": {
+				"is-inside-container": "cli.js"
+			},
+			"engines": {
+				"node": ">=14.16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/is-inside-container/node_modules/is-docker": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+			"integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"is-docker": "cli.js"
+			},
+			"engines": {
+				"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/is-number": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+			"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.12.0"
+			}
+		},
+		"node_modules/is-plain-obj": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+			"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/is-plain-object": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+			"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-stream": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+			"integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/is-unicode-supported": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+			"integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/is-url": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+			"integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+			"license": "MIT"
+		},
+		"node_modules/is-what": {
+			"version": "5.5.0",
+			"resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
+			"integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mesqueeb"
+			}
+		},
+		"node_modules/is-wsl": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+			"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-docker": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/isexe": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+			"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/jackspeak": {
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+			"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+			"dev": true,
+			"license": "BlueOak-1.0.0",
+			"dependencies": {
+				"@isaacs/cliui": "^8.0.2"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			},
+			"optionalDependencies": {
+				"@pkgjs/parseargs": "^0.11.0"
+			}
+		},
+		"node_modules/jiti": {
+			"version": "1.21.7",
+			"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+			"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"bin": {
+				"jiti": "bin/jiti.js"
+			}
+		},
+		"node_modules/js-beautify": {
+			"version": "1.15.4",
+			"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz",
+			"integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"config-chain": "^1.1.13",
+				"editorconfig": "^1.0.4",
+				"glob": "^10.4.2",
+				"js-cookie": "^3.0.5",
+				"nopt": "^7.2.1"
+			},
+			"bin": {
+				"css-beautify": "js/bin/css-beautify.js",
+				"html-beautify": "js/bin/html-beautify.js",
+				"js-beautify": "js/bin/js-beautify.js"
+			},
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/js-cookie": {
+			"version": "3.0.8",
+			"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.8.tgz",
+			"integrity": "sha512-yeJd4aNAdYZQjaon2bpD/Gb0B/omw7HQOsynXXcOiWVCacbBcPlgn8S/d1X6blFSaHao7ozqtW7NZW19xpCtIw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/js-tokens": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/js-yaml": {
+			"version": "4.3.1",
+			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
+			"integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/puzrin"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/nodeca"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"argparse": "^2.0.1"
+			},
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
+			}
+		},
+		"node_modules/jsesc": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+			"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"jsesc": "bin/jsesc"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/json-buffer": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+			"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/json-schema-traverse": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+			"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/json-stable-stringify-without-jsonify": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+			"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/json5": {
+			"version": "2.2.3",
+			"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+			"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"json5": "lib/cli.js"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/jsonc-eslint-parser": {
+			"version": "2.4.2",
+			"resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz",
+			"integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"acorn": "^8.5.0",
+				"eslint-visitor-keys": "^3.0.0",
+				"espree": "^9.0.0",
+				"semver": "^7.3.5"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ota-meshi"
+			}
+		},
+		"node_modules/jsonc-eslint-parser/node_modules/espree": {
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"acorn": "^8.9.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^3.4.1"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/jsonfile": {
+			"version": "6.2.1",
+			"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
+			"integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"universalify": "^2.0.0"
+			},
+			"optionalDependencies": {
+				"graceful-fs": "^4.1.6"
+			}
+		},
+		"node_modules/keyv": {
+			"version": "4.5.4",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+			"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"json-buffer": "3.0.1"
+			}
+		},
+		"node_modules/kolorist": {
+			"version": "1.8.0",
+			"resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
+			"integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/levn": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+			"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"prelude-ls": "^1.2.1",
+				"type-check": "~0.4.0"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/lilconfig": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+			"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antonk52"
+			}
+		},
+		"node_modules/lines-and-columns": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+			"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/locate-path": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+			"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"p-locate": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/lodash": {
+			"version": "4.18.1",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+			"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash-es": {
+			"version": "4.18.1",
+			"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+			"integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash-unified": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
+			"integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@types/lodash-es": "*",
+				"lodash": "*",
+				"lodash-es": "*"
+			}
+		},
+		"node_modules/lodash.camelcase": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+			"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash.clonedeep": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+			"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash.debounce": {
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+			"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash.foreach": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+			"integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash.isequal": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+			"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+			"deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash.merge": {
+			"version": "4.6.2",
+			"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/lodash.throttle": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+			"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lodash.toarray": {
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+			"integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==",
+			"license": "MIT",
+			"peer": true
+		},
+		"node_modules/lru-cache": {
+			"version": "5.1.1",
+			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+			"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"yallist": "^3.0.2"
+			}
+		},
+		"node_modules/magic-string": {
+			"version": "0.30.21",
+			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+			"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/sourcemap-codec": "^1.5.5"
+			}
+		},
+		"node_modules/marked": {
+			"version": "14.1.4",
+			"resolved": "https://registry.npmjs.org/marked/-/marked-14.1.4.tgz",
+			"integrity": "sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==",
+			"license": "MIT",
+			"bin": {
+				"marked": "bin/marked.js"
+			},
+			"engines": {
+				"node": ">= 18"
+			}
+		},
+		"node_modules/math-intrinsics": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+			"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/mdn-data": {
+			"version": "2.0.30",
+			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+			"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+			"dev": true,
+			"license": "CC0-1.0"
+		},
+		"node_modules/memoize-one": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+			"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+			"license": "MIT"
+		},
+		"node_modules/merge2": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/micromatch": {
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+			"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"braces": "^3.0.3",
+				"picomatch": "^2.3.1"
+			},
+			"engines": {
+				"node": ">=8.6"
+			}
+		},
+		"node_modules/micromatch/node_modules/picomatch": {
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+			"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
+		"node_modules/mime-db": {
+			"version": "1.52.0",
+			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+			"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/mime-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz",
+			"integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==",
+			"license": "ISC",
+			"dependencies": {
+				"wildcard": "^1.1.0"
+			}
+		},
+		"node_modules/mime-types": {
+			"version": "2.1.35",
+			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+			"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+			"license": "MIT",
+			"dependencies": {
+				"mime-db": "1.52.0"
+			},
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/minimatch": {
+			"version": "10.2.6",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+			"integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
+			"dev": true,
+			"license": "BlueOak-1.0.0",
+			"dependencies": {
+				"brace-expansion": "^5.0.8"
+			},
+			"engines": {
+				"node": "18 || 20 || >=22"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/minipass": {
+			"version": "7.1.3",
+			"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+			"integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+			"dev": true,
+			"license": "BlueOak-1.0.0",
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			}
+		},
+		"node_modules/mitt": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+			"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+			"license": "MIT"
+		},
+		"node_modules/mlly": {
+			"version": "1.8.2",
+			"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
+			"integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"acorn": "^8.16.0",
+				"pathe": "^2.0.3",
+				"pkg-types": "^1.3.1",
+				"ufo": "^1.6.3"
+			}
+		},
+		"node_modules/mlly/node_modules/pathe": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+			"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/mrmime": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+			"integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/ms": {
+			"version": "2.1.3",
+			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+			"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+			"license": "MIT"
+		},
+		"node_modules/muggle-string": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
+			"integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/mz": {
+			"version": "2.7.0",
+			"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+			"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"any-promise": "^1.0.0",
+				"object-assign": "^4.0.1",
+				"thenify-all": "^1.0.0"
+			}
+		},
+		"node_modules/namespace-emitter": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz",
+			"integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==",
+			"license": "MIT"
+		},
+		"node_modules/nanoid": {
+			"version": "3.3.18",
+			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+			"integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"peer": true,
+			"bin": {
+				"nanoid": "bin/nanoid.cjs"
+			},
+			"engines": {
+				"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+			}
+		},
+		"node_modules/natural-compare": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+			"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/next-tick": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+			"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+			"license": "ISC"
+		},
+		"node_modules/node-addon-api": {
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+			"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+			"dev": true,
+			"license": "MIT",
+			"optional": true
+		},
+		"node_modules/node-domexception": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+			"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+			"deprecated": "Use your platform's native DOMException instead",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/jimmywarting"
+				},
+				{
+					"type": "github",
+					"url": "https://paypal.me/jimmywarting"
+				}
+			],
+			"license": "MIT",
+			"engines": {
+				"node": ">=10.5.0"
+			}
+		},
+		"node_modules/node-releases": {
+			"version": "2.0.53",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz",
+			"integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			}
+		},
+		"node_modules/nopt": {
+			"version": "7.2.1",
+			"resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+			"integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"abbrev": "^2.0.0"
+			},
+			"bin": {
+				"nopt": "bin/nopt.js"
+			},
+			"engines": {
+				"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+			}
+		},
+		"node_modules/normalize-path": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/normalize-wheel-es": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+			"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/npm-run-path": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
+			"integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"path-key": "^4.0.0",
+				"unicorn-magic": "^0.3.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/npm-run-path/node_modules/path-key": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+			"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/nprogress": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
+			"integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==",
+			"license": "MIT"
+		},
+		"node_modules/nth-check": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+			"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"boolbase": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/nth-check?sponsor=1"
+			}
+		},
+		"node_modules/object-assign": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+			"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/object-hash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+			"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/open": {
+			"version": "8.4.2",
+			"resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+			"integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"define-lazy-prop": "^2.0.0",
+				"is-docker": "^2.1.1",
+				"is-wsl": "^2.2.0"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/optionator": {
+			"version": "0.9.4",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+			"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"deep-is": "^0.1.3",
+				"fast-levenshtein": "^2.0.6",
+				"levn": "^0.4.1",
+				"prelude-ls": "^1.2.1",
+				"type-check": "^0.4.0",
+				"word-wrap": "^1.2.5"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/p-limit": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+			"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"yocto-queue": "^0.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/p-locate": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+			"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"p-limit": "^3.0.2"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/package-json-from-dist": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+			"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+			"dev": true,
+			"license": "BlueOak-1.0.0"
+		},
+		"node_modules/parent-module": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+			"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"callsites": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/parse-ms": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+			"integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/path-browserify": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+			"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/path-exists": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+			"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/path-key": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+			"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/path-parse": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+			"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/path-scurry": {
+			"version": "1.11.1",
+			"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+			"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+			"dev": true,
+			"license": "BlueOak-1.0.0",
+			"dependencies": {
+				"lru-cache": "^10.2.0",
+				"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/path-scurry/node_modules/lru-cache": {
+			"version": "10.4.3",
+			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+			"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/pathe": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+			"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/perfect-debounce": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+			"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/picocolors": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+			"license": "ISC"
+		},
+		"node_modules/picomatch": {
+			"version": "4.0.5",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+			"integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
+		"node_modules/pify": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+			"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/pinia": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
+			"integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/devtools-api": "^6.6.3",
+				"vue-demi": "^0.14.10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/posva"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.4.4",
+				"vue": "^2.7.0 || ^3.5.11"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/pirates": {
+			"version": "4.0.7",
+			"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+			"integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/pkg-types": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
+			"integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"confbox": "^0.1.8",
+				"mlly": "^1.7.4",
+				"pathe": "^2.0.1"
+			}
+		},
+		"node_modules/pkg-types/node_modules/pathe": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+			"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/postcss": {
+			"version": "8.5.26",
+			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+			"integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/postcss"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"nanoid": "^3.3.17",
+				"picocolors": "^1.1.1",
+				"source-map-js": "^1.2.1"
+			},
+			"engines": {
+				"node": "^10 || ^12 || >=14"
+			}
+		},
+		"node_modules/postcss-import": {
+			"version": "15.1.0",
+			"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+			"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"postcss-value-parser": "^4.0.0",
+				"read-cache": "^1.0.0",
+				"resolve": "^1.1.7"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.0.0"
+			}
+		},
+		"node_modules/postcss-js": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+			"integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"camelcase-css": "^2.0.1"
+			},
+			"engines": {
+				"node": "^12 || ^14 || >= 16"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4.21"
+			}
+		},
+		"node_modules/postcss-load-config": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+			"integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"lilconfig": "^3.1.1"
+			},
+			"engines": {
+				"node": ">= 18"
+			},
+			"peerDependencies": {
+				"jiti": ">=1.21.0",
+				"postcss": ">=8.0.9",
+				"tsx": "^4.8.1",
+				"yaml": "^2.4.2"
+			},
+			"peerDependenciesMeta": {
+				"jiti": {
+					"optional": true
+				},
+				"postcss": {
+					"optional": true
+				},
+				"tsx": {
+					"optional": true
+				},
+				"yaml": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/postcss-nested": {
+			"version": "6.2.0",
+			"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+			"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"postcss-selector-parser": "^6.1.1"
+			},
+			"engines": {
+				"node": ">=12.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.2.14"
+			}
+		},
+		"node_modules/postcss-selector-parser": {
+			"version": "6.1.4",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
+			"integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"cssesc": "^3.0.0",
+				"util-deprecate": "^1.0.2"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/postcss-value-parser": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+			"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/preact": {
+			"version": "10.29.8",
+			"resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz",
+			"integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/preact"
+			},
+			"peerDependencies": {
+				"preact-render-to-string": ">=5"
+			},
+			"peerDependenciesMeta": {
+				"preact-render-to-string": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/prelude-ls": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+			"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/prettier": {
+			"version": "3.9.6",
+			"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz",
+			"integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"bin": {
+				"prettier": "bin/prettier.cjs"
+			},
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/prettier/prettier?sponsor=1"
+			}
+		},
+		"node_modules/prettier-linter-helpers": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz",
+			"integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"fast-diff": "^1.1.2"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/pretty-ms": {
+			"version": "9.3.0",
+			"resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz",
+			"integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"parse-ms": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/prismjs": {
+			"version": "1.30.0",
+			"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+			"integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/proto-list": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+			"integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/proxy-from-env": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+			"integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/punycode": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/queue-microtask": {
+			"version": "1.2.3",
+			"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+			"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT"
+		},
+		"node_modules/read-cache": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+			"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"pify": "^2.3.0"
+			}
+		},
+		"node_modules/readdirp": {
+			"version": "4.1.2",
+			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+			"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 14.18.0"
+			},
+			"funding": {
+				"type": "individual",
+				"url": "https://paulmillr.com/funding/"
+			}
+		},
+		"node_modules/require-directory": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+			"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/resolve": {
+			"version": "1.22.12",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+			"integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"es-errors": "^1.3.0",
+				"is-core-module": "^2.16.1",
+				"path-parse": "^1.0.7",
+				"supports-preserve-symlinks-flag": "^1.0.0"
+			},
+			"bin": {
+				"resolve": "bin/resolve"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/resolve-from": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/reusify": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+			"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"iojs": ">=1.0.0",
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/rfdc": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+			"integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/rollup": {
+			"version": "4.62.4",
+			"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz",
+			"integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@types/estree": "1.0.9"
+			},
+			"bin": {
+				"rollup": "dist/bin/rollup"
+			},
+			"engines": {
+				"node": ">=18.0.0",
+				"npm": ">=8.0.0"
+			},
+			"optionalDependencies": {
+				"@napi-rs/lzma-linux-x64-gnu": "1.5.1",
+				"@rollup/rollup-android-arm-eabi": "4.62.4",
+				"@rollup/rollup-android-arm64": "4.62.4",
+				"@rollup/rollup-darwin-arm64": "4.62.4",
+				"@rollup/rollup-darwin-x64": "4.62.4",
+				"@rollup/rollup-freebsd-arm64": "4.62.4",
+				"@rollup/rollup-freebsd-x64": "4.62.4",
+				"@rollup/rollup-linux-arm-gnueabihf": "4.62.4",
+				"@rollup/rollup-linux-arm-musleabihf": "4.62.4",
+				"@rollup/rollup-linux-arm64-gnu": "4.62.4",
+				"@rollup/rollup-linux-arm64-musl": "4.62.4",
+				"@rollup/rollup-linux-loong64-gnu": "4.62.4",
+				"@rollup/rollup-linux-loong64-musl": "4.62.4",
+				"@rollup/rollup-linux-ppc64-gnu": "4.62.4",
+				"@rollup/rollup-linux-ppc64-musl": "4.62.4",
+				"@rollup/rollup-linux-riscv64-gnu": "4.62.4",
+				"@rollup/rollup-linux-riscv64-musl": "4.62.4",
+				"@rollup/rollup-linux-s390x-gnu": "4.62.4",
+				"@rollup/rollup-linux-x64-gnu": "4.62.4",
+				"@rollup/rollup-linux-x64-musl": "4.62.4",
+				"@rollup/rollup-openbsd-x64": "4.62.4",
+				"@rollup/rollup-openharmony-arm64": "4.62.4",
+				"@rollup/rollup-win32-arm64-msvc": "4.62.4",
+				"@rollup/rollup-win32-ia32-msvc": "4.62.4",
+				"@rollup/rollup-win32-x64-gnu": "4.62.4",
+				"@rollup/rollup-win32-x64-msvc": "4.62.4",
+				"fsevents": "~2.3.2"
+			}
+		},
+		"node_modules/rollup-plugin-visualizer": {
+			"version": "5.14.0",
+			"resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz",
+			"integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"open": "^8.4.0",
+				"picomatch": "^4.0.2",
+				"source-map": "^0.7.4",
+				"yargs": "^17.5.1"
+			},
+			"bin": {
+				"rollup-plugin-visualizer": "dist/bin/cli.js"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"peerDependencies": {
+				"rolldown": "1.x",
+				"rollup": "2.x || 3.x || 4.x"
+			},
+			"peerDependenciesMeta": {
+				"rolldown": {
+					"optional": true
+				},
+				"rollup": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/rollup-plugin-visualizer/node_modules/source-map": {
+			"version": "0.7.6",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+			"integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+			"dev": true,
+			"license": "BSD-3-Clause",
+			"engines": {
+				"node": ">= 12"
+			}
+		},
+		"node_modules/run-applescript": {
+			"version": "7.1.0",
+			"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
+			"integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/run-parallel": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+			"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"queue-microtask": "^1.2.2"
+			}
+		},
+		"node_modules/sass": {
+			"version": "1.81.0",
+			"resolved": "https://registry.npmjs.org/sass/-/sass-1.81.0.tgz",
+			"integrity": "sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"chokidar": "^4.0.0",
+				"immutable": "^5.0.2",
+				"source-map-js": ">=0.6.2 <2.0.0"
+			},
+			"bin": {
+				"sass": "sass.js"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			},
+			"optionalDependencies": {
+				"@parcel/watcher": "^2.4.1"
+			}
+		},
+		"node_modules/sax": {
+			"version": "1.6.1",
+			"resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+			"integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==",
+			"dev": true,
+			"license": "BlueOak-1.0.0",
+			"engines": {
+				"node": ">=11.0.0"
+			}
+		},
+		"node_modules/screenfull": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz",
+			"integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/scroll-into-view-if-needed": {
+			"version": "2.2.31",
+			"resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+			"integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
+			"license": "MIT",
+			"dependencies": {
+				"compute-scroll-into-view": "^1.0.20"
+			}
+		},
+		"node_modules/semver": {
+			"version": "7.8.5",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+			"integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+			"dev": true,
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/shebang-command": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+			"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"shebang-regex": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/shebang-regex": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/signal-exit": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+			"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+			"dev": true,
+			"license": "ISC",
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/sirv": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
+			"integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@polka/url": "^1.0.0-next.24",
+				"mrmime": "^2.0.0",
+				"totalist": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=18"
+			}
+		},
+		"node_modules/slate": {
+			"version": "0.72.8",
+			"resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz",
+			"integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"immer": "^9.0.6",
+				"is-plain-object": "^5.0.0",
+				"tiny-warning": "^1.0.3"
+			}
+		},
+		"node_modules/slate-history": {
+			"version": "0.66.0",
+			"resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.66.0.tgz",
+			"integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==",
+			"license": "MIT",
+			"dependencies": {
+				"is-plain-object": "^5.0.0"
+			},
+			"peerDependencies": {
+				"slate": ">=0.65.3"
+			}
+		},
+		"node_modules/snabbdom": {
+			"version": "3.6.4",
+			"resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.4.tgz",
+			"integrity": "sha512-VmxEfuw1/Y/eFj5VtMhYnukExpYiPkNzoo3+N3qwAOUDMl8wXgbli5ebR+j0knE3lZ/0eYskLxNcX64uy10N9w==",
+			"license": "MIT",
+			"peer": true,
+			"engines": {
+				"node": ">=12.17.0"
+			}
+		},
+		"node_modules/socket.io-client": {
+			"version": "4.8.3",
+			"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
+			"integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
+			"license": "MIT",
+			"dependencies": {
+				"@socket.io/component-emitter": "~3.1.0",
+				"debug": "~4.4.1",
+				"engine.io-client": "~6.6.1",
+				"socket.io-parser": "~4.2.4"
+			},
+			"engines": {
+				"node": ">=10.0.0"
+			}
+		},
+		"node_modules/socket.io-parser": {
+			"version": "4.2.7",
+			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.7.tgz",
+			"integrity": "sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg==",
+			"license": "MIT",
+			"dependencies": {
+				"@socket.io/component-emitter": "~3.1.0",
+				"debug": "~4.4.1"
+			},
+			"engines": {
+				"node": ">=10.0.0"
+			}
+		},
+		"node_modules/sortablejs": {
+			"version": "1.14.0",
+			"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
+			"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==",
+			"license": "MIT"
+		},
+		"node_modules/source-map": {
+			"version": "0.6.1",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+			"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+			"dev": true,
+			"license": "BSD-3-Clause",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/source-map-js": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+			"license": "BSD-3-Clause",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/source-map-support": {
+			"version": "0.5.21",
+			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+			"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"buffer-from": "^1.0.0",
+				"source-map": "^0.6.0"
+			}
+		},
+		"node_modules/speakingurl": {
+			"version": "14.0.1",
+			"resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+			"integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+			"dev": true,
+			"license": "BSD-3-Clause",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/ssf": {
+			"version": "0.11.2",
+			"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
+			"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"frac": "~1.1.2"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/ssr-window": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz",
+			"integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==",
+			"license": "MIT"
+		},
+		"node_modules/store": {
+			"version": "2.0.12",
+			"resolved": "https://registry.npmjs.org/store/-/store-2.0.12.tgz",
+			"integrity": "sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw==",
+			"license": "MIT",
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/string-width": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+			"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"eastasianwidth": "^0.2.0",
+				"emoji-regex": "^9.2.2",
+				"strip-ansi": "^7.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/string-width-cjs": {
+			"name": "string-width",
+			"version": "4.2.3",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+			"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/string-width-cjs/node_modules/ansi-regex": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/string-width-cjs/node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/string-width-cjs/node_modules/strip-ansi": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/strip-ansi": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+			"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^6.2.2"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+			}
+		},
+		"node_modules/strip-ansi-cjs": {
+			"name": "strip-ansi",
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/strip-final-newline": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+			"integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/strip-json-comments": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+			"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/sucrase": {
+			"version": "3.35.1",
+			"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+			"integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/gen-mapping": "^0.3.2",
+				"commander": "^4.0.0",
+				"lines-and-columns": "^1.1.6",
+				"mz": "^2.7.0",
+				"pirates": "^4.0.1",
+				"tinyglobby": "^0.2.11",
+				"ts-interface-checker": "^0.1.9"
+			},
+			"bin": {
+				"sucrase": "bin/sucrase",
+				"sucrase-node": "bin/sucrase-node"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			}
+		},
+		"node_modules/sucrase/node_modules/commander": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+			"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/superjson": {
+			"version": "2.2.6",
+			"resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz",
+			"integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"copy-anything": "^4"
+			},
+			"engines": {
+				"node": ">=16"
+			}
+		},
+		"node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/supports-preserve-symlinks-flag": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+			"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/svgo": {
+			"version": "3.3.4",
+			"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz",
+			"integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"commander": "^7.2.0",
+				"css-select": "^5.1.0",
+				"css-tree": "^2.3.1",
+				"css-what": "^6.1.0",
+				"csso": "^5.0.5",
+				"picocolors": "^1.0.0",
+				"sax": "^1.5.0"
+			},
+			"bin": {
+				"svgo": "bin/svgo"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/svgo"
+			}
+		},
+		"node_modules/svgo/node_modules/commander": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 10"
+			}
+		},
+		"node_modules/synckit": {
+			"version": "0.11.13",
+			"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz",
+			"integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@pkgr/core": "^0.3.6"
+			},
+			"engines": {
+				"node": "^14.18.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/synckit"
+			}
+		},
+		"node_modules/tailwindcss": {
+			"version": "3.4.19",
+			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
+			"integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@alloc/quick-lru": "^5.2.0",
+				"arg": "^5.0.2",
+				"chokidar": "^3.6.0",
+				"didyoumean": "^1.2.2",
+				"dlv": "^1.1.3",
+				"fast-glob": "^3.3.2",
+				"glob-parent": "^6.0.2",
+				"is-glob": "^4.0.3",
+				"jiti": "^1.21.7",
+				"lilconfig": "^3.1.3",
+				"micromatch": "^4.0.8",
+				"normalize-path": "^3.0.0",
+				"object-hash": "^3.0.0",
+				"picocolors": "^1.1.1",
+				"postcss": "^8.4.47",
+				"postcss-import": "^15.1.0",
+				"postcss-js": "^4.0.1",
+				"postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
+				"postcss-nested": "^6.2.0",
+				"postcss-selector-parser": "^6.1.2",
+				"resolve": "^1.22.8",
+				"sucrase": "^3.35.0"
+			},
+			"bin": {
+				"tailwind": "lib/cli.js",
+				"tailwindcss": "lib/cli.js"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/tailwindcss/node_modules/chokidar": {
+			"version": "3.6.0",
+			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+			"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"anymatch": "~3.1.2",
+				"braces": "~3.0.2",
+				"glob-parent": "~5.1.2",
+				"is-binary-path": "~2.1.0",
+				"is-glob": "~4.0.1",
+				"normalize-path": "~3.0.0",
+				"readdirp": "~3.6.0"
+			},
+			"engines": {
+				"node": ">= 8.10.0"
+			},
+			"funding": {
+				"url": "https://paulmillr.com/funding/"
+			},
+			"optionalDependencies": {
+				"fsevents": "~2.3.2"
+			}
+		},
+		"node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/tailwindcss/node_modules/picomatch": {
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+			"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
+		"node_modules/tailwindcss/node_modules/readdirp": {
+			"version": "3.6.0",
+			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+			"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"picomatch": "^2.2.1"
+			},
+			"engines": {
+				"node": ">=8.10.0"
+			}
+		},
+		"node_modules/terser": {
+			"version": "5.49.2",
+			"resolved": "https://registry.npmjs.org/terser/-/terser-5.49.2.tgz",
+			"integrity": "sha512-rGbJiKeQ4WDe3EXlDAIaQcwftVfv2Q8o1awFNfvXolJYKkb1AuZY1RTOmqx4LJXZENbWZA7eIsYGHuEzHsi1nQ==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"@jridgewell/source-map": "^0.3.3",
+				"acorn": "^8.15.0",
+				"commander": "^2.20.0",
+				"source-map-support": "~0.5.20"
+			},
+			"bin": {
+				"terser": "bin/terser"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/terser/node_modules/commander": {
+			"version": "2.20.3",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+			"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/thenify": {
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+			"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"any-promise": "^1.0.0"
+			}
+		},
+		"node_modules/thenify-all": {
+			"version": "1.6.0",
+			"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+			"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"thenify": ">= 3.1.0 < 4"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/tiny-warning": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+			"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
+			"license": "MIT"
+		},
+		"node_modules/tinyglobby": {
+			"version": "0.2.17",
+			"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+			"integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"fdir": "^6.5.0",
+				"picomatch": "^4.0.4"
+			},
+			"engines": {
+				"node": ">=12.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/SuperchupuDev"
+			}
+		},
+		"node_modules/to-regex-range": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+			"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-number": "^7.0.0"
+			},
+			"engines": {
+				"node": ">=8.0"
+			}
+		},
+		"node_modules/totalist": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+			"integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/ts-api-utils": {
+			"version": "2.5.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+			"integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18.12"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4"
+			}
+		},
+		"node_modules/ts-interface-checker": {
+			"version": "0.1.13",
+			"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+			"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+			"dev": true,
+			"license": "Apache-2.0"
+		},
+		"node_modules/tslib": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+			"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+			"license": "0BSD"
+		},
+		"node_modules/type": {
+			"version": "2.7.3",
+			"resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
+			"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+			"license": "ISC"
+		},
+		"node_modules/type-check": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+			"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"prelude-ls": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/type-fest": {
+			"version": "0.20.2",
+			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+			"dev": true,
+			"license": "(MIT OR CC0-1.0)",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/typescript": {
+			"version": "5.5.4",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+			"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+			"devOptional": true,
+			"license": "Apache-2.0",
+			"peer": true,
+			"bin": {
+				"tsc": "bin/tsc",
+				"tsserver": "bin/tsserver"
+			},
+			"engines": {
+				"node": ">=14.17"
+			}
+		},
+		"node_modules/typescript-eslint": {
+			"version": "8.67.0",
+			"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.67.0.tgz",
+			"integrity": "sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/eslint-plugin": "8.67.0",
+				"@typescript-eslint/parser": "8.67.0",
+				"@typescript-eslint/typescript-estree": "8.67.0",
+				"@typescript-eslint/utils": "8.67.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+				"typescript": ">=4.8.4 <6.1.0"
+			}
+		},
+		"node_modules/ua-parser-js": {
+			"version": "1.0.37",
+			"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz",
+			"integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/ua-parser-js"
+				},
+				{
+					"type": "paypal",
+					"url": "https://paypal.me/faisalman"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/faisalman"
+				}
+			],
+			"license": "MIT",
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/ufo": {
+			"version": "1.6.4",
+			"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+			"integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/undici-types": {
+			"version": "6.21.0",
+			"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+			"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/unicorn-magic": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+			"integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/universalify": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+			"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 10.0.0"
+			}
+		},
+		"node_modules/unplugin": {
+			"version": "1.16.1",
+			"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz",
+			"integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"acorn": "^8.14.0",
+				"webpack-virtual-modules": "^0.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/update-browserslist-db": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz",
+			"integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/browserslist"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/browserslist"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"escalade": "^3.2.0",
+				"picocolors": "^1.1.1"
+			},
+			"bin": {
+				"update-browserslist-db": "cli.js"
+			},
+			"peerDependencies": {
+				"browserslist": ">= 4.21.0"
+			}
+		},
+		"node_modules/uri-js": {
+			"version": "4.4.1",
+			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+			"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"punycode": "^2.1.0"
+			}
+		},
+		"node_modules/util-deprecate": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/vite": {
+			"version": "5.4.21",
+			"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+			"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+			"dev": true,
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"esbuild": "^0.21.3",
+				"postcss": "^8.4.43",
+				"rollup": "^4.20.0"
+			},
+			"bin": {
+				"vite": "bin/vite.js"
+			},
+			"engines": {
+				"node": "^18.0.0 || >=20.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/vitejs/vite?sponsor=1"
+			},
+			"optionalDependencies": {
+				"fsevents": "~2.3.3"
+			},
+			"peerDependencies": {
+				"@types/node": "^18.0.0 || >=20.0.0",
+				"less": "*",
+				"lightningcss": "^1.21.0",
+				"sass": "*",
+				"sass-embedded": "*",
+				"stylus": "*",
+				"sugarss": "*",
+				"terser": "^5.4.0"
+			},
+			"peerDependenciesMeta": {
+				"@types/node": {
+					"optional": true
+				},
+				"less": {
+					"optional": true
+				},
+				"lightningcss": {
+					"optional": true
+				},
+				"sass": {
+					"optional": true
+				},
+				"sass-embedded": {
+					"optional": true
+				},
+				"stylus": {
+					"optional": true
+				},
+				"sugarss": {
+					"optional": true
+				},
+				"terser": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vite-hot-client": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.2.0.tgz",
+			"integrity": "sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==",
+			"dev": true,
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0"
+			}
+		},
+		"node_modules/vite-plugin-compression": {
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz",
+			"integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"chalk": "^4.1.2",
+				"debug": "^4.3.3",
+				"fs-extra": "^10.0.0"
+			},
+			"peerDependencies": {
+				"vite": ">=2.0.0"
+			}
+		},
+		"node_modules/vite-plugin-inspect": {
+			"version": "0.8.9",
+			"resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz",
+			"integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@antfu/utils": "^0.7.10",
+				"@rollup/pluginutils": "^5.1.3",
+				"debug": "^4.3.7",
+				"error-stack-parser-es": "^0.1.5",
+				"fs-extra": "^11.2.0",
+				"open": "^10.1.0",
+				"perfect-debounce": "^1.0.0",
+				"picocolors": "^1.1.1",
+				"sirv": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1"
+			},
+			"peerDependenciesMeta": {
+				"@nuxt/kit": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+			"integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/vite-plugin-inspect/node_modules/fs-extra": {
+			"version": "11.4.0",
+			"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz",
+			"integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"graceful-fs": "^4.2.0",
+				"jsonfile": "^6.0.1",
+				"universalify": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=14.14"
+			}
+		},
+		"node_modules/vite-plugin-inspect/node_modules/open": {
+			"version": "10.2.0",
+			"resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
+			"integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"default-browser": "^5.2.1",
+				"define-lazy-prop": "^3.0.0",
+				"is-inside-container": "^1.0.0",
+				"wsl-utils": "^0.1.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/vite-plugin-vue-devtools": {
+			"version": "7.7.10",
+			"resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.10.tgz",
+			"integrity": "sha512-aHkUvDKxUdmSnuolEc8DkOrSjMpKO4Bb/BG01x2pBv6xTv487No9Tr7BMAsH2XWwMd+LtlUeCamhEZyEu9vxKQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@vue/devtools-core": "^7.7.10",
+				"@vue/devtools-kit": "^7.7.10",
+				"@vue/devtools-shared": "^7.7.10",
+				"execa": "^9.5.2",
+				"sirv": "^3.0.1",
+				"vite-plugin-inspect": "0.8.9",
+				"vite-plugin-vue-inspector": "^5.3.1"
+			},
+			"engines": {
+				"node": ">=v14.21.3"
+			},
+			"peerDependencies": {
+				"vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+			}
+		},
+		"node_modules/vite-plugin-vue-inspector": {
+			"version": "5.4.0",
+			"resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.4.0.tgz",
+			"integrity": "sha512-Iq/024CydcE46FZqWPU4t4lw4uYOdLnFSO1RNxJVt2qY9zxIjmnkBqhHnYaReWM82kmNnaXs7OkfgRrV2GEjyw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@babel/core": "^7.23.0",
+				"@babel/plugin-proposal-decorators": "^7.23.0",
+				"@babel/plugin-syntax-import-attributes": "^7.22.5",
+				"@babel/plugin-syntax-import-meta": "^7.10.4",
+				"@babel/plugin-transform-typescript": "^7.22.15",
+				"@vue/babel-plugin-jsx": "^1.1.5",
+				"@vue/compiler-dom": "^3.3.4",
+				"kolorist": "^1.8.0",
+				"magic-string": "^0.30.4"
+			},
+			"peerDependencies": {
+				"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/vscode-uri": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+			"integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/vue": {
+			"version": "3.5.41",
+			"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz",
+			"integrity": "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@vue/compiler-dom": "3.5.41",
+				"@vue/compiler-sfc": "3.5.41",
+				"@vue/runtime-dom": "3.5.41",
+				"@vue/server-renderer": "3.5.41",
+				"@vue/shared": "3.5.41"
+			},
+			"peerDependencies": {
+				"typescript": "*"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vue-component-type-helpers": {
+			"version": "3.3.9",
+			"resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.9.tgz",
+			"integrity": "sha512-3c/UfMe0SqyEfcGTyH7mfshHagJ9QTCbppCb0/uGpHZpFug7+If3GeGZN7I0YheKEExemx3xldQPoO7PQSOLQg==",
+			"license": "MIT"
+		},
+		"node_modules/vue-demi": {
+			"version": "0.14.10",
+			"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+			"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"bin": {
+				"vue-demi-fix": "bin/vue-demi-fix.js",
+				"vue-demi-switch": "bin/vue-demi-switch.js"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0-rc.1",
+				"vue": "^3.0.0-0 || ^2.6.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vue-echarts": {
+			"version": "7.0.3",
+			"resolved": "https://registry.npmjs.org/vue-echarts/-/vue-echarts-7.0.3.tgz",
+			"integrity": "sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==",
+			"license": "MIT",
+			"dependencies": {
+				"vue-demi": "^0.13.11"
+			},
+			"peerDependencies": {
+				"@vue/runtime-core": "^3.0.0",
+				"echarts": "^5.5.1",
+				"vue": "^2.7.0 || ^3.1.1"
+			},
+			"peerDependenciesMeta": {
+				"@vue/runtime-core": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vue-echarts/node_modules/vue-demi": {
+			"version": "0.13.11",
+			"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+			"integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"bin": {
+				"vue-demi-fix": "bin/vue-demi-fix.js",
+				"vue-demi-switch": "bin/vue-demi-switch.js"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0-rc.1",
+				"vue": "^3.0.0-0 || ^2.6.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vue-eslint-parser": {
+			"version": "10.4.1",
+			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.1.tgz",
+			"integrity": "sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"debug": "^4.4.0",
+				"eslint-scope": "^8.2.0 || ^9.0.0",
+				"eslint-visitor-keys": "^4.2.0 || ^5.0.0",
+				"espree": "^10.3.0 || ^11.0.0",
+				"esquery": "^1.6.0",
+				"semver": "^7.6.3"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0"
+			}
+		},
+		"node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+			"integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^20.19.0 || ^22.13.0 || >=24"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/vue-i18n": {
+			"version": "11.4.8",
+			"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.4.8.tgz",
+			"integrity": "sha512-0ULeHP6Z9CGvAm67S77ZEp41cfGXIREGL8qfhos2BMgcQQewtQcDKuojt6jjasAD/S8GwfTp2ySPmDSpwvrCMQ==",
+			"license": "MIT",
+			"peer": true,
+			"dependencies": {
+				"@intlify/core-base": "11.4.8",
+				"@intlify/devtools-types": "11.4.8",
+				"@intlify/shared": "11.4.8",
+				"@vue/devtools-api": "^6.5.0"
+			},
+			"engines": {
+				"node": ">= 22"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/vue-router": {
+			"version": "4.6.4",
+			"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz",
+			"integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/devtools-api": "^6.6.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/posva"
+			},
+			"peerDependencies": {
+				"vue": "^3.5.0"
+			}
+		},
+		"node_modules/vue-tianditu2": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/vue-tianditu2/-/vue-tianditu2-3.0.1.tgz",
+			"integrity": "sha512-M/rL0sMTN5D50zBk8Jwc1v9ErC8Ab65RRk8VZEtf3HBR8F6m+PECkOtKEzpV8t9+SVdv8Nluctdubt15SFxygw==",
+			"license": "MIT",
+			"dependencies": {
+				"mitt": "^3.0.1"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/vue-tsc": {
+			"version": "2.2.12",
+			"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz",
+			"integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@volar/typescript": "2.4.15",
+				"@vue/language-core": "2.2.12"
+			},
+			"bin": {
+				"vue-tsc": "bin/vue-tsc.js"
+			},
+			"peerDependencies": {
+				"typescript": ">=5.0.0"
+			}
+		},
+		"node_modules/vuedraggable": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz",
+			"integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
+			"license": "MIT",
+			"dependencies": {
+				"sortablejs": "1.14.0"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.1"
+			}
+		},
+		"node_modules/web-streams-polyfill": {
+			"version": "3.3.3",
+			"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+			"integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/webpack-virtual-modules": {
+			"version": "0.6.2",
+			"resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+			"integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/which": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"isexe": "^2.0.0"
+			},
+			"bin": {
+				"node-which": "bin/node-which"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/wildcard": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz",
+			"integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==",
+			"license": "MIT"
+		},
+		"node_modules/wmf": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
+			"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/word": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
+			"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/word-wrap": {
+			"version": "1.2.5",
+			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+			"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/wrap-ansi": {
+			"version": "8.1.0",
+			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+			"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^6.1.0",
+				"string-width": "^5.0.1",
+				"strip-ansi": "^7.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi-cjs": {
+			"name": "wrap-ansi",
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+			"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^4.0.0",
+				"string-width": "^4.1.0",
+				"strip-ansi": "^6.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/string-width": {
+			"version": "4.2.3",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+			"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/ansi-styles": {
+			"version": "6.2.3",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+			"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/ws": {
+			"version": "8.21.3",
+			"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz",
+			"integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10.0.0"
+			},
+			"peerDependencies": {
+				"bufferutil": "^4.0.1",
+				"utf-8-validate": ">=5.0.2"
+			},
+			"peerDependenciesMeta": {
+				"bufferutil": {
+					"optional": true
+				},
+				"utf-8-validate": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/wsl-utils": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
+			"integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-wsl": "^3.1.0"
+			},
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/wsl-utils/node_modules/is-wsl": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
+			"integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"is-inside-container": "^1.0.0"
+			},
+			"engines": {
+				"node": ">=16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/xlsx": {
+			"version": "0.18.5",
+			"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
+			"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"adler-32": "~1.3.0",
+				"cfb": "~1.2.1",
+				"codepage": "~1.15.0",
+				"crc-32": "~1.2.1",
+				"ssf": "~0.11.2",
+				"wmf": "~1.0.1",
+				"word": "~0.3.0"
+			},
+			"bin": {
+				"xlsx": "bin/xlsx.njs"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/xml-name-validator": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/xmlhttprequest-ssl": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+			"integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/y18n": {
+			"version": "5.0.8",
+			"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+			"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+			"dev": true,
+			"license": "ISC",
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/yallist": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+			"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/yaml": {
+			"version": "2.9.0",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
+			"integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
+			"dev": true,
+			"license": "ISC",
+			"bin": {
+				"yaml": "bin.mjs"
+			},
+			"engines": {
+				"node": ">= 14.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/eemeli"
+			}
+		},
+		"node_modules/yaml-eslint-parser": {
+			"version": "1.3.2",
+			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.2.tgz",
+			"integrity": "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"eslint-visitor-keys": "^3.0.0",
+				"yaml": "^2.0.0"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ota-meshi"
+			}
+		},
+		"node_modules/yargs": {
+			"version": "17.7.3",
+			"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz",
+			"integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"cliui": "^8.0.1",
+				"escalade": "^3.1.1",
+				"get-caller-file": "^2.0.5",
+				"require-directory": "^2.1.1",
+				"string-width": "^4.2.3",
+				"y18n": "^5.0.5",
+				"yargs-parser": "^21.1.1"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/yargs-parser": {
+			"version": "21.1.1",
+			"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+			"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+			"dev": true,
+			"license": "ISC",
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/yargs/node_modules/ansi-regex": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/yargs/node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/yargs/node_modules/string-width": {
+			"version": "4.2.3",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+			"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/yargs/node_modules/strip-ansi": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/yocto-queue": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+			"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/yoctocolors": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz",
+			"integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/zrender": {
+			"version": "5.6.1",
+			"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz",
+			"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+			"license": "BSD-3-Clause",
+			"dependencies": {
+				"tslib": "2.3.0"
+			}
+		}
+	}
+}
diff --git a/package.json b/package.json
index 75ce733..dc5106f 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
 		"mitt": "^3.0.1",
 		"nprogress": "^0.2.0",
 		"pinia": "^2.3.1",
+		"socket.io-client": "^4.7.2",
 		"store": "^2.0.12",
 		"vue": "^3.5.13",
 		"vue-echarts": "^7.0.3",
@@ -75,4 +76,4 @@
 		"vue-tsc": "^2.2.0"
 	},
 	"packageManager": "pnpm@11.12.0+sha512.820a6fbd0d9f04c226638002aead1e45340a9139dd5dc077c1d83ef44aa2481c8eb6637b4c9aa696a3c7e35ba818e49cf27213e5f2b91138d09b7a3e26e898ba"
-}
+}
\ No newline at end of file
diff --git a/packages/crud/package.json b/packages/crud/package.json
index 9ababe6..20fa82b 100644
--- a/packages/crud/package.json
+++ b/packages/crud/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "@cool-vue/crud",
-	"version": "8.0.6",
+	"version": "8.0.2",
 	"private": false,
 	"main": "./dist/index.umd.js",
 	"module": "./dist/index.es.js",
@@ -13,7 +13,7 @@
 	},
 	"dependencies": {
 		"@vue/runtime-core": "^3.5.13",
-		"element-plus": "^2.10.4",
+		"element-plus": "^2.9.4",
 		"lodash-es": "^4.17.21",
 		"vue": "^3.5.13"
 	},
diff --git a/packages/vite-plugin/dist/eps/index.d.ts b/packages/vite-plugin/dist/eps/index.d.ts
index a3719cf..15c292b 100644
--- a/packages/vite-plugin/dist/eps/index.d.ts
+++ b/packages/vite-plugin/dist/eps/index.d.ts
@@ -1,6 +1,6 @@
 import type { Eps } from "../../types";
 /**
- * 涓诲叆鍙o細鍒涘缓 eps 鐩稿叧鏂囦欢鍜� service
+ * 主入口:创建 eps 相关文件和 service
  */
 export declare function createEps(): Promise<{
     service: {};
diff --git a/packages/vite-plugin/dist/utils/index.d.ts b/packages/vite-plugin/dist/utils/index.d.ts
index dddc356..93ad1b0 100644
--- a/packages/vite-plugin/dist/utils/index.d.ts
+++ b/packages/vite-plugin/dist/utils/index.d.ts
@@ -10,9 +10,9 @@
 export declare function error(message: string): void;
 export declare function success(message: string): void;
 /**
- * 姣旇緝涓や釜鐗堟湰鍙�
- * @param version1 鐗堟湰鍙�1 (濡�: "1.2.3")
- * @param version2 鐗堟湰鍙�2 (濡�: "1.2.4")
- * @returns 1: version1 > version2, 0: 鐩哥瓑, -1: version1 < version2
+ * 比较两个版本号
+ * @param version1 版本号1 (如: "1.2.3")
+ * @param version2 版本号2 (如: "1.2.4")
+ * @returns 1: version1 > version2, 0: 相等, -1: version1 < version2
  */
 export declare function compareVersion(version1: string, version2: string): number;
diff --git a/packages/vite-plugin/package.json b/packages/vite-plugin/package.json
index 5852a25..51f808e 100644
--- a/packages/vite-plugin/package.json
+++ b/packages/vite-plugin/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "@cool-vue/vite-plugin",
-	"version": "8.2.20",
+	"version": "8.0.3",
 	"description": "cool-admin銆乧ool-uni builder",
 	"types": "./dist/index.d.ts",
 	"main": "/dist/index.js",
@@ -23,7 +23,6 @@
 		"@typescript-eslint/eslint-plugin": "^7.7.1",
 		"@typescript-eslint/parser": "^7.7.1",
 		"eslint": "^9.1.1",
-		"postcss-value-parser": "^4.2.0",
 		"rollup": "^4.16.2",
 		"tslib": "^2.6.2",
 		"typescript": "^5.4.5",
diff --git a/packages/vite-plugin/pnpm-lock.yaml b/packages/vite-plugin/pnpm-lock.yaml
new file mode 100644
index 0000000..e4c4341
--- /dev/null
+++ b/packages/vite-plugin/pnpm-lock.yaml
@@ -0,0 +1,2269 @@
+lockfileVersion: '9.0'
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
+importers:
+
+  .:
+    dependencies:
+      '@vue/compiler-sfc':
+        specifier: ^3.5.13
+        version: 3.5.13
+      axios:
+        specifier: ^1.6.8
+        version: 1.7.9
+      glob:
+        specifier: ^10.3.12
+        version: 10.4.5
+      lodash:
+        specifier: ^4.17.21
+        version: 4.17.21
+      magic-string:
+        specifier: ^0.30.17
+        version: 0.30.17
+      prettier:
+        specifier: ^3.4.2
+        version: 3.5.1
+      svgo:
+        specifier: ^3.3.2
+        version: 3.3.2
+    devDependencies:
+      '@rollup/plugin-typescript':
+        specifier: ^11.1.6
+        version: 11.1.6(rollup@4.34.8)(tslib@2.8.1)(typescript@5.7.3)
+      '@types/lodash':
+        specifier: ^4.17.15
+        version: 4.17.15
+      '@types/node':
+        specifier: ^20.12.7
+        version: 20.17.19
+      '@typescript-eslint/eslint-plugin':
+        specifier: ^7.7.1
+        version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3)
+      '@typescript-eslint/parser':
+        specifier: ^7.7.1
+        version: 7.18.0(eslint@9.20.1)(typescript@5.7.3)
+      eslint:
+        specifier: ^9.1.1
+        version: 9.20.1
+      rollup:
+        specifier: ^4.16.2
+        version: 4.34.8
+      tslib:
+        specifier: ^2.6.2
+        version: 2.8.1
+      typescript:
+        specifier: ^5.4.5
+        version: 5.7.3
+      vite:
+        specifier: ^5.4.14
+        version: 5.4.14(@types/node@20.17.19)
+
+packages:
+
+  '@babel/helper-string-parser@7.25.9':
+    resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-validator-identifier@7.25.9':
+    resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/parser@7.26.9':
+    resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+
+  '@babel/types@7.26.9':
+    resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
+    engines: {node: '>=6.9.0'}
+
+  '@esbuild/aix-ppc64@0.21.5':
+    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [aix]
+
+  '@esbuild/android-arm64@0.21.5':
+    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+
+  '@esbuild/android-arm@0.21.5':
+    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+
+  '@esbuild/android-x64@0.21.5':
+    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+
+  '@esbuild/darwin-arm64@0.21.5':
+    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+
+  '@esbuild/darwin-x64@0.21.5':
+    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+
+  '@esbuild/freebsd-arm64@0.21.5':
+    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+
+  '@esbuild/freebsd-x64@0.21.5':
+    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+
+  '@esbuild/linux-arm64@0.21.5':
+    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+
+  '@esbuild/linux-arm@0.21.5':
+    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+
+  '@esbuild/linux-ia32@0.21.5':
+    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+
+  '@esbuild/linux-loong64@0.21.5':
+    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+
+  '@esbuild/linux-mips64el@0.21.5':
+    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+
+  '@esbuild/linux-ppc64@0.21.5':
+    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+
+  '@esbuild/linux-riscv64@0.21.5':
+    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+
+  '@esbuild/linux-s390x@0.21.5':
+    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+
+  '@esbuild/linux-x64@0.21.5':
+    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+
+  '@esbuild/netbsd-x64@0.21.5':
+    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+
+  '@esbuild/openbsd-x64@0.21.5':
+    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+
+  '@esbuild/sunos-x64@0.21.5':
+    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+
+  '@esbuild/win32-arm64@0.21.5':
+    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+
+  '@esbuild/win32-ia32@0.21.5':
+    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+
+  '@esbuild/win32-x64@0.21.5':
+    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+
+  '@eslint-community/eslint-utils@4.4.1':
+    resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+  '@eslint-community/regexpp@4.12.1':
+    resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+  '@eslint/config-array@0.19.2':
+    resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/core@0.10.0':
+    resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/core@0.11.0':
+    resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/eslintrc@3.2.0':
+    resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/js@9.20.0':
+    resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/object-schema@2.1.6':
+    resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/plugin-kit@0.2.5':
+    resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@humanfs/core@0.19.1':
+    resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+    engines: {node: '>=18.18.0'}
+
+  '@humanfs/node@0.16.6':
+    resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+    engines: {node: '>=18.18.0'}
+
+  '@humanwhocodes/module-importer@1.0.1':
+    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+    engines: {node: '>=12.22'}
+
+  '@humanwhocodes/retry@0.3.1':
+    resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+    engines: {node: '>=18.18'}
+
+  '@humanwhocodes/retry@0.4.1':
+    resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
+    engines: {node: '>=18.18'}
+
+  '@isaacs/cliui@8.0.2':
+    resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+    engines: {node: '>=12'}
+
+  '@jridgewell/sourcemap-codec@1.5.0':
+    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+  '@nodelib/fs.scandir@2.1.5':
+    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+    engines: {node: '>= 8'}
+
+  '@nodelib/fs.stat@2.0.5':
+    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+    engines: {node: '>= 8'}
+
+  '@nodelib/fs.walk@1.2.8':
+    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+    engines: {node: '>= 8'}
+
+  '@pkgjs/parseargs@0.11.0':
+    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+    engines: {node: '>=14'}
+
+  '@rollup/plugin-typescript@11.1.6':
+    resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^2.14.0||^3.0.0||^4.0.0
+      tslib: '*'
+      typescript: '>=3.7.0'
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+      tslib:
+        optional: true
+
+  '@rollup/pluginutils@5.1.4':
+    resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+
+  '@rollup/rollup-android-arm-eabi@4.34.8':
+    resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
+    cpu: [arm]
+    os: [android]
+
+  '@rollup/rollup-android-arm64@4.34.8':
+    resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
+    cpu: [arm64]
+    os: [android]
+
+  '@rollup/rollup-darwin-arm64@4.34.8':
+    resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
+    cpu: [arm64]
+    os: [darwin]
+
+  '@rollup/rollup-darwin-x64@4.34.8':
+    resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
+    cpu: [x64]
+    os: [darwin]
+
+  '@rollup/rollup-freebsd-arm64@4.34.8':
+    resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
+    cpu: [arm64]
+    os: [freebsd]
+
+  '@rollup/rollup-freebsd-x64@4.34.8':
+    resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
+    cpu: [x64]
+    os: [freebsd]
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
+    resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
+    cpu: [arm]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-arm-musleabihf@4.34.8':
+    resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
+    cpu: [arm]
+    os: [linux]
+    libc: [musl]
+
+  '@rollup/rollup-linux-arm64-gnu@4.34.8':
+    resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
+    cpu: [arm64]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-arm64-musl@4.34.8':
+    resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
+    cpu: [arm64]
+    os: [linux]
+    libc: [musl]
+
+  '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
+    resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
+    cpu: [loong64]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
+    resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
+    cpu: [ppc64]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-riscv64-gnu@4.34.8':
+    resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
+    cpu: [riscv64]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-s390x-gnu@4.34.8':
+    resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
+    cpu: [s390x]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-x64-gnu@4.34.8':
+    resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
+    cpu: [x64]
+    os: [linux]
+    libc: [glibc]
+
+  '@rollup/rollup-linux-x64-musl@4.34.8':
+    resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
+    cpu: [x64]
+    os: [linux]
+    libc: [musl]
+
+  '@rollup/rollup-win32-arm64-msvc@4.34.8':
+    resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
+    cpu: [arm64]
+    os: [win32]
+
+  '@rollup/rollup-win32-ia32-msvc@4.34.8':
+    resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
+    cpu: [ia32]
+    os: [win32]
+
+  '@rollup/rollup-win32-x64-msvc@4.34.8':
+    resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
+    cpu: [x64]
+    os: [win32]
+
+  '@trysound/sax@0.2.0':
+    resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+    engines: {node: '>=10.13.0'}
+
+  '@types/estree@1.0.6':
+    resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+  '@types/json-schema@7.0.15':
+    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+  '@types/lodash@4.17.15':
+    resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==}
+
+  '@types/node@20.17.19':
+    resolution: {integrity: sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==}
+
+  '@typescript-eslint/eslint-plugin@7.18.0':
+    resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^7.0.0
+      eslint: ^8.56.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  '@typescript-eslint/parser@7.18.0':
+    resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      eslint: ^8.56.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  '@typescript-eslint/scope-manager@7.18.0':
+    resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+
+  '@typescript-eslint/type-utils@7.18.0':
+    resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      eslint: ^8.56.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  '@typescript-eslint/types@7.18.0':
+    resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+
+  '@typescript-eslint/typescript-estree@7.18.0':
+    resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  '@typescript-eslint/utils@7.18.0':
+    resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      eslint: ^8.56.0
+
+  '@typescript-eslint/visitor-keys@7.18.0':
+    resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+
+  '@vue/compiler-core@3.5.13':
+    resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
+
+  '@vue/compiler-dom@3.5.13':
+    resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
+
+  '@vue/compiler-sfc@3.5.13':
+    resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
+
+  '@vue/compiler-ssr@3.5.13':
+    resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
+
+  '@vue/shared@3.5.13':
+    resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+
+  acorn-jsx@5.3.2:
+    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+    peerDependencies:
+      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+  acorn@8.14.0:
+    resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
+    engines: {node: '>=0.4.0'}
+    hasBin: true
+
+  ajv@6.12.6:
+    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+  ansi-regex@5.0.1:
+    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+    engines: {node: '>=8'}
+
+  ansi-regex@6.1.0:
+    resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+    engines: {node: '>=12'}
+
+  ansi-styles@4.3.0:
+    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+    engines: {node: '>=8'}
+
+  ansi-styles@6.2.1:
+    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+    engines: {node: '>=12'}
+
+  argparse@2.0.1:
+    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+  array-union@2.1.0:
+    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+    engines: {node: '>=8'}
+
+  asynckit@0.4.0:
+    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+  axios@1.7.9:
+    resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
+
+  balanced-match@1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+  boolbase@1.0.0:
+    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+  brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+  brace-expansion@2.0.1:
+    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+  braces@3.0.3:
+    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+    engines: {node: '>=8'}
+
+  call-bind-apply-helpers@1.0.2:
+    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+    engines: {node: '>= 0.4'}
+
+  callsites@3.1.0:
+    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+    engines: {node: '>=6'}
+
+  chalk@4.1.2:
+    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+    engines: {node: '>=10'}
+
+  color-convert@2.0.1:
+    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+    engines: {node: '>=7.0.0'}
+
+  color-name@1.1.4:
+    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+  combined-stream@1.0.8:
+    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+    engines: {node: '>= 0.8'}
+
+  commander@7.2.0:
+    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+    engines: {node: '>= 10'}
+
+  concat-map@0.0.1:
+    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+  cross-spawn@7.0.6:
+    resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+    engines: {node: '>= 8'}
+
+  css-select@5.1.0:
+    resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
+  css-tree@2.2.1:
+    resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+  css-tree@2.3.1:
+    resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+  css-what@6.1.0:
+    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+    engines: {node: '>= 6'}
+
+  csso@5.0.5:
+    resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+  debug@4.4.0:
+    resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+
+  deep-is@0.1.4:
+    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+  delayed-stream@1.0.0:
+    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+    engines: {node: '>=0.4.0'}
+
+  dir-glob@3.0.1:
+    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+    engines: {node: '>=8'}
+
+  dom-serializer@2.0.0:
+    resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+  domelementtype@2.3.0:
+    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+  domhandler@5.0.3:
+    resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+    engines: {node: '>= 4'}
+
+  domutils@3.2.2:
+    resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+  dunder-proto@1.0.1:
+    resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+    engines: {node: '>= 0.4'}
+
+  eastasianwidth@0.2.0:
+    resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+  emoji-regex@8.0.0:
+    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+  emoji-regex@9.2.2:
+    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+  entities@4.5.0:
+    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+    engines: {node: '>=0.12'}
+
+  es-define-property@1.0.1:
+    resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+    engines: {node: '>= 0.4'}
+
+  es-errors@1.3.0:
+    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+    engines: {node: '>= 0.4'}
+
+  es-object-atoms@1.1.1:
+    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+    engines: {node: '>= 0.4'}
+
+  es-set-tostringtag@2.1.0:
+    resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+    engines: {node: '>= 0.4'}
+
+  esbuild@0.21.5:
+    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+    engines: {node: '>=12'}
+    hasBin: true
+
+  escape-string-regexp@4.0.0:
+    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+    engines: {node: '>=10'}
+
+  eslint-scope@8.2.0:
+    resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  eslint-visitor-keys@3.4.3:
+    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  eslint-visitor-keys@4.2.0:
+    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  eslint@9.20.1:
+    resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    hasBin: true
+    peerDependencies:
+      jiti: '*'
+    peerDependenciesMeta:
+      jiti:
+        optional: true
+
+  espree@10.3.0:
+    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  esquery@1.6.0:
+    resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+    engines: {node: '>=0.10'}
+
+  esrecurse@4.3.0:
+    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+    engines: {node: '>=4.0'}
+
+  estraverse@5.3.0:
+    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+    engines: {node: '>=4.0'}
+
+  estree-walker@2.0.2:
+    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+  esutils@2.0.3:
+    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+    engines: {node: '>=0.10.0'}
+
+  fast-deep-equal@3.1.3:
+    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+  fast-glob@3.3.3:
+    resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+    engines: {node: '>=8.6.0'}
+
+  fast-json-stable-stringify@2.1.0:
+    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+  fast-levenshtein@2.0.6:
+    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+  fastq@1.19.0:
+    resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
+
+  file-entry-cache@8.0.0:
+    resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+    engines: {node: '>=16.0.0'}
+
+  fill-range@7.1.1:
+    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+    engines: {node: '>=8'}
+
+  find-up@5.0.0:
+    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+    engines: {node: '>=10'}
+
+  flat-cache@4.0.1:
+    resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+    engines: {node: '>=16'}
+
+  flatted@3.3.2:
+    resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
+
+  follow-redirects@1.15.9:
+    resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
+    engines: {node: '>=4.0'}
+    peerDependencies:
+      debug: '*'
+    peerDependenciesMeta:
+      debug:
+        optional: true
+
+  foreground-child@3.3.0:
+    resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+    engines: {node: '>=14'}
+
+  form-data@4.0.2:
+    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
+    engines: {node: '>= 6'}
+
+  fsevents@2.3.3:
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+
+  function-bind@1.1.2:
+    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+  get-intrinsic@1.2.7:
+    resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
+    engines: {node: '>= 0.4'}
+
+  get-proto@1.0.1:
+    resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+    engines: {node: '>= 0.4'}
+
+  glob-parent@5.1.2:
+    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+    engines: {node: '>= 6'}
+
+  glob-parent@6.0.2:
+    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+    engines: {node: '>=10.13.0'}
+
+  glob@10.4.5:
+    resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+    hasBin: true
+
+  globals@14.0.0:
+    resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+    engines: {node: '>=18'}
+
+  globby@11.1.0:
+    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+    engines: {node: '>=10'}
+
+  gopd@1.2.0:
+    resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+    engines: {node: '>= 0.4'}
+
+  graphemer@1.4.0:
+    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+  has-flag@4.0.0:
+    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+    engines: {node: '>=8'}
+
+  has-symbols@1.1.0:
+    resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+    engines: {node: '>= 0.4'}
+
+  has-tostringtag@1.0.2:
+    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+    engines: {node: '>= 0.4'}
+
+  hasown@2.0.2:
+    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+    engines: {node: '>= 0.4'}
+
+  ignore@5.3.2:
+    resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+    engines: {node: '>= 4'}
+
+  import-fresh@3.3.1:
+    resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+    engines: {node: '>=6'}
+
+  imurmurhash@0.1.4:
+    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+    engines: {node: '>=0.8.19'}
+
+  is-core-module@2.16.1:
+    resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+    engines: {node: '>= 0.4'}
+
+  is-extglob@2.1.1:
+    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+    engines: {node: '>=0.10.0'}
+
+  is-fullwidth-code-point@3.0.0:
+    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+    engines: {node: '>=8'}
+
+  is-glob@4.0.3:
+    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+    engines: {node: '>=0.10.0'}
+
+  is-number@7.0.0:
+    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+    engines: {node: '>=0.12.0'}
+
+  isexe@2.0.0:
+    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+  jackspeak@3.4.3:
+    resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+  js-yaml@4.1.0:
+    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+    hasBin: true
+
+  json-buffer@3.0.1:
+    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+  json-schema-traverse@0.4.1:
+    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+  json-stable-stringify-without-jsonify@1.0.1:
+    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+  keyv@4.5.4:
+    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+  levn@0.4.1:
+    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+    engines: {node: '>= 0.8.0'}
+
+  locate-path@6.0.0:
+    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+    engines: {node: '>=10'}
+
+  lodash.merge@4.6.2:
+    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+  lodash@4.17.21:
+    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+  lru-cache@10.4.3:
+    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+  magic-string@0.30.17:
+    resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
+  math-intrinsics@1.1.0:
+    resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+    engines: {node: '>= 0.4'}
+
+  mdn-data@2.0.28:
+    resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+  mdn-data@2.0.30:
+    resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+
+  merge2@1.4.1:
+    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+    engines: {node: '>= 8'}
+
+  micromatch@4.0.8:
+    resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+    engines: {node: '>=8.6'}
+
+  mime-db@1.52.0:
+    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+    engines: {node: '>= 0.6'}
+
+  mime-types@2.1.35:
+    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+    engines: {node: '>= 0.6'}
+
+  minimatch@3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+  minimatch@9.0.5:
+    resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  minipass@7.1.2:
+    resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  ms@2.1.3:
+    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+  nanoid@3.3.8:
+    resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+
+  natural-compare@1.4.0:
+    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+  nth-check@2.1.1:
+    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+  optionator@0.9.4:
+    resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+    engines: {node: '>= 0.8.0'}
+
+  p-limit@3.1.0:
+    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+    engines: {node: '>=10'}
+
+  p-locate@5.0.0:
+    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+    engines: {node: '>=10'}
+
+  package-json-from-dist@1.0.1:
+    resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+  parent-module@1.0.1:
+    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+    engines: {node: '>=6'}
+
+  path-exists@4.0.0:
+    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+    engines: {node: '>=8'}
+
+  path-key@3.1.1:
+    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+    engines: {node: '>=8'}
+
+  path-parse@1.0.7:
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+  path-scurry@1.11.1:
+    resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+    engines: {node: '>=16 || 14 >=14.18'}
+
+  path-type@4.0.0:
+    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+    engines: {node: '>=8'}
+
+  picocolors@1.1.1:
+    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+  picomatch@2.3.1:
+    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+    engines: {node: '>=8.6'}
+
+  picomatch@4.0.2:
+    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+    engines: {node: '>=12'}
+
+  postcss@8.5.2:
+    resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
+    engines: {node: ^10 || ^12 || >=14}
+
+  prelude-ls@1.2.1:
+    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+    engines: {node: '>= 0.8.0'}
+
+  prettier@3.5.1:
+    resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  proxy-from-env@1.1.0:
+    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+  punycode@2.3.1:
+    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+    engines: {node: '>=6'}
+
+  queue-microtask@1.2.3:
+    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+  resolve-from@4.0.0:
+    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+    engines: {node: '>=4'}
+
+  resolve@1.22.10:
+    resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+    engines: {node: '>= 0.4'}
+    hasBin: true
+
+  reusify@1.0.4:
+    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+  rollup@4.34.8:
+    resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
+    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+    hasBin: true
+
+  run-parallel@1.2.0:
+    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+  semver@7.7.1:
+    resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  shebang-command@2.0.0:
+    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+    engines: {node: '>=8'}
+
+  shebang-regex@3.0.0:
+    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+    engines: {node: '>=8'}
+
+  signal-exit@4.1.0:
+    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+    engines: {node: '>=14'}
+
+  slash@3.0.0:
+    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+    engines: {node: '>=8'}
+
+  source-map-js@1.2.1:
+    resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+    engines: {node: '>=0.10.0'}
+
+  string-width@4.2.3:
+    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+    engines: {node: '>=8'}
+
+  string-width@5.1.2:
+    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+    engines: {node: '>=12'}
+
+  strip-ansi@6.0.1:
+    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+    engines: {node: '>=8'}
+
+  strip-ansi@7.1.0:
+    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+    engines: {node: '>=12'}
+
+  strip-json-comments@3.1.1:
+    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+    engines: {node: '>=8'}
+
+  supports-color@7.2.0:
+    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+    engines: {node: '>=8'}
+
+  supports-preserve-symlinks-flag@1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+    engines: {node: '>= 0.4'}
+
+  svgo@3.3.2:
+    resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+    engines: {node: '>=14.0.0'}
+    hasBin: true
+
+  to-regex-range@5.0.1:
+    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+    engines: {node: '>=8.0'}
+
+  ts-api-utils@1.4.3:
+    resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      typescript: '>=4.2.0'
+
+  tslib@2.8.1:
+    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+  type-check@0.4.0:
+    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+    engines: {node: '>= 0.8.0'}
+
+  typescript@5.7.3:
+    resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
+    engines: {node: '>=14.17'}
+    hasBin: true
+
+  undici-types@6.19.8:
+    resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+  uri-js@4.4.1:
+    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+  vite@5.4.14:
+    resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': ^18.0.0 || >=20.0.0
+      less: '*'
+      lightningcss: ^1.21.0
+      sass: '*'
+      sass-embedded: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      lightningcss:
+        optional: true
+      sass:
+        optional: true
+      sass-embedded:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+
+  which@2.0.2:
+    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+    engines: {node: '>= 8'}
+    hasBin: true
+
+  word-wrap@1.2.5:
+    resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+    engines: {node: '>=0.10.0'}
+
+  wrap-ansi@7.0.0:
+    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+    engines: {node: '>=10'}
+
+  wrap-ansi@8.1.0:
+    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+    engines: {node: '>=12'}
+
+  yocto-queue@0.1.0:
+    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+    engines: {node: '>=10'}
+
+snapshots:
+
+  '@babel/helper-string-parser@7.25.9': {}
+
+  '@babel/helper-validator-identifier@7.25.9': {}
+
+  '@babel/parser@7.26.9':
+    dependencies:
+      '@babel/types': 7.26.9
+
+  '@babel/types@7.26.9':
+    dependencies:
+      '@babel/helper-string-parser': 7.25.9
+      '@babel/helper-validator-identifier': 7.25.9
+
+  '@esbuild/aix-ppc64@0.21.5':
+    optional: true
+
+  '@esbuild/android-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/android-arm@0.21.5':
+    optional: true
+
+  '@esbuild/android-x64@0.21.5':
+    optional: true
+
+  '@esbuild/darwin-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/darwin-x64@0.21.5':
+    optional: true
+
+  '@esbuild/freebsd-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/freebsd-x64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-arm@0.21.5':
+    optional: true
+
+  '@esbuild/linux-ia32@0.21.5':
+    optional: true
+
+  '@esbuild/linux-loong64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-mips64el@0.21.5':
+    optional: true
+
+  '@esbuild/linux-ppc64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-riscv64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-s390x@0.21.5':
+    optional: true
+
+  '@esbuild/linux-x64@0.21.5':
+    optional: true
+
+  '@esbuild/netbsd-x64@0.21.5':
+    optional: true
+
+  '@esbuild/openbsd-x64@0.21.5':
+    optional: true
+
+  '@esbuild/sunos-x64@0.21.5':
+    optional: true
+
+  '@esbuild/win32-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/win32-ia32@0.21.5':
+    optional: true
+
+  '@esbuild/win32-x64@0.21.5':
+    optional: true
+
+  '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1)':
+    dependencies:
+      eslint: 9.20.1
+      eslint-visitor-keys: 3.4.3
+
+  '@eslint-community/regexpp@4.12.1': {}
+
+  '@eslint/config-array@0.19.2':
+    dependencies:
+      '@eslint/object-schema': 2.1.6
+      debug: 4.4.0
+      minimatch: 3.1.2
+    transitivePeerDependencies:
+      - supports-color
+
+  '@eslint/core@0.10.0':
+    dependencies:
+      '@types/json-schema': 7.0.15
+
+  '@eslint/core@0.11.0':
+    dependencies:
+      '@types/json-schema': 7.0.15
+
+  '@eslint/eslintrc@3.2.0':
+    dependencies:
+      ajv: 6.12.6
+      debug: 4.4.0
+      espree: 10.3.0
+      globals: 14.0.0
+      ignore: 5.3.2
+      import-fresh: 3.3.1
+      js-yaml: 4.1.0
+      minimatch: 3.1.2
+      strip-json-comments: 3.1.1
+    transitivePeerDependencies:
+      - supports-color
+
+  '@eslint/js@9.20.0': {}
+
+  '@eslint/object-schema@2.1.6': {}
+
+  '@eslint/plugin-kit@0.2.5':
+    dependencies:
+      '@eslint/core': 0.10.0
+      levn: 0.4.1
+
+  '@humanfs/core@0.19.1': {}
+
+  '@humanfs/node@0.16.6':
+    dependencies:
+      '@humanfs/core': 0.19.1
+      '@humanwhocodes/retry': 0.3.1
+
+  '@humanwhocodes/module-importer@1.0.1': {}
+
+  '@humanwhocodes/retry@0.3.1': {}
+
+  '@humanwhocodes/retry@0.4.1': {}
+
+  '@isaacs/cliui@8.0.2':
+    dependencies:
+      string-width: 5.1.2
+      string-width-cjs: string-width@4.2.3
+      strip-ansi: 7.1.0
+      strip-ansi-cjs: strip-ansi@6.0.1
+      wrap-ansi: 8.1.0
+      wrap-ansi-cjs: wrap-ansi@7.0.0
+
+  '@jridgewell/sourcemap-codec@1.5.0': {}
+
+  '@nodelib/fs.scandir@2.1.5':
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      run-parallel: 1.2.0
+
+  '@nodelib/fs.stat@2.0.5': {}
+
+  '@nodelib/fs.walk@1.2.8':
+    dependencies:
+      '@nodelib/fs.scandir': 2.1.5
+      fastq: 1.19.0
+
+  '@pkgjs/parseargs@0.11.0':
+    optional: true
+
+  '@rollup/plugin-typescript@11.1.6(rollup@4.34.8)(tslib@2.8.1)(typescript@5.7.3)':
+    dependencies:
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
+      resolve: 1.22.10
+      typescript: 5.7.3
+    optionalDependencies:
+      rollup: 4.34.8
+      tslib: 2.8.1
+
+  '@rollup/pluginutils@5.1.4(rollup@4.34.8)':
+    dependencies:
+      '@types/estree': 1.0.6
+      estree-walker: 2.0.2
+      picomatch: 4.0.2
+    optionalDependencies:
+      rollup: 4.34.8
+
+  '@rollup/rollup-android-arm-eabi@4.34.8':
+    optional: true
+
+  '@rollup/rollup-android-arm64@4.34.8':
+    optional: true
+
+  '@rollup/rollup-darwin-arm64@4.34.8':
+    optional: true
+
+  '@rollup/rollup-darwin-x64@4.34.8':
+    optional: true
+
+  '@rollup/rollup-freebsd-arm64@4.34.8':
+    optional: true
+
+  '@rollup/rollup-freebsd-x64@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-arm-musleabihf@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-gnu@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-musl@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-riscv64-gnu@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-s390x-gnu@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-x64-gnu@4.34.8':
+    optional: true
+
+  '@rollup/rollup-linux-x64-musl@4.34.8':
+    optional: true
+
+  '@rollup/rollup-win32-arm64-msvc@4.34.8':
+    optional: true
+
+  '@rollup/rollup-win32-ia32-msvc@4.34.8':
+    optional: true
+
+  '@rollup/rollup-win32-x64-msvc@4.34.8':
+    optional: true
+
+  '@trysound/sax@0.2.0': {}
+
+  '@types/estree@1.0.6': {}
+
+  '@types/json-schema@7.0.15': {}
+
+  '@types/lodash@4.17.15': {}
+
+  '@types/node@20.17.19':
+    dependencies:
+      undici-types: 6.19.8
+
+  '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3)':
+    dependencies:
+      '@eslint-community/regexpp': 4.12.1
+      '@typescript-eslint/parser': 7.18.0(eslint@9.20.1)(typescript@5.7.3)
+      '@typescript-eslint/scope-manager': 7.18.0
+      '@typescript-eslint/type-utils': 7.18.0(eslint@9.20.1)(typescript@5.7.3)
+      '@typescript-eslint/utils': 7.18.0(eslint@9.20.1)(typescript@5.7.3)
+      '@typescript-eslint/visitor-keys': 7.18.0
+      eslint: 9.20.1
+      graphemer: 1.4.0
+      ignore: 5.3.2
+      natural-compare: 1.4.0
+      ts-api-utils: 1.4.3(typescript@5.7.3)
+    optionalDependencies:
+      typescript: 5.7.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@typescript-eslint/parser@7.18.0(eslint@9.20.1)(typescript@5.7.3)':
+    dependencies:
+      '@typescript-eslint/scope-manager': 7.18.0
+      '@typescript-eslint/types': 7.18.0
+      '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3)
+      '@typescript-eslint/visitor-keys': 7.18.0
+      debug: 4.4.0
+      eslint: 9.20.1
+    optionalDependencies:
+      typescript: 5.7.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@typescript-eslint/scope-manager@7.18.0':
+    dependencies:
+      '@typescript-eslint/types': 7.18.0
+      '@typescript-eslint/visitor-keys': 7.18.0
+
+  '@typescript-eslint/type-utils@7.18.0(eslint@9.20.1)(typescript@5.7.3)':
+    dependencies:
+      '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3)
+      '@typescript-eslint/utils': 7.18.0(eslint@9.20.1)(typescript@5.7.3)
+      debug: 4.4.0
+      eslint: 9.20.1
+      ts-api-utils: 1.4.3(typescript@5.7.3)
+    optionalDependencies:
+      typescript: 5.7.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@typescript-eslint/types@7.18.0': {}
+
+  '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)':
+    dependencies:
+      '@typescript-eslint/types': 7.18.0
+      '@typescript-eslint/visitor-keys': 7.18.0
+      debug: 4.4.0
+      globby: 11.1.0
+      is-glob: 4.0.3
+      minimatch: 9.0.5
+      semver: 7.7.1
+      ts-api-utils: 1.4.3(typescript@5.7.3)
+    optionalDependencies:
+      typescript: 5.7.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@typescript-eslint/utils@7.18.0(eslint@9.20.1)(typescript@5.7.3)':
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1)
+      '@typescript-eslint/scope-manager': 7.18.0
+      '@typescript-eslint/types': 7.18.0
+      '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3)
+      eslint: 9.20.1
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
+  '@typescript-eslint/visitor-keys@7.18.0':
+    dependencies:
+      '@typescript-eslint/types': 7.18.0
+      eslint-visitor-keys: 3.4.3
+
+  '@vue/compiler-core@3.5.13':
+    dependencies:
+      '@babel/parser': 7.26.9
+      '@vue/shared': 3.5.13
+      entities: 4.5.0
+      estree-walker: 2.0.2
+      source-map-js: 1.2.1
+
+  '@vue/compiler-dom@3.5.13':
+    dependencies:
+      '@vue/compiler-core': 3.5.13
+      '@vue/shared': 3.5.13
+
+  '@vue/compiler-sfc@3.5.13':
+    dependencies:
+      '@babel/parser': 7.26.9
+      '@vue/compiler-core': 3.5.13
+      '@vue/compiler-dom': 3.5.13
+      '@vue/compiler-ssr': 3.5.13
+      '@vue/shared': 3.5.13
+      estree-walker: 2.0.2
+      magic-string: 0.30.17
+      postcss: 8.5.2
+      source-map-js: 1.2.1
+
+  '@vue/compiler-ssr@3.5.13':
+    dependencies:
+      '@vue/compiler-dom': 3.5.13
+      '@vue/shared': 3.5.13
+
+  '@vue/shared@3.5.13': {}
+
+  acorn-jsx@5.3.2(acorn@8.14.0):
+    dependencies:
+      acorn: 8.14.0
+
+  acorn@8.14.0: {}
+
+  ajv@6.12.6:
+    dependencies:
+      fast-deep-equal: 3.1.3
+      fast-json-stable-stringify: 2.1.0
+      json-schema-traverse: 0.4.1
+      uri-js: 4.4.1
+
+  ansi-regex@5.0.1: {}
+
+  ansi-regex@6.1.0: {}
+
+  ansi-styles@4.3.0:
+    dependencies:
+      color-convert: 2.0.1
+
+  ansi-styles@6.2.1: {}
+
+  argparse@2.0.1: {}
+
+  array-union@2.1.0: {}
+
+  asynckit@0.4.0: {}
+
+  axios@1.7.9:
+    dependencies:
+      follow-redirects: 1.15.9
+      form-data: 4.0.2
+      proxy-from-env: 1.1.0
+    transitivePeerDependencies:
+      - debug
+
+  balanced-match@1.0.2: {}
+
+  boolbase@1.0.0: {}
+
+  brace-expansion@1.1.11:
+    dependencies:
+      balanced-match: 1.0.2
+      concat-map: 0.0.1
+
+  brace-expansion@2.0.1:
+    dependencies:
+      balanced-match: 1.0.2
+
+  braces@3.0.3:
+    dependencies:
+      fill-range: 7.1.1
+
+  call-bind-apply-helpers@1.0.2:
+    dependencies:
+      es-errors: 1.3.0
+      function-bind: 1.1.2
+
+  callsites@3.1.0: {}
+
+  chalk@4.1.2:
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+
+  color-convert@2.0.1:
+    dependencies:
+      color-name: 1.1.4
+
+  color-name@1.1.4: {}
+
+  combined-stream@1.0.8:
+    dependencies:
+      delayed-stream: 1.0.0
+
+  commander@7.2.0: {}
+
+  concat-map@0.0.1: {}
+
+  cross-spawn@7.0.6:
+    dependencies:
+      path-key: 3.1.1
+      shebang-command: 2.0.0
+      which: 2.0.2
+
+  css-select@5.1.0:
+    dependencies:
+      boolbase: 1.0.0
+      css-what: 6.1.0
+      domhandler: 5.0.3
+      domutils: 3.2.2
+      nth-check: 2.1.1
+
+  css-tree@2.2.1:
+    dependencies:
+      mdn-data: 2.0.28
+      source-map-js: 1.2.1
+
+  css-tree@2.3.1:
+    dependencies:
+      mdn-data: 2.0.30
+      source-map-js: 1.2.1
+
+  css-what@6.1.0: {}
+
+  csso@5.0.5:
+    dependencies:
+      css-tree: 2.2.1
+
+  debug@4.4.0:
+    dependencies:
+      ms: 2.1.3
+
+  deep-is@0.1.4: {}
+
+  delayed-stream@1.0.0: {}
+
+  dir-glob@3.0.1:
+    dependencies:
+      path-type: 4.0.0
+
+  dom-serializer@2.0.0:
+    dependencies:
+      domelementtype: 2.3.0
+      domhandler: 5.0.3
+      entities: 4.5.0
+
+  domelementtype@2.3.0: {}
+
+  domhandler@5.0.3:
+    dependencies:
+      domelementtype: 2.3.0
+
+  domutils@3.2.2:
+    dependencies:
+      dom-serializer: 2.0.0
+      domelementtype: 2.3.0
+      domhandler: 5.0.3
+
+  dunder-proto@1.0.1:
+    dependencies:
+      call-bind-apply-helpers: 1.0.2
+      es-errors: 1.3.0
+      gopd: 1.2.0
+
+  eastasianwidth@0.2.0: {}
+
+  emoji-regex@8.0.0: {}
+
+  emoji-regex@9.2.2: {}
+
+  entities@4.5.0: {}
+
+  es-define-property@1.0.1: {}
+
+  es-errors@1.3.0: {}
+
+  es-object-atoms@1.1.1:
+    dependencies:
+      es-errors: 1.3.0
+
+  es-set-tostringtag@2.1.0:
+    dependencies:
+      es-errors: 1.3.0
+      get-intrinsic: 1.2.7
+      has-tostringtag: 1.0.2
+      hasown: 2.0.2
+
+  esbuild@0.21.5:
+    optionalDependencies:
+      '@esbuild/aix-ppc64': 0.21.5
+      '@esbuild/android-arm': 0.21.5
+      '@esbuild/android-arm64': 0.21.5
+      '@esbuild/android-x64': 0.21.5
+      '@esbuild/darwin-arm64': 0.21.5
+      '@esbuild/darwin-x64': 0.21.5
+      '@esbuild/freebsd-arm64': 0.21.5
+      '@esbuild/freebsd-x64': 0.21.5
+      '@esbuild/linux-arm': 0.21.5
+      '@esbuild/linux-arm64': 0.21.5
+      '@esbuild/linux-ia32': 0.21.5
+      '@esbuild/linux-loong64': 0.21.5
+      '@esbuild/linux-mips64el': 0.21.5
+      '@esbuild/linux-ppc64': 0.21.5
+      '@esbuild/linux-riscv64': 0.21.5
+      '@esbuild/linux-s390x': 0.21.5
+      '@esbuild/linux-x64': 0.21.5
+      '@esbuild/netbsd-x64': 0.21.5
+      '@esbuild/openbsd-x64': 0.21.5
+      '@esbuild/sunos-x64': 0.21.5
+      '@esbuild/win32-arm64': 0.21.5
+      '@esbuild/win32-ia32': 0.21.5
+      '@esbuild/win32-x64': 0.21.5
+
+  escape-string-regexp@4.0.0: {}
+
+  eslint-scope@8.2.0:
+    dependencies:
+      esrecurse: 4.3.0
+      estraverse: 5.3.0
+
+  eslint-visitor-keys@3.4.3: {}
+
+  eslint-visitor-keys@4.2.0: {}
+
+  eslint@9.20.1:
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1)
+      '@eslint-community/regexpp': 4.12.1
+      '@eslint/config-array': 0.19.2
+      '@eslint/core': 0.11.0
+      '@eslint/eslintrc': 3.2.0
+      '@eslint/js': 9.20.0
+      '@eslint/plugin-kit': 0.2.5
+      '@humanfs/node': 0.16.6
+      '@humanwhocodes/module-importer': 1.0.1
+      '@humanwhocodes/retry': 0.4.1
+      '@types/estree': 1.0.6
+      '@types/json-schema': 7.0.15
+      ajv: 6.12.6
+      chalk: 4.1.2
+      cross-spawn: 7.0.6
+      debug: 4.4.0
+      escape-string-regexp: 4.0.0
+      eslint-scope: 8.2.0
+      eslint-visitor-keys: 4.2.0
+      espree: 10.3.0
+      esquery: 1.6.0
+      esutils: 2.0.3
+      fast-deep-equal: 3.1.3
+      file-entry-cache: 8.0.0
+      find-up: 5.0.0
+      glob-parent: 6.0.2
+      ignore: 5.3.2
+      imurmurhash: 0.1.4
+      is-glob: 4.0.3
+      json-stable-stringify-without-jsonify: 1.0.1
+      lodash.merge: 4.6.2
+      minimatch: 3.1.2
+      natural-compare: 1.4.0
+      optionator: 0.9.4
+    transitivePeerDependencies:
+      - supports-color
+
+  espree@10.3.0:
+    dependencies:
+      acorn: 8.14.0
+      acorn-jsx: 5.3.2(acorn@8.14.0)
+      eslint-visitor-keys: 4.2.0
+
+  esquery@1.6.0:
+    dependencies:
+      estraverse: 5.3.0
+
+  esrecurse@4.3.0:
+    dependencies:
+      estraverse: 5.3.0
+
+  estraverse@5.3.0: {}
+
+  estree-walker@2.0.2: {}
+
+  esutils@2.0.3: {}
+
+  fast-deep-equal@3.1.3: {}
+
+  fast-glob@3.3.3:
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      '@nodelib/fs.walk': 1.2.8
+      glob-parent: 5.1.2
+      merge2: 1.4.1
+      micromatch: 4.0.8
+
+  fast-json-stable-stringify@2.1.0: {}
+
+  fast-levenshtein@2.0.6: {}
+
+  fastq@1.19.0:
+    dependencies:
+      reusify: 1.0.4
+
+  file-entry-cache@8.0.0:
+    dependencies:
+      flat-cache: 4.0.1
+
+  fill-range@7.1.1:
+    dependencies:
+      to-regex-range: 5.0.1
+
+  find-up@5.0.0:
+    dependencies:
+      locate-path: 6.0.0
+      path-exists: 4.0.0
+
+  flat-cache@4.0.1:
+    dependencies:
+      flatted: 3.3.2
+      keyv: 4.5.4
+
+  flatted@3.3.2: {}
+
+  follow-redirects@1.15.9: {}
+
+  foreground-child@3.3.0:
+    dependencies:
+      cross-spawn: 7.0.6
+      signal-exit: 4.1.0
+
+  form-data@4.0.2:
+    dependencies:
+      asynckit: 0.4.0
+      combined-stream: 1.0.8
+      es-set-tostringtag: 2.1.0
+      mime-types: 2.1.35
+
+  fsevents@2.3.3:
+    optional: true
+
+  function-bind@1.1.2: {}
+
+  get-intrinsic@1.2.7:
+    dependencies:
+      call-bind-apply-helpers: 1.0.2
+      es-define-property: 1.0.1
+      es-errors: 1.3.0
+      es-object-atoms: 1.1.1
+      function-bind: 1.1.2
+      get-proto: 1.0.1
+      gopd: 1.2.0
+      has-symbols: 1.1.0
+      hasown: 2.0.2
+      math-intrinsics: 1.1.0
+
+  get-proto@1.0.1:
+    dependencies:
+      dunder-proto: 1.0.1
+      es-object-atoms: 1.1.1
+
+  glob-parent@5.1.2:
+    dependencies:
+      is-glob: 4.0.3
+
+  glob-parent@6.0.2:
+    dependencies:
+      is-glob: 4.0.3
+
+  glob@10.4.5:
+    dependencies:
+      foreground-child: 3.3.0
+      jackspeak: 3.4.3
+      minimatch: 9.0.5
+      minipass: 7.1.2
+      package-json-from-dist: 1.0.1
+      path-scurry: 1.11.1
+
+  globals@14.0.0: {}
+
+  globby@11.1.0:
+    dependencies:
+      array-union: 2.1.0
+      dir-glob: 3.0.1
+      fast-glob: 3.3.3
+      ignore: 5.3.2
+      merge2: 1.4.1
+      slash: 3.0.0
+
+  gopd@1.2.0: {}
+
+  graphemer@1.4.0: {}
+
+  has-flag@4.0.0: {}
+
+  has-symbols@1.1.0: {}
+
+  has-tostringtag@1.0.2:
+    dependencies:
+      has-symbols: 1.1.0
+
+  hasown@2.0.2:
+    dependencies:
+      function-bind: 1.1.2
+
+  ignore@5.3.2: {}
+
+  import-fresh@3.3.1:
+    dependencies:
+      parent-module: 1.0.1
+      resolve-from: 4.0.0
+
+  imurmurhash@0.1.4: {}
+
+  is-core-module@2.16.1:
+    dependencies:
+      hasown: 2.0.2
+
+  is-extglob@2.1.1: {}
+
+  is-fullwidth-code-point@3.0.0: {}
+
+  is-glob@4.0.3:
+    dependencies:
+      is-extglob: 2.1.1
+
+  is-number@7.0.0: {}
+
+  isexe@2.0.0: {}
+
+  jackspeak@3.4.3:
+    dependencies:
+      '@isaacs/cliui': 8.0.2
+    optionalDependencies:
+      '@pkgjs/parseargs': 0.11.0
+
+  js-yaml@4.1.0:
+    dependencies:
+      argparse: 2.0.1
+
+  json-buffer@3.0.1: {}
+
+  json-schema-traverse@0.4.1: {}
+
+  json-stable-stringify-without-jsonify@1.0.1: {}
+
+  keyv@4.5.4:
+    dependencies:
+      json-buffer: 3.0.1
+
+  levn@0.4.1:
+    dependencies:
+      prelude-ls: 1.2.1
+      type-check: 0.4.0
+
+  locate-path@6.0.0:
+    dependencies:
+      p-locate: 5.0.0
+
+  lodash.merge@4.6.2: {}
+
+  lodash@4.17.21: {}
+
+  lru-cache@10.4.3: {}
+
+  magic-string@0.30.17:
+    dependencies:
+      '@jridgewell/sourcemap-codec': 1.5.0
+
+  math-intrinsics@1.1.0: {}
+
+  mdn-data@2.0.28: {}
+
+  mdn-data@2.0.30: {}
+
+  merge2@1.4.1: {}
+
+  micromatch@4.0.8:
+    dependencies:
+      braces: 3.0.3
+      picomatch: 2.3.1
+
+  mime-db@1.52.0: {}
+
+  mime-types@2.1.35:
+    dependencies:
+      mime-db: 1.52.0
+
+  minimatch@3.1.2:
+    dependencies:
+      brace-expansion: 1.1.11
+
+  minimatch@9.0.5:
+    dependencies:
+      brace-expansion: 2.0.1
+
+  minipass@7.1.2: {}
+
+  ms@2.1.3: {}
+
+  nanoid@3.3.8: {}
+
+  natural-compare@1.4.0: {}
+
+  nth-check@2.1.1:
+    dependencies:
+      boolbase: 1.0.0
+
+  optionator@0.9.4:
+    dependencies:
+      deep-is: 0.1.4
+      fast-levenshtein: 2.0.6
+      levn: 0.4.1
+      prelude-ls: 1.2.1
+      type-check: 0.4.0
+      word-wrap: 1.2.5
+
+  p-limit@3.1.0:
+    dependencies:
+      yocto-queue: 0.1.0
+
+  p-locate@5.0.0:
+    dependencies:
+      p-limit: 3.1.0
+
+  package-json-from-dist@1.0.1: {}
+
+  parent-module@1.0.1:
+    dependencies:
+      callsites: 3.1.0
+
+  path-exists@4.0.0: {}
+
+  path-key@3.1.1: {}
+
+  path-parse@1.0.7: {}
+
+  path-scurry@1.11.1:
+    dependencies:
+      lru-cache: 10.4.3
+      minipass: 7.1.2
+
+  path-type@4.0.0: {}
+
+  picocolors@1.1.1: {}
+
+  picomatch@2.3.1: {}
+
+  picomatch@4.0.2: {}
+
+  postcss@8.5.2:
+    dependencies:
+      nanoid: 3.3.8
+      picocolors: 1.1.1
+      source-map-js: 1.2.1
+
+  prelude-ls@1.2.1: {}
+
+  prettier@3.5.1: {}
+
+  proxy-from-env@1.1.0: {}
+
+  punycode@2.3.1: {}
+
+  queue-microtask@1.2.3: {}
+
+  resolve-from@4.0.0: {}
+
+  resolve@1.22.10:
+    dependencies:
+      is-core-module: 2.16.1
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+
+  reusify@1.0.4: {}
+
+  rollup@4.34.8:
+    dependencies:
+      '@types/estree': 1.0.6
+    optionalDependencies:
+      '@rollup/rollup-android-arm-eabi': 4.34.8
+      '@rollup/rollup-android-arm64': 4.34.8
+      '@rollup/rollup-darwin-arm64': 4.34.8
+      '@rollup/rollup-darwin-x64': 4.34.8
+      '@rollup/rollup-freebsd-arm64': 4.34.8
+      '@rollup/rollup-freebsd-x64': 4.34.8
+      '@rollup/rollup-linux-arm-gnueabihf': 4.34.8
+      '@rollup/rollup-linux-arm-musleabihf': 4.34.8
+      '@rollup/rollup-linux-arm64-gnu': 4.34.8
+      '@rollup/rollup-linux-arm64-musl': 4.34.8
+      '@rollup/rollup-linux-loongarch64-gnu': 4.34.8
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
+      '@rollup/rollup-linux-riscv64-gnu': 4.34.8
+      '@rollup/rollup-linux-s390x-gnu': 4.34.8
+      '@rollup/rollup-linux-x64-gnu': 4.34.8
+      '@rollup/rollup-linux-x64-musl': 4.34.8
+      '@rollup/rollup-win32-arm64-msvc': 4.34.8
+      '@rollup/rollup-win32-ia32-msvc': 4.34.8
+      '@rollup/rollup-win32-x64-msvc': 4.34.8
+      fsevents: 2.3.3
+
+  run-parallel@1.2.0:
+    dependencies:
+      queue-microtask: 1.2.3
+
+  semver@7.7.1: {}
+
+  shebang-command@2.0.0:
+    dependencies:
+      shebang-regex: 3.0.0
+
+  shebang-regex@3.0.0: {}
+
+  signal-exit@4.1.0: {}
+
+  slash@3.0.0: {}
+
+  source-map-js@1.2.1: {}
+
+  string-width@4.2.3:
+    dependencies:
+      emoji-regex: 8.0.0
+      is-fullwidth-code-point: 3.0.0
+      strip-ansi: 6.0.1
+
+  string-width@5.1.2:
+    dependencies:
+      eastasianwidth: 0.2.0
+      emoji-regex: 9.2.2
+      strip-ansi: 7.1.0
+
+  strip-ansi@6.0.1:
+    dependencies:
+      ansi-regex: 5.0.1
+
+  strip-ansi@7.1.0:
+    dependencies:
+      ansi-regex: 6.1.0
+
+  strip-json-comments@3.1.1: {}
+
+  supports-color@7.2.0:
+    dependencies:
+      has-flag: 4.0.0
+
+  supports-preserve-symlinks-flag@1.0.0: {}
+
+  svgo@3.3.2:
+    dependencies:
+      '@trysound/sax': 0.2.0
+      commander: 7.2.0
+      css-select: 5.1.0
+      css-tree: 2.3.1
+      css-what: 6.1.0
+      csso: 5.0.5
+      picocolors: 1.1.1
+
+  to-regex-range@5.0.1:
+    dependencies:
+      is-number: 7.0.0
+
+  ts-api-utils@1.4.3(typescript@5.7.3):
+    dependencies:
+      typescript: 5.7.3
+
+  tslib@2.8.1: {}
+
+  type-check@0.4.0:
+    dependencies:
+      prelude-ls: 1.2.1
+
+  typescript@5.7.3: {}
+
+  undici-types@6.19.8: {}
+
+  uri-js@4.4.1:
+    dependencies:
+      punycode: 2.3.1
+
+  vite@5.4.14(@types/node@20.17.19):
+    dependencies:
+      esbuild: 0.21.5
+      postcss: 8.5.2
+      rollup: 4.34.8
+    optionalDependencies:
+      '@types/node': 20.17.19
+      fsevents: 2.3.3
+
+  which@2.0.2:
+    dependencies:
+      isexe: 2.0.0
+
+  word-wrap@1.2.5: {}
+
+  wrap-ansi@7.0.0:
+    dependencies:
+      ansi-styles: 4.3.0
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+
+  wrap-ansi@8.1.0:
+    dependencies:
+      ansi-styles: 6.2.1
+      string-width: 5.1.2
+      strip-ansi: 7.1.0
+
+  yocto-queue@0.1.0: {}
diff --git a/packages/vite-plugin/src/config.ts b/packages/vite-plugin/src/config.ts
index 7292230..dec5bf7 100644
--- a/packages/vite-plugin/src/config.ts
+++ b/packages/vite-plugin/src/config.ts
@@ -1,10 +1,9 @@
-import type { Type } from "../types";
+import type { Config } from "../types";
 
-export const config = {
-	type: "admin" as Type,
+export const config: Config.Data = {
+	type: "admin",
 	reqUrl: "",
 	demo: false,
-	nameTag: true,
 	eps: {
 		enable: true,
 		api: "",
@@ -12,7 +11,7 @@
 		mapping: [
 			{
 				// 鑷畾涔夊尮閰�
-				custom: ({ propertyName, type }: { propertyName: string; type: string }) => {
+				custom: ({ propertyName, type }) => {
 					// 濡傛灉娌℃湁锛岃繑鍥瀗ull鎴栬�呬笉杩斿洖锛屽垯缁х画閬嶅巻鍏朵粬鍖归厤瑙勫垯
 					return null;
 				},
@@ -37,25 +36,6 @@
 				type: "BigInt",
 				test: ["bigint"],
 			},
-			{
-				type: "any",
-				test: ["json"],
-			},
 		],
 	},
-	svg: {
-		skipNames: ["base"],
-	},
-	tailwind: {
-		enable: true,
-		remUnit: 14,
-		remPrecision: 6,
-		rpxRatio: 2,
-		darkTextClass: "dark:text-surface-50",
-	},
-	uniapp: {
-		isPlugin: false,
-	},
-	clean: false,
-	utsPlatform: "web",
 };
diff --git a/packages/vite-plugin/src/ctx/index.ts b/packages/vite-plugin/src/ctx/index.ts
index 8ed7a87..4b64564 100644
--- a/packages/vite-plugin/src/ctx/index.ts
+++ b/packages/vite-plugin/src/ctx/index.ts
@@ -13,7 +13,7 @@
 		serviceLang: "Node",
 	};
 
-	if (config.type == "app" || config.type == "uniapp-x") {
+	if (config.type == "app") {
 		const manifest = readFile(rootDir("manifest.json"), true);
 
 		// 鏂囦欢璺緞
@@ -28,13 +28,6 @@
 		// 鍒犻櫎涓存椂椤甸潰
 		ctx.pages = ctx.pages?.filter((e) => !e.isTemp);
 		ctx.subPackages = ctx.subPackages?.filter((e) => !e.isTemp);
-
-		// 鍒犻櫎涓嶉渶瑕佺殑鏁版嵁
-		for (const i in ctx) {
-			if (!["pages", "subPackages", "tabBar", "globalStyle", "uniIdRouter"].includes(i)) {
-				delete ctx[i];
-			}
-		}
 
 		// 鍔犺浇 uni_modules 閰嶇疆鏂囦欢
 		const files = await glob(rootDir("uni_modules") + "/**/pages_init.json", {
diff --git a/packages/vite-plugin/src/eps/index.ts b/packages/vite-plugin/src/eps/index.ts
index 1ad2393..99e13e3 100644
--- a/packages/vite-plugin/src/eps/index.ts
+++ b/packages/vite-plugin/src/eps/index.ts
@@ -1,24 +1,17 @@
 import { createDir, error, firstUpperCase, readFile, rootDir, toCamel } from "../utils";
 import { join } from "path";
 import axios from "axios";
-import { compact, isEmpty, last, uniqBy, values } from "lodash";
+import { isEmpty, last, values } from "lodash";
 import { createWriteStream } from "fs";
 import prettier from "prettier";
 import { config } from "../config";
 import type { Eps } from "../../types";
-import { flatten } from "../uniapp-x/flatten";
-import { interfaceToType } from "../uniapp-x/utils";
 
-// 鍏ㄥ眬 service 瀵硅薄锛岀敤浜庡瓨鍌ㄦ湇鍔$粨鏋�
 const service = {};
-// eps 瀹炰綋鍒楄〃
 let list: Eps.Entity[] = [];
 
-/**
- * 鑾峰彇 eps 璇锋眰鍦板潃
- * @returns {string} eps url
- */
-function getEpsUrl(): string {
+// 鑾峰彇璇锋眰鍦板潃
+function getEpsUrl() {
 	let url = config.eps.api;
 
 	if (!url) {
@@ -27,9 +20,9 @@
 
 	switch (url) {
 		case "app":
-		case "uniapp-x":
 			url = "/app/base/comm/eps";
 			break;
+
 		case "admin":
 			url = "/admin/base/open/eps";
 			break;
@@ -38,122 +31,57 @@
 	return url;
 }
 
-/**
- * 鑾峰彇 eps 璺緞
- * @param filename 鏂囦欢鍚�
- * @returns {string} 瀹屾暣璺緞
- */
-function getEpsPath(filename?: string): string {
+// 鑾峰彇璺緞
+function getEpsPath(filename?: string) {
 	return join(
 		config.type == "admin" ? config.eps.dist : rootDir(config.eps.dist),
 		filename || "",
 	);
 }
 
-/**
- * 鑾峰彇瀵硅薄鏂规硶鍚嶏紙鎺掗櫎 namespace銆乸ermission 瀛楁锛�
- * @param v 瀵硅薄
- * @returns {string[]} 鏂规硶鍚嶆暟缁�
- */
-function getNames(v: any): string[] {
+// 鑾峰彇鏂规硶鍚�
+function getNames(v: any) {
 	return Object.keys(v).filter((e) => !["namespace", "permission"].includes(e));
 }
 
-/**
- * 鑾峰彇瀛楁绫诲瀷
- */
-function getType({ propertyName, type }: any) {
-	for (const map of config.eps.mapping) {
-		if (map.custom) {
-			const resType = map.custom({ propertyName, type });
-			if (resType) return resType;
-		}
-		if (map.test) {
-			if (map.test.includes(type)) return map.type;
-		}
-	}
-	return type;
-}
-
-/**
- * 鏍煎紡鍖栨柟娉曞悕锛屽幓闄ょ壒娈婂瓧绗�
- */
-function formatName(name: string) {
-	return (name || "").replace(/[:,\s,\/,-]/g, "");
-}
-
-/**
- * 妫�鏌ユ柟娉曞悕鏄惁鍚堟硶锛堜笉鍖呭惈鐗规畩瀛楃锛�
- */
-function checkName(name: string) {
-	return name && !["{", "}", ":"].some((e) => name.includes(e));
-}
-
-/**
- * 涓嶆敮鎸� uniapp-x 骞冲彴鏄剧ず
- */
-function noUniappX(text: string, defaultText: string = "") {
-	if (config.type == "uniapp-x") {
-		return defaultText;
-	} else {
-		return text;
-	}
-}
-
-/**
- * 鏌ユ壘瀛楁
- * @param sources 瀛楁 source 鏁扮粍
- * @param item eps 瀹炰綋
- * @returns {Eps.Column[]} 瀛楁鏁扮粍
- */
-function findColumns(sources: string[], item: Eps.Entity): Eps.Column[] {
+// 鎵惧瓧娈�
+function findColumns(sources: string[], item: Eps.Entity) {
 	const columns = [item.columns, item.pageColumns].flat().filter(Boolean);
 	return (sources || [])
 		.map((e) => columns.find((c) => c.source == e))
 		.filter(Boolean) as Eps.Column[];
 }
 
-/**
- * 浣跨敤 prettier 鏍煎紡鍖� TypeScript 浠g爜
- * @param text 浠g爜鏂囨湰
- * @returns {Promise<string|null>} 鏍煎紡鍖栧悗鐨勪唬鐮�
- */
-async function formatCode(text: string): Promise<string | null> {
-	return prettier
-		.format(text, {
-			parser: "typescript",
-			useTabs: true,
-			tabWidth: 4,
-			endOfLine: "lf",
-			semi: true,
-			singleQuote: false,
-			printWidth: 100,
-			trailingComma: "none",
-		})
-		.catch((err) => {
-			console.log(err);
-			error(`[cool-eps] File format error, please try again`);
-			return null;
-		});
+// 鏍煎紡鍖栦唬鐮�
+async function formatCode(text: string) {
+	return prettier.format(text, {
+		parser: "typescript",
+		useTabs: true,
+		tabWidth: 4,
+		endOfLine: "lf",
+		semi: true,
+		singleQuote: false,
+		printWidth: 100,
+		trailingComma: "none",
+	});
 }
 
-/**
- * 鑾峰彇 eps 鏁版嵁锛堟湰鍦颁紭鍏堬紝杩滅▼鍏滃簳锛�
- */
+// 鑾峰彇鏁版嵁
 async function getData() {
-	// 璇诲彇鏈湴 eps.json
+	// 璇诲彇鏈湴鏁版嵁
 	list = readFile(getEpsPath("eps.json"), true) || [];
 
-	// 鎷兼帴璇锋眰鍦板潃
+	// 璇锋眰鍦板潃
 	const url = config.reqUrl + getEpsUrl();
 
-	// 璇锋眰杩滅▼ eps 鏁版嵁
+	// 璇锋眰鏁版嵁
 	await axios
 		.get(url, {
 			timeout: 5000,
 		})
 		.then((res) => {
 			const { code, data, message } = res.data;
+
 			if (code === 1000) {
 				if (!isEmpty(data) && data) {
 					list = values(data).flat();
@@ -166,11 +94,18 @@
 			error(`[cool-eps] API service is not running 鈫� ${url}`);
 		});
 
-	// 鍒濆鍖栧鐞嗭紝琛ュ叏缂虹渷瀛楁
+	// 鍒濆鍖栧鐞�
 	list.forEach((e) => {
-		if (!e.namespace) e.namespace = "";
-		if (!e.api) e.api = [];
-		if (!e.columns) e.columns = [];
+		if (!e.namespace) {
+			e.namespace = "";
+		}
+		if (!e.api) {
+			e.api = [];
+		}
+		if (!e.columns) {
+			e.columns = [];
+		}
+
 		if (!e.search) {
 			e.search = {
 				fieldEq: findColumns(e.pageQueryOp?.fieldEq, e),
@@ -179,40 +114,29 @@
 			};
 		}
 	});
-
-	if (config.type == "uniapp-x" || config.type == "app") {
-		list = list.filter((e) => e.prefix.startsWith("/app") || e.prefix.startsWith("/admin"));
-	}
 }
 
-/**
- * 鍒涘缓 eps.json 鏂囦欢
- * @returns {boolean} 鏄惁鏈夋洿鏂�
- */
-function createJson(): boolean {
-	let data: any[] = [];
+// 鍒涘缓 json 鏂囦欢
+function createJson() {
+	const arr = list.map((e) => {
+		return {
+			prefix: e.prefix,
+			name: e.name || "",
+			api: e.api.map((e) => {
+				return {
+					name: e.name,
+					method: e.method,
+					path: e.path,
+				};
+			}),
+			search: e.search,
+		};
+	});
 
-	if (config.type != "uniapp-x") {
-		data = list.map((e) => {
-			return {
-				prefix: e.prefix,
-				name: e.name || "",
-				api: e.api.map((apiItem) => ({
-					name: apiItem.name,
-					method: apiItem.method,
-					path: apiItem.path,
-				})),
-				search: e.search,
-			};
-		});
-	} else {
-		data = list;
-	}
-
-	const content = JSON.stringify(data);
+	const content = JSON.stringify(arr);
 	const local_content = readFile(getEpsPath("eps.json"));
 
-	// 鍒ゆ柇鏄惁闇�瑕佹洿鏂�
+	// 鏄惁闇�瑕佹洿鏂�
 	const isUpdate = content != local_content;
 
 	if (isUpdate) {
@@ -224,32 +148,51 @@
 	return isUpdate;
 }
 
-/**
- * 鍒涘缓 eps 绫诲瀷鎻忚堪鏂囦欢锛坉.ts/ts锛�
- * @param param0 list: eps瀹炰綋鍒楄〃, service: service瀵硅薄
- */
+// 鍒涘缓鎻忚堪鏂囦欢
 async function createDescribe({ list, service }: { list: Eps.Entity[]; service: any }) {
-	/**
-	 * 鍒涘缓 Entity 鎺ュ彛瀹氫箟
-	 */
+	// 鑾峰彇绫诲瀷
+	function getType({ propertyName, type }: any) {
+		for (const map of config.eps.mapping) {
+			if (map.custom) {
+				const resType = map.custom({ propertyName, type });
+				if (resType) return resType;
+			}
+			if (map.test) {
+				if (map.test.includes(type)) return map.type;
+			}
+		}
+		return type;
+	}
+
+	// 鏍煎紡鍖栨柟娉曞悕
+	function formatName(name: string) {
+		return (name || "").replace(/[:,\s,\/,-]/g, "");
+	}
+
+	// 鍒涘缓 Entity
 	function createEntity() {
 		const ignore: string[] = [];
+
 		let t0 = "";
 
 		for (const item of list) {
-			if (!checkName(item.name)) continue;
-
-			if (formatName(item.name) == "BusinessInterface") {
-				console.log(111);
-			}
+			if (!item.name) continue;
 
 			let t = `interface ${formatName(item.name)} {`;
 
-			// 鍚堝苟 columns 鍜� pageColumns锛屽幓閲�
-			const columns: Eps.Column[] = uniqBy(
-				compact([...(item.columns || []), ...(item.pageColumns || [])]),
-				"source",
-			);
+			// 鍚堝苟澶氫釜鍒�
+			const columns: Eps.Column[] = [];
+
+			[item.columns, item.pageColumns]
+				.flat()
+				.filter(Boolean)
+				.forEach((e) => {
+					const d = columns.find((c) => c.source == e.source);
+
+					if (!d) {
+						columns.push(e);
+					}
+				});
 
 			for (const col of columns || []) {
 				t += `
@@ -259,7 +202,7 @@
 					${col.propertyName}?: ${getType({
 						propertyName: col.propertyName,
 						type: col.type,
-					})};
+					})}
 				`;
 			}
 
@@ -280,34 +223,23 @@
 		return t0;
 	}
 
-	/**
-	 * 鍒涘缓 Controller 鎺ュ彛瀹氫箟
-	 */
-	async function createController() {
+	// 鍒涘缓 Service
+	async function createDts() {
 		let controller = "";
 		let chain = "";
-		let pageResponse = "";
 
-		/**
-		 * 閫掑綊澶勭悊 service 鏍戯紝鐢熸垚鎺ュ彛瀹氫箟
-		 * @param d 褰撳墠鑺傜偣
-		 * @param k 鍓嶇紑
-		 */
+		// 澶勭悊鏁版嵁
 		function deep(d: any, k?: string) {
 			if (!k) k = "";
 
 			for (const i in d) {
 				const name = k + toCamel(firstUpperCase(formatName(i)));
 
-				// 妫�鏌ユ柟娉曞悕
-				if (!checkName(name)) continue;
-
 				if (d[i].namespace) {
 					// 鏌ユ壘閰嶇疆
 					const item = list.find((e) => (e.prefix || "") === `/${d[i].namespace}`);
 
 					if (item) {
-						//
 						let t = `interface ${name} {`;
 
 						// 鎻掑叆鏂规硶
@@ -317,10 +249,9 @@
 
 							item.api.forEach((a) => {
 								// 鏂规硶鍚�
-								const n = toCamel(formatName(a.name || last(a.path.split("/"))!));
-
-								// 妫�鏌ユ柟娉曞悕
-								if (!checkName(n)) return;
+								const n = toCamel(
+									formatName(a.name || last(a.path.split("/")) || ""),
+								);
 
 								if (n) {
 									// 鍙傛暟绫诲瀷
@@ -334,15 +265,14 @@
 											q.push(`\n/** ${p.description}  */\n`);
 										}
 
-										// 妫�鏌ュ弬鏁板悕
-										if (!checkName(p.name)) {
+										if (p.name.includes(":")) {
 											return false;
 										}
 
 										const a = `${p.name}${p.required ? "" : "?"}`;
 										const b = `${p.schema.type || "string"}`;
 
-										q.push(`${a}: ${b};`);
+										q.push(`${a}: ${b},`);
 									});
 
 									if (isEmpty(q)) {
@@ -360,43 +290,35 @@
 
 									switch (a.path) {
 										case "/page":
-											res = `${name}PageResponse`;
-
-											pageResponse += `
-												interface ${name}PageResponse {
-													pagination: PagePagination;
-													list: ${en}[];
-												}
-											`;
-
+											res = `
+											{
+												pagination: { size: number; page: number; total: number; [key: string]: any };
+												list: ${en} [];
+												[key: string]: any;
+											}
+										`;
 											break;
+
 										case "/list":
 											res = `${en} []`;
 											break;
+
 										case "/info":
 											res = en;
 											break;
+
 										default:
 											res = "any";
 											break;
 									}
 
-									// 鏂规硶鎻忚堪
-									if (config.type == "uniapp-x") {
-										t += `
-											/**
-											 * ${a.summary || n}
-											 */
-											${n}(data${q.length == 1 ? "?" : ""}: ${q.join("")}): Promise<any>;
-										`;
-									} else {
-										t += `
-											/**
-											 * ${a.summary || n}
-											 */
-											${n}(data${q.length == 1 ? "?" : ""}: ${q.join("")}): Promise<${res}>;
-										`;
-									}
+									// 鎻忚堪
+									t += `
+										/**
+										 * ${a.summary || n}
+										 */
+										${n}(data${q.length == 1 ? "?" : ""}: ${q.join("")}): Promise<${res}>;
+									`;
 
 									if (!permission.includes(n)) {
 										permission.push(n);
@@ -405,25 +327,24 @@
 							});
 
 							// 鏉冮檺鏍囪瘑
-							t += noUniappX(`
+							t += `
 								/**
 								 * 鏉冮檺鏍囪瘑
 								 */
 								permission: { ${permission.map((e) => `${e}: string;`).join("\n")} };
-							`);
+							`;
 
 							// 鏉冮檺鐘舵��
-							t += noUniappX(`
+							t += `
 								/**
 								 * 鏉冮檺鐘舵��
 								 */
 								_permission: { ${permission.map((e) => `${e}: boolean;`).join("\n")} };
-							`);
+							`;
 
-							// 璇锋眰
-							t += noUniappX(`
-								request: Request;
-							`);
+							t += `
+								request: Service['request']
+							`;
 						}
 
 						t += "}\n\n";
@@ -434,99 +355,67 @@
 				} else {
 					chain += `${formatName(i)}: {`;
 					deep(d[i], name);
-					chain += "};";
+					chain += "},";
 				}
 			}
 		}
 
-		// 閬嶅巻 service 鏍�
+		// 閬嶅巻
 		deep(service);
 
 		return `
 			type json = any;
 
-			${await createDict()}
-
-			interface PagePagination {
-				size: number;
-				page: number;
-				total: number;
-				[key: string]: any;
-			};
-
-			interface PageResponse<T> {
-				pagination: PagePagination;
-				list: T[];
-				[key: string]: any;
-			};
-
-			${pageResponse}
-
 			${controller}
 
-			${noUniappX(`interface RequestOptions {
-				url: string;
-				method?: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT';
-				data?: any;
-				params?: any;
-				headers?: any;
-				timeout?: number;
-				[key: string]: any;
-			}`)}
-
-			${noUniappX("type Request = (options: RequestOptions) => Promise<any>;")}
-
 			type Service = {
-				${noUniappX("request: Request;")}
+				/**
+				 * 鍩虹璇锋眰
+				 */
+				request(options?: {
+					url: string;
+					method?: "POST" | "GET" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS";
+					data?: any;
+					params?: any;
+					headers?: {
+						authorization?: string;
+						[key: string]: any;
+					},
+					timeout?: number;
+					proxy?: boolean;
+					[key: string]: any;
+				}): Promise<any>;
 
 				${chain}
 			}
+
+			${await createDict()}
 		`;
 	}
 
-	// 缁勮鏂囦欢鍐呭
-	let text = `
-		${createEntity()}
-		${await createController()}
+	// 鏂囦欢鍐呭
+	const text = `
+		declare namespace Eps {
+			${createEntity()}
+			${await createDts()}
+		}
 	`;
 
-	// 鏂囦欢鍚�
-	let name = "eps.d.ts";
-
-	if (config.type == "uniapp-x") {
-		name = "eps.ts";
-		text = text
-			.replaceAll("interface ", "export interface ")
-			.replaceAll("type ", "export type ")
-			.replaceAll("[key: string]: any;", "");
-
-		text = flatten(text);
-		text = interfaceToType(text);
-	} else {
-		text = `
-			declare namespace Eps {
-				${text}
-			}
-		`;
-	}
-
-	// 鏍煎紡鍖栨枃鏈唴瀹�
+	// 鏂囨湰鍐呭
 	const content = await formatCode(text);
 
-	const local_content = readFile(getEpsPath(name));
+	const local_content = readFile(getEpsPath("eps.d.ts"));
 
 	// 鏄惁闇�瑕佹洿鏂�
-	if (content && content != local_content && list.length > 0) {
+	if (content != local_content) {
 		// 鍒涘缓 eps 鎻忚堪鏂囦欢
-		createWriteStream(getEpsPath(name), {
+		createWriteStream(getEpsPath("eps.d.ts"), {
 			flags: "w",
 		}).write(content);
 	}
 }
 
-/**
- * 鏋勫缓 service 瀵硅薄鏍�
- */
+// 鍒涘缓 service
 function createService() {
 	// 璺緞绗竴灞備綔涓� id 鏍囪瘑
 	const id = getEpsUrl().split("/")[1];
@@ -535,14 +424,10 @@
 		// 璇锋眰鍦板潃
 		const path = e.prefix[0] == "/" ? e.prefix.substring(1, e.prefix.length) : e.prefix;
 
-		// 鍒嗛殧璺緞锛屽幓闄� id锛岃浆椹煎嘲
+		// 鍒嗛殧璺緞
 		const arr = path.replace(id, "").split("/").filter(Boolean).map(toCamel);
 
-		/**
-		 * 閫掑綊鏋勫缓 service 鏍�
-		 * @param d 褰撳墠鑺傜偣
-		 * @param i 褰撳墠绱㈠紩
-		 */
+		// 閬嶅巻
 		function deep(d: any, i: number) {
 			const k = arr[i];
 
@@ -552,6 +437,7 @@
 					if (!d[k]) {
 						d[k] = {};
 					}
+
 					deep(d[k], i + 1);
 				} else {
 					// 涓嶅瓨鍦ㄥ垯鍒涘缓
@@ -580,6 +466,7 @@
 					e.api.forEach((a) => {
 						// 鏂规硶鍚�
 						const n = a.path.replace("/", "");
+
 						if (n && !/[-:]/g.test(n)) {
 							d[k][n] = a;
 						}
@@ -592,190 +479,50 @@
 	});
 }
 
-/**
- * 鍒涘缓 service 浠g爜
- * @returns {string} service 浠g爜
- */
-function createServiceCode(): { content: string; types: string[] } {
-	const types: string[] = [];
+// 鍒涘缓 dict
+async function createDict() {
+	const url = config.reqUrl + "/" + config.type + "/dict/info/types";
 
-	let chain = "";
-
-	/**
-	 * 閫掑綊澶勭悊 service 鏍戯紝鐢熸垚鎺ュ彛浠g爜
-	 * @param d 褰撳墠鑺傜偣
-	 * @param k 鍓嶇紑
-	 */
-	function deep(d: any, k?: string) {
-		if (!k) k = "";
-
-		for (const i in d) {
-			if (["swagger"].includes(i)) {
-				continue;
-			}
-
-			const name = k + toCamel(firstUpperCase(formatName(i)));
-
-			// 妫�鏌ユ柟娉曞悕
-			if (!checkName(name)) continue;
-
-			if (d[i].namespace) {
-				// 鏌ユ壘閰嶇疆
-				const item = list.find((e) => (e.prefix || "") === `/${d[i].namespace}`);
-
-				if (item) {
-					//
-					let t = `{`;
-
-					// 鎻掑叆鏂规硶
-					if (item.api) {
-						item.api.forEach((a) => {
-							// 鏂规硶鍚�
-							const n = toCamel(formatName(a.name || last(a.path.split("/"))!));
-
-							// 妫�鏌ユ柟娉曞悕
-							if (!checkName(n)) return;
-
-							if (n) {
-								// 鍙傛暟绫诲瀷
-								let q: string[] = [];
-
-								// 鍙傛暟鍒楄〃
-								const { parameters = [] } = a.dts || {};
-
-								parameters.forEach((p) => {
-									if (p.description) {
-										q.push(`\n/** ${p.description}  */\n`);
-									}
-
-									// 妫�鏌ュ弬鏁板悕
-									if (!checkName(p.name)) {
-										return false;
-									}
-
-									const a = `${p.name}${p.required ? "" : "?"}`;
-									const b = `${p.schema.type || "string"}`;
-
-									q.push(`${a}: ${b}, `);
-								});
-
-								if (isEmpty(q)) {
-									q = ["any"];
-								} else {
-									q.unshift("{");
-									q.push("}");
-								}
-
-								if (item.name) {
-									types.push(item.name);
-								}
-
-								// 鏂规硶鎻忚堪
-								t += `
-									/**
-									 * ${a.summary || n}
-									 */
-									${n}(data?: any): Promise<any> {
-										return request({
-											url: "/${d[i].namespace}${a.path}",
-											method: "${(a.method || "get").toLocaleUpperCase()}",
-											data,
-										});
-									},
-								`;
-							}
-						});
-					}
-
-					t += `} as ${name}\n`;
-
-					types.push(name);
-
-					chain += `${formatName(i)}: ${t},\n`;
-				}
-			} else {
-				chain += `${formatName(i)}: {`;
-				deep(d[i], name);
-				chain += `} as ${firstUpperCase(i)}Interface,`;
-
-				types.push(`${firstUpperCase(i)}Interface`);
-			}
-		}
-	}
-
-	// 閬嶅巻 service 鏍�
-	deep(service);
-
-	return {
-		content: `{ ${chain} }`,
-		types,
-	};
-}
-
-/**
- * 鑾峰彇瀛楀吀绫诲瀷瀹氫箟
- * @returns {Promise<string>} 瀛楀吀绫诲瀷 type 瀹氫箟
- */
-async function createDict(): Promise<string> {
-	let p = "";
-
-	switch (config.type) {
-		case "app":
-		case "uniapp-x":
-			p = "/app";
-			break;
-		case "admin":
-			p = "/admin";
-			break;
-	}
-
-	const url = config.reqUrl + p + "/dict/info/types";
-
-	const text = await axios
+	return axios
 		.get(url)
 		.then((res) => {
 			const { code, data } = res.data as { code: number; data: any[] };
 
 			if (code === 1000) {
 				let v = "string";
+
 				if (!isEmpty(data)) {
 					v = data.map((e) => `"${e.key}"`).join(" | ");
 				}
+
 				return `type DictKey = ${v}`;
 			}
 		})
 		.catch(() => {
 			error(`[cool-eps] Error锛�${url}`);
 		});
-
-	return text || "";
 }
 
-/**
- * 涓诲叆鍙o細鍒涘缓 eps 鐩稿叧鏂囦欢鍜� service
- */
+// 鍒涘缓 eps
 export async function createEps() {
 	if (config.eps.enable) {
-		// 鑾峰彇 eps 鏁版嵁
+		// 鑾峰彇鏁版嵁
 		await getData();
 
-		// 鏋勫缓 service 瀵硅薄
+		// 鍒涘缓 service
 		createService();
 
-		const serviceCode = createServiceCode();
-
-		// 鍒涘缓 eps 鐩綍
+		// 鍒涘缓鐩綍
 		createDir(getEpsPath(), true);
 
-		// 鍒涘缓 eps.json 鏂囦欢
+		// 鍒涘缓 json 鏂囦欢
 		const isUpdate = createJson();
 
-		// 鍒涘缓绫诲瀷鎻忚堪鏂囦欢
+		// 鍒涘缓鎻忚堪鏂囦欢
 		createDescribe({ service, list });
 
 		return {
 			service,
-			serviceCode,
 			list,
 			isUpdate,
 		};
diff --git a/packages/vite-plugin/src/index.ts b/packages/vite-plugin/src/index.ts
index d704c85..123b4b6 100644
--- a/packages/vite-plugin/src/index.ts
+++ b/packages/vite-plugin/src/index.ts
@@ -4,8 +4,7 @@
 import { getProxyTarget } from "./proxy";
 import type { Config } from "../types";
 import { virtual } from "./virtual";
-import { assign, merge } from "lodash";
-import { uniappX } from "./uniapp-x";
+import { merge } from "lodash";
 
 export function cool(options: Config.Options) {
 	// 搴旂敤绫诲瀷锛宎dmin | app
@@ -14,26 +13,8 @@
 	// 璇锋眰鍦板潃
 	config.reqUrl = getProxyTarget(options.proxy);
 
-	if (config.type == "uniapp-x") {
-		// 缂栬瘧骞冲彴
-		config.utsPlatform = process.env.UNI_UTS_PLATFORM ?? "web";
-
-		// 鏄惁绾噣鐗�
-		config.clean = options.clean ?? true;
-
-		if (config.clean) {
-			// 榛樿璁剧疆涓烘祴璇曞湴鍧�
-			config.reqUrl = "https://show.cool-admin.com/api";
-		}
-	}
-
 	// 鏄惁寮�鍚悕绉版爣绛�
 	config.nameTag = options.nameTag ?? true;
-
-	// svg
-	if (options.svg) {
-		assign(config.svg, options.svg);
-	}
 
 	// Eps
 	if (options.eps) {
@@ -58,20 +39,5 @@
 		}
 	}
 
-	// 濡傛灉绫诲瀷涓� uniapp-x锛屽垯鍏抽棴 eps
-	if (config.type == "uniapp-x") {
-		config.eps.enable = false;
-	}
-
-	// uniapp
-	if (options.uniapp) {
-		assign(config.uniapp, options.uniapp);
-	}
-
-	// tailwind
-	if (options.tailwind) {
-		assign(config.tailwind, options.tailwind);
-	}
-
-	return [base(), virtual(), uniappX(), demo(options.demo)];
+	return [base(), virtual(), demo(options.demo)];
 }
diff --git a/packages/vite-plugin/src/svg/index.ts b/packages/vite-plugin/src/svg/index.ts
index 88df6d3..0ab0793 100644
--- a/packages/vite-plugin/src/svg/index.ts
+++ b/packages/vite-plugin/src/svg/index.ts
@@ -2,7 +2,6 @@
 import { basename, extname } from "path";
 import { rootDir } from "../utils";
 import svgo from "svgo";
-import { config } from "../config";
 
 let svgIcons: string[] = [];
 
@@ -11,28 +10,12 @@
 	const dirs = readdirSync(dir, {
 		withFileTypes: true,
 	});
-
-	// 鑾峰彇褰撳墠鐩綍鐨勬ā鍧楀悕
-	const moduleName = dir.match(/[/\\](?:src[/\\](?:plugins|modules)[/\\])([^/\\]+)/)?.[1] || "";
-
 	for (const d of dirs) {
 		if (d.isDirectory()) {
 			arr.push(...findSvg(dir + d.name + "/"));
 		} else {
 			if (extname(d.name) == ".svg") {
-				const baseName = basename(d.name, ".svg");
-
-				// 鍒ゆ柇鏄惁闇�瑕佽烦杩囨嫾鎺ユā鍧楀悕
-				let shouldSkip = config.svg.skipNames?.includes(moduleName);
-
-				// 璺宠繃鍖呭惈icon-
-				if (baseName.includes("icon-")) {
-					shouldSkip = true;
-				}
-
-				const iconName = shouldSkip ? baseName : `${moduleName}-${baseName}`;
-
-				svgIcons.push(iconName);
+				svgIcons.push(basename(d.name, ".svg"));
 
 				const svg = readFileSync(dir + d.name)
 					.toString()
@@ -54,7 +37,7 @@
 						if (!/(viewBox="[^>+].*?")/g.test($2)) {
 							content += `viewBox="0 0 ${width} ${height}"`;
 						}
-						return `<symbol id="icon-${iconName}" ${content}>`;
+						return `<symbol id="icon-${d.name.replace(".svg", "")}" ${content}>`;
 					})
 					.replace("</svg>", "</symbol>");
 
@@ -62,7 +45,6 @@
 			}
 		}
 	}
-
 	return arr;
 }
 
diff --git a/packages/vite-plugin/src/utils/index.ts b/packages/vite-plugin/src/utils/index.ts
index 38d1f4c..01a34dc 100644
--- a/packages/vite-plugin/src/utils/index.ts
+++ b/packages/vite-plugin/src/utils/index.ts
@@ -7,7 +7,6 @@
 export function rootDir(path: string) {
 	switch (config.type) {
 		case "app":
-		case "uniapp-x":
 			return join(process.env.UNI_INPUT_DIR!, path);
 
 		default:
@@ -40,68 +39,12 @@
 export function readFile(path: string, json?: boolean) {
 	try {
 		const content = fs.readFileSync(path, "utf8");
-		return json ? JSON.parse(removeJsonComments(content)) : content;
+		return json
+			? JSON.parse(content.replace(/\/\/.*$/gm, "").replace(/\/\*[\s\S]*?\*\//g, ""))
+			: content;
 	} catch (err) {}
 
 	return "";
-}
-
-// 瀹夊叏鍦扮Щ闄SON涓殑娉ㄩ噴
-function removeJsonComments(content: string): string {
-	let result = "";
-	let inString = false;
-	let stringChar = "";
-	let escaped = false;
-	let i = 0;
-
-	while (i < content.length) {
-		const char = content[i];
-		const nextChar = content[i + 1];
-
-		// 澶勭悊瀛楃涓茬姸鎬�
-		if (!inString && (char === '"' || char === "'")) {
-			inString = true;
-			stringChar = char;
-			result += char;
-		} else if (inString && char === stringChar && !escaped) {
-			inString = false;
-			stringChar = "";
-			result += char;
-		} else if (inString) {
-			// 鍦ㄥ瓧绗︿覆鍐咃紝鐩存帴娣诲姞瀛楃
-			result += char;
-			escaped = char === "\\" && !escaped;
-		} else {
-			// 涓嶅湪瀛楃涓插唴锛屾鏌ユ敞閲�
-			if (char === "/" && nextChar === "/") {
-				// 鍗曡娉ㄩ噴锛岃烦杩囧埌琛屽熬
-				while (i < content.length && content[i] !== "\n") {
-					i++;
-				}
-				if (i < content.length) {
-					result += content[i]; // 淇濈暀鎹㈣绗�
-				}
-			} else if (char === "/" && nextChar === "*") {
-				// 澶氳娉ㄩ噴锛岃烦杩囧埌 */
-				i += 2;
-				while (i < content.length - 1) {
-					if (content[i] === "*" && content[i + 1] === "/") {
-						i += 2;
-						break;
-					}
-					i++;
-				}
-				continue;
-			} else {
-				result += char;
-				escaped = false;
-			}
-		}
-
-		i++;
-	}
-
-	return result;
 }
 
 // 鍐欏叆鏂囦欢
@@ -148,27 +91,4 @@
 
 export function success(message: string) {
 	console.log("\x1B[32m%s\x1B[0m", message);
-}
-
-/**
- * 姣旇緝涓や釜鐗堟湰鍙�
- * @param version1 鐗堟湰鍙�1 (濡�: "1.2.3")
- * @param version2 鐗堟湰鍙�2 (濡�: "1.2.4")
- * @returns 1: version1 > version2, 0: 鐩哥瓑, -1: version1 < version2
- */
-export function compareVersion(version1: string, version2: string): number {
-	const v1Parts = version1.split(".").map(Number);
-	const v2Parts = version2.split(".").map(Number);
-
-	const maxLength = Math.max(v1Parts.length, v2Parts.length);
-
-	for (let i = 0; i < maxLength; i++) {
-		const v1Part = v1Parts[i] || 0;
-		const v2Part = v2Parts[i] || 0;
-
-		if (v1Part > v2Part) return 1;
-		if (v1Part < v2Part) return -1;
-	}
-
-	return 0;
 }
diff --git a/packages/vite-plugin/types/index.d.ts b/packages/vite-plugin/types/index.d.ts
index 42814b3..bbbd1bb 100644
--- a/packages/vite-plugin/types/index.d.ts
+++ b/packages/vite-plugin/types/index.d.ts
@@ -1,4 +1,4 @@
-export declare type Type = "admin" | "app" | "uniapp-x";
+export declare type Type = "app" | "admin";
 
 export declare namespace Eps {
 	interface Column {
@@ -76,14 +76,11 @@
 }
 
 export declare namespace Config {
+	type Type = "app" | "admin";
 	interface Eps {
-		// 鏄惁寮�鍚疎ps
 		enable: boolean;
-		// 璇锋眰鍦板潃
 		api: "app" | "admin" | (string & {});
-		// 杈撳嚭鐩綍
 		dist: string;
-		// 鏄犲皠
 		mapping: {
 			type?: string;
 			test?: string[];
@@ -91,39 +88,17 @@
 		}[];
 	}
 	interface Options {
-		// 搴旂敤绫诲瀷
-		type: Type;
-		// 浠g悊閰嶇疆
-		proxy?: any;
-		// Eps
+		type: Config.Type;
+		proxy: any;
 		eps?: Partial<Config.Eps>;
-		// 鏄惁寮�鍚紨绀烘ā寮�
 		demo?: boolean;
-		// 鏄惁寮�鍚悕绉版爣绛�
 		nameTag?: boolean;
-		// svg
-		svg?: {
-			// 璺宠繃鎷兼帴妯″潡鍚�
-			skipNames?: string[];
-		};
-		// tailwind
-		tailwind?: {
-			// 鏄惁寮�鍚痶ailwind
-			enable?: boolean;
-			// 鏍瑰厓绱犲瓧浣撳ぇ灏�
-			remUnit?: number;
-			// 灏忔暟浣嶆暟
-			remPrecision?: number;
-			// 杞崲姣斾緥
-			rpxRatio?: number;
-			// 鏆楅粦妯″紡鏂囨湰绫诲悕
-			darkTextClass?: string;
-		};
-		// uniapp X
-		uniapp?: {
-			isPlugin?: boolean;
-		};
-		// 鏄惁绾噣鐗�
-		clean?: boolean;
+	}
+	interface Data {
+		type: Config.Type;
+		reqUrl: string;
+		eps: Config.Eps;
+		demo: boolean;
+		[key: string]: any;
 	}
 }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 37bc02c..fc47c57 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,43 +13,43 @@
         version: 8.0.6(typescript@5.5.4)
       '@element-plus/icons-vue':
         specifier: ^2.3.1
-        version: 2.3.1(vue@3.5.40(typescript@5.5.4))
+        version: 2.3.1(vue@3.5.13(typescript@5.5.4))
       '@vueuse/core':
         specifier: ^12.5.0
-        version: 12.8.2(typescript@5.5.4)
+        version: 12.7.0(typescript@5.5.4)
       '@wangeditor/editor':
         specifier: ^5.1.23
         version: 5.1.23
       '@wangeditor/editor-for-vue':
         specifier: ^5.1.12
-        version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.40(typescript@5.5.4))
+        version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.13(typescript@5.5.4))
       axios:
         specifier: ^1.7.9
-        version: 1.18.1
+        version: 1.7.9
       chardet:
         specifier: ^2.0.0
-        version: 2.2.0
+        version: 2.0.0
       core-js:
         specifier: ^3.40.0
-        version: 3.49.0
+        version: 3.40.0
       dayjs:
         specifier: ^1.11.13
-        version: 1.11.21
+        version: 1.11.13
       echarts:
         specifier: ^5.6.0
         version: 5.6.0
       element-plus:
         specifier: 2.10.2
-        version: 2.10.2(vue@3.5.40(typescript@5.5.4))
+        version: 2.10.2(vue@3.5.13(typescript@5.5.4))
       ezuikit-js:
         specifier: ^9.0.15
-        version: 9.0.15
+        version: 9.0.17
       file-saver:
         specifier: ^2.0.5
         version: 2.0.5
       lodash-es:
         specifier: ^4.17.21
-        version: 4.18.1
+        version: 4.17.21
       marked:
         specifier: ^14.1.3
         version: 14.1.4
@@ -61,28 +61,31 @@
         version: 0.2.0
       pinia:
         specifier: ^2.3.1
-        version: 2.3.1(typescript@5.5.4)(vue@3.5.40(typescript@5.5.4))
+        version: 2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4))
+      socket.io-client:
+        specifier: ^4.7.2
+        version: 4.8.1
       store:
         specifier: ^2.0.12
         version: 2.0.12
       vue:
         specifier: ^3.5.13
-        version: 3.5.40(typescript@5.5.4)
+        version: 3.5.13(typescript@5.5.4)
       vue-echarts:
         specifier: ^7.0.3
-        version: 7.0.3(@vue/runtime-core@3.5.18)(echarts@5.6.0)(vue@3.5.40(typescript@5.5.4))
+        version: 7.0.3(@vue/runtime-core@3.5.13)(echarts@5.6.0)(vue@3.5.13(typescript@5.5.4))
       vue-i18n:
         specifier: ^11.0.1
-        version: 11.1.10(vue@3.5.40(typescript@5.5.4))
+        version: 11.1.1(vue@3.5.13(typescript@5.5.4))
       vue-router:
         specifier: ^4.5.0
-        version: 4.6.4(vue@3.5.40(typescript@5.5.4))
+        version: 4.5.0(vue@3.5.13(typescript@5.5.4))
       vue-tianditu2:
         specifier: ^3.0.1
-        version: 3.0.1(vue@3.5.40(typescript@5.5.4))
+        version: 3.0.1(vue@3.5.13(typescript@5.5.4))
       vuedraggable:
         specifier: ^4.1.0
-        version: 4.1.0(vue@3.5.40(typescript@5.5.4))
+        version: 4.1.0(vue@3.5.13(typescript@5.5.4))
       xlsx:
         specifier: ^0.18.5
         version: 0.18.5
@@ -92,13 +95,13 @@
         version: 8.2.20
       '@intlify/unplugin-vue-i18n':
         specifier: ^6.0.3
-        version: 6.0.8(@vue/compiler-dom@3.5.18)(eslint@9.39.5(jiti@1.21.7))(rollup@4.45.1)(typescript@5.5.4)(vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)))(vue@3.5.40(typescript@5.5.4))
+        version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.20.1(jiti@1.21.7))(rollup@4.34.8)(typescript@5.5.4)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))
       '@rushstack/eslint-patch':
         specifier: ^1.10.5
-        version: 1.16.1
+        version: 1.10.5
       '@tsconfig/node20':
         specifier: ^20.1.4
-        version: 20.1.9
+        version: 20.1.4
       '@types/file-saver':
         specifier: ^2.0.7
         version: 2.0.7
@@ -110,7 +113,7 @@
         version: 1.0.10
       '@types/node':
         specifier: ^20.17.17
-        version: 20.19.43
+        version: 20.17.19
       '@types/nprogress':
         specifier: ^0.2.3
         version: 0.2.3
@@ -119,70 +122,70 @@
         version: 2.0.5
       '@vitejs/plugin-vue':
         specifier: ^5.2.1
-        version: 5.2.4(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))
+        version: 5.2.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))
       '@vitejs/plugin-vue-jsx':
         specifier: ^4.1.1
-        version: 4.2.0(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))
+        version: 4.1.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))
       '@vue/compiler-sfc':
         specifier: ^3.5.13
-        version: 3.5.40
+        version: 3.5.13
       '@vue/eslint-config-prettier':
         specifier: ^10.2.0
-        version: 10.2.0(eslint@9.39.5(jiti@1.21.7))(prettier@3.9.5)
+        version: 10.2.0(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.1)
       '@vue/eslint-config-typescript':
         specifier: ^14.3.0
-        version: 14.9.0(eslint-plugin-vue@9.33.0(eslint@9.39.5(jiti@1.21.7)))(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
+        version: 14.4.0(eslint-plugin-vue@9.32.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
       '@vue/test-utils':
         specifier: ^2.4.6
-        version: 2.4.11(@vue/compiler-dom@3.5.40)(@vue/server-renderer@3.5.40)(vue@3.5.40(typescript@5.5.4))
+        version: 2.4.6
       '@vue/tsconfig':
         specifier: ^0.5.1
         version: 0.5.1
       autoprefixer:
         specifier: ^10.4.20
-        version: 10.5.4(postcss@8.5.6)
+        version: 10.4.20(postcss@8.5.2)
       eslint:
         specifier: ^9.19.0
-        version: 9.39.5(jiti@1.21.7)
+        version: 9.20.1(jiti@1.21.7)
       eslint-plugin-prettier:
         specifier: ^5.2.3
-        version: 5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@1.21.7)))(eslint@9.39.5(jiti@1.21.7))(prettier@3.9.5)
+        version: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.1)
       eslint-plugin-vue:
         specifier: ^9.32.0
-        version: 9.33.0(eslint@9.39.5(jiti@1.21.7))
+        version: 9.32.0(eslint@9.20.1(jiti@1.21.7))
       postcss:
         specifier: ^8.5.1
-        version: 8.5.6
+        version: 8.5.2
       prettier:
         specifier: ^3.4.2
-        version: 3.9.5
+        version: 3.5.1
       rollup-plugin-visualizer:
         specifier: ^5.14.0
-        version: 5.14.0(rollup@4.45.1)
+        version: 5.14.0(rollup@4.34.8)
       sass:
         specifier: 1.81.0
         version: 1.81.0
       tailwindcss:
         specifier: ^3.4.17
-        version: 3.4.19
+        version: 3.4.17
       terser:
         specifier: ^5.36.0
-        version: 5.49.0
+        version: 5.39.0
       typescript:
         specifier: ~5.5.4
         version: 5.5.4
       vite:
         specifier: ^5.4.14
-        version: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
+        version: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
       vite-plugin-compression:
         specifier: ^0.5.1
-        version: 0.5.1(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))
+        version: 0.5.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))
       vite-plugin-vue-devtools:
         specifier: ^7.7.1
-        version: 7.7.10(rollup@4.45.1)(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))
+        version: 7.7.2(rollup@4.34.8)(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))
       vue-tsc:
         specifier: ^2.2.0
-        version: 2.2.12(typescript@5.5.4)
+        version: 2.2.2(typescript@5.5.4)
 
 packages:
 
@@ -197,120 +200,103 @@
   '@antfu/utils@0.7.10':
     resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
 
-  '@babel/code-frame@7.27.1':
-    resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+  '@babel/code-frame@7.26.2':
+    resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/compat-data@7.28.0':
-    resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
+  '@babel/compat-data@7.26.8':
+    resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/core@7.28.0':
-    resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
+  '@babel/core@7.26.9':
+    resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/generator@7.28.0':
-    resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
+  '@babel/generator@7.26.9':
+    resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-annotate-as-pure@7.27.3':
-    resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+  '@babel/helper-annotate-as-pure@7.25.9':
+    resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-compilation-targets@7.27.2':
-    resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+  '@babel/helper-compilation-targets@7.26.5':
+    resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-create-class-features-plugin@7.27.1':
-    resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
+  '@babel/helper-create-class-features-plugin@7.26.9':
+    resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
 
-  '@babel/helper-globals@7.28.0':
-    resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+  '@babel/helper-member-expression-to-functions@7.25.9':
+    resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-member-expression-to-functions@7.27.1':
-    resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
+  '@babel/helper-module-imports@7.25.9':
+    resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-module-imports@7.27.1':
-    resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-module-transforms@7.27.3':
-    resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
+  '@babel/helper-module-transforms@7.26.0':
+    resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
 
-  '@babel/helper-optimise-call-expression@7.27.1':
-    resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+  '@babel/helper-optimise-call-expression@7.25.9':
+    resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-plugin-utils@7.27.1':
-    resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+  '@babel/helper-plugin-utils@7.26.5':
+    resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-replace-supers@7.27.1':
-    resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
+  '@babel/helper-replace-supers@7.26.5':
+    resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
 
-  '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
-    resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
+  '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+    resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-string-parser@7.27.1':
-    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+  '@babel/helper-string-parser@7.25.9':
+    resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-string-parser@7.29.7':
-    resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
+  '@babel/helper-validator-identifier@7.25.9':
+    resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-validator-identifier@7.27.1':
-    resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+  '@babel/helper-validator-option@7.25.9':
+    resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-validator-identifier@7.29.7':
-    resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
+  '@babel/helpers@7.26.9':
+    resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/helper-validator-option@7.27.1':
-    resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helpers@7.27.6':
-    resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/parser@7.28.0':
-    resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
+  '@babel/parser@7.26.9':
+    resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
     engines: {node: '>=6.0.0'}
     hasBin: true
 
-  '@babel/parser@7.29.7':
-    resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-
-  '@babel/plugin-proposal-decorators@7.28.0':
-    resolution: {integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==}
+  '@babel/plugin-proposal-decorators@7.25.9':
+    resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@babel/plugin-syntax-decorators@7.27.1':
-    resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==}
+  '@babel/plugin-syntax-decorators@7.25.9':
+    resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@babel/plugin-syntax-import-attributes@7.27.1':
-    resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+  '@babel/plugin-syntax-import-attributes@7.26.0':
+    resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -320,42 +306,38 @@
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@babel/plugin-syntax-jsx@7.27.1':
-    resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+  '@babel/plugin-syntax-jsx@7.25.9':
+    resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@babel/plugin-syntax-typescript@7.27.1':
-    resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+  '@babel/plugin-syntax-typescript@7.25.9':
+    resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@babel/plugin-transform-typescript@7.28.0':
-    resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
+  '@babel/plugin-transform-typescript@7.26.8':
+    resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@babel/runtime@7.27.6':
-    resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
+  '@babel/runtime@7.26.9':
+    resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/template@7.27.2':
-    resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+  '@babel/template@7.26.9':
+    resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/traverse@7.28.0':
-    resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
+  '@babel/traverse@7.26.9':
+    resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==}
     engines: {node: '>=6.9.0'}
 
-  '@babel/types@7.28.1':
-    resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/types@7.29.7':
-    resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+  '@babel/types@7.26.9':
+    resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
     engines: {node: '>=6.9.0'}
 
   '@cool-vue/crud@8.0.6':
@@ -368,8 +350,17 @@
     resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
     engines: {node: '>=10'}
 
+  '@ctrl/tinycolor@4.2.0':
+    resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
+    engines: {node: '>=14'}
+
   '@element-plus/icons-vue@2.3.1':
     resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==}
+    peerDependencies:
+      vue: ^3.2.0
+
+  '@element-plus/icons-vue@2.3.2':
+    resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==}
     peerDependencies:
       vue: ^3.2.0
 
@@ -511,14 +502,8 @@
     cpu: [x64]
     os: [win32]
 
-  '@eslint-community/eslint-utils@4.7.0':
-    resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
-  '@eslint-community/eslint-utils@4.9.1':
-    resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+  '@eslint-community/eslint-utils@4.4.1':
+    resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -527,46 +512,38 @@
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint-community/regexpp@4.12.2':
-    resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
-  '@eslint/config-array@0.21.2':
-    resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==}
+  '@eslint/config-array@0.19.2':
+    resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/config-helpers@0.4.2':
-    resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+  '@eslint/core@0.11.0':
+    resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/core@0.17.0':
-    resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+  '@eslint/eslintrc@3.2.0':
+    resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/eslintrc@3.3.6':
-    resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==}
+  '@eslint/js@9.20.0':
+    resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/js@9.39.5':
-    resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==}
+  '@eslint/object-schema@2.1.6':
+    resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/object-schema@2.1.7':
-    resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+  '@eslint/plugin-kit@0.2.6':
+    resolution: {integrity: sha512-+0TjwR1eAUdZtvv/ir1mGX+v0tUoR3VEPB8Up0LLJC+whRW0GgBBtpbOkg/a/U4Dxa6l5a3l9AJ1aWIQVyoWJA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/plugin-kit@0.4.1':
-    resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+  '@ezuikit/control-aichat@0.1.1-beta.1':
+    resolution: {integrity: sha512-vj5u4QnxGIbeVN1kIyDTifV1gFUTd4Pnz5JeAA8OlYexY0FcHCaKNarXDIBFVJwppAxdkrXMW6AuAlURr2lfUw==}
 
-  '@ezuikit/control-aichat@0.1.0-beta.9':
-    resolution: {integrity: sha512-saXmuuZLFL1y/vbyLnLv7uFshblN8VAP7miXbqZCXTLgxktK/2Op9aqaGJ+qjE0dVq/RwsPP9iuW/6AOfFKyBQ==}
+  '@ezuikit/player-ezopen@9.0.7-beta.4':
+    resolution: {integrity: sha512-obr6jinQSmM1qVsveDQ3yC/rWcJnAfQXUkkpre/oLBpwI3TopZ888627FdPO7t7P4G2ixoD5Jx34VPKpL1q5zg==}
 
-  '@ezuikit/player-ezopen@9.0.6':
-    resolution: {integrity: sha512-OFte0kcwJAaL5YwMijzStei0MB6aj1IssiMNdMaZFnx1b+bApUKxx6ku5XUpwZeISkMY6me2lVceF0RzOkNhKQ==}
-
-  '@ezuikit/player-plugin-record@9.1.0':
-    resolution: {integrity: sha512-wG2o4fCLPdLUFt8Z78PPYfuv2yKUqx68txDc81XmonCG6wWx9r1wVQ9iDa5d+XbuQKC5DJs6z7HxO4S5OuJ+rg==}
+  '@ezuikit/player-plugin-record@9.1.1-beta.1':
+    resolution: {integrity: sha512-T76aR7Gdaoo0+b4/mJ3grrWjVglE6po5O1ZY6CcGjJkX73XRoUl9szCB3iy/7ENQwruSgI+U2co29ghpCY5SWw==}
 
   '@ezuikit/utils-collect@0.1.1':
     resolution: {integrity: sha512-BgEOnTtAq8rQRBAKv5rLXbQLGOnfOZ6NS0QTmiviey80JbMJlxrLiqmjL5lxvkm4JtCcXCtSgPA4tskQKN4eDA==}
@@ -577,23 +554,29 @@
   '@ezuikit/utils-logger@2.0.1':
     resolution: {integrity: sha512-AeLLR9ZQJkSJFfCicpkVBcnOE4zyQMp4W4997sTEGyF3k3I8Upkfn4Cye2A44MIphdw6eytKlaJp6H4joSafQw==}
 
-  '@ezuikit/utils-service@1.0.1':
-    resolution: {integrity: sha512-iNjYuU7AScBJxvKBM9PjiGI2y64QJNPT/H1Fy/Y7ZIAlw4DO//TP+x50qCho+i+EOUpWLtOqBQvtRb7a0O4X4Q==}
+  '@ezuikit/utils-service@2.0.0':
+    resolution: {integrity: sha512-CBCPMw3uwd/vCh/YS+fZPMJrmg0LmCPO5bVkAon6VxjJJxwpVNcVb15sNbZyGR52JYt3wq7UEhnqHMprHnCSEA==}
 
-  '@ezuikit/utils-tools@1.0.1':
-    resolution: {integrity: sha512-PcsRlsGGy9V9BcbwjKeHqtqNYvrViW0/zbT3h+NFwSxpgapdRW3M6Y9gjY1ej/8dWYWcndxMkV/fD2Q7eUlPTw==}
+  '@ezuikit/utils-tools@2.0.6':
+    resolution: {integrity: sha512-1XUk8IY28FpspjzgbbVEfcsRiwKx9l5ltjOYw9RYh3BK2XAKv2B2N+79RCQ1qfmjLVsHLx2H8xTwSJECSWcnqg==}
 
-  '@ezuikit/utils-tools@2.0.5':
-    resolution: {integrity: sha512-7SR3kKQdColQ+Rz/PPaLzHi8Yv3RuhFUh3iMymonlO95OJSZBgjaTSX5QNeTnZIi57soNVoHByR4tS/JbMA4Wg==}
+  '@floating-ui/core@1.6.9':
+    resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
 
-  '@floating-ui/core@1.7.2':
-    resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==}
+  '@floating-ui/core@1.8.0':
+    resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==}
 
-  '@floating-ui/dom@1.7.2':
-    resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==}
+  '@floating-ui/dom@1.6.13':
+    resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==}
 
-  '@floating-ui/utils@0.2.10':
-    resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+  '@floating-ui/dom@1.8.0':
+    resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==}
+
+  '@floating-ui/utils@0.2.12':
+    resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==}
+
+  '@floating-ui/utils@0.2.9':
+    resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
 
   '@humanfs/core@0.19.1':
     resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@@ -611,12 +594,12 @@
     resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
     engines: {node: '>=18.18'}
 
-  '@humanwhocodes/retry@0.4.3':
-    resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+  '@humanwhocodes/retry@0.4.1':
+    resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
     engines: {node: '>=18.18'}
 
-  '@intlify/bundle-utils@10.0.1':
-    resolution: {integrity: sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==}
+  '@intlify/bundle-utils@10.0.0':
+    resolution: {integrity: sha512-BR5yLOkF2dzrARTbAg7RGAIPcx9Aark7p1K/0O285F7rfzso9j2dsa+S4dA67clZ0rToZ10NSSTfbyUptVu7Bg==}
     engines: {node: '>= 18'}
     peerDependencies:
       petite-vue-i18n: '*'
@@ -627,20 +610,32 @@
       vue-i18n:
         optional: true
 
-  '@intlify/core-base@11.1.10':
-    resolution: {integrity: sha512-JhRb40hD93Vk0BgMgDc/xMIFtdXPHoytzeK6VafBNOj6bb6oUZrGamXkBKecMsmGvDQQaPRGG2zpa25VCw8pyw==}
+  '@intlify/core-base@11.1.1':
+    resolution: {integrity: sha512-bb8gZvoeKExCI2r/NVCK9E4YyOkvYGaSCPxVZe8T0jz8aX+dHEOZWxK06Z/Y9mWRkJfBiCH4aOhDF1yr1t5J8Q==}
     engines: {node: '>= 16'}
 
-  '@intlify/message-compiler@11.1.10':
-    resolution: {integrity: sha512-TABl3c8tSLWbcD+jkQTyBhrnW251dzqW39MPgEUCsd69Ua3ceoimsbIzvkcPzzZvt1QDxNkenMht+5//V3JvLQ==}
+  '@intlify/message-compiler@11.1.1':
+    resolution: {integrity: sha512-4iEsUZ3aF7jXY19CJFN5VP+pPyLITD9FVsjB13z9TU1UxaZLlFsmNhvRxlPDSOfHAP5RpNF2QKKdZ3DHVf4Yzw==}
     engines: {node: '>= 16'}
 
-  '@intlify/shared@11.1.10':
-    resolution: {integrity: sha512-6ZW/f3Zzjxfa1Wh0tYQI5pLKUtU+SY7l70pEG+0yd0zjcsYcK0EBt6Fz30Dy0tZhEqemziQQy2aNU3GJzyrMUA==}
+  '@intlify/message-compiler@12.0.0-alpha.4':
+    resolution: {integrity: sha512-F4yHuJzI2ZXtXTW2B1VhuNULAOjR5bniFSC/Z0rLWRYPO43pVgKLu+FPDoJq13OjTFq4X5hx2s855M4gqPU/pA==}
+    engines: {node: '>= 22'}
+
+  '@intlify/shared@11.1.1':
+    resolution: {integrity: sha512-2kGiWoXaeV8HZlhU/Nml12oTbhv7j2ufsJ5vQaa0VTjzUmZVdd/nmKFRAOJ/FtjO90Qba5AnZDwsrY7ZND5udA==}
     engines: {node: '>= 16'}
 
-  '@intlify/unplugin-vue-i18n@6.0.8':
-    resolution: {integrity: sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==}
+  '@intlify/shared@11.4.8':
+    resolution: {integrity: sha512-XbRgrv+XEuvDr7UCY55oibVrh+o4u+A0VB6nSL0F5Z8LcZxE/8j573LYG6bCrOigIcHdGpSNI7Rh5UpC5/B/eg==}
+    engines: {node: '>= 22'}
+
+  '@intlify/shared@12.0.0-alpha.4':
+    resolution: {integrity: sha512-MfunEN3/yQjD1Q9HnD4Qtvg/qLYnR+tK3mEz/EEvikJO+Hu8ICe7Rqh6uusLSjpWy6ECVt2p5HGXlYA12UBweA==}
+    engines: {node: '>= 22'}
+
+  '@intlify/unplugin-vue-i18n@6.0.3':
+    resolution: {integrity: sha512-9ZDjBlhUHtgjRl23TVcgfJttgu8cNepwVhWvOv3mUMRDAhjW0pur1mWKEUKr1I8PNwE4Gvv2IQ1xcl4RL0nG0g==}
     engines: {node: '>= 18'}
     peerDependencies:
       petite-vue-i18n: '*'
@@ -674,24 +669,26 @@
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
     engines: {node: '>=12'}
 
-  '@jridgewell/gen-mapping@0.3.12':
-    resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
+  '@jridgewell/gen-mapping@0.3.8':
+    resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+    engines: {node: '>=6.0.0'}
 
   '@jridgewell/resolve-uri@3.1.2':
     resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
     engines: {node: '>=6.0.0'}
 
-  '@jridgewell/source-map@0.3.10':
-    resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==}
+  '@jridgewell/set-array@1.2.1':
+    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+    engines: {node: '>=6.0.0'}
 
-  '@jridgewell/sourcemap-codec@1.5.4':
-    resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
+  '@jridgewell/source-map@0.3.6':
+    resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
 
-  '@jridgewell/sourcemap-codec@1.5.5':
-    resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+  '@jridgewell/sourcemap-codec@1.5.0':
+    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
 
-  '@jridgewell/trace-mapping@0.3.29':
-    resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+  '@jridgewell/trace-mapping@0.3.25':
+    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
 
   '@juggle/resize-observer@3.4.0':
     resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
@@ -803,18 +800,15 @@
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
 
-  '@pkgr/core@0.3.6':
-    resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==}
-    engines: {node: ^14.18.0 || >=16.0.0}
+  '@pkgr/core@0.1.1':
+    resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
+    engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
 
-  '@polka/url@1.0.0-next.29':
-    resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+  '@polka/url@1.0.0-next.28':
+    resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
 
-  '@rolldown/pluginutils@1.0.0-beta.29':
-    resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
-
-  '@rollup/pluginutils@5.2.0':
-    resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
+  '@rollup/pluginutils@5.1.4':
+    resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
       rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -822,119 +816,113 @@
       rollup:
         optional: true
 
-  '@rollup/rollup-android-arm-eabi@4.45.1':
-    resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==}
+  '@rollup/rollup-android-arm-eabi@4.34.8':
+    resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
     cpu: [arm]
     os: [android]
 
-  '@rollup/rollup-android-arm64@4.45.1':
-    resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==}
+  '@rollup/rollup-android-arm64@4.34.8':
+    resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
     cpu: [arm64]
     os: [android]
 
-  '@rollup/rollup-darwin-arm64@4.45.1':
-    resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==}
+  '@rollup/rollup-darwin-arm64@4.34.8':
+    resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
     cpu: [arm64]
     os: [darwin]
 
-  '@rollup/rollup-darwin-x64@4.45.1':
-    resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==}
+  '@rollup/rollup-darwin-x64@4.34.8':
+    resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
     cpu: [x64]
     os: [darwin]
 
-  '@rollup/rollup-freebsd-arm64@4.45.1':
-    resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==}
+  '@rollup/rollup-freebsd-arm64@4.34.8':
+    resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
     cpu: [arm64]
     os: [freebsd]
 
-  '@rollup/rollup-freebsd-x64@4.45.1':
-    resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==}
+  '@rollup/rollup-freebsd-x64@4.34.8':
+    resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
     cpu: [x64]
     os: [freebsd]
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.45.1':
-    resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==}
+  '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
+    resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
     cpu: [arm]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-arm-musleabihf@4.45.1':
-    resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==}
+  '@rollup/rollup-linux-arm-musleabihf@4.34.8':
+    resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
     cpu: [arm]
     os: [linux]
     libc: [musl]
 
-  '@rollup/rollup-linux-arm64-gnu@4.45.1':
-    resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==}
+  '@rollup/rollup-linux-arm64-gnu@4.34.8':
+    resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
     cpu: [arm64]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-arm64-musl@4.45.1':
-    resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==}
+  '@rollup/rollup-linux-arm64-musl@4.34.8':
+    resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
     cpu: [arm64]
     os: [linux]
     libc: [musl]
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.45.1':
-    resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==}
+  '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
+    resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
     cpu: [loong64]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.45.1':
-    resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==}
+  '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
+    resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
     cpu: [ppc64]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-riscv64-gnu@4.45.1':
-    resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==}
+  '@rollup/rollup-linux-riscv64-gnu@4.34.8':
+    resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
     cpu: [riscv64]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-riscv64-musl@4.45.1':
-    resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==}
-    cpu: [riscv64]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-linux-s390x-gnu@4.45.1':
-    resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==}
+  '@rollup/rollup-linux-s390x-gnu@4.34.8':
+    resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
     cpu: [s390x]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-x64-gnu@4.45.1':
-    resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==}
+  '@rollup/rollup-linux-x64-gnu@4.34.8':
+    resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
     cpu: [x64]
     os: [linux]
     libc: [glibc]
 
-  '@rollup/rollup-linux-x64-musl@4.45.1':
-    resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==}
+  '@rollup/rollup-linux-x64-musl@4.34.8':
+    resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
     cpu: [x64]
     os: [linux]
     libc: [musl]
 
-  '@rollup/rollup-win32-arm64-msvc@4.45.1':
-    resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==}
+  '@rollup/rollup-win32-arm64-msvc@4.34.8':
+    resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
     cpu: [arm64]
     os: [win32]
 
-  '@rollup/rollup-win32-ia32-msvc@4.45.1':
-    resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==}
+  '@rollup/rollup-win32-ia32-msvc@4.34.8':
+    resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
     cpu: [ia32]
     os: [win32]
 
-  '@rollup/rollup-win32-x64-msvc@4.45.1':
-    resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==}
+  '@rollup/rollup-win32-x64-msvc@4.34.8':
+    resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
     cpu: [x64]
     os: [win32]
 
-  '@rushstack/eslint-patch@1.16.1':
-    resolution: {integrity: sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==}
+  '@rushstack/eslint-patch@1.10.5':
+    resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==}
 
   '@sec-ant/readable-stream@0.4.1':
     resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
@@ -946,6 +934,12 @@
   '@skax/delegate@4.0.2':
     resolution: {integrity: sha512-8imP+fGESjlbU4mFhZMEuR3/qmYVtqQjXXzZ/C/imbzKqyaMWYpEDqQXNf6yGHzWHUJhZwn5AWNm645U1GjQsQ==}
 
+  '@socket.io/component-emitter@3.1.2':
+    resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
+  '@sxzz/popperjs-es@2.11.7':
+    resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
+
   '@sxzz/popperjs-es@2.11.8':
     resolution: {integrity: sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==}
 
@@ -956,17 +950,11 @@
     resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
     engines: {node: '>=10.13.0'}
 
-  '@tsconfig/node20@20.1.9':
-    resolution: {integrity: sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==}
+  '@tsconfig/node20@20.1.4':
+    resolution: {integrity: sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==}
 
-  '@types/esrecurse@4.3.1':
-    resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
-
-  '@types/estree@1.0.8':
-    resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
-  '@types/estree@1.0.9':
-    resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+  '@types/estree@1.0.6':
+    resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
 
   '@types/event-emitter@0.3.5':
     resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==}
@@ -980,14 +968,17 @@
   '@types/lodash-es@4.17.12':
     resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
 
-  '@types/lodash@4.17.20':
-    resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==}
+  '@types/lodash@4.17.15':
+    resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==}
+
+  '@types/lodash@4.17.25':
+    resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==}
 
   '@types/mockjs@1.0.10':
     resolution: {integrity: sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==}
 
-  '@types/node@20.19.43':
-    resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==}
+  '@types/node@20.17.19':
+    resolution: {integrity: sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==}
 
   '@types/nprogress@0.2.3':
     resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==}
@@ -998,96 +989,57 @@
   '@types/web-bluetooth@0.0.16':
     resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
 
+  '@types/web-bluetooth@0.0.20':
+    resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+
   '@types/web-bluetooth@0.0.21':
     resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
 
-  '@typescript-eslint/eslint-plugin@8.64.0':
-    resolution: {integrity: sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==}
+  '@typescript-eslint/eslint-plugin@8.24.1':
+    resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      '@typescript-eslint/parser': ^8.64.0
-      eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-      typescript: '>=4.8.4 <6.1.0'
+      '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.8.0'
 
-  '@typescript-eslint/parser@8.64.0':
-    resolution: {integrity: sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==}
+  '@typescript-eslint/parser@8.24.1':
+    resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-      typescript: '>=4.8.4 <6.1.0'
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.8.0'
 
-  '@typescript-eslint/project-service@8.38.0':
-    resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==}
+  '@typescript-eslint/scope-manager@8.24.1':
+    resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/type-utils@8.24.1':
+    resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.8.0'
 
-  '@typescript-eslint/project-service@8.64.0':
-    resolution: {integrity: sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==}
+  '@typescript-eslint/types@8.24.1':
+    resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@typescript-eslint/typescript-estree@8.24.1':
+    resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      typescript: '>=4.8.4 <6.1.0'
+      typescript: '>=4.8.4 <5.8.0'
 
-  '@typescript-eslint/scope-manager@8.38.0':
-    resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/scope-manager@8.64.0':
-    resolution: {integrity: sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/tsconfig-utils@8.38.0':
-    resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==}
+  '@typescript-eslint/utils@8.24.1':
+    resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.8.0'
 
-  '@typescript-eslint/tsconfig-utils@8.64.0':
-    resolution: {integrity: sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <6.1.0'
-
-  '@typescript-eslint/type-utils@8.64.0':
-    resolution: {integrity: sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-      typescript: '>=4.8.4 <6.1.0'
-
-  '@typescript-eslint/types@8.38.0':
-    resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/types@8.64.0':
-    resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/typescript-estree@8.38.0':
-    resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/typescript-estree@8.64.0':
-    resolution: {integrity: sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <6.1.0'
-
-  '@typescript-eslint/utils@8.64.0':
-    resolution: {integrity: sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-      typescript: '>=4.8.4 <6.1.0'
-
-  '@typescript-eslint/visitor-keys@8.38.0':
-    resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/visitor-keys@8.64.0':
-    resolution: {integrity: sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==}
+  '@typescript-eslint/visitor-keys@8.24.1':
+    resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@uppy/companion-client@2.2.2':
@@ -1107,62 +1059,56 @@
     peerDependencies:
       '@uppy/core': ^2.3.3
 
-  '@vitejs/plugin-vue-jsx@4.2.0':
-    resolution: {integrity: sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==}
+  '@vitejs/plugin-vue-jsx@4.1.1':
+    resolution: {integrity: sha512-uMJqv/7u1zz/9NbWAD3XdjaY20tKTf17XVfQ9zq4wY1BjsB/PjpJPMe2xiG39QpP4ZdhYNhm4Hvo66uJrykNLA==}
     engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
       vite: ^5.0.0 || ^6.0.0
       vue: ^3.0.0
 
-  '@vitejs/plugin-vue@5.2.4':
-    resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
+  '@vitejs/plugin-vue@5.2.1':
+    resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==}
     engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
       vite: ^5.0.0 || ^6.0.0
       vue: ^3.2.25
 
-  '@volar/language-core@2.4.15':
-    resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
+  '@volar/language-core@2.4.11':
+    resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==}
 
-  '@volar/source-map@2.4.15':
-    resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
+  '@volar/source-map@2.4.11':
+    resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==}
 
-  '@volar/typescript@2.4.15':
-    resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
+  '@volar/typescript@2.4.11':
+    resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==}
 
-  '@vue/babel-helper-vue-transform-on@1.4.0':
-    resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==}
+  '@vue/babel-helper-vue-transform-on@1.2.5':
+    resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==}
 
-  '@vue/babel-plugin-jsx@1.4.0':
-    resolution: {integrity: sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==}
+  '@vue/babel-plugin-jsx@1.2.5':
+    resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     peerDependenciesMeta:
       '@babel/core':
         optional: true
 
-  '@vue/babel-plugin-resolve-type@1.4.0':
-    resolution: {integrity: sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==}
+  '@vue/babel-plugin-resolve-type@1.2.5':
+    resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
-  '@vue/compiler-core@3.5.18':
-    resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==}
+  '@vue/compiler-core@3.5.13':
+    resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
 
-  '@vue/compiler-core@3.5.40':
-    resolution: {integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==}
+  '@vue/compiler-dom@3.5.13':
+    resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
 
-  '@vue/compiler-dom@3.5.18':
-    resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==}
+  '@vue/compiler-sfc@3.5.13':
+    resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
 
-  '@vue/compiler-dom@3.5.40':
-    resolution: {integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==}
-
-  '@vue/compiler-sfc@3.5.40':
-    resolution: {integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==}
-
-  '@vue/compiler-ssr@3.5.40':
-    resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==}
+  '@vue/compiler-ssr@3.5.13':
+    resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
 
   '@vue/compiler-vue2@2.7.16':
     resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
@@ -1170,16 +1116,16 @@
   '@vue/devtools-api@6.6.4':
     resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
 
-  '@vue/devtools-core@7.7.10':
-    resolution: {integrity: sha512-rpsAY7HuxYUz6G7R0zBGoOgYsn/r3iU0LixLOGNJ3o5if6tkPDGIGV+6CIJbDNbeueP2HsGDCOQ5ni6Wr36xEQ==}
+  '@vue/devtools-core@7.7.2':
+    resolution: {integrity: sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==}
     peerDependencies:
       vue: ^3.0.0
 
-  '@vue/devtools-kit@7.7.10':
-    resolution: {integrity: sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==}
+  '@vue/devtools-kit@7.7.2':
+    resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==}
 
-  '@vue/devtools-shared@7.7.10':
-    resolution: {integrity: sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==}
+  '@vue/devtools-shared@7.7.2':
+    resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==}
 
   '@vue/eslint-config-prettier@10.2.0':
     resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==}
@@ -1187,77 +1133,75 @@
       eslint: '>= 8.21.0'
       prettier: '>= 3.0.0'
 
-  '@vue/eslint-config-typescript@14.9.0':
-    resolution: {integrity: sha512-E3j9hDlfVf10F30MRcLTPY2IIhWIx1nsvkVukk14kTcuA+oBVot9zsP1hzsO+PAMDxV3Fd9FimBJtUBNBL5KFA==}
+  '@vue/eslint-config-typescript@14.4.0':
+    resolution: {integrity: sha512-daU+eAekEeVz3CReE4PRW25fe+OJDKwE28jHN6LimDEnuFMbJ6H4WGogEpNof276wVP6UvzOeJQfLFjB5mW29A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    hasBin: true
     peerDependencies:
-      eslint: ^9.10.0 || ^10.0.0
-      eslint-plugin-vue: ^9.28.0 || ^10.0.0
+      eslint: ^9.10.0
+      eslint-plugin-vue: ^9.28.0
       typescript: '>=4.8.4'
     peerDependenciesMeta:
       typescript:
         optional: true
 
-  '@vue/language-core@2.2.12':
-    resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==}
+  '@vue/language-core@2.2.2':
+    resolution: {integrity: sha512-QotO41kurE5PLf3vrNgGTk3QswO2PdUFjBwNiOi7zMmGhwb25PSTh9hD1MCgKC06AVv+8sZQvlL3Do4TTVHSiQ==}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
       typescript:
         optional: true
 
-  '@vue/reactivity@3.5.18':
-    resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==}
+  '@vue/reactivity@3.5.13':
+    resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
 
-  '@vue/reactivity@3.5.40':
-    resolution: {integrity: sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==}
+  '@vue/runtime-core@3.5.13':
+    resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
 
-  '@vue/runtime-core@3.5.18':
-    resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==}
+  '@vue/runtime-dom@3.5.13':
+    resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
 
-  '@vue/runtime-core@3.5.40':
-    resolution: {integrity: sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==}
-
-  '@vue/runtime-dom@3.5.40':
-    resolution: {integrity: sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==}
-
-  '@vue/server-renderer@3.5.40':
-    resolution: {integrity: sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==}
-
-  '@vue/shared@3.5.18':
-    resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
-
-  '@vue/shared@3.5.40':
-    resolution: {integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==}
-
-  '@vue/test-utils@2.4.11':
-    resolution: {integrity: sha512-GDqaqZsA6m2E5vNzej0aYiIb6BX8xV9pNSbbbXKOfEYwg7ZNblVX8suyqmUBThq8VIrgAJNxn+z72hVtUeiWHA==}
+  '@vue/server-renderer@3.5.13':
+    resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
     peerDependencies:
-      '@vue/compiler-dom': 3.x
-      '@vue/server-renderer': 3.x
-      vue: 3.x
-    peerDependenciesMeta:
-      '@vue/server-renderer':
-        optional: true
+      vue: 3.5.13
+
+  '@vue/shared@3.5.13':
+    resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+
+  '@vue/test-utils@2.4.6':
+    resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
 
   '@vue/tsconfig@0.5.1':
     resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
 
-  '@vueuse/core@12.8.2':
-    resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
+  '@vueuse/core@12.7.0':
+    resolution: {integrity: sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA==}
+
+  '@vueuse/core@14.3.0':
+    resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
+    peerDependencies:
+      vue: ^3.5.0
 
   '@vueuse/core@9.13.0':
     resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
 
-  '@vueuse/metadata@12.8.2':
-    resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
+  '@vueuse/metadata@12.7.0':
+    resolution: {integrity: sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g==}
+
+  '@vueuse/metadata@14.3.0':
+    resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==}
 
   '@vueuse/metadata@9.13.0':
     resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
 
-  '@vueuse/shared@12.8.2':
-    resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
+  '@vueuse/shared@12.7.0':
+    resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==}
+
+  '@vueuse/shared@14.3.0':
+    resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==}
+    peerDependencies:
+      vue: ^3.5.0
 
   '@vueuse/shared@9.13.0':
     resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
@@ -1349,9 +1293,9 @@
       slate: ^0.72.0
       snabbdom: ^3.1.0
 
-  abbrev@2.0.0:
-    resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  abbrev@3.0.0:
+    resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==}
+    engines: {node: ^18.17.0 || >=20.5.0}
 
   abortcontroller-polyfill@1.7.8:
     resolution: {integrity: sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==}
@@ -1361,13 +1305,8 @@
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
 
-  acorn@8.15.0:
-    resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-
-  acorn@8.17.0:
-    resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
+  acorn@8.14.0:
+    resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
     engines: {node: '>=0.4.0'}
     hasBin: true
 
@@ -1375,15 +1314,11 @@
     resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
     engines: {node: '>=0.8'}
 
-  agent-base@6.0.0:
-    resolution: {integrity: sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==}
-    engines: {node: '>= 6.0.0'}
+  ajv@6.12.6:
+    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
 
-  ajv@6.15.0:
-    resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
-
-  alien-signals@1.0.13:
-    resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
+  alien-signals@1.0.3:
+    resolution: {integrity: sha512-zQOh3wAYK5ujENxvBBR3CFGF/b6afaSzZ/c9yNhJ1ENrGHETvpUuKQsa93Qrclp0+PzTF93MaZ7scVp1uUozhA==}
 
   ansi-regex@5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -1420,54 +1355,41 @@
   asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
 
-  autoprefixer@10.5.4:
-    resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==}
+  autoprefixer@10.4.20:
+    resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
     engines: {node: ^10 || ^12 || >=14}
     hasBin: true
     peerDependencies:
       postcss: ^8.1.0
 
-  axios@1.18.1:
-    resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
+  axios@1.7.9:
+    resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
 
   balanced-match@1.0.2:
     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
-  balanced-match@4.0.4:
-    resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
-    engines: {node: 18 || 20 || >=22}
-
-  baseline-browser-mapping@2.10.43:
-    resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
 
   binary-extensions@2.3.0:
     resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
     engines: {node: '>=8'}
 
-  birpc@2.5.0:
-    resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==}
+  birpc@0.2.19:
+    resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
 
   boolbase@1.0.0:
     resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
 
-  brace-expansion@1.1.16:
-    resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==}
+  brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
 
-  brace-expansion@2.1.2:
-    resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==}
-
-  brace-expansion@5.0.7:
-    resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==}
-    engines: {node: 18 || 20 || >=22}
+  brace-expansion@2.0.1:
+    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
 
   braces@3.0.3:
     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
     engines: {node: '>=8'}
 
-  browserslist@4.28.6:
-    resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==}
+  browserslist@4.24.4:
+    resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
 
@@ -1490,8 +1412,8 @@
     resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
     engines: {node: '>= 6'}
 
-  caniuse-lite@1.0.30001806:
-    resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==}
+  caniuse-lite@1.0.30001700:
+    resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
 
   cfb@1.2.2:
     resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==}
@@ -1501,8 +1423,8 @@
     resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
     engines: {node: '>=10'}
 
-  chardet@2.2.0:
-    resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==}
+  chardet@2.0.0:
+    resolution: {integrity: sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==}
 
   chokidar@3.6.0:
     resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@@ -1565,8 +1487,8 @@
     resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
     engines: {node: '>=12.13'}
 
-  core-js@3.49.0:
-    resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==}
+  core-js@3.40.0:
+    resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==}
 
   crc-32@1.2.2:
     resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
@@ -1577,8 +1499,8 @@
     resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
     engines: {node: '>= 8'}
 
-  css-select@5.2.2:
-    resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+  css-select@5.1.0:
+    resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
 
   css-tree@2.2.1:
     resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
@@ -1588,8 +1510,8 @@
     resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
     engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
 
-  css-what@6.2.2:
-    resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+  css-what@6.1.0:
+    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
     engines: {node: '>= 6'}
 
   cssesc@3.0.0:
@@ -1601,12 +1523,15 @@
     resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
     engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
 
-  csstype@3.2.3:
-    resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+  csstype@3.1.3:
+    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
 
   d@1.0.2:
     resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
     engines: {node: '>=0.12'}
+
+  dayjs@1.11.13:
+    resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
 
   dayjs@1.11.21:
     resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==}
@@ -1617,8 +1542,8 @@
   debounce-promise@3.1.2:
     resolution: {integrity: sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==}
 
-  debug@4.4.1:
-    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+  debug@4.3.7:
+    resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
     engines: {node: '>=6.0'}
     peerDependencies:
       supports-color: '*'
@@ -1626,8 +1551,8 @@
       supports-color:
         optional: true
 
-  debug@4.4.3:
-    resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+  debug@4.4.0:
+    resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
     engines: {node: '>=6.0'}
     peerDependencies:
       supports-color: '*'
@@ -1704,18 +1629,18 @@
     engines: {node: '>=14'}
     hasBin: true
 
-  electron-to-chromium@1.5.393:
-    resolution: {integrity: sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==}
+  electron-to-chromium@1.5.102:
+    resolution: {integrity: sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==}
 
   element-plus@2.10.2:
     resolution: {integrity: sha512-p2KiAa0jEGXrzdlTAfpiS7HQFAhla4gvx6H7RuDf+OO0uC3DGpolxvdHjFR8gt7+vaWyxQNcHa1sAdBkmjqlgA==}
     peerDependencies:
       vue: ^3.2.0
 
-  element-plus@2.10.4:
-    resolution: {integrity: sha512-UD4elWHrCnp1xlPhbXmVcaKFLCRaRAY6WWRwemGfGW3ceIjXm9fSYc9RNH3AiOEA6Ds1p9ZvhCs76CR9J8Vd+A==}
+  element-plus@2.14.3:
+    resolution: {integrity: sha512-pJcvxcpZjYruNzuJhAeVwnbYjfNgzBKnWHwSVEhwzM2/kcLI3brzmtIBxtPqd4hQWJfD1PRnjoc1WipLw2eBGg==}
     peerDependencies:
-      vue: ^3.2.0
+      vue: ^3.3.7
 
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -1723,12 +1648,15 @@
   emoji-regex@9.2.2:
     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
 
+  engine.io-client@6.6.3:
+    resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==}
+
+  engine.io-parser@5.2.3:
+    resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+    engines: {node: '>=10.0.0'}
+
   entities@4.5.0:
     resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
-    engines: {node: '>=0.12'}
-
-  entities@7.0.1:
-    resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
     engines: {node: '>=0.12'}
 
   error-stack-parser-es@0.1.5:
@@ -1742,8 +1670,8 @@
     resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
     engines: {node: '>= 0.4'}
 
-  es-object-atoms@1.1.2:
-    resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==}
+  es-object-atoms@1.1.1:
+    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
     engines: {node: '>= 0.4'}
 
   es-set-tostringtag@2.1.0:
@@ -1782,19 +1710,19 @@
     engines: {node: '>=6.0'}
     hasBin: true
 
-  eslint-config-prettier@10.1.8:
-    resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
+  eslint-config-prettier@10.0.1:
+    resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==}
     hasBin: true
     peerDependencies:
       eslint: '>=7.0.0'
 
-  eslint-plugin-prettier@5.5.6:
-    resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==}
+  eslint-plugin-prettier@5.2.3:
+    resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       '@types/eslint': '>=8.0.0'
       eslint: '>=8.0.0'
-      eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
+      eslint-config-prettier: '*'
       prettier: '>=3.0.0'
     peerDependenciesMeta:
       '@types/eslint':
@@ -1802,8 +1730,8 @@
       eslint-config-prettier:
         optional: true
 
-  eslint-plugin-vue@9.33.0:
-    resolution: {integrity: sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==}
+  eslint-plugin-vue@9.32.0:
+    resolution: {integrity: sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -1812,28 +1740,20 @@
     resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  eslint-scope@8.4.0:
-    resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+  eslint-scope@8.2.0:
+    resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  eslint-scope@9.1.2:
-    resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
-    engines: {node: ^20.19.0 || ^22.13.0 || >=24}
 
   eslint-visitor-keys@3.4.3:
     resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  eslint-visitor-keys@4.2.1:
-    resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+  eslint-visitor-keys@4.2.0:
+    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  eslint-visitor-keys@5.0.1:
-    resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
-    engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
-  eslint@9.39.5:
-    resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==}
+  eslint@9.20.1:
+    resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     hasBin: true
     peerDependencies:
@@ -1846,13 +1766,9 @@
     resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
     engines: {node: '>=0.10'}
 
-  espree@10.4.0:
-    resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+  espree@10.3.0:
+    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  espree@11.2.0:
-    resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
-    engines: {node: ^20.19.0 || ^22.13.0 || >=24}
 
   espree@9.6.1:
     resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
@@ -1865,10 +1781,6 @@
 
   esquery@1.6.0:
     resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
-    engines: {node: '>=0.10'}
-
-  esquery@1.7.0:
-    resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
     engines: {node: '>=0.10'}
 
   esrecurse@4.3.0:
@@ -1892,15 +1804,15 @@
   eventemitter3@5.0.4:
     resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
 
-  execa@9.6.0:
-    resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==}
+  execa@9.5.2:
+    resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==}
     engines: {node: ^18.19.0 || >=20.5.0}
 
   ext@1.7.0:
     resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
 
-  ezuikit-js@9.0.15:
-    resolution: {integrity: sha512-rBZlaNEobYABg7ra6ZTz8eJ0BL/p3WhLSya1UCXmsxOltbwYKnb87v1fno3mVN3em6Ql9vY9hIVl/jxHlE5IUg==}
+  ezuikit-js@9.0.17:
+    resolution: {integrity: sha512-3UnfvJjHHv3j4echbLIRCe7SH4Z2J9tfq8i6Iphc1FVs1N+bfKB8tWjOTv+pPxYmXf6nBvSh4R7ek92RQHzQ6w==}
 
   fast-deep-equal@3.1.3:
     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -1918,17 +1830,8 @@
   fast-levenshtein@2.0.6:
     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
 
-  fastq@1.19.1:
-    resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
-
-  fdir@6.5.0:
-    resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
-    engines: {node: '>=12.0.0'}
-    peerDependencies:
-      picomatch: ^3 || ^4
-    peerDependenciesMeta:
-      picomatch:
-        optional: true
+  fastq@1.19.0:
+    resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
 
   fetch-blob@3.2.0:
     resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
@@ -1960,8 +1863,8 @@
   flatted@3.3.3:
     resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
 
-  follow-redirects@1.16.0:
-    resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
+  follow-redirects@1.15.9:
+    resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
     engines: {node: '>=4.0'}
     peerDependencies:
       debug: '*'
@@ -1969,12 +1872,12 @@
       debug:
         optional: true
 
-  foreground-child@3.3.1:
-    resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+  foreground-child@3.3.0:
+    resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
     engines: {node: '>=14'}
 
-  form-data@4.0.6:
-    resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
+  form-data@4.0.2:
+    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
     engines: {node: '>= 6'}
 
   formdata-polyfill@4.0.10:
@@ -1985,8 +1888,8 @@
     resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
     engines: {node: '>=0.8'}
 
-  fraction.js@5.3.4:
-    resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+  fraction.js@4.3.7:
+    resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
 
   fs-extra@10.1.0:
     resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
@@ -2012,8 +1915,8 @@
     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
     engines: {node: 6.* || 8.* || >= 10.*}
 
-  get-intrinsic@1.3.0:
-    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+  get-intrinsic@1.2.7:
+    resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
     engines: {node: '>= 0.4'}
 
   get-proto@1.0.1:
@@ -2037,6 +1940,10 @@
     deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
     hasBin: true
 
+  globals@11.12.0:
+    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+    engines: {node: '>=4'}
+
   globals@13.24.0:
     resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
     engines: {node: '>=8'}
@@ -2051,6 +1958,9 @@
 
   graceful-fs@4.2.11:
     resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+  graphemer@1.4.0:
+    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
 
   has-flag@4.0.0:
     resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -2068,10 +1978,6 @@
     resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
     engines: {node: '>= 0.4'}
 
-  hasown@2.0.4:
-    resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
-    engines: {node: '>= 0.4'}
-
   he@1.2.0:
     resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
     hasBin: true
@@ -2079,15 +1985,15 @@
   hookable@5.5.3:
     resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
 
+  html-tags@3.3.1:
+    resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+    engines: {node: '>=8'}
+
   html-void-elements@2.0.1:
     resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
 
-  https-proxy-agent@5.0.1:
-    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
-    engines: {node: '>= 6'}
-
-  human-signals@8.0.1:
-    resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
+  human-signals@8.0.0:
+    resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==}
     engines: {node: '>=18.18.0'}
 
   i18next@20.6.1:
@@ -2097,15 +2003,11 @@
     resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
     engines: {node: '>= 4'}
 
-  ignore@7.0.6:
-    resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==}
-    engines: {node: '>= 4'}
-
   immer@9.0.21:
     resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
 
-  immutable@5.1.3:
-    resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==}
+  immutable@5.0.3:
+    resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==}
 
   import-fresh@3.3.1:
     resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
@@ -2201,8 +2103,8 @@
     resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
     hasBin: true
 
-  js-beautify@1.15.4:
-    resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==}
+  js-beautify@1.15.3:
+    resolution: {integrity: sha512-rKKGuyTxGNlyN4EQKWzNndzXpi0bOl8Gl8YQAW1as/oMz0XhD6sHJO1hTvoBDOSzKuJb9WkwoAb34FfdkKMv2A==}
     engines: {node: '>=14'}
     hasBin: true
 
@@ -2215,10 +2117,6 @@
 
   js-yaml@4.1.0:
     resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
-    hasBin: true
-
-  js-yaml@4.3.0:
-    resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==}
     hasBin: true
 
   jsesc@3.1.0:
@@ -2268,6 +2166,9 @@
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     engines: {node: '>=10'}
 
+  lodash-es@4.17.21:
+    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
   lodash-es@4.18.1:
     resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
 
@@ -2306,6 +2207,9 @@
   lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
+  lodash@4.18.1:
+    resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
+
   lru-cache@10.4.3:
     resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
 
@@ -2314,9 +2218,6 @@
 
   magic-string@0.30.17:
     resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
-  magic-string@0.30.21:
-    resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
 
   marked@14.1.4:
     resolution: {integrity: sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==}
@@ -2355,12 +2256,8 @@
     resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
 
-  minimatch@10.2.5:
-    resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
-    engines: {node: 18 || 20 || >=22}
-
-  minimatch@3.1.5:
-    resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+  minimatch@3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
 
   minimatch@9.0.1:
     resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
@@ -2368,10 +2265,6 @@
 
   minimatch@9.0.5:
     resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
-    engines: {node: '>=16 || 14 >=14.17'}
-
-  minimatch@9.0.9:
-    resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
     engines: {node: '>=16 || 14 >=14.17'}
 
   minipass@7.1.2:
@@ -2400,18 +2293,13 @@
   namespace-emitter@2.0.1:
     resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==}
 
-  nanoid@3.3.11:
-    resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+  nanoid@3.3.8:
+    resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  nanoid@3.3.16:
-    resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  nanoid@5.1.16:
-    resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==}
+  nanoid@5.1.0:
+    resolution: {integrity: sha512-zDAl/llz8Ue/EblwSYwdxGBYfj46IM1dhjVi8dyp9LQffoIGxJEAHj2oeZ4uNcgycSRcQ83CnfcZqEJzVDLcDw==}
     engines: {node: ^18 || >=20}
     hasBin: true
 
@@ -2429,17 +2317,20 @@
     engines: {node: '>=10.5.0'}
     deprecated: Use your platform's native DOMException instead
 
-  node-releases@2.0.51:
-    resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==}
-    engines: {node: '>=18'}
+  node-releases@2.0.19:
+    resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
 
-  nopt@7.2.1:
-    resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  nopt@8.1.0:
+    resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
+    engines: {node: ^18.17.0 || >=20.5.0}
     hasBin: true
 
   normalize-path@3.0.0:
     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+    engines: {node: '>=0.10.0'}
+
+  normalize-range@0.1.2:
+    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
     engines: {node: '>=0.10.0'}
 
   normalize-wheel-es@1.2.0:
@@ -2463,8 +2354,8 @@
     resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
     engines: {node: '>= 6'}
 
-  open@10.2.0:
-    resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
+  open@10.1.0:
+    resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
     engines: {node: '>=18'}
 
   open@8.4.2:
@@ -2532,12 +2423,8 @@
     resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
 
-  picomatch@4.0.3:
-    resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
-    engines: {node: '>=12'}
-
-  picomatch@4.0.5:
-    resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
+  picomatch@4.0.2:
+    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
     engines: {node: '>=12'}
 
   pify@2.3.0:
@@ -2553,8 +2440,8 @@
       typescript:
         optional: true
 
-  pirates@4.0.7:
-    resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+  pirates@4.0.6:
+    resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
     engines: {node: '>= 6'}
 
   pkg-types@1.3.1:
@@ -2597,27 +2484,23 @@
   postcss-value-parser@4.2.0:
     resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
 
-  postcss@8.5.20:
-    resolution: {integrity: sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==}
+  postcss@8.5.2:
+    resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
     engines: {node: ^10 || ^12 || >=14}
 
-  postcss@8.5.6:
-    resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  preact@10.26.9:
-    resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==}
+  preact@10.26.2:
+    resolution: {integrity: sha512-0gNmv4qpS9HaN3+40CLBAnKe0ZfyE4ZWo5xKlC1rVrr0ckkEvJvAQqKaHANdFKsGstoxrY4AItZ7kZSGVoVjgg==}
 
   prelude-ls@1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
     engines: {node: '>= 0.8.0'}
 
-  prettier-linter-helpers@1.0.1:
-    resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==}
+  prettier-linter-helpers@1.0.0:
+    resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
     engines: {node: '>=6.0.0'}
 
-  prettier@3.9.5:
-    resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==}
+  prettier@3.5.1:
+    resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==}
     engines: {node: '>=14'}
     hasBin: true
 
@@ -2625,16 +2508,15 @@
     resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==}
     engines: {node: '>=18'}
 
-  prismjs@1.30.0:
-    resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
+  prismjs@1.29.0:
+    resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
     engines: {node: '>=6'}
 
   proto-list@1.2.4:
     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
 
-  proxy-from-env@2.1.0:
-    resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
-    engines: {node: '>=10'}
+  proxy-from-env@1.1.0:
+    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
 
   punycode@2.3.1:
     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
@@ -2654,6 +2536,9 @@
     resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
     engines: {node: '>= 14.18.0'}
 
+  regenerator-runtime@0.14.1:
+    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
   require-directory@2.1.1:
     resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
     engines: {node: '>=0.10.0'}
@@ -2667,8 +2552,8 @@
     engines: {node: '>= 0.4'}
     hasBin: true
 
-  reusify@1.1.0:
-    resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+  reusify@1.0.4:
+    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
   rfdc@1.4.1:
@@ -2687,8 +2572,8 @@
       rollup:
         optional: true
 
-  rollup@4.45.1:
-    resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==}
+  rollup@4.34.8:
+    resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
@@ -2715,13 +2600,8 @@
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
     hasBin: true
 
-  semver@7.7.2:
-    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  semver@7.8.5:
-    resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
+  semver@7.7.1:
+    resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
     engines: {node: '>=10'}
     hasBin: true
 
@@ -2752,6 +2632,14 @@
   snabbdom@3.6.2:
     resolution: {integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==}
     engines: {node: '>=12.17.0'}
+
+  socket.io-client@4.8.1:
+    resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==}
+    engines: {node: '>=10.0.0'}
+
+  socket.io-parser@4.2.4:
+    resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+    engines: {node: '>=10.0.0'}
 
   sortablejs@1.14.0:
     resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
@@ -2826,22 +2714,25 @@
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
 
+  svg-tags@1.0.0:
+    resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+
   svgo@3.3.2:
     resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
     engines: {node: '>=14.0.0'}
     hasBin: true
 
-  synckit@0.11.13:
-    resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==}
+  synckit@0.9.2:
+    resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
     engines: {node: ^14.18.0 || >=16.0.0}
 
-  tailwindcss@3.4.19:
-    resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==}
+  tailwindcss@3.4.17:
+    resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
     engines: {node: '>=14.0.0'}
     hasBin: true
 
-  terser@5.49.0:
-    resolution: {integrity: sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==}
+  terser@5.39.0:
+    resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
     engines: {node: '>=10'}
     hasBin: true
 
@@ -2855,10 +2746,6 @@
   tiny-warning@1.0.3:
     resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
 
-  tinyglobby@0.2.17:
-    resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
-    engines: {node: '>=12.0.0'}
-
   to-regex-range@5.0.1:
     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
     engines: {node: '>=8.0'}
@@ -2867,14 +2754,8 @@
     resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
     engines: {node: '>=6'}
 
-  ts-api-utils@2.1.0:
-    resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
-    engines: {node: '>=18.12'}
-    peerDependencies:
-      typescript: '>=4.8.4'
-
-  ts-api-utils@2.5.0:
-    resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
+  ts-api-utils@2.0.1:
+    resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==}
     engines: {node: '>=18.12'}
     peerDependencies:
       typescript: '>=4.8.4'
@@ -2884,6 +2765,9 @@
 
   tslib@2.3.0:
     resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+
+  tslib@2.8.1:
+    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
 
   type-check@0.4.0:
     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
@@ -2896,12 +2780,12 @@
   type@2.7.3:
     resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
 
-  typescript-eslint@8.64.0:
-    resolution: {integrity: sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==}
+  typescript-eslint@8.24.1:
+    resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-      typescript: '>=4.8.4 <6.1.0'
+      eslint: ^8.57.0 || ^9.0.0
+      typescript: '>=4.8.4 <5.8.0'
 
   typescript@5.5.4:
     resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
@@ -2911,11 +2795,11 @@
   ua-parser-js@1.0.37:
     resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==}
 
-  ufo@1.6.1:
-    resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+  ufo@1.5.4:
+    resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
 
-  undici-types@6.21.0:
-    resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+  undici-types@6.19.8:
+    resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
 
   unicorn-magic@0.3.0:
     resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
@@ -2929,8 +2813,8 @@
     resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
     engines: {node: '>=14.0.0'}
 
-  update-browserslist-db@1.2.3:
-    resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+  update-browserslist-db@1.1.2:
+    resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
     hasBin: true
     peerDependencies:
       browserslist: '>= 4.21.0'
@@ -2941,10 +2825,10 @@
   util-deprecate@1.0.2:
     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
-  vite-hot-client@2.2.0:
-    resolution: {integrity: sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==}
+  vite-hot-client@0.2.4:
+    resolution: {integrity: sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==}
     peerDependencies:
-      vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0
+      vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0
 
   vite-plugin-compression@0.5.1:
     resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
@@ -2961,19 +2845,19 @@
       '@nuxt/kit':
         optional: true
 
-  vite-plugin-vue-devtools@7.7.10:
-    resolution: {integrity: sha512-aHkUvDKxUdmSnuolEc8DkOrSjMpKO4Bb/BG01x2pBv6xTv487No9Tr7BMAsH2XWwMd+LtlUeCamhEZyEu9vxKQ==}
+  vite-plugin-vue-devtools@7.7.2:
+    resolution: {integrity: sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==}
     engines: {node: '>=v14.21.3'}
     peerDependencies:
-      vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
+      vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0
 
-  vite-plugin-vue-inspector@5.3.2:
-    resolution: {integrity: sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==}
+  vite-plugin-vue-inspector@5.3.1:
+    resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==}
     peerDependencies:
-      vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
+      vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0
 
-  vite@5.4.19:
-    resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
+  vite@5.4.14:
+    resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
@@ -3006,8 +2890,11 @@
   vscode-uri@3.1.0:
     resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
 
-  vue-component-type-helpers@3.3.7:
-    resolution: {integrity: sha512-Skkhw9agYSgsWqv7bxSOGJZa9SaiJbZVGdXuFWnrzKaQYHnw9qbjD630rw6RyMqDbp54nfLCLw5SZA55if7JLg==}
+  vue-component-type-helpers@2.2.2:
+    resolution: {integrity: sha512-6lLY+n2xz2kCYshl59mL6gy8OUUTmkscmDFMO8i7Lj+QKwgnIFUZmM1i/iTYObtrczZVdw7UakPqDTGwVSGaRg==}
+
+  vue-component-type-helpers@3.3.8:
+    resolution: {integrity: sha512-troqCMmQodQDqUqn63NQaFi+CDSclSe7sc8VEBFqf5GFLqmGR2Ph3P2WEC7qwpRVyEWsTi/aAr4vyOe/B1hU3g==}
 
   vue-demi@0.13.11:
     resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
@@ -3041,43 +2928,37 @@
       '@vue/runtime-core':
         optional: true
 
-  vue-eslint-parser@10.4.1:
-    resolution: {integrity: sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-
   vue-eslint-parser@9.4.3:
     resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
 
-  vue-i18n@11.1.10:
-    resolution: {integrity: sha512-C+IwnSg8QDSOAox0gdFYP5tsKLx5jNWxiawNoiNB/Tw4CReXmM1VJMXbduhbrEzAFLhreqzfDocuSVjGbxQrag==}
+  vue-i18n@11.1.1:
+    resolution: {integrity: sha512-0P6DkKy96R4Wh2sIZJEHw8ivnlD1pnB6Ib/eldoF1SUpQutfKZv6aMqZwICS1gW0rwq24ZSXw7y3jW+PRVYqWA==}
     engines: {node: '>= 16'}
     deprecated: This version is NOT deprecated. Previous deprecation was a mistake.
     peerDependencies:
       vue: ^3.0.0
 
-  vue-router@4.6.4:
-    resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
+  vue-router@4.5.0:
+    resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==}
     peerDependencies:
-      vue: ^3.5.0
+      vue: ^3.2.0
 
   vue-tianditu2@3.0.1:
     resolution: {integrity: sha512-M/rL0sMTN5D50zBk8Jwc1v9ErC8Ab65RRk8VZEtf3HBR8F6m+PECkOtKEzpV8t9+SVdv8Nluctdubt15SFxygw==}
     peerDependencies:
       vue: ^3.0.0
 
-  vue-tsc@2.2.12:
-    resolution: {integrity: sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==}
+  vue-tsc@2.2.2:
+    resolution: {integrity: sha512-1icPKkxAA5KTAaSwg0wVWdE48EdsH8fgvcbAiqojP4jXKl6LEM3soiW1aG/zrWrFt8Mw1ncG2vG1PvpZpVfehA==}
     hasBin: true
     peerDependencies:
       typescript: '>=5.0.0'
 
-  vue@3.5.40:
-    resolution: {integrity: sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==}
+  vue@3.5.13:
+    resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
@@ -3089,8 +2970,8 @@
     peerDependencies:
       vue: ^3.0.1
 
-  web-streams-polyfill@3.0.3:
-    resolution: {integrity: sha512-d2H/t0eqRNM4w2WvmTdoeIvzAUSpK7JmATB8Nr2lb7nQ9BTIJVjbQ/TRFVEh2gUH1HwclPdoPtfMoFfetXaZnA==}
+  web-streams-polyfill@3.3.3:
+    resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
     engines: {node: '>= 8'}
 
   webpack-virtual-modules@0.6.2:
@@ -3124,9 +3005,17 @@
     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
     engines: {node: '>=12'}
 
-  wsl-utils@0.1.0:
-    resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
-    engines: {node: '>=18'}
+  ws@8.17.1:
+    resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+    engines: {node: '>=10.0.0'}
+    peerDependencies:
+      bufferutil: ^4.0.1
+      utf-8-validate: '>=5.0.2'
+    peerDependenciesMeta:
+      bufferutil:
+        optional: true
+      utf-8-validate:
+        optional: true
 
   xlsx@0.18.5:
     resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==}
@@ -3137,6 +3026,10 @@
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
     engines: {node: '>=12'}
 
+  xmlhttprequest-ssl@2.1.2:
+    resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
+    engines: {node: '>=0.4.0'}
+
   y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
     engines: {node: '>=10'}
@@ -3144,13 +3037,13 @@
   yallist@3.1.1:
     resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
 
-  yaml-eslint-parser@1.3.0:
-    resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==}
+  yaml-eslint-parser@1.2.3:
+    resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==}
     engines: {node: ^14.17.0 || >=16.0.0}
 
-  yaml@2.8.0:
-    resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
-    engines: {node: '>= 14.6'}
+  yaml@2.7.0:
+    resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
+    engines: {node: '>= 14'}
     hasBin: true
 
   yargs-parser@21.1.1:
@@ -3178,245 +3071,236 @@
 
   '@ampproject/remapping@2.3.0':
     dependencies:
-      '@jridgewell/gen-mapping': 0.3.12
-      '@jridgewell/trace-mapping': 0.3.29
+      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/trace-mapping': 0.3.25
 
   '@antfu/utils@0.7.10': {}
 
-  '@babel/code-frame@7.27.1':
+  '@babel/code-frame@7.26.2':
     dependencies:
-      '@babel/helper-validator-identifier': 7.27.1
+      '@babel/helper-validator-identifier': 7.25.9
       js-tokens: 4.0.0
       picocolors: 1.1.1
 
-  '@babel/compat-data@7.28.0': {}
+  '@babel/compat-data@7.26.8': {}
 
-  '@babel/core@7.28.0':
+  '@babel/core@7.26.9':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@babel/code-frame': 7.27.1
-      '@babel/generator': 7.28.0
-      '@babel/helper-compilation-targets': 7.27.2
-      '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0)
-      '@babel/helpers': 7.27.6
-      '@babel/parser': 7.28.0
-      '@babel/template': 7.27.2
-      '@babel/traverse': 7.28.0
-      '@babel/types': 7.28.1
+      '@babel/code-frame': 7.26.2
+      '@babel/generator': 7.26.9
+      '@babel/helper-compilation-targets': 7.26.5
+      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9)
+      '@babel/helpers': 7.26.9
+      '@babel/parser': 7.26.9
+      '@babel/template': 7.26.9
+      '@babel/traverse': 7.26.9
+      '@babel/types': 7.26.9
       convert-source-map: 2.0.0
-      debug: 4.4.1
+      debug: 4.4.0
       gensync: 1.0.0-beta.2
       json5: 2.2.3
       semver: 6.3.1
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/generator@7.28.0':
+  '@babel/generator@7.26.9':
     dependencies:
-      '@babel/parser': 7.29.7
-      '@babel/types': 7.29.7
-      '@jridgewell/gen-mapping': 0.3.12
-      '@jridgewell/trace-mapping': 0.3.29
+      '@babel/parser': 7.26.9
+      '@babel/types': 7.26.9
+      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/trace-mapping': 0.3.25
       jsesc: 3.1.0
 
-  '@babel/helper-annotate-as-pure@7.27.3':
+  '@babel/helper-annotate-as-pure@7.25.9':
     dependencies:
-      '@babel/types': 7.29.7
+      '@babel/types': 7.26.9
 
-  '@babel/helper-compilation-targets@7.27.2':
+  '@babel/helper-compilation-targets@7.26.5':
     dependencies:
-      '@babel/compat-data': 7.28.0
-      '@babel/helper-validator-option': 7.27.1
-      browserslist: 4.28.6
+      '@babel/compat-data': 7.26.8
+      '@babel/helper-validator-option': 7.25.9
+      browserslist: 4.24.4
       lru-cache: 5.1.1
       semver: 6.3.1
 
-  '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)':
+  '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-annotate-as-pure': 7.27.3
-      '@babel/helper-member-expression-to-functions': 7.27.1
-      '@babel/helper-optimise-call-expression': 7.27.1
-      '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0)
-      '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
-      '@babel/traverse': 7.28.0
+      '@babel/core': 7.26.9
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-member-expression-to-functions': 7.25.9
+      '@babel/helper-optimise-call-expression': 7.25.9
+      '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9)
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+      '@babel/traverse': 7.26.9
       semver: 6.3.1
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-globals@7.28.0': {}
-
-  '@babel/helper-member-expression-to-functions@7.27.1':
+  '@babel/helper-member-expression-to-functions@7.25.9':
     dependencies:
-      '@babel/traverse': 7.28.0
-      '@babel/types': 7.29.7
+      '@babel/traverse': 7.26.9
+      '@babel/types': 7.26.9
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-module-imports@7.27.1':
+  '@babel/helper-module-imports@7.25.9':
     dependencies:
-      '@babel/traverse': 7.28.0
-      '@babel/types': 7.29.7
+      '@babel/traverse': 7.26.9
+      '@babel/types': 7.26.9
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
+  '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-module-imports': 7.27.1
-      '@babel/helper-validator-identifier': 7.27.1
-      '@babel/traverse': 7.28.0
+      '@babel/core': 7.26.9
+      '@babel/helper-module-imports': 7.25.9
+      '@babel/helper-validator-identifier': 7.25.9
+      '@babel/traverse': 7.26.9
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-optimise-call-expression@7.27.1':
+  '@babel/helper-optimise-call-expression@7.25.9':
     dependencies:
-      '@babel/types': 7.29.7
+      '@babel/types': 7.26.9
 
-  '@babel/helper-plugin-utils@7.27.1': {}
+  '@babel/helper-plugin-utils@7.26.5': {}
 
-  '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)':
+  '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-member-expression-to-functions': 7.27.1
-      '@babel/helper-optimise-call-expression': 7.27.1
-      '@babel/traverse': 7.28.0
+      '@babel/core': 7.26.9
+      '@babel/helper-member-expression-to-functions': 7.25.9
+      '@babel/helper-optimise-call-expression': 7.25.9
+      '@babel/traverse': 7.26.9
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+  '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
     dependencies:
-      '@babel/traverse': 7.28.0
-      '@babel/types': 7.29.7
+      '@babel/traverse': 7.26.9
+      '@babel/types': 7.26.9
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/helper-string-parser@7.27.1': {}
+  '@babel/helper-string-parser@7.25.9': {}
 
-  '@babel/helper-string-parser@7.29.7': {}
+  '@babel/helper-validator-identifier@7.25.9': {}
 
-  '@babel/helper-validator-identifier@7.27.1': {}
+  '@babel/helper-validator-option@7.25.9': {}
 
-  '@babel/helper-validator-identifier@7.29.7': {}
-
-  '@babel/helper-validator-option@7.27.1': {}
-
-  '@babel/helpers@7.27.6':
+  '@babel/helpers@7.26.9':
     dependencies:
-      '@babel/template': 7.27.2
-      '@babel/types': 7.29.7
+      '@babel/template': 7.26.9
+      '@babel/types': 7.26.9
 
-  '@babel/parser@7.28.0':
+  '@babel/parser@7.26.9':
     dependencies:
-      '@babel/types': 7.29.7
+      '@babel/types': 7.26.9
 
-  '@babel/parser@7.29.7':
+  '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.9)':
     dependencies:
-      '@babel/types': 7.29.7
-
-  '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.0)':
-    dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0)
-      '@babel/helper-plugin-utils': 7.27.1
-      '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.0)
+      '@babel/core': 7.26.9
+      '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9)
+      '@babel/helper-plugin-utils': 7.26.5
+      '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.9)
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.0)':
+  '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-plugin-utils': 7.27.1
+      '@babel/core': 7.26.9
+      '@babel/helper-plugin-utils': 7.26.5
 
-  '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)':
+  '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-plugin-utils': 7.27.1
+      '@babel/core': 7.26.9
+      '@babel/helper-plugin-utils': 7.26.5
 
-  '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)':
+  '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-plugin-utils': 7.27.1
+      '@babel/core': 7.26.9
+      '@babel/helper-plugin-utils': 7.26.5
 
-  '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
+  '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-plugin-utils': 7.27.1
+      '@babel/core': 7.26.9
+      '@babel/helper-plugin-utils': 7.26.5
 
-  '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)':
+  '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-plugin-utils': 7.27.1
+      '@babel/core': 7.26.9
+      '@babel/helper-plugin-utils': 7.26.5
 
-  '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)':
+  '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.9)':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/helper-annotate-as-pure': 7.27.3
-      '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0)
-      '@babel/helper-plugin-utils': 7.27.1
-      '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
-      '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0)
+      '@babel/core': 7.26.9
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9)
+      '@babel/helper-plugin-utils': 7.26.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+      '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9)
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/runtime@7.27.6': {}
-
-  '@babel/template@7.27.2':
+  '@babel/runtime@7.26.9':
     dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/parser': 7.29.7
-      '@babel/types': 7.29.7
+      regenerator-runtime: 0.14.1
 
-  '@babel/traverse@7.28.0':
+  '@babel/template@7.26.9':
     dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/generator': 7.28.0
-      '@babel/helper-globals': 7.28.0
-      '@babel/parser': 7.29.7
-      '@babel/template': 7.27.2
-      '@babel/types': 7.29.7
-      debug: 4.4.1
+      '@babel/code-frame': 7.26.2
+      '@babel/parser': 7.26.9
+      '@babel/types': 7.26.9
+
+  '@babel/traverse@7.26.9':
+    dependencies:
+      '@babel/code-frame': 7.26.2
+      '@babel/generator': 7.26.9
+      '@babel/parser': 7.26.9
+      '@babel/template': 7.26.9
+      '@babel/types': 7.26.9
+      debug: 4.4.0
+      globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/types@7.28.1':
+  '@babel/types@7.26.9':
     dependencies:
-      '@babel/helper-string-parser': 7.27.1
-      '@babel/helper-validator-identifier': 7.27.1
-
-  '@babel/types@7.29.7':
-    dependencies:
-      '@babel/helper-string-parser': 7.29.7
-      '@babel/helper-validator-identifier': 7.29.7
+      '@babel/helper-string-parser': 7.25.9
+      '@babel/helper-validator-identifier': 7.25.9
 
   '@cool-vue/crud@8.0.6(typescript@5.5.4)':
     dependencies:
-      '@vue/runtime-core': 3.5.18
-      element-plus: 2.10.4(vue@3.5.40(typescript@5.5.4))
-      lodash-es: 4.18.1
-      vue: 3.5.40(typescript@5.5.4)
+      '@vue/runtime-core': 3.5.13
+      element-plus: 2.14.3(vue@3.5.13(typescript@5.5.4))
+      lodash-es: 4.17.21
+      vue: 3.5.13(typescript@5.5.4)
     transitivePeerDependencies:
-      - '@vue/composition-api'
       - typescript
 
   '@cool-vue/vite-plugin@8.2.20':
     dependencies:
-      '@vue/compiler-sfc': 3.5.40
-      axios: 1.18.1
+      '@vue/compiler-sfc': 3.5.13
+      axios: 1.7.9
       glob: 10.4.5
       lodash: 4.17.21
       magic-string: 0.30.17
-      prettier: 3.9.5
+      prettier: 3.5.1
       svgo: 3.3.2
     transitivePeerDependencies:
       - debug
-      - supports-color
 
   '@ctrl/tinycolor@3.6.1': {}
 
-  '@element-plus/icons-vue@2.3.1(vue@3.5.40(typescript@5.5.4))':
+  '@ctrl/tinycolor@4.2.0': {}
+
+  '@element-plus/icons-vue@2.3.1(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
+
+  '@element-plus/icons-vue@2.3.2(vue@3.5.13(typescript@5.5.4))':
+    dependencies:
+      vue: 3.5.13(typescript@5.5.4)
 
   '@esbuild/aix-ppc64@0.21.5':
     optional: true
@@ -3487,79 +3371,68 @@
   '@esbuild/win32-x64@0.21.5':
     optional: true
 
-  '@eslint-community/eslint-utils@4.7.0(eslint@9.39.5(jiti@1.21.7))':
+  '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@1.21.7))':
     dependencies:
-      eslint: 9.39.5(jiti@1.21.7)
-      eslint-visitor-keys: 3.4.3
-
-  '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@1.21.7))':
-    dependencies:
-      eslint: 9.39.5(jiti@1.21.7)
+      eslint: 9.20.1(jiti@1.21.7)
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint-community/regexpp@4.12.2': {}
-
-  '@eslint/config-array@0.21.2':
+  '@eslint/config-array@0.19.2':
     dependencies:
-      '@eslint/object-schema': 2.1.7
-      debug: 4.4.1
-      minimatch: 3.1.5
+      '@eslint/object-schema': 2.1.6
+      debug: 4.4.0
+      minimatch: 3.1.2
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/config-helpers@0.4.2':
-    dependencies:
-      '@eslint/core': 0.17.0
-
-  '@eslint/core@0.17.0':
+  '@eslint/core@0.11.0':
     dependencies:
       '@types/json-schema': 7.0.15
 
-  '@eslint/eslintrc@3.3.6':
+  '@eslint/eslintrc@3.2.0':
     dependencies:
-      ajv: 6.15.0
-      debug: 4.4.1
-      espree: 10.4.0
+      ajv: 6.12.6
+      debug: 4.4.0
+      espree: 10.3.0
       globals: 14.0.0
       ignore: 5.3.2
       import-fresh: 3.3.1
-      js-yaml: 4.3.0
-      minimatch: 3.1.5
+      js-yaml: 4.1.0
+      minimatch: 3.1.2
       strip-json-comments: 3.1.1
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/js@9.39.5': {}
+  '@eslint/js@9.20.0': {}
 
-  '@eslint/object-schema@2.1.7': {}
+  '@eslint/object-schema@2.1.6': {}
 
-  '@eslint/plugin-kit@0.4.1':
+  '@eslint/plugin-kit@0.2.6':
     dependencies:
-      '@eslint/core': 0.17.0
+      '@eslint/core': 0.11.0
       levn: 0.4.1
 
-  '@ezuikit/control-aichat@0.1.0-beta.9':
+  '@ezuikit/control-aichat@0.1.1-beta.1':
     dependencies:
       '@ezuikit/utils-i18n': 2.0.1
 
-  '@ezuikit/player-ezopen@9.0.6':
+  '@ezuikit/player-ezopen@9.0.7-beta.4':
     dependencies:
-      '@ezuikit/player-plugin-record': 9.1.0
+      '@ezuikit/player-plugin-record': 9.1.1-beta.1
       '@ezuikit/utils-i18n': 2.0.1
       '@ezuikit/utils-logger': 2.0.1
-      '@ezuikit/utils-service': 1.0.1
-      '@ezuikit/utils-tools': 2.0.5
-      dayjs: 1.11.21
+      '@ezuikit/utils-service': 2.0.0
+      '@ezuikit/utils-tools': 2.0.6
+      dayjs: 1.11.13
       deepmerge: 4.3.1
       eventemitter3: 5.0.4
       screenfull: 5.2.0
       ua-parser-js: 1.0.37
 
-  '@ezuikit/player-plugin-record@9.1.0':
+  '@ezuikit/player-plugin-record@9.1.1-beta.1':
     dependencies:
-      '@ezuikit/utils-tools': 2.0.5
+      '@ezuikit/utils-tools': 2.0.6
 
   '@ezuikit/utils-collect@0.1.1': {}
 
@@ -3569,25 +3442,33 @@
 
   '@ezuikit/utils-logger@2.0.1': {}
 
-  '@ezuikit/utils-service@1.0.1':
+  '@ezuikit/utils-service@2.0.0':
     dependencies:
-      '@ezuikit/utils-tools': 1.0.1
-      dayjs: 1.11.21
+      '@ezuikit/utils-tools': 2.0.6
 
-  '@ezuikit/utils-tools@1.0.1': {}
+  '@ezuikit/utils-tools@2.0.6': {}
 
-  '@ezuikit/utils-tools@2.0.5': {}
-
-  '@floating-ui/core@1.7.2':
+  '@floating-ui/core@1.6.9':
     dependencies:
-      '@floating-ui/utils': 0.2.10
+      '@floating-ui/utils': 0.2.9
 
-  '@floating-ui/dom@1.7.2':
+  '@floating-ui/core@1.8.0':
     dependencies:
-      '@floating-ui/core': 1.7.2
-      '@floating-ui/utils': 0.2.10
+      '@floating-ui/utils': 0.2.12
 
-  '@floating-ui/utils@0.2.10': {}
+  '@floating-ui/dom@1.6.13':
+    dependencies:
+      '@floating-ui/core': 1.6.9
+      '@floating-ui/utils': 0.2.9
+
+  '@floating-ui/dom@1.8.0':
+    dependencies:
+      '@floating-ui/core': 1.8.0
+      '@floating-ui/utils': 0.2.12
+
+  '@floating-ui/utils@0.2.12': {}
+
+  '@floating-ui/utils@0.2.9': {}
 
   '@humanfs/core@0.19.1': {}
 
@@ -3600,44 +3481,53 @@
 
   '@humanwhocodes/retry@0.3.1': {}
 
-  '@humanwhocodes/retry@0.4.3': {}
+  '@humanwhocodes/retry@0.4.1': {}
 
-  '@intlify/bundle-utils@10.0.1(vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)))':
+  '@intlify/bundle-utils@10.0.0(vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)))':
     dependencies:
-      '@intlify/message-compiler': 11.1.10
-      '@intlify/shared': 11.1.10
-      acorn: 8.15.0
+      '@intlify/message-compiler': 12.0.0-alpha.4
+      '@intlify/shared': 12.0.0-alpha.4
+      acorn: 8.14.0
       escodegen: 2.1.0
       estree-walker: 2.0.2
       jsonc-eslint-parser: 2.4.0
       mlly: 1.7.4
       source-map-js: 1.2.1
-      yaml-eslint-parser: 1.3.0
+      yaml-eslint-parser: 1.2.3
     optionalDependencies:
-      vue-i18n: 11.1.10(vue@3.5.40(typescript@5.5.4))
+      vue-i18n: 11.1.1(vue@3.5.13(typescript@5.5.4))
 
-  '@intlify/core-base@11.1.10':
+  '@intlify/core-base@11.1.1':
     dependencies:
-      '@intlify/message-compiler': 11.1.10
-      '@intlify/shared': 11.1.10
+      '@intlify/message-compiler': 11.1.1
+      '@intlify/shared': 11.1.1
 
-  '@intlify/message-compiler@11.1.10':
+  '@intlify/message-compiler@11.1.1':
     dependencies:
-      '@intlify/shared': 11.1.10
+      '@intlify/shared': 11.1.1
       source-map-js: 1.2.1
 
-  '@intlify/shared@11.1.10': {}
-
-  '@intlify/unplugin-vue-i18n@6.0.8(@vue/compiler-dom@3.5.18)(eslint@9.39.5(jiti@1.21.7))(rollup@4.45.1)(typescript@5.5.4)(vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)))(vue@3.5.40(typescript@5.5.4))':
+  '@intlify/message-compiler@12.0.0-alpha.4':
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.39.5(jiti@1.21.7))
-      '@intlify/bundle-utils': 10.0.1(vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)))
-      '@intlify/shared': 11.1.10
-      '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.10)(@vue/compiler-dom@3.5.18)(vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)))(vue@3.5.40(typescript@5.5.4))
-      '@rollup/pluginutils': 5.2.0(rollup@4.45.1)
-      '@typescript-eslint/scope-manager': 8.38.0
-      '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.5.4)
-      debug: 4.4.1
+      '@intlify/shared': 12.0.0-alpha.4
+      source-map-js: 1.2.1
+
+  '@intlify/shared@11.1.1': {}
+
+  '@intlify/shared@11.4.8': {}
+
+  '@intlify/shared@12.0.0-alpha.4': {}
+
+  '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.20.1(jiti@1.21.7))(rollup@4.34.8)(typescript@5.5.4)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))':
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7))
+      '@intlify/bundle-utils': 10.0.0(vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)))
+      '@intlify/shared': 11.4.8
+      '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.4.8)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
+      '@typescript-eslint/scope-manager': 8.24.1
+      '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.5.4)
+      debug: 4.4.0
       fast-glob: 3.3.3
       js-yaml: 4.1.0
       json5: 2.2.3
@@ -3645,9 +3535,9 @@
       picocolors: 1.1.1
       source-map-js: 1.2.1
       unplugin: 1.16.1
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
     optionalDependencies:
-      vue-i18n: 11.1.10(vue@3.5.40(typescript@5.5.4))
+      vue-i18n: 11.1.1(vue@3.5.13(typescript@5.5.4))
     transitivePeerDependencies:
       - '@vue/compiler-dom'
       - eslint
@@ -3655,14 +3545,14 @@
       - supports-color
       - typescript
 
-  '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.10)(@vue/compiler-dom@3.5.18)(vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)))(vue@3.5.40(typescript@5.5.4))':
+  '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.4.8)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      '@babel/parser': 7.28.0
+      '@babel/parser': 7.26.9
     optionalDependencies:
-      '@intlify/shared': 11.1.10
-      '@vue/compiler-dom': 3.5.18
-      vue: 3.5.40(typescript@5.5.4)
-      vue-i18n: 11.1.10(vue@3.5.40(typescript@5.5.4))
+      '@intlify/shared': 11.4.8
+      '@vue/compiler-dom': 3.5.13
+      vue: 3.5.13(typescript@5.5.4)
+      vue-i18n: 11.1.1(vue@3.5.13(typescript@5.5.4))
 
   '@isaacs/cliui@8.0.2':
     dependencies:
@@ -3673,26 +3563,27 @@
       wrap-ansi: 8.1.0
       wrap-ansi-cjs: wrap-ansi@7.0.0
 
-  '@jridgewell/gen-mapping@0.3.12':
+  '@jridgewell/gen-mapping@0.3.8':
     dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.4
-      '@jridgewell/trace-mapping': 0.3.29
+      '@jridgewell/set-array': 1.2.1
+      '@jridgewell/sourcemap-codec': 1.5.0
+      '@jridgewell/trace-mapping': 0.3.25
 
   '@jridgewell/resolve-uri@3.1.2': {}
 
-  '@jridgewell/source-map@0.3.10':
+  '@jridgewell/set-array@1.2.1': {}
+
+  '@jridgewell/source-map@0.3.6':
     dependencies:
-      '@jridgewell/gen-mapping': 0.3.12
-      '@jridgewell/trace-mapping': 0.3.29
+      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/trace-mapping': 0.3.25
 
-  '@jridgewell/sourcemap-codec@1.5.4': {}
+  '@jridgewell/sourcemap-codec@1.5.0': {}
 
-  '@jridgewell/sourcemap-codec@1.5.5': {}
-
-  '@jridgewell/trace-mapping@0.3.29':
+  '@jridgewell/trace-mapping@0.3.25':
     dependencies:
       '@jridgewell/resolve-uri': 3.1.2
-      '@jridgewell/sourcemap-codec': 1.5.4
+      '@jridgewell/sourcemap-codec': 1.5.0
 
   '@juggle/resize-observer@3.4.0': {}
 
@@ -3706,7 +3597,7 @@
   '@nodelib/fs.walk@1.2.8':
     dependencies:
       '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.19.1
+      fastq: 1.19.0
 
   '@one-ini/wasm@0.1.1': {}
 
@@ -3774,81 +3665,76 @@
   '@pkgjs/parseargs@0.11.0':
     optional: true
 
-  '@pkgr/core@0.3.6': {}
+  '@pkgr/core@0.1.1': {}
 
-  '@polka/url@1.0.0-next.29': {}
+  '@polka/url@1.0.0-next.28': {}
 
-  '@rolldown/pluginutils@1.0.0-beta.29': {}
-
-  '@rollup/pluginutils@5.2.0(rollup@4.45.1)':
+  '@rollup/pluginutils@5.1.4(rollup@4.34.8)':
     dependencies:
-      '@types/estree': 1.0.8
+      '@types/estree': 1.0.6
       estree-walker: 2.0.2
-      picomatch: 4.0.3
+      picomatch: 4.0.2
     optionalDependencies:
-      rollup: 4.45.1
+      rollup: 4.34.8
 
-  '@rollup/rollup-android-arm-eabi@4.45.1':
+  '@rollup/rollup-android-arm-eabi@4.34.8':
     optional: true
 
-  '@rollup/rollup-android-arm64@4.45.1':
+  '@rollup/rollup-android-arm64@4.34.8':
     optional: true
 
-  '@rollup/rollup-darwin-arm64@4.45.1':
+  '@rollup/rollup-darwin-arm64@4.34.8':
     optional: true
 
-  '@rollup/rollup-darwin-x64@4.45.1':
+  '@rollup/rollup-darwin-x64@4.34.8':
     optional: true
 
-  '@rollup/rollup-freebsd-arm64@4.45.1':
+  '@rollup/rollup-freebsd-arm64@4.34.8':
     optional: true
 
-  '@rollup/rollup-freebsd-x64@4.45.1':
+  '@rollup/rollup-freebsd-x64@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.45.1':
+  '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm-musleabihf@4.45.1':
+  '@rollup/rollup-linux-arm-musleabihf@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm64-gnu@4.45.1':
+  '@rollup/rollup-linux-arm64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm64-musl@4.45.1':
+  '@rollup/rollup-linux-arm64-musl@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.45.1':
+  '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.45.1':
+  '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-gnu@4.45.1':
+  '@rollup/rollup-linux-riscv64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-musl@4.45.1':
+  '@rollup/rollup-linux-s390x-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-s390x-gnu@4.45.1':
+  '@rollup/rollup-linux-x64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-x64-gnu@4.45.1':
+  '@rollup/rollup-linux-x64-musl@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-x64-musl@4.45.1':
+  '@rollup/rollup-win32-arm64-msvc@4.34.8':
     optional: true
 
-  '@rollup/rollup-win32-arm64-msvc@4.45.1':
+  '@rollup/rollup-win32-ia32-msvc@4.34.8':
     optional: true
 
-  '@rollup/rollup-win32-ia32-msvc@4.45.1':
+  '@rollup/rollup-win32-x64-msvc@4.34.8':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.45.1':
-    optional: true
-
-  '@rushstack/eslint-patch@1.16.1': {}
+  '@rushstack/eslint-patch@1.10.5': {}
 
   '@sec-ant/readable-stream@0.4.1': {}
 
@@ -3856,19 +3742,19 @@
 
   '@skax/delegate@4.0.2': {}
 
+  '@socket.io/component-emitter@3.1.2': {}
+
+  '@sxzz/popperjs-es@2.11.7': {}
+
   '@sxzz/popperjs-es@2.11.8': {}
 
   '@transloadit/prettier-bytes@0.0.7': {}
 
   '@trysound/sax@0.2.0': {}
 
-  '@tsconfig/node20@20.1.9': {}
+  '@tsconfig/node20@20.1.4': {}
 
-  '@types/esrecurse@4.3.1': {}
-
-  '@types/estree@1.0.8': {}
-
-  '@types/estree@1.0.9': {}
+  '@types/estree@1.0.6': {}
 
   '@types/event-emitter@0.3.5': {}
 
@@ -3878,15 +3764,17 @@
 
   '@types/lodash-es@4.17.12':
     dependencies:
-      '@types/lodash': 4.17.20
+      '@types/lodash': 4.17.15
 
-  '@types/lodash@4.17.20': {}
+  '@types/lodash@4.17.15': {}
+
+  '@types/lodash@4.17.25': {}
 
   '@types/mockjs@1.0.10': {}
 
-  '@types/node@20.19.43':
+  '@types/node@20.17.19':
     dependencies:
-      undici-types: 6.21.0
+      undici-types: 6.19.8
 
   '@types/nprogress@0.2.3': {}
 
@@ -3894,139 +3782,86 @@
 
   '@types/web-bluetooth@0.0.16': {}
 
+  '@types/web-bluetooth@0.0.20': {}
+
   '@types/web-bluetooth@0.0.21': {}
 
-  '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4))(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)':
+  '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4))(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)':
     dependencies:
-      '@eslint-community/regexpp': 4.12.2
-      '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      '@typescript-eslint/scope-manager': 8.64.0
-      '@typescript-eslint/type-utils': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      '@typescript-eslint/visitor-keys': 8.64.0
-      eslint: 9.39.5(jiti@1.21.7)
-      ignore: 7.0.6
+      '@eslint-community/regexpp': 4.12.1
+      '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      '@typescript-eslint/scope-manager': 8.24.1
+      '@typescript-eslint/type-utils': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      '@typescript-eslint/visitor-keys': 8.24.1
+      eslint: 9.20.1(jiti@1.21.7)
+      graphemer: 1.4.0
+      ignore: 5.3.2
       natural-compare: 1.4.0
-      ts-api-utils: 2.5.0(typescript@5.5.4)
+      ts-api-utils: 2.0.1(typescript@5.5.4)
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)':
+  '@typescript-eslint/parser@8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)':
     dependencies:
-      '@typescript-eslint/scope-manager': 8.64.0
-      '@typescript-eslint/types': 8.64.0
-      '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.5.4)
-      '@typescript-eslint/visitor-keys': 8.64.0
-      debug: 4.4.3
-      eslint: 9.39.5(jiti@1.21.7)
+      '@typescript-eslint/scope-manager': 8.24.1
+      '@typescript-eslint/types': 8.24.1
+      '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.5.4)
+      '@typescript-eslint/visitor-keys': 8.24.1
+      debug: 4.4.0
+      eslint: 9.20.1(jiti@1.21.7)
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/project-service@8.38.0(typescript@5.5.4)':
+  '@typescript-eslint/scope-manager@8.24.1':
     dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.5.4)
-      '@typescript-eslint/types': 8.38.0
-      debug: 4.4.1
+      '@typescript-eslint/types': 8.24.1
+      '@typescript-eslint/visitor-keys': 8.24.1
+
+  '@typescript-eslint/type-utils@8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)':
+    dependencies:
+      '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.5.4)
+      '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      debug: 4.4.0
+      eslint: 9.20.1(jiti@1.21.7)
+      ts-api-utils: 2.0.1(typescript@5.5.4)
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/project-service@8.64.0(typescript@5.5.4)':
+  '@typescript-eslint/types@8.24.1': {}
+
+  '@typescript-eslint/typescript-estree@8.24.1(typescript@5.5.4)':
     dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.5.4)
-      '@typescript-eslint/types': 8.64.0
-      debug: 4.4.3
-      typescript: 5.5.4
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/scope-manager@8.38.0':
-    dependencies:
-      '@typescript-eslint/types': 8.38.0
-      '@typescript-eslint/visitor-keys': 8.38.0
-
-  '@typescript-eslint/scope-manager@8.64.0':
-    dependencies:
-      '@typescript-eslint/types': 8.64.0
-      '@typescript-eslint/visitor-keys': 8.64.0
-
-  '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.5.4)':
-    dependencies:
-      typescript: 5.5.4
-
-  '@typescript-eslint/tsconfig-utils@8.64.0(typescript@5.5.4)':
-    dependencies:
-      typescript: 5.5.4
-
-  '@typescript-eslint/type-utils@8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)':
-    dependencies:
-      '@typescript-eslint/types': 8.64.0
-      '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.5.4)
-      '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      debug: 4.4.3
-      eslint: 9.39.5(jiti@1.21.7)
-      ts-api-utils: 2.5.0(typescript@5.5.4)
-      typescript: 5.5.4
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/types@8.38.0': {}
-
-  '@typescript-eslint/types@8.64.0': {}
-
-  '@typescript-eslint/typescript-estree@8.38.0(typescript@5.5.4)':
-    dependencies:
-      '@typescript-eslint/project-service': 8.38.0(typescript@5.5.4)
-      '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.5.4)
-      '@typescript-eslint/types': 8.38.0
-      '@typescript-eslint/visitor-keys': 8.38.0
-      debug: 4.4.1
+      '@typescript-eslint/types': 8.24.1
+      '@typescript-eslint/visitor-keys': 8.24.1
+      debug: 4.4.0
       fast-glob: 3.3.3
       is-glob: 4.0.3
-      minimatch: 9.0.9
-      semver: 7.7.2
-      ts-api-utils: 2.1.0(typescript@5.5.4)
+      minimatch: 9.0.5
+      semver: 7.7.1
+      ts-api-utils: 2.0.1(typescript@5.5.4)
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/typescript-estree@8.64.0(typescript@5.5.4)':
+  '@typescript-eslint/utils@8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)':
     dependencies:
-      '@typescript-eslint/project-service': 8.64.0(typescript@5.5.4)
-      '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.5.4)
-      '@typescript-eslint/types': 8.64.0
-      '@typescript-eslint/visitor-keys': 8.64.0
-      debug: 4.4.3
-      minimatch: 10.2.5
-      semver: 7.8.5
-      tinyglobby: 0.2.17
-      ts-api-utils: 2.5.0(typescript@5.5.4)
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7))
+      '@typescript-eslint/scope-manager': 8.24.1
+      '@typescript-eslint/types': 8.24.1
+      '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.5.4)
+      eslint: 9.20.1(jiti@1.21.7)
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)':
+  '@typescript-eslint/visitor-keys@8.24.1':
     dependencies:
-      '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.64.0
-      '@typescript-eslint/types': 8.64.0
-      '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.5.4)
-      eslint: 9.39.5(jiti@1.21.7)
-      typescript: 5.5.4
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/visitor-keys@8.38.0':
-    dependencies:
-      '@typescript-eslint/types': 8.38.0
-      eslint-visitor-keys: 4.2.1
-
-  '@typescript-eslint/visitor-keys@8.64.0':
-    dependencies:
-      '@typescript-eslint/types': 8.64.0
-      eslint-visitor-keys: 5.0.1
+      '@typescript-eslint/types': 8.24.1
+      eslint-visitor-keys: 4.2.0
 
   '@uppy/companion-client@2.2.2':
     dependencies:
@@ -4041,8 +3876,8 @@
       lodash.throttle: 4.1.1
       mime-match: 1.0.2
       namespace-emitter: 2.0.1
-      nanoid: 3.3.11
-      preact: 10.26.9
+      nanoid: 3.3.8
+      preact: 10.26.2
 
   '@uppy/store-default@2.1.1': {}
 
@@ -4055,107 +3890,94 @@
       '@uppy/companion-client': 2.2.2
       '@uppy/core': 2.3.4
       '@uppy/utils': 4.1.3
-      nanoid: 3.3.11
+      nanoid: 3.3.8
 
-  '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))':
+  '@vitejs/plugin-vue-jsx@4.1.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0)
-      '@rolldown/pluginutils': 1.0.0-beta.29
-      '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0)
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
-      vue: 3.5.40(typescript@5.5.4)
+      '@babel/core': 7.26.9
+      '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9)
+      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.9)
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
+      vue: 3.5.13(typescript@5.5.4)
     transitivePeerDependencies:
       - supports-color
 
-  '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))':
+  '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
-      vue: 3.5.40(typescript@5.5.4)
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
+      vue: 3.5.13(typescript@5.5.4)
 
-  '@volar/language-core@2.4.15':
+  '@volar/language-core@2.4.11':
     dependencies:
-      '@volar/source-map': 2.4.15
+      '@volar/source-map': 2.4.11
 
-  '@volar/source-map@2.4.15': {}
+  '@volar/source-map@2.4.11': {}
 
-  '@volar/typescript@2.4.15':
+  '@volar/typescript@2.4.11':
     dependencies:
-      '@volar/language-core': 2.4.15
+      '@volar/language-core': 2.4.11
       path-browserify: 1.0.1
       vscode-uri: 3.1.0
 
-  '@vue/babel-helper-vue-transform-on@1.4.0': {}
+  '@vue/babel-helper-vue-transform-on@1.2.5': {}
 
-  '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.28.0)':
+  '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.26.9)':
     dependencies:
-      '@babel/helper-module-imports': 7.27.1
-      '@babel/helper-plugin-utils': 7.27.1
-      '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
-      '@babel/template': 7.27.2
-      '@babel/traverse': 7.28.0
-      '@babel/types': 7.28.1
-      '@vue/babel-helper-vue-transform-on': 1.4.0
-      '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.0)
-      '@vue/shared': 3.5.18
+      '@babel/helper-module-imports': 7.25.9
+      '@babel/helper-plugin-utils': 7.26.5
+      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9)
+      '@babel/template': 7.26.9
+      '@babel/traverse': 7.26.9
+      '@babel/types': 7.26.9
+      '@vue/babel-helper-vue-transform-on': 1.2.5
+      '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.9)
+      html-tags: 3.3.1
+      svg-tags: 1.0.0
     optionalDependencies:
-      '@babel/core': 7.28.0
+      '@babel/core': 7.26.9
     transitivePeerDependencies:
       - supports-color
 
-  '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.28.0)':
+  '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.26.9)':
     dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/core': 7.28.0
-      '@babel/helper-module-imports': 7.27.1
-      '@babel/helper-plugin-utils': 7.27.1
-      '@babel/parser': 7.29.7
-      '@vue/compiler-sfc': 3.5.40
+      '@babel/code-frame': 7.26.2
+      '@babel/core': 7.26.9
+      '@babel/helper-module-imports': 7.25.9
+      '@babel/helper-plugin-utils': 7.26.5
+      '@babel/parser': 7.26.9
+      '@vue/compiler-sfc': 3.5.13
     transitivePeerDependencies:
       - supports-color
 
-  '@vue/compiler-core@3.5.18':
+  '@vue/compiler-core@3.5.13':
     dependencies:
-      '@babel/parser': 7.29.7
-      '@vue/shared': 3.5.18
+      '@babel/parser': 7.26.9
+      '@vue/shared': 3.5.13
       entities: 4.5.0
       estree-walker: 2.0.2
       source-map-js: 1.2.1
 
-  '@vue/compiler-core@3.5.40':
+  '@vue/compiler-dom@3.5.13':
     dependencies:
-      '@babel/parser': 7.29.7
-      '@vue/shared': 3.5.40
-      entities: 7.0.1
+      '@vue/compiler-core': 3.5.13
+      '@vue/shared': 3.5.13
+
+  '@vue/compiler-sfc@3.5.13':
+    dependencies:
+      '@babel/parser': 7.26.9
+      '@vue/compiler-core': 3.5.13
+      '@vue/compiler-dom': 3.5.13
+      '@vue/compiler-ssr': 3.5.13
+      '@vue/shared': 3.5.13
       estree-walker: 2.0.2
+      magic-string: 0.30.17
+      postcss: 8.5.2
       source-map-js: 1.2.1
 
-  '@vue/compiler-dom@3.5.18':
+  '@vue/compiler-ssr@3.5.13':
     dependencies:
-      '@vue/compiler-core': 3.5.18
-      '@vue/shared': 3.5.18
-
-  '@vue/compiler-dom@3.5.40':
-    dependencies:
-      '@vue/compiler-core': 3.5.40
-      '@vue/shared': 3.5.40
-
-  '@vue/compiler-sfc@3.5.40':
-    dependencies:
-      '@babel/parser': 7.29.7
-      '@vue/compiler-core': 3.5.40
-      '@vue/compiler-dom': 3.5.40
-      '@vue/compiler-ssr': 3.5.40
-      '@vue/shared': 3.5.40
-      estree-walker: 2.0.2
-      magic-string: 0.30.21
-      postcss: 8.5.20
-      source-map-js: 1.2.1
-
-  '@vue/compiler-ssr@3.5.40':
-    dependencies:
-      '@vue/compiler-dom': 3.5.40
-      '@vue/shared': 3.5.40
+      '@vue/compiler-dom': 3.5.13
+      '@vue/shared': 3.5.13
 
   '@vue/compiler-vue2@2.7.16':
     dependencies:
@@ -4164,168 +3986,166 @@
 
   '@vue/devtools-api@6.6.4': {}
 
-  '@vue/devtools-core@7.7.10(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))':
+  '@vue/devtools-core@7.7.2(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      '@vue/devtools-kit': 7.7.10
-      '@vue/devtools-shared': 7.7.10
+      '@vue/devtools-kit': 7.7.2
+      '@vue/devtools-shared': 7.7.2
       mitt: 3.0.1
-      nanoid: 5.1.16
+      nanoid: 5.1.0
       pathe: 2.0.3
-      vite-hot-client: 2.2.0(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))
-      vue: 3.5.40(typescript@5.5.4)
+      vite-hot-client: 0.2.4(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))
+      vue: 3.5.13(typescript@5.5.4)
     transitivePeerDependencies:
       - vite
 
-  '@vue/devtools-kit@7.7.10':
+  '@vue/devtools-kit@7.7.2':
     dependencies:
-      '@vue/devtools-shared': 7.7.10
-      birpc: 2.5.0
+      '@vue/devtools-shared': 7.7.2
+      birpc: 0.2.19
       hookable: 5.5.3
       mitt: 3.0.1
       perfect-debounce: 1.0.0
       speakingurl: 14.0.1
       superjson: 2.2.2
 
-  '@vue/devtools-shared@7.7.10':
+  '@vue/devtools-shared@7.7.2':
     dependencies:
       rfdc: 1.4.1
 
-  '@vue/eslint-config-prettier@10.2.0(eslint@9.39.5(jiti@1.21.7))(prettier@3.9.5)':
+  '@vue/eslint-config-prettier@10.2.0(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.1)':
     dependencies:
-      eslint: 9.39.5(jiti@1.21.7)
-      eslint-config-prettier: 10.1.8(eslint@9.39.5(jiti@1.21.7))
-      eslint-plugin-prettier: 5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@1.21.7)))(eslint@9.39.5(jiti@1.21.7))(prettier@3.9.5)
-      prettier: 3.9.5
+      eslint: 9.20.1(jiti@1.21.7)
+      eslint-config-prettier: 10.0.1(eslint@9.20.1(jiti@1.21.7))
+      eslint-plugin-prettier: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.1)
+      prettier: 3.5.1
     transitivePeerDependencies:
       - '@types/eslint'
 
-  '@vue/eslint-config-typescript@14.9.0(eslint-plugin-vue@9.33.0(eslint@9.39.5(jiti@1.21.7)))(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)':
+  '@vue/eslint-config-typescript@14.4.0(eslint-plugin-vue@9.32.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)':
     dependencies:
-      '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      eslint: 9.39.5(jiti@1.21.7)
-      eslint-plugin-vue: 9.33.0(eslint@9.39.5(jiti@1.21.7))
+      '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      eslint: 9.20.1(jiti@1.21.7)
+      eslint-plugin-vue: 9.32.0(eslint@9.20.1(jiti@1.21.7))
       fast-glob: 3.3.3
-      typescript-eslint: 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      vue-eslint-parser: 10.4.1(eslint@9.39.5(jiti@1.21.7))
+      typescript-eslint: 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      vue-eslint-parser: 9.4.3(eslint@9.20.1(jiti@1.21.7))
     optionalDependencies:
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
 
-  '@vue/language-core@2.2.12(typescript@5.5.4)':
+  '@vue/language-core@2.2.2(typescript@5.5.4)':
     dependencies:
-      '@volar/language-core': 2.4.15
-      '@vue/compiler-dom': 3.5.18
+      '@volar/language-core': 2.4.11
+      '@vue/compiler-dom': 3.5.13
       '@vue/compiler-vue2': 2.7.16
-      '@vue/shared': 3.5.18
-      alien-signals: 1.0.13
-      minimatch: 9.0.9
+      '@vue/shared': 3.5.13
+      alien-signals: 1.0.3
+      minimatch: 9.0.5
       muggle-string: 0.4.1
       path-browserify: 1.0.1
     optionalDependencies:
       typescript: 5.5.4
 
-  '@vue/reactivity@3.5.18':
+  '@vue/reactivity@3.5.13':
     dependencies:
-      '@vue/shared': 3.5.18
+      '@vue/shared': 3.5.13
 
-  '@vue/reactivity@3.5.40':
+  '@vue/runtime-core@3.5.13':
     dependencies:
-      '@vue/shared': 3.5.40
+      '@vue/reactivity': 3.5.13
+      '@vue/shared': 3.5.13
 
-  '@vue/runtime-core@3.5.18':
+  '@vue/runtime-dom@3.5.13':
     dependencies:
-      '@vue/reactivity': 3.5.18
-      '@vue/shared': 3.5.18
+      '@vue/reactivity': 3.5.13
+      '@vue/runtime-core': 3.5.13
+      '@vue/shared': 3.5.13
+      csstype: 3.1.3
 
-  '@vue/runtime-core@3.5.40':
+  '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      '@vue/reactivity': 3.5.40
-      '@vue/shared': 3.5.40
+      '@vue/compiler-ssr': 3.5.13
+      '@vue/shared': 3.5.13
+      vue: 3.5.13(typescript@5.5.4)
 
-  '@vue/runtime-dom@3.5.40':
+  '@vue/shared@3.5.13': {}
+
+  '@vue/test-utils@2.4.6':
     dependencies:
-      '@vue/reactivity': 3.5.40
-      '@vue/runtime-core': 3.5.40
-      '@vue/shared': 3.5.40
-      csstype: 3.2.3
-
-  '@vue/server-renderer@3.5.40':
-    dependencies:
-      '@vue/compiler-ssr': 3.5.40
-      '@vue/runtime-dom': 3.5.40
-      '@vue/shared': 3.5.40
-
-  '@vue/shared@3.5.18': {}
-
-  '@vue/shared@3.5.40': {}
-
-  '@vue/test-utils@2.4.11(@vue/compiler-dom@3.5.40)(@vue/server-renderer@3.5.40)(vue@3.5.40(typescript@5.5.4))':
-    dependencies:
-      '@vue/compiler-dom': 3.5.40
-      js-beautify: 1.15.4
-      vue: 3.5.40(typescript@5.5.4)
-      vue-component-type-helpers: 3.3.7
-    optionalDependencies:
-      '@vue/server-renderer': 3.5.40
+      js-beautify: 1.15.3
+      vue-component-type-helpers: 2.2.2
 
   '@vue/tsconfig@0.5.1': {}
 
-  '@vueuse/core@12.8.2(typescript@5.5.4)':
+  '@vueuse/core@12.7.0(typescript@5.5.4)':
     dependencies:
-      '@types/web-bluetooth': 0.0.21
-      '@vueuse/metadata': 12.8.2
-      '@vueuse/shared': 12.8.2(typescript@5.5.4)
-      vue: 3.5.40(typescript@5.5.4)
+      '@types/web-bluetooth': 0.0.20
+      '@vueuse/metadata': 12.7.0
+      '@vueuse/shared': 12.7.0(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
     transitivePeerDependencies:
       - typescript
 
-  '@vueuse/core@9.13.0(vue@3.5.40(typescript@5.5.4))':
+  '@vueuse/core@14.3.0(vue@3.5.13(typescript@5.5.4))':
+    dependencies:
+      '@types/web-bluetooth': 0.0.21
+      '@vueuse/metadata': 14.3.0
+      '@vueuse/shared': 14.3.0(vue@3.5.13(typescript@5.5.4))
+      vue: 3.5.13(typescript@5.5.4)
+
+  '@vueuse/core@9.13.0(vue@3.5.13(typescript@5.5.4))':
     dependencies:
       '@types/web-bluetooth': 0.0.16
       '@vueuse/metadata': 9.13.0
-      '@vueuse/shared': 9.13.0(vue@3.5.40(typescript@5.5.4))
-      vue-demi: 0.14.10(vue@3.5.40(typescript@5.5.4))
+      '@vueuse/shared': 9.13.0(vue@3.5.13(typescript@5.5.4))
+      vue-demi: 0.14.10(vue@3.5.13(typescript@5.5.4))
     transitivePeerDependencies:
       - '@vue/composition-api'
       - vue
 
-  '@vueuse/metadata@12.8.2': {}
+  '@vueuse/metadata@12.7.0': {}
+
+  '@vueuse/metadata@14.3.0': {}
 
   '@vueuse/metadata@9.13.0': {}
 
-  '@vueuse/shared@12.8.2(typescript@5.5.4)':
+  '@vueuse/shared@12.7.0(typescript@5.5.4)':
     dependencies:
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
     transitivePeerDependencies:
       - typescript
 
-  '@vueuse/shared@9.13.0(vue@3.5.40(typescript@5.5.4))':
+  '@vueuse/shared@14.3.0(vue@3.5.13(typescript@5.5.4))':
     dependencies:
-      vue-demi: 0.14.10(vue@3.5.40(typescript@5.5.4))
+      vue: 3.5.13(typescript@5.5.4)
+
+  '@vueuse/shared@9.13.0(vue@3.5.13(typescript@5.5.4))':
+    dependencies:
+      vue-demi: 0.14.10(vue@3.5.13(typescript@5.5.4))
     transitivePeerDependencies:
       - '@vue/composition-api'
       - vue
 
-  '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
       is-url: 1.2.4
       lodash.throttle: 4.1.1
-      nanoid: 3.3.11
+      nanoid: 3.3.8
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
-      prismjs: 1.30.0
+      prismjs: 1.29.0
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
       '@types/event-emitter': 0.3.5
       '@uppy/core': 2.3.4
@@ -4342,28 +4162,28 @@
       lodash.isequal: 4.5.0
       lodash.throttle: 4.1.1
       lodash.toarray: 4.4.0
-      nanoid: 3.3.11
+      nanoid: 3.3.8
       scroll-into-view-if-needed: 2.2.31
       slate: 0.72.8
       slate-history: 0.66.0(slate@0.72.8)
       snabbdom: 3.6.2
 
-  '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.40(typescript@5.5.4))':
+  '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.13(typescript@5.5.4))':
     dependencies:
       '@wangeditor/editor': 5.1.23
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
   '@wangeditor/editor@5.1.23':
     dependencies:
       '@uppy/core': 2.3.4
       '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
-      '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
       is-hotkey: 0.2.0
       lodash.camelcase: 4.3.0
@@ -4373,80 +4193,68 @@
       lodash.isequal: 4.5.0
       lodash.throttle: 4.1.1
       lodash.toarray: 4.4.0
-      nanoid: 3.3.11
+      nanoid: 3.3.8
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
       lodash.isequal: 4.5.0
       lodash.throttle: 4.1.1
-      nanoid: 3.3.11
+      nanoid: 3.3.8
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
       '@uppy/core': 2.3.4
       '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
-      '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
       lodash.foreach: 4.5.0
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)':
+  '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)':
     dependencies:
       '@uppy/core': 2.3.4
       '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
-      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)
+      '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.8)(slate@0.72.8)(snabbdom@3.6.2)
       dom7: 3.0.0
-      nanoid: 3.3.11
+      nanoid: 3.3.8
       slate: 0.72.8
       snabbdom: 3.6.2
 
-  abbrev@2.0.0: {}
+  abbrev@3.0.0: {}
 
   abortcontroller-polyfill@1.7.8: {}
 
-  acorn-jsx@5.3.2(acorn@8.15.0):
+  acorn-jsx@5.3.2(acorn@8.14.0):
     dependencies:
-      acorn: 8.15.0
+      acorn: 8.14.0
 
-  acorn-jsx@5.3.2(acorn@8.17.0):
-    dependencies:
-      acorn: 8.17.0
-
-  acorn@8.15.0: {}
-
-  acorn@8.17.0: {}
+  acorn@8.14.0: {}
 
   adler-32@1.3.1: {}
 
-  agent-base@6.0.0:
-    dependencies:
-      debug: 4.4.1
-    transitivePeerDependencies:
-      - supports-color
-
-  ajv@6.15.0:
+  ajv@6.12.6:
     dependencies:
       fast-deep-equal: 3.1.3
       fast-json-stable-stringify: 2.1.0
       json-schema-traverse: 0.4.1
       uri-js: 4.4.1
 
-  alien-signals@1.0.13: {}
+  alien-signals@1.0.3: {}
 
   ansi-regex@5.0.1: {}
 
@@ -4473,61 +4281,51 @@
 
   asynckit@0.4.0: {}
 
-  autoprefixer@10.5.4(postcss@8.5.6):
+  autoprefixer@10.4.20(postcss@8.5.2):
     dependencies:
-      browserslist: 4.28.6
-      caniuse-lite: 1.0.30001806
-      fraction.js: 5.3.4
+      browserslist: 4.24.4
+      caniuse-lite: 1.0.30001700
+      fraction.js: 4.3.7
+      normalize-range: 0.1.2
       picocolors: 1.1.1
-      postcss: 8.5.6
+      postcss: 8.5.2
       postcss-value-parser: 4.2.0
 
-  axios@1.18.1:
+  axios@1.7.9:
     dependencies:
-      follow-redirects: 1.16.0
-      form-data: 4.0.6
-      https-proxy-agent: 5.0.1
-      proxy-from-env: 2.1.0
+      follow-redirects: 1.15.9
+      form-data: 4.0.2
+      proxy-from-env: 1.1.0
     transitivePeerDependencies:
       - debug
-      - supports-color
 
   balanced-match@1.0.2: {}
 
-  balanced-match@4.0.4: {}
-
-  baseline-browser-mapping@2.10.43: {}
-
   binary-extensions@2.3.0: {}
 
-  birpc@2.5.0: {}
+  birpc@0.2.19: {}
 
   boolbase@1.0.0: {}
 
-  brace-expansion@1.1.16:
+  brace-expansion@1.1.11:
     dependencies:
       balanced-match: 1.0.2
       concat-map: 0.0.1
 
-  brace-expansion@2.1.2:
+  brace-expansion@2.0.1:
     dependencies:
       balanced-match: 1.0.2
-
-  brace-expansion@5.0.7:
-    dependencies:
-      balanced-match: 4.0.4
 
   braces@3.0.3:
     dependencies:
       fill-range: 7.1.1
 
-  browserslist@4.28.6:
+  browserslist@4.24.4:
     dependencies:
-      baseline-browser-mapping: 2.10.43
-      caniuse-lite: 1.0.30001806
-      electron-to-chromium: 1.5.393
-      node-releases: 2.0.51
-      update-browserslist-db: 1.2.3(browserslist@4.28.6)
+      caniuse-lite: 1.0.30001700
+      electron-to-chromium: 1.5.102
+      node-releases: 2.0.19
+      update-browserslist-db: 1.1.2(browserslist@4.24.4)
 
   buffer-from@1.1.2: {}
 
@@ -4544,7 +4342,7 @@
 
   camelcase-css@2.0.1: {}
 
-  caniuse-lite@1.0.30001806: {}
+  caniuse-lite@1.0.30001700: {}
 
   cfb@1.2.2:
     dependencies:
@@ -4556,7 +4354,7 @@
       ansi-styles: 4.3.0
       supports-color: 7.2.0
 
-  chardet@2.2.0: {}
+  chardet@2.0.0: {}
 
   chokidar@3.6.0:
     dependencies:
@@ -4617,7 +4415,7 @@
     dependencies:
       is-what: 4.1.16
 
-  core-js@3.49.0: {}
+  core-js@3.40.0: {}
 
   crc-32@1.2.2: {}
 
@@ -4627,10 +4425,10 @@
       shebang-command: 2.0.0
       which: 2.0.2
 
-  css-select@5.2.2:
+  css-select@5.1.0:
     dependencies:
       boolbase: 1.0.0
-      css-what: 6.2.2
+      css-what: 6.1.0
       domhandler: 5.0.3
       domutils: 3.2.2
       nth-check: 2.1.1
@@ -4645,7 +4443,7 @@
       mdn-data: 2.0.30
       source-map-js: 1.2.1
 
-  css-what@6.2.2: {}
+  css-what@6.1.0: {}
 
   cssesc@3.0.0: {}
 
@@ -4653,12 +4451,14 @@
     dependencies:
       css-tree: 2.2.1
 
-  csstype@3.2.3: {}
+  csstype@3.1.3: {}
 
   d@1.0.2:
     dependencies:
       es5-ext: 0.10.64
       type: 2.7.3
+
+  dayjs@1.11.13: {}
 
   dayjs@1.11.21: {}
 
@@ -4666,11 +4466,11 @@
 
   debounce-promise@3.1.2: {}
 
-  debug@4.4.1:
+  debug@4.3.7:
     dependencies:
       ms: 2.1.3
 
-  debug@4.4.3:
+  debug@4.4.0:
     dependencies:
       ms: 2.1.3
 
@@ -4738,59 +4538,69 @@
       '@one-ini/wasm': 0.1.1
       commander: 10.0.1
       minimatch: 9.0.1
-      semver: 7.8.5
+      semver: 7.7.1
 
-  electron-to-chromium@1.5.393: {}
+  electron-to-chromium@1.5.102: {}
 
-  element-plus@2.10.2(vue@3.5.40(typescript@5.5.4)):
+  element-plus@2.10.2(vue@3.5.13(typescript@5.5.4)):
     dependencies:
       '@ctrl/tinycolor': 3.6.1
-      '@element-plus/icons-vue': 2.3.1(vue@3.5.40(typescript@5.5.4))
-      '@floating-ui/dom': 1.7.2
-      '@popperjs/core': '@sxzz/popperjs-es@2.11.8'
-      '@types/lodash': 4.17.20
+      '@element-plus/icons-vue': 2.3.1(vue@3.5.13(typescript@5.5.4))
+      '@floating-ui/dom': 1.6.13
+      '@popperjs/core': '@sxzz/popperjs-es@2.11.7'
+      '@types/lodash': 4.17.15
       '@types/lodash-es': 4.17.12
-      '@vueuse/core': 9.13.0(vue@3.5.40(typescript@5.5.4))
+      '@vueuse/core': 9.13.0(vue@3.5.13(typescript@5.5.4))
       async-validator: 4.2.5
-      dayjs: 1.11.21
+      dayjs: 1.11.13
       escape-html: 1.0.3
       lodash: 4.17.21
-      lodash-es: 4.18.1
-      lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.17.21)
+      lodash-es: 4.17.21
+      lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21)
       memoize-one: 6.0.0
       normalize-wheel-es: 1.2.0
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
     transitivePeerDependencies:
       - '@vue/composition-api'
 
-  element-plus@2.10.4(vue@3.5.40(typescript@5.5.4)):
+  element-plus@2.14.3(vue@3.5.13(typescript@5.5.4)):
     dependencies:
-      '@ctrl/tinycolor': 3.6.1
-      '@element-plus/icons-vue': 2.3.1(vue@3.5.40(typescript@5.5.4))
-      '@floating-ui/dom': 1.7.2
+      '@ctrl/tinycolor': 4.2.0
+      '@element-plus/icons-vue': 2.3.2(vue@3.5.13(typescript@5.5.4))
+      '@floating-ui/dom': 1.8.0
       '@popperjs/core': '@sxzz/popperjs-es@2.11.8'
-      '@types/lodash': 4.17.20
+      '@types/lodash': 4.17.25
       '@types/lodash-es': 4.17.12
-      '@vueuse/core': 9.13.0(vue@3.5.40(typescript@5.5.4))
+      '@vueuse/core': 14.3.0(vue@3.5.13(typescript@5.5.4))
       async-validator: 4.2.5
       dayjs: 1.11.21
-      escape-html: 1.0.3
-      lodash: 4.17.21
+      lodash: 4.18.1
       lodash-es: 4.18.1
-      lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.17.21)
+      lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1)
       memoize-one: 6.0.0
       normalize-wheel-es: 1.2.0
-      vue: 3.5.40(typescript@5.5.4)
-    transitivePeerDependencies:
-      - '@vue/composition-api'
+      vue: 3.5.13(typescript@5.5.4)
+      vue-component-type-helpers: 3.3.8
 
   emoji-regex@8.0.0: {}
 
   emoji-regex@9.2.2: {}
 
-  entities@4.5.0: {}
+  engine.io-client@6.6.3:
+    dependencies:
+      '@socket.io/component-emitter': 3.1.2
+      debug: 4.3.7
+      engine.io-parser: 5.2.3
+      ws: 8.17.1
+      xmlhttprequest-ssl: 2.1.2
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
 
-  entities@7.0.1: {}
+  engine.io-parser@5.2.3: {}
+
+  entities@4.5.0: {}
 
   error-stack-parser-es@0.1.5: {}
 
@@ -4798,16 +4608,16 @@
 
   es-errors@1.3.0: {}
 
-  es-object-atoms@1.1.2:
+  es-object-atoms@1.1.1:
     dependencies:
       es-errors: 1.3.0
 
   es-set-tostringtag@2.1.0:
     dependencies:
       es-errors: 1.3.0
-      get-intrinsic: 1.3.0
+      get-intrinsic: 1.2.7
       has-tostringtag: 1.0.2
-      hasown: 2.0.4
+      hasown: 2.0.2
 
   es5-ext@0.10.64:
     dependencies:
@@ -4867,29 +4677,29 @@
     optionalDependencies:
       source-map: 0.6.1
 
-  eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@1.21.7)):
+  eslint-config-prettier@10.0.1(eslint@9.20.1(jiti@1.21.7)):
     dependencies:
-      eslint: 9.39.5(jiti@1.21.7)
+      eslint: 9.20.1(jiti@1.21.7)
 
-  eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@1.21.7)))(eslint@9.39.5(jiti@1.21.7))(prettier@3.9.5):
+  eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.1):
     dependencies:
-      eslint: 9.39.5(jiti@1.21.7)
-      prettier: 3.9.5
-      prettier-linter-helpers: 1.0.1
-      synckit: 0.11.13
+      eslint: 9.20.1(jiti@1.21.7)
+      prettier: 3.5.1
+      prettier-linter-helpers: 1.0.0
+      synckit: 0.9.2
     optionalDependencies:
-      eslint-config-prettier: 10.1.8(eslint@9.39.5(jiti@1.21.7))
+      eslint-config-prettier: 10.0.1(eslint@9.20.1(jiti@1.21.7))
 
-  eslint-plugin-vue@9.33.0(eslint@9.39.5(jiti@1.21.7)):
+  eslint-plugin-vue@9.32.0(eslint@9.20.1(jiti@1.21.7)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.7.0(eslint@9.39.5(jiti@1.21.7))
-      eslint: 9.39.5(jiti@1.21.7)
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7))
+      eslint: 9.20.1(jiti@1.21.7)
       globals: 13.24.0
       natural-compare: 1.4.0
       nth-check: 2.1.1
       postcss-selector-parser: 6.1.2
-      semver: 7.7.2
-      vue-eslint-parser: 9.4.3(eslint@9.39.5(jiti@1.21.7))
+      semver: 7.7.1
+      vue-eslint-parser: 9.4.3(eslint@9.20.1(jiti@1.21.7))
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
@@ -4899,46 +4709,37 @@
       esrecurse: 4.3.0
       estraverse: 5.3.0
 
-  eslint-scope@8.4.0:
+  eslint-scope@8.2.0:
     dependencies:
-      esrecurse: 4.3.0
-      estraverse: 5.3.0
-
-  eslint-scope@9.1.2:
-    dependencies:
-      '@types/esrecurse': 4.3.1
-      '@types/estree': 1.0.9
       esrecurse: 4.3.0
       estraverse: 5.3.0
 
   eslint-visitor-keys@3.4.3: {}
 
-  eslint-visitor-keys@4.2.1: {}
+  eslint-visitor-keys@4.2.0: {}
 
-  eslint-visitor-keys@5.0.1: {}
-
-  eslint@9.39.5(jiti@1.21.7):
+  eslint@9.20.1(jiti@1.21.7):
     dependencies:
-      '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@1.21.7))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7))
       '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.21.2
-      '@eslint/config-helpers': 0.4.2
-      '@eslint/core': 0.17.0
-      '@eslint/eslintrc': 3.3.6
-      '@eslint/js': 9.39.5
-      '@eslint/plugin-kit': 0.4.1
+      '@eslint/config-array': 0.19.2
+      '@eslint/core': 0.11.0
+      '@eslint/eslintrc': 3.2.0
+      '@eslint/js': 9.20.0
+      '@eslint/plugin-kit': 0.2.6
       '@humanfs/node': 0.16.6
       '@humanwhocodes/module-importer': 1.0.1
-      '@humanwhocodes/retry': 0.4.3
-      '@types/estree': 1.0.8
-      ajv: 6.15.0
+      '@humanwhocodes/retry': 0.4.1
+      '@types/estree': 1.0.6
+      '@types/json-schema': 7.0.15
+      ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.6
-      debug: 4.4.1
+      debug: 4.4.0
       escape-string-regexp: 4.0.0
-      eslint-scope: 8.4.0
-      eslint-visitor-keys: 4.2.1
-      espree: 10.4.0
+      eslint-scope: 8.2.0
+      eslint-visitor-keys: 4.2.0
+      espree: 10.3.0
       esquery: 1.6.0
       esutils: 2.0.3
       fast-deep-equal: 3.1.3
@@ -4950,7 +4751,7 @@
       is-glob: 4.0.3
       json-stable-stringify-without-jsonify: 1.0.1
       lodash.merge: 4.6.2
-      minimatch: 3.1.5
+      minimatch: 3.1.2
       natural-compare: 1.4.0
       optionator: 0.9.4
     optionalDependencies:
@@ -4965,31 +4766,21 @@
       event-emitter: 0.3.5
       type: 2.7.3
 
-  espree@10.4.0:
+  espree@10.3.0:
     dependencies:
-      acorn: 8.15.0
-      acorn-jsx: 5.3.2(acorn@8.15.0)
-      eslint-visitor-keys: 4.2.1
-
-  espree@11.2.0:
-    dependencies:
-      acorn: 8.17.0
-      acorn-jsx: 5.3.2(acorn@8.17.0)
-      eslint-visitor-keys: 5.0.1
+      acorn: 8.14.0
+      acorn-jsx: 5.3.2(acorn@8.14.0)
+      eslint-visitor-keys: 4.2.0
 
   espree@9.6.1:
     dependencies:
-      acorn: 8.15.0
-      acorn-jsx: 5.3.2(acorn@8.15.0)
+      acorn: 8.14.0
+      acorn-jsx: 5.3.2(acorn@8.14.0)
       eslint-visitor-keys: 3.4.3
 
   esprima@4.0.1: {}
 
   esquery@1.6.0:
-    dependencies:
-      estraverse: 5.3.0
-
-  esquery@1.7.0:
     dependencies:
       estraverse: 5.3.0
 
@@ -5010,13 +4801,13 @@
 
   eventemitter3@5.0.4: {}
 
-  execa@9.6.0:
+  execa@9.5.2:
     dependencies:
       '@sindresorhus/merge-streams': 4.0.0
       cross-spawn: 7.0.6
       figures: 6.1.0
       get-stream: 9.0.1
-      human-signals: 8.0.1
+      human-signals: 8.0.0
       is-plain-obj: 4.1.0
       is-stream: 4.0.1
       npm-run-path: 6.0.0
@@ -5029,14 +4820,14 @@
     dependencies:
       type: 2.7.3
 
-  ezuikit-js@9.0.15:
+  ezuikit-js@9.0.17:
     dependencies:
-      '@ezuikit/control-aichat': 0.1.0-beta.9
-      '@ezuikit/player-ezopen': 9.0.6
+      '@ezuikit/control-aichat': 0.1.1-beta.1
+      '@ezuikit/player-ezopen': 9.0.7-beta.4
       '@ezuikit/utils-collect': 0.1.1
       '@ezuikit/utils-i18n': 2.0.1
       '@ezuikit/utils-logger': 2.0.1
-      '@ezuikit/utils-tools': 2.0.5
+      '@ezuikit/utils-tools': 2.0.6
       '@juggle/resize-observer': 3.4.0
       '@skax/delegate': 4.0.2
       abortcontroller-polyfill: 1.7.8
@@ -5061,18 +4852,14 @@
 
   fast-levenshtein@2.0.6: {}
 
-  fastq@1.19.1:
+  fastq@1.19.0:
     dependencies:
-      reusify: 1.1.0
-
-  fdir@6.5.0(picomatch@4.0.5):
-    optionalDependencies:
-      picomatch: 4.0.5
+      reusify: 1.0.4
 
   fetch-blob@3.2.0:
     dependencies:
       node-domexception: 1.0.0
-      web-streams-polyfill: 3.0.3
+      web-streams-polyfill: 3.3.3
 
   figures@6.1.0:
     dependencies:
@@ -5100,19 +4887,18 @@
 
   flatted@3.3.3: {}
 
-  follow-redirects@1.16.0: {}
+  follow-redirects@1.15.9: {}
 
-  foreground-child@3.3.1:
+  foreground-child@3.3.0:
     dependencies:
       cross-spawn: 7.0.6
       signal-exit: 4.1.0
 
-  form-data@4.0.6:
+  form-data@4.0.2:
     dependencies:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       es-set-tostringtag: 2.1.0
-      hasown: 2.0.4
       mime-types: 2.1.35
 
   formdata-polyfill@4.0.10:
@@ -5121,7 +4907,7 @@
 
   frac@1.1.2: {}
 
-  fraction.js@5.3.4: {}
+  fraction.js@4.3.7: {}
 
   fs-extra@10.1.0:
     dependencies:
@@ -5144,23 +4930,23 @@
 
   get-caller-file@2.0.5: {}
 
-  get-intrinsic@1.3.0:
+  get-intrinsic@1.2.7:
     dependencies:
       call-bind-apply-helpers: 1.0.2
       es-define-property: 1.0.1
       es-errors: 1.3.0
-      es-object-atoms: 1.1.2
+      es-object-atoms: 1.1.1
       function-bind: 1.1.2
       get-proto: 1.0.1
       gopd: 1.2.0
       has-symbols: 1.1.0
-      hasown: 2.0.4
+      hasown: 2.0.2
       math-intrinsics: 1.1.0
 
   get-proto@1.0.1:
     dependencies:
       dunder-proto: 1.0.1
-      es-object-atoms: 1.1.2
+      es-object-atoms: 1.1.1
 
   get-stream@9.0.1:
     dependencies:
@@ -5177,12 +4963,14 @@
 
   glob@10.4.5:
     dependencies:
-      foreground-child: 3.3.1
+      foreground-child: 3.3.0
       jackspeak: 3.4.3
       minimatch: 9.0.5
       minipass: 7.1.2
       package-json-from-dist: 1.0.1
       path-scurry: 1.11.1
+
+  globals@11.12.0: {}
 
   globals@13.24.0:
     dependencies:
@@ -5193,6 +4981,8 @@
   gopd@1.2.0: {}
 
   graceful-fs@4.2.11: {}
+
+  graphemer@1.4.0: {}
 
   has-flag@4.0.0: {}
 
@@ -5206,36 +4996,25 @@
     dependencies:
       function-bind: 1.1.2
 
-  hasown@2.0.4:
-    dependencies:
-      function-bind: 1.1.2
-
   he@1.2.0: {}
 
   hookable@5.5.3: {}
 
+  html-tags@3.3.1: {}
+
   html-void-elements@2.0.1: {}
 
-  https-proxy-agent@5.0.1:
-    dependencies:
-      agent-base: 6.0.0
-      debug: 4.4.1
-    transitivePeerDependencies:
-      - supports-color
-
-  human-signals@8.0.1: {}
+  human-signals@8.0.0: {}
 
   i18next@20.6.1:
     dependencies:
-      '@babel/runtime': 7.27.6
+      '@babel/runtime': 7.26.9
 
   ignore@5.3.2: {}
 
-  ignore@7.0.6: {}
-
   immer@9.0.21: {}
 
-  immutable@5.1.3: {}
+  immutable@5.0.3: {}
 
   import-fresh@3.3.1:
     dependencies:
@@ -5304,23 +5083,19 @@
 
   jiti@1.21.7: {}
 
-  js-beautify@1.15.4:
+  js-beautify@1.15.3:
     dependencies:
       config-chain: 1.1.13
       editorconfig: 1.0.4
       glob: 10.4.5
       js-cookie: 3.0.5
-      nopt: 7.2.1
+      nopt: 8.1.0
 
   js-cookie@3.0.5: {}
 
   js-tokens@4.0.0: {}
 
   js-yaml@4.1.0:
-    dependencies:
-      argparse: 2.0.1
-
-  js-yaml@4.3.0:
     dependencies:
       argparse: 2.0.1
 
@@ -5336,10 +5111,10 @@
 
   jsonc-eslint-parser@2.4.0:
     dependencies:
-      acorn: 8.15.0
+      acorn: 8.14.0
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
-      semver: 7.8.5
+      semver: 7.7.1
 
   jsonfile@6.1.0:
     dependencies:
@@ -5366,12 +5141,20 @@
     dependencies:
       p-locate: 5.0.0
 
+  lodash-es@4.17.21: {}
+
   lodash-es@4.18.1: {}
 
-  lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.17.21):
+  lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
     dependencies:
       '@types/lodash-es': 4.17.12
       lodash: 4.17.21
+      lodash-es: 4.17.21
+
+  lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1):
+    dependencies:
+      '@types/lodash-es': 4.17.12
+      lodash: 4.18.1
       lodash-es: 4.18.1
 
   lodash.camelcase@4.3.0: {}
@@ -5392,6 +5175,8 @@
 
   lodash@4.17.21: {}
 
+  lodash@4.18.1: {}
+
   lru-cache@10.4.3: {}
 
   lru-cache@5.1.1:
@@ -5400,11 +5185,7 @@
 
   magic-string@0.30.17:
     dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.4
-
-  magic-string@0.30.21:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.5
+      '@jridgewell/sourcemap-codec': 1.5.0
 
   marked@14.1.4: {}
 
@@ -5433,25 +5214,17 @@
     dependencies:
       mime-db: 1.52.0
 
-  minimatch@10.2.5:
+  minimatch@3.1.2:
     dependencies:
-      brace-expansion: 5.0.7
-
-  minimatch@3.1.5:
-    dependencies:
-      brace-expansion: 1.1.16
+      brace-expansion: 1.1.11
 
   minimatch@9.0.1:
     dependencies:
-      brace-expansion: 2.1.2
+      brace-expansion: 2.0.1
 
   minimatch@9.0.5:
     dependencies:
-      brace-expansion: 2.1.2
-
-  minimatch@9.0.9:
-    dependencies:
-      brace-expansion: 2.1.2
+      brace-expansion: 2.0.1
 
   minipass@7.1.2: {}
 
@@ -5459,10 +5232,10 @@
 
   mlly@1.7.4:
     dependencies:
-      acorn: 8.15.0
+      acorn: 8.14.0
       pathe: 2.0.3
       pkg-types: 1.3.1
-      ufo: 1.6.1
+      ufo: 1.5.4
 
   mrmime@2.0.1: {}
 
@@ -5478,11 +5251,9 @@
 
   namespace-emitter@2.0.1: {}
 
-  nanoid@3.3.11: {}
+  nanoid@3.3.8: {}
 
-  nanoid@3.3.16: {}
-
-  nanoid@5.1.16: {}
+  nanoid@5.1.0: {}
 
   natural-compare@1.4.0: {}
 
@@ -5493,13 +5264,15 @@
 
   node-domexception@1.0.0: {}
 
-  node-releases@2.0.51: {}
+  node-releases@2.0.19: {}
 
-  nopt@7.2.1:
+  nopt@8.1.0:
     dependencies:
-      abbrev: 2.0.0
+      abbrev: 3.0.0
 
   normalize-path@3.0.0: {}
+
+  normalize-range@0.1.2: {}
 
   normalize-wheel-es@1.2.0: {}
 
@@ -5518,12 +5291,12 @@
 
   object-hash@3.0.0: {}
 
-  open@10.2.0:
+  open@10.1.0:
     dependencies:
       default-browser: 5.2.1
       define-lazy-prop: 3.0.0
       is-inside-container: 1.0.0
-      wsl-utils: 0.1.0
+      is-wsl: 3.1.0
 
   open@8.4.2:
     dependencies:
@@ -5581,23 +5354,21 @@
 
   picomatch@2.3.1: {}
 
-  picomatch@4.0.3: {}
-
-  picomatch@4.0.5: {}
+  picomatch@4.0.2: {}
 
   pify@2.3.0: {}
 
-  pinia@2.3.1(typescript@5.5.4)(vue@3.5.40(typescript@5.5.4)):
+  pinia@2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)):
     dependencies:
       '@vue/devtools-api': 6.6.4
-      vue: 3.5.40(typescript@5.5.4)
-      vue-demi: 0.14.10(vue@3.5.40(typescript@5.5.4))
+      vue: 3.5.13(typescript@5.5.4)
+      vue-demi: 0.14.10(vue@3.5.13(typescript@5.5.4))
     optionalDependencies:
       typescript: 5.5.4
     transitivePeerDependencies:
       - '@vue/composition-api'
 
-  pirates@4.0.7: {}
+  pirates@4.0.6: {}
 
   pkg-types@1.3.1:
     dependencies:
@@ -5605,28 +5376,28 @@
       mlly: 1.7.4
       pathe: 2.0.3
 
-  postcss-import@15.1.0(postcss@8.5.6):
+  postcss-import@15.1.0(postcss@8.5.2):
     dependencies:
-      postcss: 8.5.6
+      postcss: 8.5.2
       postcss-value-parser: 4.2.0
       read-cache: 1.0.0
       resolve: 1.22.10
 
-  postcss-js@4.0.1(postcss@8.5.6):
+  postcss-js@4.0.1(postcss@8.5.2):
     dependencies:
       camelcase-css: 2.0.1
-      postcss: 8.5.6
+      postcss: 8.5.2
 
-  postcss-load-config@4.0.2(postcss@8.5.6):
+  postcss-load-config@4.0.2(postcss@8.5.2):
     dependencies:
       lilconfig: 3.1.3
-      yaml: 2.8.0
+      yaml: 2.7.0
     optionalDependencies:
-      postcss: 8.5.6
+      postcss: 8.5.2
 
-  postcss-nested@6.2.0(postcss@8.5.6):
+  postcss-nested@6.2.0(postcss@8.5.2):
     dependencies:
-      postcss: 8.5.6
+      postcss: 8.5.2
       postcss-selector-parser: 6.1.2
 
   postcss-selector-parser@6.1.2:
@@ -5636,37 +5407,31 @@
 
   postcss-value-parser@4.2.0: {}
 
-  postcss@8.5.20:
+  postcss@8.5.2:
     dependencies:
-      nanoid: 3.3.16
+      nanoid: 3.3.8
       picocolors: 1.1.1
       source-map-js: 1.2.1
 
-  postcss@8.5.6:
-    dependencies:
-      nanoid: 3.3.11
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  preact@10.26.9: {}
+  preact@10.26.2: {}
 
   prelude-ls@1.2.1: {}
 
-  prettier-linter-helpers@1.0.1:
+  prettier-linter-helpers@1.0.0:
     dependencies:
       fast-diff: 1.3.0
 
-  prettier@3.9.5: {}
+  prettier@3.5.1: {}
 
   pretty-ms@9.2.0:
     dependencies:
       parse-ms: 4.0.0
 
-  prismjs@1.30.0: {}
+  prismjs@1.29.0: {}
 
   proto-list@1.2.4: {}
 
-  proxy-from-env@2.1.0: {}
+  proxy-from-env@1.1.0: {}
 
   punycode@2.3.1: {}
 
@@ -5682,6 +5447,8 @@
 
   readdirp@4.1.2: {}
 
+  regenerator-runtime@0.14.1: {}
+
   require-directory@2.1.1: {}
 
   resolve-from@4.0.0: {}
@@ -5692,43 +5459,42 @@
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
 
-  reusify@1.1.0: {}
+  reusify@1.0.4: {}
 
   rfdc@1.4.1: {}
 
-  rollup-plugin-visualizer@5.14.0(rollup@4.45.1):
+  rollup-plugin-visualizer@5.14.0(rollup@4.34.8):
     dependencies:
       open: 8.4.2
-      picomatch: 4.0.3
+      picomatch: 4.0.2
       source-map: 0.7.4
       yargs: 17.7.2
     optionalDependencies:
-      rollup: 4.45.1
+      rollup: 4.34.8
 
-  rollup@4.45.1:
+  rollup@4.34.8:
     dependencies:
-      '@types/estree': 1.0.8
+      '@types/estree': 1.0.6
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.45.1
-      '@rollup/rollup-android-arm64': 4.45.1
-      '@rollup/rollup-darwin-arm64': 4.45.1
-      '@rollup/rollup-darwin-x64': 4.45.1
-      '@rollup/rollup-freebsd-arm64': 4.45.1
-      '@rollup/rollup-freebsd-x64': 4.45.1
-      '@rollup/rollup-linux-arm-gnueabihf': 4.45.1
-      '@rollup/rollup-linux-arm-musleabihf': 4.45.1
-      '@rollup/rollup-linux-arm64-gnu': 4.45.1
-      '@rollup/rollup-linux-arm64-musl': 4.45.1
-      '@rollup/rollup-linux-loongarch64-gnu': 4.45.1
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1
-      '@rollup/rollup-linux-riscv64-gnu': 4.45.1
-      '@rollup/rollup-linux-riscv64-musl': 4.45.1
-      '@rollup/rollup-linux-s390x-gnu': 4.45.1
-      '@rollup/rollup-linux-x64-gnu': 4.45.1
-      '@rollup/rollup-linux-x64-musl': 4.45.1
-      '@rollup/rollup-win32-arm64-msvc': 4.45.1
-      '@rollup/rollup-win32-ia32-msvc': 4.45.1
-      '@rollup/rollup-win32-x64-msvc': 4.45.1
+      '@rollup/rollup-android-arm-eabi': 4.34.8
+      '@rollup/rollup-android-arm64': 4.34.8
+      '@rollup/rollup-darwin-arm64': 4.34.8
+      '@rollup/rollup-darwin-x64': 4.34.8
+      '@rollup/rollup-freebsd-arm64': 4.34.8
+      '@rollup/rollup-freebsd-x64': 4.34.8
+      '@rollup/rollup-linux-arm-gnueabihf': 4.34.8
+      '@rollup/rollup-linux-arm-musleabihf': 4.34.8
+      '@rollup/rollup-linux-arm64-gnu': 4.34.8
+      '@rollup/rollup-linux-arm64-musl': 4.34.8
+      '@rollup/rollup-linux-loongarch64-gnu': 4.34.8
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
+      '@rollup/rollup-linux-riscv64-gnu': 4.34.8
+      '@rollup/rollup-linux-s390x-gnu': 4.34.8
+      '@rollup/rollup-linux-x64-gnu': 4.34.8
+      '@rollup/rollup-linux-x64-musl': 4.34.8
+      '@rollup/rollup-win32-arm64-msvc': 4.34.8
+      '@rollup/rollup-win32-ia32-msvc': 4.34.8
+      '@rollup/rollup-win32-x64-msvc': 4.34.8
       fsevents: 2.3.3
 
   run-applescript@7.0.0: {}
@@ -5740,7 +5506,7 @@
   sass@1.81.0:
     dependencies:
       chokidar: 4.0.3
-      immutable: 5.1.3
+      immutable: 5.0.3
       source-map-js: 1.2.1
     optionalDependencies:
       '@parcel/watcher': 2.5.1
@@ -5753,9 +5519,7 @@
 
   semver@6.3.1: {}
 
-  semver@7.7.2: {}
-
-  semver@7.8.5: {}
+  semver@7.7.1: {}
 
   shebang-command@2.0.0:
     dependencies:
@@ -5767,7 +5531,7 @@
 
   sirv@3.0.1:
     dependencies:
-      '@polka/url': 1.0.0-next.29
+      '@polka/url': 1.0.0-next.28
       mrmime: 2.0.1
       totalist: 3.0.1
 
@@ -5783,6 +5547,24 @@
       tiny-warning: 1.0.3
 
   snabbdom@3.6.2: {}
+
+  socket.io-client@4.8.1:
+    dependencies:
+      '@socket.io/component-emitter': 3.1.2
+      debug: 4.3.7
+      engine.io-client: 6.6.3
+      socket.io-parser: 4.2.4
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
+
+  socket.io-parser@4.2.4:
+    dependencies:
+      '@socket.io/component-emitter': 3.1.2
+      debug: 4.3.7
+    transitivePeerDependencies:
+      - supports-color
 
   sortablejs@1.14.0: {}
 
@@ -5833,12 +5615,12 @@
 
   sucrase@3.35.0:
     dependencies:
-      '@jridgewell/gen-mapping': 0.3.12
+      '@jridgewell/gen-mapping': 0.3.8
       commander: 4.1.1
       glob: 10.4.5
       lines-and-columns: 1.2.4
       mz: 2.7.0
-      pirates: 4.0.7
+      pirates: 4.0.6
       ts-interface-checker: 0.1.13
 
   superjson@2.2.2:
@@ -5851,21 +5633,24 @@
 
   supports-preserve-symlinks-flag@1.0.0: {}
 
+  svg-tags@1.0.0: {}
+
   svgo@3.3.2:
     dependencies:
       '@trysound/sax': 0.2.0
       commander: 7.2.0
-      css-select: 5.2.2
+      css-select: 5.1.0
       css-tree: 2.3.1
-      css-what: 6.2.2
+      css-what: 6.1.0
       csso: 5.0.5
       picocolors: 1.1.1
 
-  synckit@0.11.13:
+  synckit@0.9.2:
     dependencies:
-      '@pkgr/core': 0.3.6
+      '@pkgr/core': 0.1.1
+      tslib: 2.8.1
 
-  tailwindcss@3.4.19:
+  tailwindcss@3.4.17:
     dependencies:
       '@alloc/quick-lru': 5.2.0
       arg: 5.0.2
@@ -5881,21 +5666,21 @@
       normalize-path: 3.0.0
       object-hash: 3.0.0
       picocolors: 1.1.1
-      postcss: 8.5.6
-      postcss-import: 15.1.0(postcss@8.5.6)
-      postcss-js: 4.0.1(postcss@8.5.6)
-      postcss-load-config: 4.0.2(postcss@8.5.6)
-      postcss-nested: 6.2.0(postcss@8.5.6)
+      postcss: 8.5.2
+      postcss-import: 15.1.0(postcss@8.5.2)
+      postcss-js: 4.0.1(postcss@8.5.2)
+      postcss-load-config: 4.0.2(postcss@8.5.2)
+      postcss-nested: 6.2.0(postcss@8.5.2)
       postcss-selector-parser: 6.1.2
       resolve: 1.22.10
       sucrase: 3.35.0
     transitivePeerDependencies:
       - ts-node
 
-  terser@5.49.0:
+  terser@5.39.0:
     dependencies:
-      '@jridgewell/source-map': 0.3.10
-      acorn: 8.15.0
+      '@jridgewell/source-map': 0.3.6
+      acorn: 8.14.0
       commander: 2.20.3
       source-map-support: 0.5.21
 
@@ -5909,28 +5694,21 @@
 
   tiny-warning@1.0.3: {}
 
-  tinyglobby@0.2.17:
-    dependencies:
-      fdir: 6.5.0(picomatch@4.0.5)
-      picomatch: 4.0.5
-
   to-regex-range@5.0.1:
     dependencies:
       is-number: 7.0.0
 
   totalist@3.0.1: {}
 
-  ts-api-utils@2.1.0(typescript@5.5.4):
-    dependencies:
-      typescript: 5.5.4
-
-  ts-api-utils@2.5.0(typescript@5.5.4):
+  ts-api-utils@2.0.1(typescript@5.5.4):
     dependencies:
       typescript: 5.5.4
 
   ts-interface-checker@0.1.13: {}
 
   tslib@2.3.0: {}
+
+  tslib@2.8.1: {}
 
   type-check@0.4.0:
     dependencies:
@@ -5940,13 +5718,12 @@
 
   type@2.7.3: {}
 
-  typescript-eslint@8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4):
+  typescript-eslint@8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4))(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.5.4)
-      '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@1.21.7))(typescript@5.5.4)
-      eslint: 9.39.5(jiti@1.21.7)
+      '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4))(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.7))(typescript@5.5.4)
+      eslint: 9.20.1(jiti@1.21.7)
       typescript: 5.5.4
     transitivePeerDependencies:
       - supports-color
@@ -5955,9 +5732,9 @@
 
   ua-parser-js@1.0.37: {}
 
-  ufo@1.6.1: {}
+  ufo@1.5.4: {}
 
-  undici-types@6.21.0: {}
+  undici-types@6.19.8: {}
 
   unicorn-magic@0.3.0: {}
 
@@ -5965,12 +5742,12 @@
 
   unplugin@1.16.1:
     dependencies:
-      acorn: 8.15.0
+      acorn: 8.14.0
       webpack-virtual-modules: 0.6.2
 
-  update-browserslist-db@1.2.3(browserslist@4.28.6):
+  update-browserslist-db@1.1.2(browserslist@4.24.4):
     dependencies:
-      browserslist: 4.28.6
+      browserslist: 4.24.4
       escalade: 3.2.0
       picocolors: 1.1.1
 
@@ -5980,163 +5757,153 @@
 
   util-deprecate@1.0.2: {}
 
-  vite-hot-client@2.2.0(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)):
+  vite-hot-client@0.2.4(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)):
     dependencies:
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
 
-  vite-plugin-compression@0.5.1(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)):
+  vite-plugin-compression@0.5.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)):
     dependencies:
       chalk: 4.1.2
-      debug: 4.4.1
+      debug: 4.4.0
       fs-extra: 10.1.0
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-inspect@0.8.9(rollup@4.45.1)(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)):
+  vite-plugin-inspect@0.8.9(rollup@4.34.8)(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.2.0(rollup@4.45.1)
-      debug: 4.4.1
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
+      debug: 4.4.0
       error-stack-parser-es: 0.1.5
       fs-extra: 11.3.0
-      open: 10.2.0
+      open: 10.1.0
       perfect-debounce: 1.0.0
       picocolors: 1.1.1
       sirv: 3.0.1
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-vue-devtools@7.7.10(rollup@4.45.1)(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4)):
+  vite-plugin-vue-devtools@7.7.2(rollup@4.34.8)(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4)):
     dependencies:
-      '@vue/devtools-core': 7.7.10(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))(vue@3.5.40(typescript@5.5.4))
-      '@vue/devtools-kit': 7.7.10
-      '@vue/devtools-shared': 7.7.10
-      execa: 9.6.0
+      '@vue/devtools-core': 7.7.2(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))(vue@3.5.13(typescript@5.5.4))
+      '@vue/devtools-kit': 7.7.2
+      '@vue/devtools-shared': 7.7.2
+      execa: 9.5.2
       sirv: 3.0.1
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
-      vite-plugin-inspect: 0.8.9(rollup@4.45.1)(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))
-      vite-plugin-vue-inspector: 5.3.2(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0))
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
+      vite-plugin-inspect: 0.8.9(rollup@4.34.8)(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))
+      vite-plugin-vue-inspector: 5.3.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0))
     transitivePeerDependencies:
       - '@nuxt/kit'
       - rollup
       - supports-color
       - vue
 
-  vite-plugin-vue-inspector@5.3.2(vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)):
+  vite-plugin-vue-inspector@5.3.1(vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)):
     dependencies:
-      '@babel/core': 7.28.0
-      '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.0)
-      '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.0)
-      '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0)
-      '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0)
-      '@vue/compiler-dom': 3.5.18
+      '@babel/core': 7.26.9
+      '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9)
+      '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9)
+      '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9)
+      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.9)
+      '@vue/compiler-dom': 3.5.13
       kolorist: 1.8.0
       magic-string: 0.30.17
-      vite: 5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0)
+      vite: 5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0)
     transitivePeerDependencies:
       - supports-color
 
-  vite@5.4.19(@types/node@20.19.43)(sass@1.81.0)(terser@5.49.0):
+  vite@5.4.14(@types/node@20.17.19)(sass@1.81.0)(terser@5.39.0):
     dependencies:
       esbuild: 0.21.5
-      postcss: 8.5.6
-      rollup: 4.45.1
+      postcss: 8.5.2
+      rollup: 4.34.8
     optionalDependencies:
-      '@types/node': 20.19.43
+      '@types/node': 20.17.19
       fsevents: 2.3.3
       sass: 1.81.0
-      terser: 5.49.0
+      terser: 5.39.0
 
   vscode-uri@3.1.0: {}
 
-  vue-component-type-helpers@3.3.7: {}
+  vue-component-type-helpers@2.2.2: {}
 
-  vue-demi@0.13.11(vue@3.5.40(typescript@5.5.4)):
+  vue-component-type-helpers@3.3.8: {}
+
+  vue-demi@0.13.11(vue@3.5.13(typescript@5.5.4)):
     dependencies:
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
-  vue-demi@0.14.10(vue@3.5.40(typescript@5.5.4)):
+  vue-demi@0.14.10(vue@3.5.13(typescript@5.5.4)):
     dependencies:
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
-  vue-echarts@7.0.3(@vue/runtime-core@3.5.18)(echarts@5.6.0)(vue@3.5.40(typescript@5.5.4)):
+  vue-echarts@7.0.3(@vue/runtime-core@3.5.13)(echarts@5.6.0)(vue@3.5.13(typescript@5.5.4)):
     dependencies:
       echarts: 5.6.0
-      vue: 3.5.40(typescript@5.5.4)
-      vue-demi: 0.13.11(vue@3.5.40(typescript@5.5.4))
+      vue: 3.5.13(typescript@5.5.4)
+      vue-demi: 0.13.11(vue@3.5.13(typescript@5.5.4))
     optionalDependencies:
-      '@vue/runtime-core': 3.5.18
+      '@vue/runtime-core': 3.5.13
     transitivePeerDependencies:
       - '@vue/composition-api'
 
-  vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@1.21.7)):
+  vue-eslint-parser@9.4.3(eslint@9.20.1(jiti@1.21.7)):
     dependencies:
-      debug: 4.4.1
-      eslint: 9.39.5(jiti@1.21.7)
-      eslint-scope: 9.1.2
-      eslint-visitor-keys: 5.0.1
-      espree: 11.2.0
-      esquery: 1.7.0
-      semver: 7.8.5
-    transitivePeerDependencies:
-      - supports-color
-
-  vue-eslint-parser@9.4.3(eslint@9.39.5(jiti@1.21.7)):
-    dependencies:
-      debug: 4.4.1
-      eslint: 9.39.5(jiti@1.21.7)
+      debug: 4.4.0
+      eslint: 9.20.1(jiti@1.21.7)
       eslint-scope: 7.2.2
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
       esquery: 1.6.0
       lodash: 4.17.21
-      semver: 7.7.2
+      semver: 7.7.1
     transitivePeerDependencies:
       - supports-color
 
-  vue-i18n@11.1.10(vue@3.5.40(typescript@5.5.4)):
+  vue-i18n@11.1.1(vue@3.5.13(typescript@5.5.4)):
     dependencies:
-      '@intlify/core-base': 11.1.10
-      '@intlify/shared': 11.1.10
+      '@intlify/core-base': 11.1.1
+      '@intlify/shared': 11.1.1
       '@vue/devtools-api': 6.6.4
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
-  vue-router@4.6.4(vue@3.5.40(typescript@5.5.4)):
+  vue-router@4.5.0(vue@3.5.13(typescript@5.5.4)):
     dependencies:
       '@vue/devtools-api': 6.6.4
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
-  vue-tianditu2@3.0.1(vue@3.5.40(typescript@5.5.4)):
+  vue-tianditu2@3.0.1(vue@3.5.13(typescript@5.5.4)):
     dependencies:
       mitt: 3.0.1
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
-  vue-tsc@2.2.12(typescript@5.5.4):
+  vue-tsc@2.2.2(typescript@5.5.4):
     dependencies:
-      '@volar/typescript': 2.4.15
-      '@vue/language-core': 2.2.12(typescript@5.5.4)
+      '@volar/typescript': 2.4.11
+      '@vue/language-core': 2.2.2(typescript@5.5.4)
       typescript: 5.5.4
 
-  vue@3.5.40(typescript@5.5.4):
+  vue@3.5.13(typescript@5.5.4):
     dependencies:
-      '@vue/compiler-dom': 3.5.40
-      '@vue/compiler-sfc': 3.5.40
-      '@vue/runtime-dom': 3.5.40
-      '@vue/server-renderer': 3.5.40
-      '@vue/shared': 3.5.40
+      '@vue/compiler-dom': 3.5.13
+      '@vue/compiler-sfc': 3.5.13
+      '@vue/runtime-dom': 3.5.13
+      '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.5.4))
+      '@vue/shared': 3.5.13
     optionalDependencies:
       typescript: 5.5.4
 
-  vuedraggable@4.1.0(vue@3.5.40(typescript@5.5.4)):
+  vuedraggable@4.1.0(vue@3.5.13(typescript@5.5.4)):
     dependencies:
       sortablejs: 1.14.0
-      vue: 3.5.40(typescript@5.5.4)
+      vue: 3.5.13(typescript@5.5.4)
 
-  web-streams-polyfill@3.0.3: {}
+  web-streams-polyfill@3.3.3: {}
 
   webpack-virtual-modules@0.6.2: {}
 
@@ -6164,9 +5931,7 @@
       string-width: 5.1.2
       strip-ansi: 7.1.0
 
-  wsl-utils@0.1.0:
-    dependencies:
-      is-wsl: 3.1.0
+  ws@8.17.1: {}
 
   xlsx@0.18.5:
     dependencies:
@@ -6180,16 +5945,19 @@
 
   xml-name-validator@4.0.0: {}
 
+  xmlhttprequest-ssl@2.1.2: {}
+
   y18n@5.0.8: {}
 
   yallist@3.1.1: {}
 
-  yaml-eslint-parser@1.3.0:
+  yaml-eslint-parser@1.2.3:
     dependencies:
       eslint-visitor-keys: 3.4.3
-      yaml: 2.8.0
+      lodash: 4.17.21
+      yaml: 2.7.0
 
-  yaml@2.8.0: {}
+  yaml@2.7.0: {}
 
   yargs-parser@21.1.1: {}
 
diff --git a/src/config/index.ts b/src/config/index.ts
index 3844c5d..48e9516 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -55,6 +55,11 @@
 		token: []
 	},
 
+	// 楂樺痉鍦板浘閰嶇疆
+	amap: {
+		key: ''
+	},
+
 	// 褰撳墠鐜
 	...(isDev ? dev : prod)
 };
diff --git a/src/modules/app/views/complain.vue b/src/modules/app/views/complain.vue
new file mode 100644
index 0000000..7883b4d
--- /dev/null
+++ b/src/modules/app/views/complain.vue
@@ -0,0 +1,148 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+
+			<cl-filter label="鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="120" />
+			</cl-filter>
+
+			<cl-filter label="鎶曡瘔绫诲瀷">
+				<cl-select :options="options.type" prop="type" :width="120" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鑱旂郴鏂瑰紡銆佺敤鎴枫�佸鐞嗕汉" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="app-complain" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { reactive, computed } from "vue";
+import { useDict } from "/$/dict";
+
+const { service } = useCool();
+const { dict } = useDict();
+
+const options = reactive({
+	status: [
+		{
+			label: "鏈鐞�",
+			value: 0,
+			type: "warning"
+		},
+		{
+			label: "宸插鐞�",
+			value: 1
+		}
+	],
+	type: computed(() => {
+		return dict.get("complainType");
+	})
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	props: {
+		labelWidth: 80
+	},
+	items: [
+		{
+			prop: "status",
+			label: "鐘舵��",
+			component: { name: "el-radio-group", options: options.status },
+			required: true
+		},
+		{
+			prop: "remark",
+			label: "澶勭悊缁撴灉",
+			component: {
+				name: "el-input",
+				props: {
+					type: "textarea",
+					rows: 4
+				}
+			}
+		}
+	]
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: "index", label: "#", width: 60 },
+		{ prop: "avatarUrl", label: "澶村儚", component: { name: "cl-avatar" }, minWidth: 80 },
+		{ prop: "nickName", label: "鐢ㄦ埛", minWidth: 120 },
+		{ prop: "contact", label: "鑱旂郴鏂瑰紡", minWidth: 120 },
+		{
+			prop: "content",
+			label: "鍐呭",
+			component: { name: "cl-editor-preview", props: { name: "wang" } },
+			minWidth: 120
+		},
+		{
+			prop: "images",
+			label: "鍥剧墖",
+			component: { name: "cl-image", props: { size: 60 } },
+			minWidth: 100
+		},
+		{
+			prop: "type",
+			label: "绫诲瀷",
+			dict: options.type,
+			dictFormatter(arr) {
+				return arr.map((e) => e.label).join("銆�");
+			},
+			minWidth: 120
+		},
+		{ prop: "status", label: "鐘舵��", dict: options.status, minWidth: 100 },
+		{ prop: "handlerName", label: "澶勭悊浜�", minWidth: 120 },
+		{ prop: "remark", label: "澶勭悊缁撴灉", showOverflowTooltip: true, minWidth: 200 },
+		{ prop: "createTime", label: "鍒涘缓鏃堕棿", sortable: "desc", minWidth: 160 },
+		{ prop: "updateTime", label: "鏇存柊鏃堕棿", sortable: "custom", minWidth: 160 },
+		{
+			type: "op",
+			width: 120,
+			buttons({ scope }) {
+				if (scope.row.status == 0) {
+					return ["edit"];
+				}
+				return [];
+			}
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		dict: {
+			label: {
+				update: "澶勭悊"
+			}
+		},
+		service: service.app.complain
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>
diff --git a/src/modules/app/views/feedback.vue b/src/modules/app/views/feedback.vue
new file mode 100644
index 0000000..22fe925
--- /dev/null
+++ b/src/modules/app/views/feedback.vue
@@ -0,0 +1,148 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+
+			<cl-filter label="鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="120" />
+			</cl-filter>
+
+			<cl-filter label="鍙嶉绫诲瀷">
+				<cl-select :options="options.type" prop="type" :width="120" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鑱旂郴鏂瑰紡銆佺敤鎴枫�佸鐞嗕汉" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="app-feedback" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { computed, reactive } from "vue";
+import { useDict } from "/$/dict";
+
+const { service } = useCool();
+const { dict } = useDict();
+
+const options = reactive({
+	status: [
+		{
+			label: "鏈鐞�",
+			value: 0,
+			type: "warning"
+		},
+		{
+			label: "宸插鐞�",
+			value: 1
+		}
+	],
+	type: computed(() => {
+		return dict.get("feedbackType");
+	})
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	props: {
+		labelWidth: 80
+	},
+	items: [
+		{
+			prop: "status",
+			label: "鐘舵��",
+			component: { name: "el-radio-group", options: options.status },
+			required: true
+		},
+		{
+			prop: "remark",
+			label: "澶勭悊缁撴灉",
+			component: {
+				name: "el-input",
+				props: {
+					type: "textarea",
+					rows: 4
+				}
+			}
+		}
+	]
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: "index", label: "#", width: 60 },
+		{ prop: "avatarUrl", label: "澶村儚", component: { name: "cl-avatar" }, minWidth: 80 },
+		{ prop: "nickName", label: "鐢ㄦ埛", minWidth: 120 },
+		{ prop: "contact", label: "鑱旂郴鏂瑰紡", minWidth: 120 },
+		{
+			prop: "content",
+			label: "鍐呭",
+			component: { name: "cl-editor-preview", props: { name: "wang" } },
+			minWidth: 120
+		},
+		{
+			prop: "images",
+			label: "鍥剧墖",
+			component: { name: "cl-image", props: { size: 60 } },
+			minWidth: 100
+		},
+		{
+			prop: "type",
+			label: "绫诲瀷",
+			dict: options.type,
+			dictFormatter(arr) {
+				return arr.map((e) => e.label).join("銆�");
+			},
+			minWidth: 120
+		},
+		{ prop: "status", label: "鐘舵��", dict: options.status, minWidth: 100 },
+		{ prop: "handlerName", label: "澶勭悊浜�", minWidth: 120 },
+		{ prop: "remark", label: "澶勭悊缁撴灉", showOverflowTooltip: true, minWidth: 200 },
+		{ prop: "createTime", label: "鍒涘缓鏃堕棿", sortable: "desc", minWidth: 160 },
+		{ prop: "updateTime", label: "鏇存柊鏃堕棿", sortable: "custom", minWidth: 160 },
+		{
+			type: "op",
+			width: 120,
+			buttons({ scope }) {
+				if (scope.row.status == 0) {
+					return ["edit"];
+				}
+				return [];
+			}
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.app.feedback,
+		dict: {
+			label: {
+				update: "澶勭悊"
+			}
+		}
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>
diff --git a/src/modules/app/views/goods.vue b/src/modules/app/views/goods.vue
new file mode 100644
index 0000000..af440fe
--- /dev/null
+++ b/src/modules/app/views/goods.vue
@@ -0,0 +1,188 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+
+			<cl-filter label="鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="120" />
+			</cl-filter>
+
+			<cl-filter label="绫诲瀷">
+				<cl-select :options="options.type" prop="type" :width="120" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鏍囬" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table">
+				<template #column-tagColor="{ scope }">
+					<!-- 鏄剧ず棰滆壊 -->
+					<div
+						:style="{
+							backgroundColor: scope.row.tagColor,
+							height: '10px',
+							width: '10px',
+							borderRadius: '100%',
+							margin: 'auto'
+						}"
+					/>
+				</template>
+			</cl-table>
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="app-goods" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { reactive } from "vue";
+
+const { service } = useCool();
+
+const options = reactive({
+	status: [
+		{
+			label: "鍚敤",
+			value: 1
+		},
+		{
+			label: "绂佺敤",
+			value: 0
+		}
+	],
+	type: [
+		{ label: "澶�", value: 0 },
+		{ label: "鏈�", value: 1, type: "success" },
+		{ label: "骞�", value: 2, type: "warning" }
+	]
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	items: [
+		{ prop: "title", label: "鏍囬", required: true, component: { name: "el-input" } },
+		{
+			prop: "description",
+			label: "鎻忚堪",
+			component: {
+				name: "el-input",
+				props: {
+					type: "textarea",
+					rows: 3
+				}
+			}
+		},
+		{
+			span: 12,
+			required: true,
+			prop: "price",
+			label: "浠锋牸",
+			hook: { bind: ["number"] },
+			component: { name: "el-input-number", props: { min: 0 } }
+		},
+		{
+			required: true,
+			span: 12,
+			prop: "originalPrice",
+			label: "鍘熶环",
+			hook: { bind: ["number"] },
+			component: { name: "el-input-number", props: { min: 0 } }
+		},
+		{
+			span: 12,
+			prop: "type",
+			label: "绫诲瀷",
+			component: {
+				name: "el-radio-group",
+				options: options.type
+			},
+			value: 0,
+			required: true
+		},
+		{
+			span: 12,
+			prop: "duration",
+			label: "鏃堕暱",
+			required: true,
+			component: { name: "el-input-number", props: { min: 0 } }
+		},
+		{ span: 12, prop: "tag", label: "鏍囩", component: { name: "el-input" } },
+		{
+			span: 12,
+			prop: "tagColor",
+			label: "鏍囩棰滆壊",
+			value: "#26A7FD",
+			component: { name: "el-color-picker" }
+		},
+		{
+			value: 0,
+			prop: "sort",
+			label: "鎺掑簭",
+			hook: { bind: ["number"] },
+			component: { name: "el-input-number", props: { min: 0 } },
+			required: true
+		},
+		{
+			prop: "status",
+			flex: false,
+			value: 1,
+			label: "鐘舵��",
+			component: { name: "cl-switch" },
+			required: true
+		}
+	]
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: "selection" },
+		{ prop: "title", label: "鏍囬", minWidth: 150 },
+		{ prop: "price", label: "浠锋牸", minWidth: 120 },
+		{ prop: "originalPrice", label: "鍘熶环", minWidth: 120 },
+		{ prop: "description", label: "鎻忚堪", showOverflowTooltip: true, minWidth: 200 },
+		{ prop: "status", label: "鐘舵��", component: { name: "cl-switch" }, minWidth: 80 },
+		{ prop: "sort", label: "鎺掑簭", minWidth: 80 },
+		{
+			prop: "type",
+			label: "绫诲瀷",
+			dict: options.type,
+			minWidth: 80
+		},
+		{ prop: "duration", label: "鏃堕暱", minWidth: 80 },
+		{ prop: "tag", label: "鏍囩", minWidth: 150 },
+		{ prop: "tagColor", label: "鏍囩棰滆壊", minWidth: 100 },
+		{ prop: "createTime", label: "鍒涘缓鏃堕棿", sortable: "desc", minWidth: 160 },
+		{ prop: "updateTime", label: "鏇存柊鏃堕棿", sortable: "custom", minWidth: 160 },
+		{ type: "op", buttons: ["edit", "delete"] }
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.app.goods
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>
diff --git a/src/modules/app/views/version.vue b/src/modules/app/views/version.vue
new file mode 100644
index 0000000..7b83641
--- /dev/null
+++ b/src/modules/app/views/version.vue
@@ -0,0 +1,177 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+
+			<cl-filter label="鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="120" />
+			</cl-filter>
+
+			<cl-filter label="绫诲瀷">
+				<cl-select :options="options.type" prop="type" :width="120" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鍚嶇О銆佺増鏈�" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="app-version" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { useDict } from "/$/dict";
+import { computed, reactive } from "vue";
+
+const { service } = useCool();
+const { dict } = useDict();
+
+const options = reactive({
+	// 鐘舵��
+	status: [
+		{
+			label: "鍚敤",
+			value: 1,
+			type: "success"
+		},
+		{
+			label: "绂佺敤",
+			value: 0,
+			type: "danger"
+		}
+	],
+	// 绫诲瀷
+	type: computed(() => {
+		return dict.get("upgradeType");
+	})
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	items: [
+		{ span: 12, prop: "name", label: "鍚嶇О", required: true, component: { name: "el-input" } },
+		{
+			span: 12,
+			prop: "version",
+			label: "鐗堟湰鍙�",
+			required: true,
+			component: { name: "el-input" }
+		},
+		{
+			prop: "description",
+			label: "鎻忚堪",
+			required: true,
+			component: {
+				name: "el-input",
+				props: {
+					type: "textarea",
+					rows: 4
+				}
+			}
+		},
+		{
+			prop: "type",
+			label: "绫诲瀷",
+			value: 0,
+			component: { name: "el-radio-group", options: options.type },
+			required: true
+		},
+		{
+			prop: "url",
+			label: "涓嬭浇鍦板潃",
+			component: { name: "cl-upload", props: { type: "file", limit: 1 } },
+			required: true
+		},
+		{
+			prop: "hotUpdate",
+			label: "鐑洿鏂�",
+			flex: false,
+			value: 0,
+			component: {
+				name: "cl-switch"
+			},
+			required: true
+		},
+		{
+			prop: "forceUpdate",
+			label: "寮哄埗鏇存柊",
+			flex: false,
+			value: 0,
+			component: {
+				name: "cl-switch"
+			},
+			required: true
+		},
+		{
+			prop: "status",
+			label: "鐘舵��",
+			value: 1,
+			flex: false,
+			component: { name: "cl-switch" },
+			required: true
+		}
+	]
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: "selection" },
+		{ prop: "name", label: "鍚嶇О", minWidth: 150 },
+		{ prop: "version", label: "鐗堟湰鍙�", minWidth: 100 },
+		{ prop: "type", label: "绫诲瀷", dict: options.type, minWidth: 100 },
+		{ prop: "url", label: "涓嬭浇鍦板潃", component: { name: "cl-link" }, minWidth: 120 },
+		{
+			prop: "forceUpdate",
+			label: "寮哄埗鏇存柊",
+			formatter(row) {
+				return row.forceUpdate ? "鏄�" : "鍚�";
+			},
+			minWidth: 100
+		},
+		{
+			prop: "hotUpdate",
+			label: "鐑洿鏂�",
+			formatter(row) {
+				return row.hotUpdate ? "鏄�" : "鍚�";
+			},
+			minWidth: 100
+		},
+		{ prop: "status", label: "鐘舵��", component: { name: "cl-switch" }, minWidth: 100 },
+		{ prop: "description", label: "鎻忚堪", showOverflowTooltip: true, minWidth: 200 },
+		{ prop: "createTime", label: "鍒涘缓鏃堕棿", sortable: "desc", minWidth: 160 },
+		{ prop: "updateTime", label: "鏇存柊鏃堕棿", sortable: "custom", minWidth: 160 },
+		{ type: "op", buttons: ["edit", "delete"] }
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.app.version
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>
diff --git a/src/modules/base/static/css/animation.scss b/src/modules/base/static/css/animation.scss
new file mode 100644
index 0000000..65b8453
--- /dev/null
+++ b/src/modules/base/static/css/animation.scss
@@ -0,0 +1,29 @@
+@keyframes dou {
+	0% {
+		transform: rotate(0);
+	}
+	11% {
+		transform: rotate(7.61deg);
+	}
+	23% {
+		transform: rotate(-5.8deg);
+	}
+	36% {
+		transform: rotate(3.35deg);
+	}
+	49% {
+		transform: rotate(-1.9deg);
+	}
+	62% {
+		transform: rotate(1.12deg);
+	}
+	75% {
+		transform: rotate(-0.64deg);
+	}
+	88% {
+		transform: rotate(0.37deg);
+	}
+	100% {
+		transform: rotate(-0.28deg);
+	}
+}
diff --git a/src/modules/base/static/svg/icon-command.svg b/src/modules/base/static/svg/icon-command.svg
new file mode 100644
index 0000000..172c809
--- /dev/null
+++ b/src/modules/base/static/svg/icon-command.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441314533" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9317" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M478.176 454.848c-17.12 0-33.184 6.656-45.248 18.72-24.928 24.96-24.928 65.568 0 90.592 24.128 24.096 66.304 24.064 90.496-0.032 12.096-12.096 18.752-28.16 18.752-45.28s-6.656-33.184-18.752-45.28c-12.064-12.096-28.096-18.72-45.248-18.72zM512 63.968c-247.04 0-448 172.256-448 384 0 116.48 63.008 226.048 170.592 298.944l87.328 71.52c-3.904 19.328-17.408 60.096-32.64 97.536-4.928 12.096-1.984 25.984 7.36 35.072a32.049 32.049 0 0 0 22.272 8.992c4.384 0 8.8-0.896 12.992-2.752 36.416-16.224 147.488-68.96 187.584-125.376C763.104 828.448 960 657.568 960 447.968c0-211.744-200.96-384-448-384z m214.624 334.656c12.512 12.512 12.512 32.736 0 45.248-6.24 6.24-14.432 9.376-22.624 9.376s-16.384-3.136-22.624-9.376l-39.84-39.84-52.288 52.288c10.688 18.944 16.896 40.128 16.928 62.496 0.032 34.24-13.312 66.4-37.504 90.592-24.16 24.16-56.288 37.472-90.496 37.472-34.176 0-66.336-13.312-90.496-37.472-49.888-49.984-49.888-131.2 0-181.056 24.16-24.16 56.288-37.472 90.496-37.472 24.032 0 46.912 6.912 66.848 19.2l136.352-136.352c12.512-12.512 32.736-12.512 45.248 0s12.512 32.736 0 45.248l-39.84 39.84 39.84 39.808z" p-id="9318"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-fx.svg b/src/modules/base/static/svg/icon-fx.svg
new file mode 100644
index 0000000..02e7688
--- /dev/null
+++ b/src/modules/base/static/svg/icon-fx.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg
+	t="1695872084016"
+	class="icon"
+	viewBox="0 0 1024 1024"
+	version="1.1"
+	xmlns="http://www.w3.org/2000/svg"
+	p-id="3043"
+	xmlns:xlink="http://www.w3.org/1999/xlink"
+	width="64"
+	height="64"
+>
+	<path
+		d="M853.333333 85.333333H170.666667a86.570667 86.570667 0 0 0-85.333334 85.333334v682.666666a85.717333 85.717333 0 0 0 85.333334 85.333334h682.666666a86.186667 86.186667 0 0 0 85.333334-85.333334V170.666667a85.333333 85.333333 0 0 0-85.333334-85.333334zM170.666667 853.333333V170.666667h682.666666v682.666666z"
+		p-id="3044"
+	></path>
+	<path
+		d="M387.2 379.733333a61.781333 61.781333 0 0 1 61.781333-61.781333h19.114667a30.890667 30.890667 0 0 0 0-61.781333h-19.114667a123.733333 123.733333 0 0 0-123.733333 123.733333v304.512a30.890667 30.890667 0 1 0 61.781333 0z"
+		p-id="3045"
+	></path>
+	<path
+		d="M261.76 429.610667h217.728a27.392 27.392 0 0 1 31.146667 30.890666 27.392 27.392 0 0 1-31.146667 30.890667h-217.6a27.434667 27.434667 0 0 1-31.146667-30.890667 27.392 27.392 0 0 1 31.146667-30.890666z"
+		p-id="3046"
+	></path>
+	<path
+		d="M737.322667 331.008a30.890667 30.890667 0 0 0-26.88 15.445333l-61.781334 108.117334-61.781333-108.117334a30.890667 30.890667 0 1 0-53.461333 30.890667l80.341333 139.008-80.341333 139.008a30.890667 30.890667 0 1 0 53.461333 30.890667l61.781333-108.117334 61.781334 108.117334a30.890667 30.890667 0 1 0 53.461333-30.890667l-80.341333-139.008 80.341333-139.008a30.890667 30.890667 0 0 0-26.581333-46.336z"
+		p-id="3047"
+	></path>
+</svg>
diff --git a/src/modules/base/static/svg/icon-living.svg b/src/modules/base/static/svg/icon-living.svg
new file mode 100644
index 0000000..47fd717
--- /dev/null
+++ b/src/modules/base/static/svg/icon-living.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441325978" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10297" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M407.467 488.533a106.667 106.667 0 1 0 213.333 0 106.667 106.667 0 1 0-213.333 0z" p-id="10298"></path><path d="M512 64C264.533 64 64 264.533 64 512c0 236.8 183.467 428.8 416 445.867v-134.4c-53.333-59.734-200.533-230.4-200.533-334.934 0-130.133 104.533-234.666 234.666-234.666S748.8 358.4 748.8 488.533c0 61.867-49.067 153.6-145.067 270.934L544 827.733V960c232.533-17.067 416-211.2 416-448 0-247.467-200.533-448-448-448z" p-id="10299"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-message.svg b/src/modules/base/static/svg/icon-message.svg
new file mode 100644
index 0000000..0110fc8
--- /dev/null
+++ b/src/modules/base/static/svg/icon-message.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441267509" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5815" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 67.168c-247.04 0-448 172.256-448 384 0 116.512 63.04 226.048 174.048 301.408l84.16 52.032c-3.68 23.552-18.752 74.496-33.44 115.936-4.256 12.064-0.928 25.504 8.448 34.176a32.006 32.006 0 0 0 21.728 8.512c4.416 0 8.832-0.896 13.024-2.752 36.416-16.224 147.456-68.96 187.584-125.376C763.136 831.616 960 660.704 960 451.168c0-211.744-200.96-384-448-384z m68.224 476.8H384.96c-17.664 0-32-14.336-32-32s14.336-32 32-32h195.264c17.696 0 32 14.336 32 32s-14.304 32-32 32z m60.704-128H384.96c-17.664 0-32-14.336-32-32s14.336-32 32-32h255.968c17.696 0 32 14.336 32 32s-14.304 32-32 32z" p-id="5816"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-new.svg b/src/modules/base/static/svg/icon-new.svg
new file mode 100644
index 0000000..3ebc4bf
--- /dev/null
+++ b/src/modules/base/static/svg/icon-new.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441271889" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6095" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 63.68c-247.04 0-448 172.256-448 384 0 116.48 63.008 226.048 170.592 298.944l87.328 71.52c-3.904 19.328-17.408 60.096-32.64 97.536-4.928 12.096-1.984 25.984 7.36 35.072a32.049 32.049 0 0 0 22.272 8.992c4.384 0 8.8-0.896 12.992-2.752 36.416-16.224 147.488-68.96 187.616-125.376C763.136 828.16 960 657.248 960 447.68c0-211.712-200.96-384-448-384z m219.136 342.88l-128.8 188.864c-5.984 8.736-15.872 13.984-26.432 13.984h-0.448c-10.72-0.16-20.672-5.664-26.464-14.688l-91.584-142.208L385.824 592c-5.664 11.072-16.864 17.408-28.512 17.408-4.896 0-9.92-1.12-14.592-3.52-15.712-8.064-21.92-27.328-13.856-43.072L425.76 373.92a31.925 31.925 0 0 1 26.912-17.344c11.52-0.416 22.272 5.024 28.48 14.656l95.456 148.288L678.24 370.528c9.984-14.592 29.856-18.336 44.48-8.416 14.592 9.92 18.368 29.856 8.416 44.448z" p-id="6096"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-pending.svg b/src/modules/base/static/svg/icon-pending.svg
new file mode 100644
index 0000000..90be6b0
--- /dev/null
+++ b/src/modules/base/static/svg/icon-pending.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441252941" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4832" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M736 96c31.04 0 51.712 25.856 51.712 62.08v304.96c-129.28 0-232.64 103.36-227.456 232.576 0 113.728 77.504 206.784 180.928 227.456H115.712c-31.04 0-51.712-25.856-51.712-67.2V158.08c0-36.16 20.672-62.016 51.712-62.016z m43.072 413.568l10.88 0.32C883.328 515.392 960 591.872 960 687.808c0 99.648-82.688 183.552-180.928 183.552h-5.12a179.2 179.2 0 0 1-124.16-52.416c-10.24-10.496-15.424-15.744-20.608-26.24a5.888 5.888 0 0 0-0.832-3.072l-3.52-4.288-0.832-3.136a16 16 0 0 1-3.072-4.736l-4.224-11.52-3.072-4.672c0-5.248-5.12-10.496-5.12-15.744l-1.344-5.248c-1.536-3.52-3.84-7.04-3.84-10.496-5.12-10.496-5.12-26.24-5.12-36.736 0-26.24 5.12-47.168 15.424-68.16v-5.248c0-5.248 5.184-15.744 10.368-20.928 0-1.344 0.32-2.304 0.832-3.2l3.52-4.224 0.832-3.072c30.976-47.232 82.688-78.72 149.888-78.72z m0 52.416c-15.488 0-25.856 10.496-25.856 26.24v125.824c0 15.744 10.368 26.24 25.856 26.24H892.8c10.368 0 25.856-10.496 25.856-26.24 0-15.744-10.368-26.24-25.856-26.24h-87.872v-99.584c0-15.744-10.368-26.24-25.856-26.24zM394.88 468.16H198.4a40.768 40.768 0 0 0-41.344 41.408c0 20.672 15.488 41.344 36.16 41.344h196.48c25.792 0 46.464-15.552 46.464-41.344a40.768 40.768 0 0 0-41.344-41.408z m165.44-206.72H198.4a40.768 40.768 0 0 0-41.344 41.344c0 20.672 15.488 41.344 36.16 41.344h361.856a40.768 40.768 0 0 0 41.344-41.344c0-25.856-15.488-41.344-36.16-41.344z" p-id="4833"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-scan.svg b/src/modules/base/static/svg/icon-scan.svg
new file mode 100644
index 0000000..6e1e2c7
--- /dev/null
+++ b/src/modules/base/static/svg/icon-scan.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441290031" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7496" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M878.05658706 550.17593363c-3.09394647 0.78966835-6.93872514 0.86734064-10.61521382 0.86734064-101.25878361 0.05178153-202.53051259 0.05178153-303.78929621 0.03883615l-146.10158933 0.01294539c-87.48489639-0.01294539-174.95684741 0-262.45468918-0.01294539-20.49254083 0-38.5772405-14.52471941-41.15337166-33.07545284-3.21045491-22.9262728 8.15559111-41.71002311 28.94587575-47.82024375 3.90950558-1.15213906 8.78991486-1.70879052 14.90013552-1.70879052 90.61767902-0.03883615 181.23535803-0.03883615 271.85303704-0.05178153 142.81346213 0 290.48144276-0.01294539 435.74158222-0.16828997h0.06472691c29.29540109 0 42.3184561 20.02650706 44.55800731 37.16619377 2.64085808 20.1430155-11.10713837 39.37985422-31.94920455 44.75218805z m85.53014361 185.79213274c0 32.86832672-0.9061768 89.06423309-4.00012326 107.73147496-4.50499318 27.25003061-19.10738489 54.20231743-41.11453551 75.89877886-22.0977683 21.77413373-49.30896276 35.89754627-76.61077492 39.75527033-22.90038203 3.24929106-46.97879387 3.46936257-70.26753737 3.67648868-8.33682647 0.06472691-16.97139675 0.1423992-25.4635678 0.36247072-11.72851675 0.28479842-24.20786569 0.29774381-36.0399455-1.59228207-21.82591525-3.49525333-33.70977659-24.98458864-32.22105756-42.90099832 1.82529897-21.90358755 19.39218331-38.53840435 40.88151861-38.69374894 5.57945995-0.03883615 11.14597452-0.09061769 16.72543447-0.1423992 11.36604603-0.10356306 22.90038203-0.2200715 34.49944493-0.22007152 12.09098747 0 24.23375645 0.11650845 36.23412622 0.47897916 19.98767091 0.60843298 38.86203891-7.21057817 53.28319527-22.00715061 14.17519408-14.5376648 22.020096-34.27937343 20.98446538-52.81716148-1.17802983-21.15275536-0.86734064-42.95277985-0.55665146-64.02786291 0.11650845-7.2623597 0.2200715-14.78362706 0.27185303-22.18838598 0.1423992-23.18518045 13.32079882-39.74232494 35.23733177-44.28615427 10.7058315-2.22660583 22.74503743 0.93206755 32.23400295 8.44038953 9.83849086 7.78017502 15.43089619 19.10738489 15.76747616 31.88447763 0.09061769 4.22019476 0.15534459 11.54728139 0.15534459 20.64788543zM344.74565531 920.68573235c0.02589076 25.56713086-17.19146825 42.78448987-42.81038064 42.82332602-28.41511506 0.05178153-56.57132247 0.03883615-87.79558558 0.01294538-36.41536158-0.02589076-71.96338252-13.38552573-100.08075378-37.5933914-28.22093431-24.29848336-46.47392395-57.4516085-51.40611478-93.36210016-2.62791269-19.04265797-2.33016889-85.91850509-2.21366043-111.08432908 0.01294539-3.10689185 0.02589076-5.67007763 0.02589076-7.50832197 0.03883615-21.08802845 16.12994686-37.748736 38.27949669-39.63876189 1.00973985-0.09061769 2.04537047-0.12945383 3.0680557-0.12945382 15.34027852 0 33.10134361 9.50191091 38.56429512 31.52200692 1.52755517 6.13611141 1.56639131 13.08778192 1.61817283 20.4407593l0.01294539 1.69584515c0.11650845 14.21403022 0.10356306 28.6869681 0.0776723 42.69387218-0.01294539 12.582912-0.03883615 25.60596702 0.05178153 38.44778667 0.24596227 39.45752652 31.26309925 70.68178963 70.59117195 71.0830965 20.0653432 0.19418075 40.44137561 0.15534459 60.1442481 0.11650844 9.59252859-0.02589076 19.15916642-0.03883615 28.73874963-0.02589076 24.97164325 0 43.12106983 17.04906903 43.13401521 40.50610252z m0-818.14818766c-0.01294539 22.65441975-16.95845136 39.75527031-39.405745 39.75527033-9.45012939 0.01294539-18.874368 0-28.311552-0.01294539-18.58956958-0.03883615-37.80051753-0.06472691-56.73961244 0.0647269-37.95586213 0.25890765-67.22537245 22.12365906-76.3907034 57.07619241-1.50166439 5.70891378-1.7217359 11.3919368-1.73468129 16.71248909-0.05178153 11.18481067-0.01294539 22.53791131 0.01294539 33.51559584 0.05178153 18.70607803 0.11650845 38.07237057-0.20712612 57.03735626-0.33657995 18.9520403-7.87079269 31.35371694-23.068672 37.91702597-17.35975822 7.4824312-31.97509531 6.00665758-44.66157037-4.54382934-8.95820483-7.45654045-13.57970647-17.12674133-13.7091603-28.75169501-0.33657995-29.01060267-0.23301689-109.2719755 4.09074094-132.00406756 5.41116997-28.47984197 21.12686459-55.96288948 44.20848197-77.40044325 22.95216355-21.30809995 51.74269472-35.35384019 81.07693195-39.57403497 7.68955733-1.10035753 15.17198853-1.68289975 22.24016751-1.72173589 24.80335328-0.16828997 50.03390419-0.12945383 74.448896-0.10356306l19.04265798 0.02589076c10.88706686 0 20.80323003 4.14252247 27.89729974 11.66378983 7.23646894 7.65072118 11.22364682 18.43422498 11.21070144 30.34397708z m618.80223921 184.04450607c-0.02589076 6.58919981-0.06472691 13.16545422-0.0776723 19.74170865-0.05178153 21.02330153-15.19787931 39.58698035-34.51239032 42.24078379-21.73529758 3.0033288-40.77795555-10.14918005-46.30563398-31.93625915-0.64726914-2.57613117-0.73788682-5.74774992-0.75083219-8.77696948-0.03883615-13.42436187-0.02589076-26.83577837-0.01294538-40.26014026 0-17.1526321 0.01294539-34.90075181-0.06472692-52.33818231-0.16828997-32.53174676-20.1430155-60.31253808-49.69732425-69.10245294-7.83195653-2.33016889-16.67365294-3.57292563-26.25323615-3.68943408-13.02305502-0.15534459-26.14967309-0.19418075-39.14683733-0.19418073-6.92577975 0-13.81272336 0.01294539-20.62199467 0.02589077-10.01972622 0.01294539-20.05239783 0.02589076-30.07212405 0.01294537-20.2983601-0.03883615-38.24066053-19.04265797-38.39600513-40.67439249-0.09061769-10.73172227 4.42732089-21.50228069 12.38873126-29.56725412 7.28825047-7.37886815 16.36296375-11.46960909 25.61891239-11.52139061 7.02934282-0.03883615 13.82566875-0.05178153 20.3760324-0.05178154 56.58426785 0 94.87670992 1.38515595 108.76710558 4.00012326 56.22179714 10.55048691 104.55985619 59.85944969 114.95499852 117.20749511 2.12304276 11.68968059 3.2881272 24.44088257 3.57292563 38.96560197 0.42719763 21.90358755 0.33657995 44.28615427 0.23301689 65.91788879z" p-id="7497"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-system.svg b/src/modules/base/static/svg/icon-system.svg
new file mode 100644
index 0000000..a370d13
--- /dev/null
+++ b/src/modules/base/static/svg/icon-system.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614441320870" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9877" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M956.17988281 446.79003906c-3.50683594-19.66376953-22.35234375-39.46289063-41.85175781-43.92597656l-14.45800781-3.34248047c-34.29140625-10.35351563-64.74550781-33.27539063-84.08232422-66.74589844-19.49941406-33.71132813-23.93789063-72-15.49863281-107.05693359l4.27148437-13.72060547c5.86230469-19.08984375-1.75253906-45.38144531-16.92421875-58.31103515 0 0-13.74873047-11.61035156-52.47949219-34.01367188-38.72460938-22.37519531-55.53896484-28.48535156-55.53896484-28.48535156-18.78925781-6.79130859-45.30146484-0.32607422-58.88408203 14.35253906l-10.19003906 10.95380859c-26.07363281 24.64892578-61.21142578 39.740625-99.83056641 39.740625-38.80546875 0-74.05488281-15.20068359-100.15488281-40.01396484l-9.83320313-10.62773437C387.1953125 90.94199219 360.65498047 84.44951172 341.86748047 91.24433594c0 0-16.81523438 6.07851562-55.62597656 28.48095703-38.66923828 22.40419922-52.33623047 33.9609375-52.33623047 33.9609375-15.22792969 12.92871094-22.86914063 39.11132813-16.95410156 58.28291016l4.24423828 13.85947265c8.32763672 35.02792969 3.83554687 73.23574219-15.49863282 106.92246094-19.39130859 33.60585937-50.146875 56.58398438-84.57539062 66.82324219l-14.1328125 3.23261718c-19.41503906 4.43847656-38.28955078 24.26572266-41.79550781 43.90136719 0 0-3.17548828 17.66601563-3.17548829 62.49902344 0 44.83564453 3.17548828 62.41992188 3.17548829 62.41992187 3.53320313 19.71826172 22.37871094 39.49189453 41.7946289 44.03759766l13.80761719 3.06914063c34.56298828 10.29550781 65.39941406 33.35712891 84.90234375 67.09921875 19.41503906 33.68671875 23.85351563 71.97539063 15.44414062 107.03320312l-4.18974609 13.69335938c-5.91503906 19.06083984 1.72529297 45.3515625 17.00683594 58.27939453 0 0 13.66699219 11.61298828 52.42148437 34.01542968 38.75361328 22.4578125 55.51611328 28.48623047 55.51611328 28.48623047 18.815625 6.79130859 45.27158203 0.27421875 58.85771485-14.29980468l9.72246094-10.45986329c26.10087891-24.92226562 61.37402344-40.09394531 100.23662109-40.09394531 38.83886719 0 74.16914062 15.28154297 100.37988281 40.09394531h0.02460938l9.61523437 10.46074219c13.58261719 14.57226563 39.98408203 21.09023438 58.82519531 14.29980469 0 0 16.7625-6.13476563 55.65410157-28.48710938 38.67363281-22.40332031 52.36523438-34.01542969 52.36523437-34.01542968 15.2296875-12.92695313 22.78828125-39.10869141 16.98310547-58.28027344l-4.27236328-14.1328125c-8.21777344-34.94619141-3.7265625-73.07226563 15.49863281-106.59287109 19.55566406-33.79658203 50.34111328-56.75097656 84.84785156-67.09921875v-0.05712891l13.80410157-3.17460938c19.50029297-4.43935547 38.34580078-24.21035156 41.84912109-43.93125 0 0 3.17636719-17.63789062 3.17636719-62.49902343-0.10898438-44.64316406-3.28447266-62.28105469-3.28447266-62.28105469z m-445.49121093 207.05449219c-79.61923828 0-144.20039063-64.74462891-144.20039063-144.60820312 0-79.75371094 64.58027344-144.44208984 144.20039063-144.44208985 79.61484375 0 144.11425781 64.71650391 144.11425781 144.55195313 0 79.86357422-64.49941406 144.49833984-144.11425781 144.49833984z" p-id="9878"></path></svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-theme.svg b/src/modules/base/static/svg/icon-theme.svg
new file mode 100644
index 0000000..7833dde
--- /dev/null
+++ b/src/modules/base/static/svg/icon-theme.svg
@@ -0,0 +1,12 @@
+<svg t="1615283148941" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5045"
+    width="64" height="64">
+    <path
+        d="M552.75 563.239c44.4 26.348 99.1 26.348 143.5 0C740.65 536.89 768 488.197 768 435.5c0-81.462-64.247-147.5-143.5-147.5S481 354.038 481 435.5c0 52.697 27.35 101.39 71.75 127.739z"
+        p-id="5046"></path>
+    <path
+        d="M471.264 952c-18.842 0-38.581-1.796-60.115-4.49l-5.384-0.899c-152.533-23.352-256.614-171.55-261.1-177.837-147.149-224.541-73.574-451.777 65.5-577.52C348.34 65.511 578.934 11.621 780.814 174.19c130.102 105.085 169.58 250.588 171.375 256.875v1.797c18.843 102.39 3.59 177.836-45.76 226.337-75.368 72.752-200.086 49.4-217.134 45.807-23.328-2.695-40.376 4.49-52.938 19.76-13.458 17.064-16.15 39.518-11.664 52.991 12.562 37.723 14.356 66.464 5.384 88.02C604.058 922.361 551.12 952 471.264 952z m-51.973-80.488l5.083 0.849c82.179 12.72 132.164-3.393 152.497-49.188 0-0.849 4.236-11.873-6.778-45.796-11.013-30.53-2.541-70.39 19.486-97.528 22.875-28.834 56.763-41.556 96.581-37.315l2.542 0.848c0.847 0 105.9 22.898 160.122-29.683 33.04-32.226 43.207-88.199 28.805-166.221-3.39-11.025-39.819-130.603-144.872-214.562-166.053-135.69-356.674-90.743-471.894 13.57-105.9 96.68-183.843 280.71-53.374 480.007 0.848 0 89.804 127.21 211.802 145.02z"
+        p-id="5047"></path>
+    <path
+        d="M203 529c0-29.823 24.177-54 54-54s54 24.177 54 54-24.177 54-54 54-54-24.177-54-54z m90-115.235A54 54 0 0 1 266 367c0-29.823 24.177-54 54-54s54 24.177 54 54a54 54 0 0 1-81 46.765zM427 278c0-29.823 24.177-54 54-54s54 24.177 54 54-24.177 54-54 54-54-24.177-54-54z m180 44c0-29.823 24.177-54 54-54s54 24.177 54 54-24.177 54-54 54-54-24.177-54-54z m90 144c0-29.823 24.177-54 54-54s54 24.177 54 54-24.177 54-54 54-54-24.177-54-54z"
+        p-id="5048"></path>
+</svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-track.svg b/src/modules/base/static/svg/icon-track.svg
new file mode 100644
index 0000000..8ecd23a
--- /dev/null
+++ b/src/modules/base/static/svg/icon-track.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg t="1676620705733" class="icon" viewBox="0 0 1024 1024" version="1.1"
+    xmlns="http://www.w3.org/2000/svg" p-id="1701" xmlns:xlink="http://www.w3.org/1999/xlink"
+    width="64" height="64">
+    <path
+        d="M823.04 746.24H200.96c-15.36 0-28.8-11.52-28.8-28.8v-11.52c0-15.36 11.52-28.8 28.8-28.8h120.96c19.2 0 36.48-15.36 36.48-36.48s-15.36-32.64-34.56-32.64H200.96c-55.68 0-99.84 44.16-99.84 99.84v11.52c0 55.68 44.16 99.84 99.84 99.84h620.16c15.36 0 28.8 11.52 28.8 28.8v9.6c0 15.36-11.52 28.8-28.8 28.8H308.48c-19.2 0-36.48 15.36-36.48 36.48 0 19.2 15.36 36.48 36.48 36.48h512.64c55.68 0 99.84-44.16 99.84-99.84v-11.52c1.92-57.6-44.16-101.76-97.92-101.76z"
+        p-id="1702"></path>
+    <path
+        d="M512 66.56c-128.64 0-232.32 103.68-232.32 232.32S437.12 654.08 512 654.08c96 0 232.32-226.56 232.32-355.2S638.72 66.56 512 66.56zM512 416c-65.28 0-119.04-53.76-119.04-119.04s53.76-119.04 119.04-119.04 119.04 53.76 119.04 119.04S577.28 416 512 416z"
+        p-id="1703"></path>
+</svg>
\ No newline at end of file
diff --git a/src/modules/base/static/svg/icon-upload.svg b/src/modules/base/static/svg/icon-upload.svg
new file mode 100644
index 0000000..f68cdf1
--- /dev/null
+++ b/src/modules/base/static/svg/icon-upload.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1695871553941" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1956" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M155.09375 385.15625H92.1875v453c0 34.78125 28.40625 63.09375 62.90625 63.09375H868.25c34.6875 0 62.90625-28.40625 62.90625-63.09375V385.15625H155.09375z m720.28125-153.84375H780.3125c-1.875 0-3.75 0.09375-5.71875 0.28125h-286.875v-51.1875c0-31.125-25.21875-56.34375-56.25-56.34375H148.71875c-31.125 0-56.25 25.3125-56.25 56.34375v163.125h838.96875V287.375c-0.09375-30.84375-25.3125-56.0625-56.0625-56.0625z" fill="" p-id="1957"></path></svg>
\ No newline at end of file
diff --git a/src/modules/cs/components/index.vue b/src/modules/cs/components/index.vue
new file mode 100644
index 0000000..342dba5
--- /dev/null
+++ b/src/modules/cs/components/index.vue
@@ -0,0 +1,186 @@
+<template>
+	<div class="cs-chat__wrap">
+		<el-badge
+			:value="message.unread"
+			:hidden="!message.unread"
+			v-permission="service.cs.msg.permission.unreadCount"
+		>
+			<div class="cs-chat__icon" @click="open">
+				<cl-svg name="icon-notice" :size="16" />
+			</div>
+		</el-badge>
+
+		<!-- 寮规 -->
+		<cl-dialog
+			v-model="visible"
+			title="瀹㈡湇浼氳瘽"
+			height="700px"
+			width="1200px"
+			padding="0"
+			keep-alive
+			:scrollbar="false"
+			:close-on-click-modal="false"
+			:close-on-press-escape="false"
+			:controls="['slot-expand', 'cl-flex1', 'fullscreen', 'close']"
+			@close="onClose"
+		>
+			<div
+				class="cs-chat"
+				:class="{
+					'is-mini': browser.isMini,
+					'is-expand': tools.isExpand
+				}"
+			>
+				<div class="cs-chat__left">
+					<cs-session />
+				</div>
+
+				<div class="cs-chat__right">
+					<cs-message />
+				</div>
+			</div>
+
+			<!-- 灞曞紑鎸夐挳 -->
+			<template #slot-expand>
+				<button class="cl-dialog__controls-icon">
+					<el-icon @click="tools.expand(true)" v-if="!tools.isExpand">
+						<notebook />
+					</el-icon>
+					<el-icon @click="tools.expand(false)" v-else>
+						<arrow-left />
+					</el-icon>
+				</button>
+			</template>
+		</cl-dialog>
+	</div>
+</template>
+
+<script lang="tsx" name="cs-chat" setup>
+import { onMounted, ref } from 'vue';
+import { useBrowser, useCool } from '/@/cool';
+import { Notebook, ArrowLeft } from '@element-plus/icons-vue';
+import { useMessage, useSession, useSocket, useTools, useNotice } from '../hooks';
+import CsMessage from './message.vue';
+import CsSession from './session.vue';
+import type { Cs } from '../types';
+
+const { mitt, service } = useCool();
+const { browser } = useBrowser();
+const socket = useSocket();
+const session = useSession();
+const message = useMessage();
+const tools = useTools();
+const notice = useNotice();
+
+// 鏄惁鍙
+const visible = ref(false);
+
+// 鎵撳紑
+async function open() {
+	visible.value = true;
+
+	// 鍒锋柊浼氳瘽
+	await session.refresh();
+}
+
+// 鍏抽棴
+function close() {
+	visible.value = false;
+}
+
+// 鍏抽棴
+function onClose() {
+	message.getUnread();
+}
+
+onMounted(() => {
+	if (service.cs.msg._permission.unreadCount) {
+		// 杩炴帴 socket
+		socket.connect();
+
+		// 鑾峰彇鏈娑堟伅
+		message.getUnread();
+
+		// 鐩戝惉娑堟伅
+		mitt.on('cs.msg', (data: Cs.Msg) => {
+			if (data.sessionId == session.info?.id) {
+				message.read(data.id!);
+			} else {
+				message.unread += 1;
+			}
+
+			// 娑堟伅閫氱煡
+			if (!visible.value) {
+				notice.create(data, {
+					open
+				});
+			}
+		});
+	}
+});
+
+defineExpose({
+	open,
+	close
+});
+</script>
+
+<style lang="scss">
+.cs-chat {
+	display: flex;
+	justify-content: flex-end;
+	background-color: #eee;
+	padding: 5px;
+	box-sizing: border-box;
+	position: relative;
+	color: #000;
+	height: 100%;
+
+	&__icon {
+		padding: 0 5px;
+		text-align: center;
+
+		&:hover {
+			color: var(--color-primary);
+		}
+	}
+
+	&__footer {
+		padding: 9px 0;
+	}
+
+	&__left {
+		height: calc(100% - 10px);
+		width: 345px;
+		position: absolute;
+		left: 5px;
+		top: 5px;
+	}
+
+	&__right {
+		position: relative;
+		z-index: 99;
+		transition: width 0.3s;
+		width: 100%;
+	}
+
+	&.is-mini {
+		.cs-chat__right {
+			width: 100% !important;
+		}
+
+		&.is-expand {
+			.cs-chat__left {
+				width: calc(100% - 10px);
+				z-index: 100;
+			}
+		}
+	}
+
+	&.is-expand {
+		.cs-chat__right {
+			width: calc(100% - 350px);
+		}
+	}
+}
+</style>
diff --git a/src/modules/cs/components/message.vue b/src/modules/cs/components/message.vue
new file mode 100644
index 0000000..2af1d6a
--- /dev/null
+++ b/src/modules/cs/components/message.vue
@@ -0,0 +1,526 @@
+<template>
+	<div
+		class="cs-message"
+		v-loading="message.loading"
+		element-loading-text="鍔犺浇涓�"
+		v-if="session.info"
+	>
+		<!-- 澶撮儴 -->
+		<div class="head">
+			<div class="avatar">
+				<cl-avatar :size="30" shape="square" :src="session.info?.avatarUrl" />
+			</div>
+			<span class="name">涓庘�渰{ session.info?.nickName }}鈥濊亰澶╀腑</span>
+		</div>
+
+		<!-- 娑堟伅鍒楄〃 -->
+		<el-scrollbar class="scrollbar" :ref="setRefs('scrollbar')" @scroll="onScroll">
+			<div class="list">
+				<ul
+					v-for="(d, n) in message.list"
+					:key="d.id"
+					:class="{
+						'is-show': message.list.length - n <= pagination.page
+					}"
+				>
+					<li v-for="(item, index) in d.data" :key="index">
+						<div class="date" v-if="item.date">
+							<span>{{ item.date }}</span>
+						</div>
+
+						<div
+							class="item"
+							:class="{
+								'is-right': item.type == 1
+							}"
+						>
+							<div class="avatar">
+								<cl-avatar :size="36" shape="square" :src="item.avatarUrl" />
+							</div>
+
+							<div
+								class="det"
+								@contextmenu="
+									(e) => {
+										onContextMenu(e, item);
+									}
+								"
+							>
+								<div class="h">
+									<span class="name">{{ item.nickName }}</span>
+								</div>
+
+								<div class="content">
+									<!-- 鏂囨湰 -->
+									<div class="text" v-if="item.content.type == 'text'">
+										<span>{{ item.content.data }}</span>
+									</div>
+
+									<!-- 鍥剧墖 -->
+									<div class="image" v-else-if="item.content.type == 'image'">
+										<el-image
+											:src="item.content.data"
+											:preview-src-list="[item.content.data]"
+											:initial-index="item._index"
+											scroll-container=".cs-message .list"
+										>
+											<template #error>
+												<div class="error">鍥剧墖鍔犺浇澶辫触</div>
+											</template>
+										</el-image>
+									</div>
+
+									<!-- 琛ㄦ儏 -->
+									<div
+										class="emoji text"
+										v-else-if="item.content.type == 'emoji'"
+									>
+										<img :src="getEmoji(item.content.data)" />
+									</div>
+								</div>
+							</div>
+						</div>
+					</li>
+				</ul>
+			</div>
+
+			<div class="empty" v-if="message.list.length == 0">
+				<el-empty :image-size="100" description="鏆傛棤娑堟伅" />
+			</div>
+		</el-scrollbar>
+
+		<!-- 搴曢儴 -->
+		<div class="footer">
+			<div class="tools">
+				<ul>
+					<cl-upload
+						type="file"
+						:show-file-list="false"
+						accept="image/*"
+						@success="onImageSend"
+					>
+						<li>
+							<el-icon>
+								<icon-picture />
+							</el-icon>
+						</li>
+					</cl-upload>
+
+					<li @click="refs.uploadSpace.open()">
+						<el-icon>
+							<folder />
+						</el-icon>
+					</li>
+
+					<tools-emoji>
+						<li>
+							<el-icon>
+								<star />
+							</el-icon>
+						</li>
+					</tools-emoji>
+				</ul>
+			</div>
+
+			<div class="input">
+				<el-input
+					v-model="content"
+					type="textarea"
+					placeholder="璇疯緭鍏�..."
+					:rows="4"
+					resize="none"
+					:autosize="{
+						minRows: 4,
+						maxRows: 10
+					}"
+					@keydown="onKeydown"
+				/>
+				<el-button type="success" :disabled="!content" @click="onTextSend">鍙戦��</el-button>
+			</div>
+		</div>
+
+		<!-- 鏂囦欢绌洪棿 -->
+		<cl-upload-space
+			:ref="setRefs('uploadSpace')"
+			:show-btn="false"
+			accept="image/*"
+			@confirm="onFileConfirm"
+		/>
+	</div>
+</template>
+
+<script lang="ts" setup>
+import { nextTick, reactive, ref, watch } from "vue";
+import { Picture as IconPicture, Folder, Star } from "@element-plus/icons-vue";
+import { ContextMenu } from "@cool-vue/crud";
+import { useClipboard } from "@vueuse/core";
+import { ElMessage } from "element-plus";
+import { useSession, useSocket, useMessage } from "../hooks";
+import { useCool } from "/@/cool";
+import ToolsEmoji from "./tools/emoji.vue";
+import { getEmoji } from "../utils";
+import type { Cs } from "../types";
+
+const { refs, setRefs } = useCool();
+const { copy } = useClipboard();
+const socket = useSocket();
+const session = useSession();
+const message = useMessage();
+
+// 鍒嗛〉
+const pagination = reactive({
+	page: 1
+});
+
+// 杈撳叆
+const content = ref("");
+
+// 鍔犺浇涓�
+const loading = ref(false);
+
+// 鎸変笅
+function onKeydown(e: KeyboardEvent) {
+	if (e.key == "Enter" && !e.shiftKey) {
+		onTextSend();
+		e.preventDefault();
+	}
+}
+
+// 鏂囨湰娑堟伅
+function onTextSend() {
+	if (content.value) {
+		socket.send({
+			type: "text",
+			data: content.value
+		});
+
+		content.value = "";
+	}
+}
+
+// 鍥剧墖娑堟伅
+function onImageSend(res: { url: string }) {
+	socket.send({
+		type: "image",
+		data: res.url
+	});
+}
+
+// 鍙抽敭鑿滃崟
+function onContextMenu(e: Event, item: Cs.Msg) {
+	ContextMenu.open(e, {
+		hover: {
+			target: "content"
+		},
+		list: [
+			{
+				label: "澶嶅埗",
+				callback(done) {
+					copy(item.content.data || "");
+					ElMessage.success("澶嶅埗鎴愬姛");
+					done();
+				}
+			}
+		]
+	});
+}
+
+// 鏂囦欢閫夋嫨
+function onFileConfirm(selection: any[]) {
+	selection.forEach(onImageSend);
+}
+
+// 鑾峰彇楂樺害
+function getHeight(): Promise<number> {
+	return new Promise((resolve) => {
+		resolve(document.querySelector(".cs-message .list")?.clientHeight || 0);
+	});
+}
+
+// 婊氬姩鍒版寚瀹氫綅缃�
+function scrollTo(top: number, smooth?: string) {
+	nextTick(() => {
+		refs.scrollbar?.wrapRef?.scroll({
+			top,
+			behavior: smooth ? "smooth" : "auto"
+		});
+	});
+}
+
+// 婊氬姩鍒板簳閮�
+function scrollToBottom() {
+	scrollTo(99999 + Math.random(), "smooth");
+}
+
+// 婊氬姩鍒伴《閮�
+async function scrollToUpper() {
+	if (pagination.page > message.list.length) {
+		return false;
+	}
+
+	loading.value = true;
+
+	// 璁$畻褰撳墠鐨勯珮搴�
+	const h1 = await getHeight();
+
+	// 棰勫姞杞戒笅涓�椤�
+	await message.refresh({
+		page: pagination.page + 1
+	});
+
+	// 涓嬩竴椤�
+	pagination.page += 1;
+
+	// 寤惰繜
+	await nextTick();
+
+	// 璁$畻椤垫暟澧炲姞鍚庣殑楂樺害
+	const h2 = await getHeight();
+
+	// 婊氬姩鍒版寚瀹氫綅缃�
+	scrollTo(h2 - h1);
+
+	loading.value = false;
+}
+
+// 婊氬姩浜嬩欢
+function onScroll(e: { scrollTop: number }) {
+	if (e.scrollTop == 0) {
+		scrollToUpper();
+	}
+}
+
+function toDev() {
+	ElMessage.info("鏆傛湭寮�鏀�");
+}
+
+watch(
+	() => session.info?.id,
+	async () => {
+		// 閲嶇疆鍒嗛〉
+		pagination.page = 1;
+
+		// 鑾峰彇鏈鏁�
+		message.getUnread();
+
+		// 鑾峰彇娑堟伅鍒楄〃
+		await message.refresh(pagination);
+
+		// 婊氬姩鍒板簳
+		scrollToBottom();
+	}
+);
+</script>
+
+<style lang="scss" scoped>
+.cs-message {
+	display: flex;
+	flex-direction: column;
+	background-color: #fff;
+	border-radius: 6px;
+	height: 100%;
+	box-sizing: border-box;
+
+	.head {
+		display: flex;
+		align-items: center;
+		height: 50px;
+		padding: 0 10px;
+
+		.name {
+			margin-left: 10px;
+			font-size: 14px;
+		}
+
+		ul {
+			li {
+				list-style: none;
+			}
+		}
+	}
+
+	.scrollbar {
+		flex: 1;
+		background-color: #f7f7f7;
+
+		.list {
+			ul {
+				opacity: 0;
+				height: 0;
+				overflow: hidden;
+				transition: all 0.3s;
+
+				&.is-show {
+					height: auto;
+					opacity: 1;
+				}
+
+				& > li {
+					list-style: none;
+
+					.date {
+						margin: 10px;
+						text-align: center;
+
+						span {
+							background-color: #c9c9c9;
+							padding: 5px;
+							border-radius: 4px;
+							color: #fff;
+							font-size: 12px;
+						}
+					}
+
+					.item {
+						display: flex;
+						padding: 10px;
+
+						.avatar {
+							margin-right: 10px;
+						}
+
+						.det {
+							.h {
+								display: flex;
+								align-items: center;
+								.name {
+									font-size: 12px;
+									color: #666;
+								}
+							}
+
+							.content {
+								display: flex;
+								margin-top: 5px;
+
+								.text {
+									display: inline-block;
+									background-color: #fff;
+									padding: 8px;
+									border-radius: 0 6px 6px 6px;
+									max-width: 400px;
+									font-size: 14px;
+								}
+
+								.image {
+									.el-image {
+										display: block;
+										height: 200px;
+										border-radius: 4px;
+									}
+
+									.error {
+										display: flex;
+										justify-content: center;
+										align-items: center;
+										height: 200px;
+										width: 200px;
+										background-color: #fff;
+										border-radius: 8px;
+										letter-spacing: 1px;
+										line-height: 1;
+										color: var(--el-color-danger);
+										font-size: 13px;
+									}
+								}
+
+								.emoji {
+									img {
+										display: block;
+										height: 22px;
+									}
+								}
+							}
+						}
+
+						&.is-right {
+							flex-direction: row-reverse;
+
+							.avatar {
+								margin-left: 10px;
+								margin-right: 0;
+							}
+
+							.det {
+								.h,
+								.content {
+									flex-direction: row-reverse;
+								}
+
+								.content {
+									.text {
+										border-radius: 6px 0 6px 6px;
+										background-color: var(--el-color-primary);
+										color: #fff;
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+
+			:deep(.el-scrollbar__view) {
+				height: 100%;
+			}
+
+			.empty {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				height: 100%;
+			}
+		}
+	}
+
+	.footer {
+		padding: 10px;
+
+		.tools {
+			display: flex;
+			margin-bottom: 10px;
+
+			ul {
+				display: flex;
+				align-items: center;
+				flex: 1;
+
+				li {
+					height: 26px;
+					width: 26px;
+					border-radius: 4px;
+					margin-right: 10px;
+					list-style: none;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					cursor: pointer;
+					font-size: 18px;
+					position: relative;
+
+					&:hover {
+						background-color: #f7f7f7;
+					}
+				}
+			}
+		}
+
+		.input {
+			display: flex;
+			position: relative;
+
+			:deep(.el-textarea__inner) {
+				box-shadow: none;
+				padding: 0 5px;
+			}
+
+			.el-button {
+				margin-left: 10px;
+				position: absolute;
+				right: 0;
+				bottom: 0;
+			}
+		}
+	}
+}
+</style>
diff --git a/src/modules/cs/components/session.vue b/src/modules/cs/components/session.vue
new file mode 100644
index 0000000..d3cb68b
--- /dev/null
+++ b/src/modules/cs/components/session.vue
@@ -0,0 +1,223 @@
+<template>
+	<div class="cs-session">
+		<div class="head">
+			<el-input :prefix-icon="Search" v-model="keyWord" placeholder="鎼滅储" clearable />
+
+			<ul class="tools">
+				<li @click="session.refresh()">
+					<el-icon><refresh /></el-icon>
+				</li>
+			</ul>
+		</div>
+
+		<div class="container" v-loading="session.loading">
+			<el-scrollbar class="scroller" :ref="setRefs('scroller')">
+				<div
+					class="list"
+					v-infinite-scroll="onMore"
+					:infinite-scroll-immediate="false"
+					:infinite-scroll-disabled="session.loaded"
+				>
+					<div
+						class="item"
+						v-for="(item, index) in flist"
+						:key="index"
+						:class="{
+							'is-active': item.id == session.info?.id
+						}"
+						@click="toDetail(item)"
+					>
+						<div class="avatar">
+							<el-badge
+								:value="item.adminUnreadCount"
+								:hidden="item.adminUnreadCount == 0"
+							>
+								<cl-avatar shape="square" :src="item.avatarUrl" />
+							</el-badge>
+						</div>
+
+						<div class="det">
+							<p class="name">{{ item.nickName }}</p>
+							<p class="message">
+								{{ msgFormatter(item.lastMsg) }}
+							</p>
+						</div>
+
+						<div class="status">
+							<p class="date">{{ dateFormatter(item.updateTime) }}</p>
+						</div>
+					</div>
+				</div>
+
+				<el-empty v-if="flist.length == 0" :image-size="100" description="鏆傛棤浼氳瘽" />
+			</el-scrollbar>
+		</div>
+	</div>
+</template>
+
+<script lang="ts" setup>
+import { computed, nextTick, ref } from "vue";
+import { Refresh, Search } from "@element-plus/icons-vue";
+import { useBrowser, useCool } from "/@/cool";
+import { useDialog } from "@cool-vue/crud";
+import { useSession, useTools } from "../hooks";
+import { msgFormatter, dateFormatter } from "../utils/index";
+
+const { browser } = useBrowser();
+const { refs, setRefs } = useCool();
+const session = useSession();
+const tools = useTools();
+
+useDialog({
+	onFullscreen() {
+		nextTick(() => {
+			refs.scroller?.update();
+		});
+	}
+});
+
+// 鍏抽敭瀛�
+const keyWord = ref("");
+
+// 杩囨护鍒楄〃
+const flist = computed(() => session.list.filter((e) => e.nickName?.includes(keyWord.value)) || []);
+
+// 浼氳瘽璇︽儏
+async function toDetail(item: Eps.CsSessionEntity) {
+	// 璁剧疆涓轰細璇�
+	session.set(item);
+
+	// 鏀惰捣
+	if (browser.isMini) {
+		tools.expand(false);
+	}
+}
+
+// 鍔犺浇鏇村
+function onMore() {
+	session.refresh({
+		page: session.pagination.page + 1
+	});
+}
+</script>
+
+<style lang="scss" scoped>
+.cs-session {
+	height: 100%;
+	width: 100%;
+	background-color: #fff;
+	border-radius: 6px;
+
+	.head {
+		display: flex;
+		border-bottom: 1px solid #f7f7f7;
+		padding: 10px;
+
+		:deep(.el-input) {
+			height: 30px;
+
+			.el-input__wrapper {
+				background-color: #eee;
+				box-shadow: none;
+			}
+		}
+
+		.tools {
+			display: inline-flex;
+			align-items: center;
+
+			li {
+				height: 30px;
+				width: 30px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				cursor: pointer;
+				margin-left: 10px;
+				border-radius: 4px;
+				background-color: #eee;
+				color: #666;
+
+				.el-icon {
+					font-size: 16px;
+				}
+
+				&:hover {
+					background-color: #ddd;
+				}
+			}
+		}
+	}
+
+	.container {
+		height: calc(100% - 51px);
+		overflow: hidden;
+
+		.scroller {
+			height: 100%;
+		}
+
+		.list {
+			.item {
+				display: flex;
+				padding: 15px 10px;
+				cursor: pointer;
+
+				.avatar {
+					margin-right: 10px;
+
+					:deep(.el-badge__content) {
+						transform: translateY(-50%) translateX(calc(100% - 5px)) scale(0.8) !important;
+					}
+				}
+
+				.det {
+					flex: 1;
+
+					.name,
+					.message {
+						overflow: hidden;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 1;
+						width: 220px;
+						line-height: 1;
+					}
+
+					.name {
+						font-size: 14px;
+						margin: 2px 0 8px 0;
+					}
+
+					.message {
+						font-size: 12px;
+						color: #666;
+					}
+				}
+
+				.status {
+					display: flex;
+					flex-direction: column;
+					align-items: flex-end;
+					font-size: 12px;
+					flex-shrink: 0;
+
+					.date {
+						margin-bottom: 5px;
+						color: #999;
+					}
+				}
+
+				&.is-active {
+					background-color: #eee;
+				}
+
+				&:not(.is-active):hover {
+					background-color: #f7f7f7;
+				}
+			}
+		}
+	}
+}
+</style>
diff --git a/src/modules/cs/components/tools/emoji.vue b/src/modules/cs/components/tools/emoji.vue
new file mode 100644
index 0000000..8f46380
--- /dev/null
+++ b/src/modules/cs/components/tools/emoji.vue
@@ -0,0 +1,162 @@
+<template>
+	<el-popover
+		:ref="setRefs('popover')"
+		placement="top"
+		:width="515"
+		trigger="click"
+		popper-class="tools-emoji__popover"
+	>
+		<template #reference>
+			<slot></slot>
+		</template>
+
+		<div class="tools-emoji">
+			<div class="item" v-for="item in list" :key="item" @click="check(item)">
+				<img :src="getEmoji(item)" />
+			</div>
+		</div>
+	</el-popover>
+</template>
+
+<script lang="ts" name="tools-emoji" setup>
+import { useCool } from "/@/cool";
+import { useSocket } from "../../hooks";
+import { getEmoji } from "../../utils";
+
+const { refs, setRefs } = useCool();
+const socket = useSocket();
+
+// 鍒楄〃
+const list = [
+	"angry-face.png",
+	"anguished-face.png",
+	"astonished-face.png",
+	"confounded-face.png",
+	"confused-face.png",
+	"crying-face.png",
+	"disappointed-but-relieved-face.png",
+	"disappointed-face.png",
+	"dizzy-face.png",
+	"drooling-face.png",
+	"expressionless-face.png",
+	"face-savouring-delicious-food.png",
+	"face-screaming-in-fear.png",
+	"face-throwing-a-kiss.png",
+	"face-with-cold-sweat.png",
+	"face-with-cowboy-hat.png",
+	"face-with-finger-covering-closed-lips.png",
+	"face-with-head-bandage.png",
+	"face-with-look-of-triumph.png",
+	"face-with-medical-mask.png",
+	"face-with-monocle.png",
+	"face-with-one-eyebrow-raised.png",
+	"face-with-open-mouth-and-cold-sweat.png",
+	"face-with-open-mouth-vomiting.png",
+	"face-with-open-mouth.png",
+	"face-with-party-horn-and-party-hat.png",
+	"face-with-pleading-eyes.png",
+	"face-with-rolling-eyes.png",
+	"face-with-stuck-out-tongue-and-tightly-closed-eyes.png",
+	"face-with-stuck-out-tongue-and-winking-eye.png",
+	"face-with-stuck-out-tongue.png",
+	"face-with-thermometer.png",
+	"face-with-uneven-eyes-and-wavy-mouth.png",
+	"face-without-mouth.png",
+	"fearful-face.png",
+	"flushed-face.png",
+	"freezing-face.png",
+	"frowning-face-with-open-mouth.png",
+	"grimacing-face.png",
+	"grinning-face-with-one-large-and-one-small-eye.png",
+	"grinning-face-with-smiling-eyes.png",
+	"grinning-face-with-star-eyes.png",
+	"grinning-face.png",
+	"hugging-face.png",
+	"hushed-face.png",
+	"imp.png",
+	"kissing-face-with-closed-eyes.png",
+	"kissing-face-with-smiling-eyes.png",
+	"kissing-face.png",
+	"loudly-crying-face.png",
+	"lying-face.png",
+	"money-mouth-face.png",
+	"nauseated-face.png",
+	"nerd-face.png",
+	"neutral-face.png",
+	"overheated-face.png",
+	"pensive-face.png",
+	"persevering-face.png",
+	"pouting-face.png",
+	"relieved-face.png",
+	"rolling-on-the-floor-laughing.png",
+	"serious-face-with-symbols-covering-mouth.png",
+	"shocked-face-with-exploding-head.png",
+	"sleeping-face.png",
+	"sleepy-face.png",
+	"slightly-frowning-face.png",
+	"slightly-smiling-face.png",
+	"smiling-face-with-halo.png",
+	"smiling-face-with-heart-shaped-eyes.png",
+	"smiling-face-with-horns.png",
+	"smiling-face-with-open-mouth-and-smiling-eyes.png",
+	"smiling-face-with-open-mouth-and-tightly-closed-eyes.png",
+	"smiling-face-with-open-mouth.png",
+	"smiling-face-with-smiling-eyes-and-hand-covering-mouth.png",
+	"smiling-face-with-smiling-eyes-and-three-hearts.png",
+	"smiling-face-with-smiling-eyes.png",
+	"smiling-face-with-sunglasses.png",
+	"smirking-face.png",
+	"sneezing-face.png",
+	"thinking-face.png",
+	"tired-face.png",
+	"upside-down-face.png",
+	"weary-face.png",
+	"white-frowning-face.png",
+	"white-smiling-face.png",
+	"winking-face.png",
+	"worried-face.png",
+	"zipper-mouth-face.png"
+];
+
+// 鐩戝惉鏀瑰彉
+function check(val: string) {
+	socket.send({
+		type: "emoji",
+		data: val
+	});
+
+	refs.popover.hide();
+}
+</script>
+
+<style lang="scss">
+.tools-emoji__popover {
+	max-width: calc(100% - 10px);
+}
+</style>
+
+<style lang="scss" scoped>
+.tools-emoji {
+	display: flex;
+	flex-wrap: wrap;
+	padding-left: 5px;
+
+	.item {
+		height: 40px;
+		width: 40px;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		cursor: pointer;
+
+		img {
+			height: 20px;
+		}
+
+		&:hover {
+			background-color: #f7f7f7;
+			border-radius: 4px;
+		}
+	}
+}
+</style>
diff --git a/src/modules/cs/config.ts b/src/modules/cs/config.ts
new file mode 100644
index 0000000..9378325
--- /dev/null
+++ b/src/modules/cs/config.ts
@@ -0,0 +1,10 @@
+import type { ModuleConfig } from "/@/cool";
+
+export default (): ModuleConfig => {
+	return {
+		toolbar: {
+			order: 2,
+			component: import("./components/index.vue")
+		}
+	};
+};
diff --git a/src/modules/cs/hooks/index.ts b/src/modules/cs/hooks/index.ts
new file mode 100644
index 0000000..df17a57
--- /dev/null
+++ b/src/modules/cs/hooks/index.ts
@@ -0,0 +1,5 @@
+export * from "./socket";
+export * from "./session";
+export * from "./message";
+export * from "./tools";
+export * from "./notice";
diff --git a/src/modules/cs/hooks/message.ts b/src/modules/cs/hooks/message.ts
new file mode 100644
index 0000000..2e670fa
--- /dev/null
+++ b/src/modules/cs/hooks/message.ts
@@ -0,0 +1,128 @@
+import { defineStore } from "pinia";
+import { computed, ref } from "vue";
+import type { Cs } from "../types";
+import dayjs from "dayjs";
+import { service } from "/@/cool";
+import { isEmpty, last } from "lodash-es";
+import { useSession } from "./session";
+import { uuid } from "/@/cool/utils";
+import { useTools } from "./tools";
+import { dateFormatter } from "../utils";
+import { useBase } from "/$/base";
+
+export const useMessage = defineStore("cs.message", () => {
+	const session = useSession();
+	const tools = useTools();
+	const { user } = useBase();
+
+	// 鍔犺浇涓�
+	const loading = ref(false);
+
+	// 鏈娑堟伅鏁�
+	const unread = ref(0);
+
+	// 鎵�鏈夐〉
+	const data = ref<{ id: string; data: Cs.Msg[] }[]>([]);
+
+	// 鍒楄〃
+	const list = computed(() => {
+		data.value.forEach((e) => {
+			if (e.data[0]) {
+				let date = e.data[0].createTime;
+
+				if (date) {
+					e.data.forEach((a, i) => {
+						const d = dateFormatter(a.createTime);
+
+						if (i == 0) {
+							a.date = d;
+						}
+
+						if (dayjs(a.createTime).subtract(10, "minute").isAfter(dayjs(date))) {
+							a.date = d;
+							date = a.createTime;
+						}
+					});
+				}
+			}
+		});
+
+		return data.value;
+	});
+
+	// 杩藉姞娑堟伅
+	function append(item: Cs.Msg) {
+		const list = last(data.value)?.data;
+
+		if (list) {
+			list.push({
+				sessionId: session.info?.id,
+				type: 1,
+				nickName: user.info?.name,
+				avatarUrl: user.info?.headImg,
+				...item
+			});
+
+			tools.scrollToBottom();
+		}
+	}
+
+	// 鑾峰彇娑堟伅
+	async function refresh(params?: any) {
+		loading.value = true;
+
+		if (params.page == 1) {
+			data.value = [];
+		}
+
+		await service.cs.msg
+			.page({
+				sessionId: session.info?.id,
+				order: "createTime",
+				sort: "desc",
+				...params
+			})
+			.then((res) => {
+				if (isEmpty(data.value) || !isEmpty(res.list)) {
+					res.list.forEach((e) => {
+						if (e.type == 1) {
+							e.avatarUrl = e.adminUserHeadImg;
+							e.nickName = e.adminUserName;
+						}
+					});
+
+					data.value.unshift({
+						id: uuid(),
+						data: res.list.reverse() as any[]
+					});
+				}
+			});
+
+		loading.value = false;
+	}
+
+	// 鑾峰彇鏈娑堟伅
+	function getUnread() {
+		service.cs.msg.unreadCount().then((res) => {
+			unread.value = res;
+		});
+	}
+
+	// 璇绘秷鎭�
+	function read(id: number) {
+		service.cs.msg.read({
+			msgIds: [id]
+		});
+	}
+
+	return {
+		data,
+		list,
+		loading,
+		unread,
+		append,
+		refresh,
+		read,
+		getUnread
+	};
+});
diff --git a/src/modules/cs/hooks/notice.tsx b/src/modules/cs/hooks/notice.tsx
new file mode 100644
index 0000000..8b9690d
--- /dev/null
+++ b/src/modules/cs/hooks/notice.tsx
@@ -0,0 +1,68 @@
+import Ding from "/$/cs/static/audio/ding.wav";
+import type { Cs } from "../types";
+import { ElNotification } from "element-plus";
+import { getEmoji } from "../utils";
+import { useSession } from "./session";
+
+export function useNotice() {
+	const session = useSession();
+
+	// ding
+	const audio = new Audio(Ding);
+
+	// 娑堟伅鎻愮ず
+	function create({ content, user, sessionId }: Cs.Msg, { open }: { open: () => Promise<void> }) {
+		if (content) {
+			const icon = <img src={user.avatarUrl} style={{ height: "32px", width: "32px" }} />;
+
+			let message = content.data;
+
+			switch (content.type) {
+				case "image":
+					message = "[鍥剧墖]";
+					break;
+
+				case "voice":
+					message = "[璇煶]";
+					break;
+
+				case "video":
+					message = "[瑙嗛]";
+					break;
+
+				case "file":
+					message = "[鏂囦欢]";
+					break;
+
+				case "location":
+					message = "[浣嶇疆]";
+					break;
+
+				case "emoji":
+					message = (
+						<img src={getEmoji(message)} style={{ height: "22px", width: "22px" }} />
+					);
+					break;
+			}
+
+			ElNotification({
+				title: user.nickName,
+				message,
+				icon,
+				async onClick() {
+					await open();
+
+					// 鍒囨崲浼氳瘽
+					session.setById(sessionId!);
+				}
+			});
+		}
+
+		// 鎾斁澹伴煶
+		audio?.play();
+	}
+
+	return {
+		create
+	};
+}
diff --git a/src/modules/cs/hooks/session.ts b/src/modules/cs/hooks/session.ts
new file mode 100644
index 0000000..26b1c33
--- /dev/null
+++ b/src/modules/cs/hooks/session.ts
@@ -0,0 +1,97 @@
+import { defineStore } from "pinia";
+import { reactive, ref } from "vue";
+import { Cs } from "../types";
+import { service } from "/@/cool";
+
+export const useSession = defineStore("cs.session", () => {
+	// 璇︽儏
+	const info = ref<Cs.Session>();
+
+	// 鍒楄〃
+	const list = ref<Cs.Session[]>([]);
+
+	// 鏄惁鍔犺浇瀹�
+	const loaded = ref(false);
+
+	// 鍔犺浇鐘舵��
+	const loading = ref(false);
+
+	// 鍒嗛〉
+	const pagination = reactive({
+		page: 1,
+		size: 20
+	});
+
+	// 璇锋眰鍙傛暟
+	const reqParams = {
+		order: "updateTime",
+		sort: "desc"
+	};
+
+	// 鍒锋柊
+	async function refresh(params?: any) {
+		loading.value = true;
+
+		// 鍚堝苟鍙傛暟
+		Object.assign(reqParams, params);
+
+		// 璇锋眰
+		await service.cs.session
+			.page({
+				...pagination,
+				...reqParams
+			})
+			.then((res) => {
+				// 璁剧疆鍒嗛〉
+				Object.assign(pagination, res.pagination);
+
+				if (res.pagination.page == 1) {
+					list.value = res.list;
+				} else {
+					list.value.push(...res.list);
+				}
+
+				// 鏄惁鍔犺浇瀹屾垚
+				loaded.value = res.pagination.total <= list.value.length;
+
+				// 榛樿绗竴涓�
+				if (!info.value) {
+					set(list.value[0]);
+				}
+			});
+
+		loading.value = false;
+	}
+
+	// 璁剧疆浼氳瘽
+	function set(data?: Cs.Session) {
+		if (data) {
+			data.adminUnreadCount = 0;
+		}
+
+		info.value = data;
+	}
+
+	// 閫氳繃id璁剧疆浼氳瘽
+	function setById(sessionId: number) {
+		const item = list.value.find((e) => e.id == sessionId);
+		set(item);
+	}
+
+	// 娓呯┖浼氳瘽
+	function clear() {
+		info.value = undefined;
+	}
+
+	return {
+		info,
+		list,
+		set,
+		setById,
+		clear,
+		pagination,
+		loaded,
+		loading,
+		refresh
+	};
+});
diff --git a/src/modules/cs/hooks/socket.ts b/src/modules/cs/hooks/socket.ts
new file mode 100644
index 0000000..dce47a9
--- /dev/null
+++ b/src/modules/cs/hooks/socket.ts
@@ -0,0 +1,95 @@
+import type { Cs } from "../types";
+import { defineStore } from "pinia";
+import io, { type Socket } from "socket.io-client";
+import { useSession } from "./session";
+import { useBase } from "/$/base";
+import { config } from "/@/config";
+import { useMessage } from "./message";
+import { useCool } from "/@/cool";
+
+export const useSocket = defineStore("cs.socket", () => {
+	const { mitt } = useCool();
+	const { user } = useBase();
+	const session = useSession();
+	const message = useMessage();
+
+	let client = undefined as Socket | undefined;
+
+	function connect() {
+		if (!user.token) {
+			return false;
+		}
+
+		if (client) {
+			client.disconnect();
+			client = undefined;
+		}
+
+		if (!client) {
+			client = io(config.host + "/cs", {
+				transports: ["websocket", "polling"]
+			});
+
+			client.auth = {
+				isAdmin: true,
+				token: user.token
+			};
+
+			client.on("connect", () => {
+				console.log("[cs] connect");
+			});
+
+			client.on("disconnect", () => {
+				console.log("[cs] disconnect");
+			});
+
+			client.on("msg", (data: Cs.Msg) => {
+				if ((data.type == 1 && data.userId != user.info?.id) || data.type == 0) {
+					// 鍒ゆ柇鏄惁鏄綋鍓嶄細璇�
+					if (data.sessionId == session.info?.id) {
+						message.append({
+							...data.user,
+							...data
+						});
+					} else {
+						// 璁剧疆鍏朵粬浼氳瘽淇℃伅
+						session.list.forEach((e) => {
+							if (e.id == data.sessionId) {
+								if (!e.adminUnreadCount) {
+									e.adminUnreadCount = 0;
+								}
+
+								e.adminUnreadCount += 1;
+								e.lastMsg = data;
+							}
+						});
+					}
+
+					// 鍙戦�佷簨浠�
+					mitt.emit("cs.msg", data);
+				}
+			});
+		}
+	}
+
+	function send(content: Cs.Content) {
+		if (client) {
+			// 鍙戦�佷簨浠�
+			client.emit("send", {
+				sessionId: session.info?.id,
+				content
+			});
+
+			// 杩藉姞娑堟伅
+			message.append({ content });
+		} else {
+			console.log("[cs] client error");
+		}
+	}
+
+	return {
+		connect,
+		client,
+		send
+	};
+});
diff --git a/src/modules/cs/hooks/tools.ts b/src/modules/cs/hooks/tools.ts
new file mode 100644
index 0000000..354a862
--- /dev/null
+++ b/src/modules/cs/hooks/tools.ts
@@ -0,0 +1,28 @@
+import { defineStore } from "pinia";
+import { nextTick, ref } from "vue";
+
+export const useTools = defineStore("cs.tools", () => {
+	// 鏄惁灞曞紑
+	const isExpand = ref(true);
+
+	// 鏀惰捣銆佸睍寮�
+	function expand(value?: boolean) {
+		isExpand.value = value === undefined ? !isExpand.value : value;
+	}
+
+	// 婊氬姩鍒板簳閮�
+	async function scrollToBottom() {
+		await nextTick();
+
+		document.querySelector(".cs-message .el-scrollbar__wrap")?.scroll({
+			top: 9999,
+			behavior: "smooth"
+		});
+	}
+
+	return {
+		isExpand,
+		expand,
+		scrollToBottom
+	};
+});
diff --git a/src/modules/cs/index.ts b/src/modules/cs/index.ts
new file mode 100644
index 0000000..b740056
--- /dev/null
+++ b/src/modules/cs/index.ts
@@ -0,0 +1,13 @@
+import { useMessage, useSession, useSocket } from "./hooks";
+
+export function useCs() {
+	const socket = useSocket();
+	const message = useMessage();
+	const session = useSession();
+
+	return {
+		socket,
+		message,
+		session
+	};
+}
diff --git a/src/modules/cs/static/audio/ding.wav b/src/modules/cs/static/audio/ding.wav
new file mode 100644
index 0000000..0479aa8
--- /dev/null
+++ b/src/modules/cs/static/audio/ding.wav
Binary files differ
diff --git a/src/modules/cs/static/emoji/angry-face.png b/src/modules/cs/static/emoji/angry-face.png
new file mode 100644
index 0000000..bd0b383
--- /dev/null
+++ b/src/modules/cs/static/emoji/angry-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/anguished-face.png b/src/modules/cs/static/emoji/anguished-face.png
new file mode 100644
index 0000000..fa4678b
--- /dev/null
+++ b/src/modules/cs/static/emoji/anguished-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/astonished-face.png b/src/modules/cs/static/emoji/astonished-face.png
new file mode 100644
index 0000000..41dc2b6
--- /dev/null
+++ b/src/modules/cs/static/emoji/astonished-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/confounded-face.png b/src/modules/cs/static/emoji/confounded-face.png
new file mode 100644
index 0000000..7e1b967
--- /dev/null
+++ b/src/modules/cs/static/emoji/confounded-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/confused-face.png b/src/modules/cs/static/emoji/confused-face.png
new file mode 100644
index 0000000..b01d70e
--- /dev/null
+++ b/src/modules/cs/static/emoji/confused-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/crying-face.png b/src/modules/cs/static/emoji/crying-face.png
new file mode 100644
index 0000000..c5aae1c
--- /dev/null
+++ b/src/modules/cs/static/emoji/crying-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/disappointed-but-relieved-face.png b/src/modules/cs/static/emoji/disappointed-but-relieved-face.png
new file mode 100644
index 0000000..f4f6e3e
--- /dev/null
+++ b/src/modules/cs/static/emoji/disappointed-but-relieved-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/disappointed-face.png b/src/modules/cs/static/emoji/disappointed-face.png
new file mode 100644
index 0000000..aa3e501
--- /dev/null
+++ b/src/modules/cs/static/emoji/disappointed-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/dizzy-face.png b/src/modules/cs/static/emoji/dizzy-face.png
new file mode 100644
index 0000000..9bd63d4
--- /dev/null
+++ b/src/modules/cs/static/emoji/dizzy-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/drooling-face.png b/src/modules/cs/static/emoji/drooling-face.png
new file mode 100644
index 0000000..a7e2545
--- /dev/null
+++ b/src/modules/cs/static/emoji/drooling-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/expressionless-face.png b/src/modules/cs/static/emoji/expressionless-face.png
new file mode 100644
index 0000000..a39bc99
--- /dev/null
+++ b/src/modules/cs/static/emoji/expressionless-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-savouring-delicious-food.png b/src/modules/cs/static/emoji/face-savouring-delicious-food.png
new file mode 100644
index 0000000..7f3d434
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-savouring-delicious-food.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-screaming-in-fear.png b/src/modules/cs/static/emoji/face-screaming-in-fear.png
new file mode 100644
index 0000000..0458687
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-screaming-in-fear.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-throwing-a-kiss.png b/src/modules/cs/static/emoji/face-throwing-a-kiss.png
new file mode 100644
index 0000000..15220bf
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-throwing-a-kiss.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-cold-sweat.png b/src/modules/cs/static/emoji/face-with-cold-sweat.png
new file mode 100644
index 0000000..c91ab17
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-cold-sweat.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-cowboy-hat.png b/src/modules/cs/static/emoji/face-with-cowboy-hat.png
new file mode 100644
index 0000000..5801afc
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-cowboy-hat.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-finger-covering-closed-lips.png b/src/modules/cs/static/emoji/face-with-finger-covering-closed-lips.png
new file mode 100644
index 0000000..3e37c47
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-finger-covering-closed-lips.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-head-bandage.png b/src/modules/cs/static/emoji/face-with-head-bandage.png
new file mode 100644
index 0000000..00471c0
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-head-bandage.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-look-of-triumph.png b/src/modules/cs/static/emoji/face-with-look-of-triumph.png
new file mode 100644
index 0000000..fa3bb8e
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-look-of-triumph.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-medical-mask.png b/src/modules/cs/static/emoji/face-with-medical-mask.png
new file mode 100644
index 0000000..8b237f5
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-medical-mask.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-monocle.png b/src/modules/cs/static/emoji/face-with-monocle.png
new file mode 100644
index 0000000..12982a9
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-monocle.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-one-eyebrow-raised.png b/src/modules/cs/static/emoji/face-with-one-eyebrow-raised.png
new file mode 100644
index 0000000..c14f913
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-one-eyebrow-raised.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-open-mouth-and-cold-sweat.png b/src/modules/cs/static/emoji/face-with-open-mouth-and-cold-sweat.png
new file mode 100644
index 0000000..9359dd9
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-open-mouth-and-cold-sweat.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-open-mouth-vomiting.png b/src/modules/cs/static/emoji/face-with-open-mouth-vomiting.png
new file mode 100644
index 0000000..637be5f
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-open-mouth-vomiting.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-open-mouth.png b/src/modules/cs/static/emoji/face-with-open-mouth.png
new file mode 100644
index 0000000..6b9af1e
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-open-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-party-horn-and-party-hat.png b/src/modules/cs/static/emoji/face-with-party-horn-and-party-hat.png
new file mode 100644
index 0000000..d1d3f27
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-party-horn-and-party-hat.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-pleading-eyes.png b/src/modules/cs/static/emoji/face-with-pleading-eyes.png
new file mode 100644
index 0000000..3901299
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-pleading-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-rolling-eyes.png b/src/modules/cs/static/emoji/face-with-rolling-eyes.png
new file mode 100644
index 0000000..3c1c933
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-rolling-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png b/src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png
new file mode 100644
index 0000000..13e5574
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png b/src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png
new file mode 100644
index 0000000..3c6c276
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-stuck-out-tongue.png b/src/modules/cs/static/emoji/face-with-stuck-out-tongue.png
new file mode 100644
index 0000000..9b040b3
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-stuck-out-tongue.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-thermometer.png b/src/modules/cs/static/emoji/face-with-thermometer.png
new file mode 100644
index 0000000..407c0c8
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-thermometer.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png b/src/modules/cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png
new file mode 100644
index 0000000..3777295
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/face-without-mouth.png b/src/modules/cs/static/emoji/face-without-mouth.png
new file mode 100644
index 0000000..8a2fbf3
--- /dev/null
+++ b/src/modules/cs/static/emoji/face-without-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/fearful-face.png b/src/modules/cs/static/emoji/fearful-face.png
new file mode 100644
index 0000000..f1927f0
--- /dev/null
+++ b/src/modules/cs/static/emoji/fearful-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/flushed-face.png b/src/modules/cs/static/emoji/flushed-face.png
new file mode 100644
index 0000000..adad5ca
--- /dev/null
+++ b/src/modules/cs/static/emoji/flushed-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/freezing-face.png b/src/modules/cs/static/emoji/freezing-face.png
new file mode 100644
index 0000000..97a9310
--- /dev/null
+++ b/src/modules/cs/static/emoji/freezing-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/frowning-face-with-open-mouth.png b/src/modules/cs/static/emoji/frowning-face-with-open-mouth.png
new file mode 100644
index 0000000..1ec8ac6
--- /dev/null
+++ b/src/modules/cs/static/emoji/frowning-face-with-open-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/grimacing-face.png b/src/modules/cs/static/emoji/grimacing-face.png
new file mode 100644
index 0000000..82ca911
--- /dev/null
+++ b/src/modules/cs/static/emoji/grimacing-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png b/src/modules/cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png
new file mode 100644
index 0000000..7f3ec34
--- /dev/null
+++ b/src/modules/cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/grinning-face-with-smiling-eyes.png b/src/modules/cs/static/emoji/grinning-face-with-smiling-eyes.png
new file mode 100644
index 0000000..d90a62d
--- /dev/null
+++ b/src/modules/cs/static/emoji/grinning-face-with-smiling-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/grinning-face-with-star-eyes.png b/src/modules/cs/static/emoji/grinning-face-with-star-eyes.png
new file mode 100644
index 0000000..9d3a098
--- /dev/null
+++ b/src/modules/cs/static/emoji/grinning-face-with-star-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/grinning-face.png b/src/modules/cs/static/emoji/grinning-face.png
new file mode 100644
index 0000000..56e7da7
--- /dev/null
+++ b/src/modules/cs/static/emoji/grinning-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/hugging-face.png b/src/modules/cs/static/emoji/hugging-face.png
new file mode 100644
index 0000000..edc9e01
--- /dev/null
+++ b/src/modules/cs/static/emoji/hugging-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/hushed-face.png b/src/modules/cs/static/emoji/hushed-face.png
new file mode 100644
index 0000000..f236530
--- /dev/null
+++ b/src/modules/cs/static/emoji/hushed-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/imp.png b/src/modules/cs/static/emoji/imp.png
new file mode 100644
index 0000000..7a4bcdb
--- /dev/null
+++ b/src/modules/cs/static/emoji/imp.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/kissing-face-with-closed-eyes.png b/src/modules/cs/static/emoji/kissing-face-with-closed-eyes.png
new file mode 100644
index 0000000..a16080e
--- /dev/null
+++ b/src/modules/cs/static/emoji/kissing-face-with-closed-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/kissing-face-with-smiling-eyes.png b/src/modules/cs/static/emoji/kissing-face-with-smiling-eyes.png
new file mode 100644
index 0000000..f041364
--- /dev/null
+++ b/src/modules/cs/static/emoji/kissing-face-with-smiling-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/kissing-face.png b/src/modules/cs/static/emoji/kissing-face.png
new file mode 100644
index 0000000..7f57e24
--- /dev/null
+++ b/src/modules/cs/static/emoji/kissing-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/loudly-crying-face.png b/src/modules/cs/static/emoji/loudly-crying-face.png
new file mode 100644
index 0000000..37bc4fd
--- /dev/null
+++ b/src/modules/cs/static/emoji/loudly-crying-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/lying-face.png b/src/modules/cs/static/emoji/lying-face.png
new file mode 100644
index 0000000..a7af452
--- /dev/null
+++ b/src/modules/cs/static/emoji/lying-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/money-mouth-face.png b/src/modules/cs/static/emoji/money-mouth-face.png
new file mode 100644
index 0000000..e72b3b8
--- /dev/null
+++ b/src/modules/cs/static/emoji/money-mouth-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/nauseated-face.png b/src/modules/cs/static/emoji/nauseated-face.png
new file mode 100644
index 0000000..2b30261
--- /dev/null
+++ b/src/modules/cs/static/emoji/nauseated-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/nerd-face.png b/src/modules/cs/static/emoji/nerd-face.png
new file mode 100644
index 0000000..c915863
--- /dev/null
+++ b/src/modules/cs/static/emoji/nerd-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/neutral-face.png b/src/modules/cs/static/emoji/neutral-face.png
new file mode 100644
index 0000000..8fc3f3e
--- /dev/null
+++ b/src/modules/cs/static/emoji/neutral-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/overheated-face.png b/src/modules/cs/static/emoji/overheated-face.png
new file mode 100644
index 0000000..b8c9f63
--- /dev/null
+++ b/src/modules/cs/static/emoji/overheated-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/pensive-face.png b/src/modules/cs/static/emoji/pensive-face.png
new file mode 100644
index 0000000..1eefb52
--- /dev/null
+++ b/src/modules/cs/static/emoji/pensive-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/persevering-face.png b/src/modules/cs/static/emoji/persevering-face.png
new file mode 100644
index 0000000..daa2cc0
--- /dev/null
+++ b/src/modules/cs/static/emoji/persevering-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/pouting-face.png b/src/modules/cs/static/emoji/pouting-face.png
new file mode 100644
index 0000000..398f18a
--- /dev/null
+++ b/src/modules/cs/static/emoji/pouting-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/relieved-face.png b/src/modules/cs/static/emoji/relieved-face.png
new file mode 100644
index 0000000..502f517
--- /dev/null
+++ b/src/modules/cs/static/emoji/relieved-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/rolling-on-the-floor-laughing.png b/src/modules/cs/static/emoji/rolling-on-the-floor-laughing.png
new file mode 100644
index 0000000..2eabc38
--- /dev/null
+++ b/src/modules/cs/static/emoji/rolling-on-the-floor-laughing.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/serious-face-with-symbols-covering-mouth.png b/src/modules/cs/static/emoji/serious-face-with-symbols-covering-mouth.png
new file mode 100644
index 0000000..c5c95e0
--- /dev/null
+++ b/src/modules/cs/static/emoji/serious-face-with-symbols-covering-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/shocked-face-with-exploding-head.png b/src/modules/cs/static/emoji/shocked-face-with-exploding-head.png
new file mode 100644
index 0000000..c939400
--- /dev/null
+++ b/src/modules/cs/static/emoji/shocked-face-with-exploding-head.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/sleeping-face.png b/src/modules/cs/static/emoji/sleeping-face.png
new file mode 100644
index 0000000..749e4ee
--- /dev/null
+++ b/src/modules/cs/static/emoji/sleeping-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/sleepy-face.png b/src/modules/cs/static/emoji/sleepy-face.png
new file mode 100644
index 0000000..21b72c1
--- /dev/null
+++ b/src/modules/cs/static/emoji/sleepy-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/slightly-frowning-face.png b/src/modules/cs/static/emoji/slightly-frowning-face.png
new file mode 100644
index 0000000..8608109
--- /dev/null
+++ b/src/modules/cs/static/emoji/slightly-frowning-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/slightly-smiling-face.png b/src/modules/cs/static/emoji/slightly-smiling-face.png
new file mode 100644
index 0000000..a0d68d1
--- /dev/null
+++ b/src/modules/cs/static/emoji/slightly-smiling-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-halo.png b/src/modules/cs/static/emoji/smiling-face-with-halo.png
new file mode 100644
index 0000000..0cd0b3d
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-halo.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-heart-shaped-eyes.png b/src/modules/cs/static/emoji/smiling-face-with-heart-shaped-eyes.png
new file mode 100644
index 0000000..2cefcb5
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-heart-shaped-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-horns.png b/src/modules/cs/static/emoji/smiling-face-with-horns.png
new file mode 100644
index 0000000..f0b56af
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-horns.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png b/src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png
new file mode 100644
index 0000000..a702c93
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png b/src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png
new file mode 100644
index 0000000..83ebaa5
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-open-mouth.png b/src/modules/cs/static/emoji/smiling-face-with-open-mouth.png
new file mode 100644
index 0000000..7798b41
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-open-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png b/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png
new file mode 100644
index 0000000..27777df
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png b/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png
new file mode 100644
index 0000000..d621f0d
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes.png b/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes.png
new file mode 100644
index 0000000..69700dc
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-smiling-eyes.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smiling-face-with-sunglasses.png b/src/modules/cs/static/emoji/smiling-face-with-sunglasses.png
new file mode 100644
index 0000000..2a70eff
--- /dev/null
+++ b/src/modules/cs/static/emoji/smiling-face-with-sunglasses.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/smirking-face.png b/src/modules/cs/static/emoji/smirking-face.png
new file mode 100644
index 0000000..430d45b
--- /dev/null
+++ b/src/modules/cs/static/emoji/smirking-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/sneezing-face.png b/src/modules/cs/static/emoji/sneezing-face.png
new file mode 100644
index 0000000..18f5b95
--- /dev/null
+++ b/src/modules/cs/static/emoji/sneezing-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/thinking-face.png b/src/modules/cs/static/emoji/thinking-face.png
new file mode 100644
index 0000000..7431ed0
--- /dev/null
+++ b/src/modules/cs/static/emoji/thinking-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/tired-face.png b/src/modules/cs/static/emoji/tired-face.png
new file mode 100644
index 0000000..ff0898f
--- /dev/null
+++ b/src/modules/cs/static/emoji/tired-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/upside-down-face.png b/src/modules/cs/static/emoji/upside-down-face.png
new file mode 100644
index 0000000..677f746
--- /dev/null
+++ b/src/modules/cs/static/emoji/upside-down-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/weary-face.png b/src/modules/cs/static/emoji/weary-face.png
new file mode 100644
index 0000000..74325b9
--- /dev/null
+++ b/src/modules/cs/static/emoji/weary-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/white-frowning-face.png b/src/modules/cs/static/emoji/white-frowning-face.png
new file mode 100644
index 0000000..3644ff5
--- /dev/null
+++ b/src/modules/cs/static/emoji/white-frowning-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/white-smiling-face.png b/src/modules/cs/static/emoji/white-smiling-face.png
new file mode 100644
index 0000000..082b271
--- /dev/null
+++ b/src/modules/cs/static/emoji/white-smiling-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/winking-face.png b/src/modules/cs/static/emoji/winking-face.png
new file mode 100644
index 0000000..59c99e0
--- /dev/null
+++ b/src/modules/cs/static/emoji/winking-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/worried-face.png b/src/modules/cs/static/emoji/worried-face.png
new file mode 100644
index 0000000..8638920
--- /dev/null
+++ b/src/modules/cs/static/emoji/worried-face.png
Binary files differ
diff --git a/src/modules/cs/static/emoji/zipper-mouth-face.png b/src/modules/cs/static/emoji/zipper-mouth-face.png
new file mode 100644
index 0000000..79e02a3
--- /dev/null
+++ b/src/modules/cs/static/emoji/zipper-mouth-face.png
Binary files differ
diff --git a/src/modules/cs/types/index.d.ts b/src/modules/cs/types/index.d.ts
new file mode 100644
index 0000000..2256fa8
--- /dev/null
+++ b/src/modules/cs/types/index.d.ts
@@ -0,0 +1,13 @@
+export declare namespace Cs {
+	interface Content {
+		type: "text" | "image" | "voice" | "video" | "file" | "link" | "location" | "emoji";
+		data: string;
+	}
+
+	interface Msg extends Eps.CsMsgEntity {
+		content: Content;
+		sessionId?: number;
+	}
+
+	interface Session extends Eps.CsSessionEntity {}
+}
diff --git a/src/modules/cs/utils/index.ts b/src/modules/cs/utils/index.ts
new file mode 100644
index 0000000..9499acb
--- /dev/null
+++ b/src/modules/cs/utils/index.ts
@@ -0,0 +1,52 @@
+import dayjs from "dayjs";
+import type { Cs } from "../types";
+
+// 娑堟伅鏍煎紡鍖�
+export function msgFormatter(msg: Cs.Msg) {
+	if (!msg) {
+		return "";
+	}
+
+	switch (msg.content.type) {
+		case "text":
+			return msg.content.data;
+
+		case "emoji":
+			return "銆愯〃鎯呫��";
+
+		case "image":
+			return "銆愬浘鐗囥��";
+
+		case "link":
+			return "銆愰摼鎺ャ��";
+
+		case "voice":
+			return "銆愰煶棰戙��";
+
+		case "file":
+			return "銆愭枃浠躲��";
+
+		case "video":
+			return "銆愯棰戙��";
+
+		case "location":
+			return "銆愬畾浣嶃��";
+	}
+}
+
+// 鏃ユ湡鏍煎紡鍖�
+export function dateFormatter(date?: Date) {
+	const t = dayjs(date);
+
+	// 鍦ㄤ粖澶╀箣鍓�
+	if (t.isBefore(dayjs().hour(0).minute(0).second(0))) {
+		return t.format("YYYY-MM-DD HH:mm");
+	} else {
+		return t.format("HH:mm");
+	}
+}
+
+// 琛ㄦ儏閾炬帴
+export function getEmoji(name: string) {
+	return new URL(`../static/emoji/${name}`, import.meta.url).href;
+}
diff --git a/src/modules/demo/views/home/components/count-category.vue b/src/modules/demo/views/home/components/count-category.vue
new file mode 100644
index 0000000..1789763
--- /dev/null
+++ b/src/modules/demo/views/home/components/count-category.vue
@@ -0,0 +1,128 @@
+<template>
+	<div class="category-ratio">
+		<div class="card">
+			<div class="card__header">
+				<span class="label">閿�鍞被鍒崰姣�</span>
+
+				<el-icon class="more" @click="router.push('/goods/category')">
+					<arrow-right-bold />
+				</el-icon>
+			</div>
+
+			<div class="card__container">
+				<v-chart :option="chartOption" autoresize />
+			</div>
+		</div>
+	</div>
+</template>
+
+<script lang="ts" setup>
+import { onMounted, reactive, ref } from "vue";
+import { useCool } from "/@/cool";
+import { ArrowRightBold } from "@element-plus/icons-vue";
+import { orderBy } from "lodash-es";
+
+const { service, router } = useCool();
+
+const list = ref<{ typeName: string; total: number }[]>([]);
+
+const chartOption = reactive({
+	legend: {
+		top: 50,
+		left: 15,
+		orient: "vertical",
+		icon: "circle",
+		data: [] as string[],
+		formatter(name: string) {
+			const d = list.value.find((e) => e.typeName === name);
+
+			return `${d?.typeName}锛�${d?.total}锛塦;
+		}
+	},
+
+	series: [
+		{
+			type: "pie",
+			padAngle: 5,
+			radius: ["45%", "60%"],
+			center: ["75%", "55%"],
+			avoidLabelOverlap: false,
+			label: {
+				show: false,
+				position: "center"
+			},
+			emphasis: {
+				label: {
+					show: true,
+					fontSize: "15",
+					fontWeight: "bold"
+				}
+			},
+			labelLine: {
+				show: false
+			},
+			data: [] as any[],
+			itemStyle: {
+				borderColor: "#fff",
+				borderWidth: 2,
+				borderRadius: 4
+			}
+		}
+	]
+});
+
+onMounted(() => {
+	service.count.home
+		.goodsCategory({
+			type: "count"
+		})
+		.then((res: any[]) => {
+			// 鍊掑簭
+			const arr = orderBy(res, "total", "desc").map((e) => {
+				return {
+					...e,
+					total: Number(e.total)
+				};
+			});
+
+			// 鍓�5涓厛
+			const rank = arr.filter((_, i) => i < 5);
+
+			// 鍚堝苟鍏朵粬
+			const other = {
+				typeName: "鍏朵粬",
+				total: arr.splice(5).reduce((a, b) => a + b.total, 0)
+			};
+
+			list.value = [...rank, other];
+
+			// 璁剧疆鍥句緥
+			chartOption.legend.data = list.value.map((e) => e.typeName);
+
+			// 璁剧疆鏁版嵁
+			chartOption.series[0].data = list.value.map((e) => {
+				return {
+					value: e.total,
+					name: e.typeName
+				};
+			});
+		});
+});
+</script>
+
+<style lang="scss" scoped>
+.category-ratio {
+	position: relative;
+
+	.echarts {
+		height: 150px;
+		position: absolute;
+		right: 0;
+		top: 0;
+	}
+
+	.card__container {
+		height: 100px;
+	}
+}
+</style>
diff --git a/src/modules/demo/views/home/components/goods-rank.vue b/src/modules/demo/views/home/components/goods-rank.vue
new file mode 100644
index 0000000..c09e576
--- /dev/null
+++ b/src/modules/demo/views/home/components/goods-rank.vue
@@ -0,0 +1,93 @@
+<template>
+	<div class="goods-rank">
+		<div class="goods-rank__header">
+			<span>鍟嗗搧閿�鍞帓琛�</span>
+		</div>
+
+		<div class="goods-rank__container">
+			<div class="goods-rank__table">
+				<cl-crud ref="Crud" padding="0">
+					<cl-table ref="Table" :border="false" />
+				</cl-crud>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script lang="ts" setup>
+import { useCrud, useTable } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+
+const { service } = useCool();
+
+const Crud = useCrud(
+	{
+		service: service.count.home,
+		dict: {
+			api: {
+				page: "goodsRank"
+			}
+		}
+	},
+	(app) => {
+		app.refresh({
+			type: "amount",
+			limit: 10
+		});
+	}
+);
+
+const Table = useTable({
+	autoHeight: false,
+	contextMenu: [],
+	columns: [
+		{
+			label: "鎺掑悕",
+			type: "index",
+			width: 60
+		},
+		{
+			label: "鍟嗗搧鏍囬",
+			prop: "title",
+			align: "left",
+			showOverflowTooltip: true,
+			minWidth: 200
+		},
+		{
+			label: "鍟嗗搧鍥炬爣",
+			prop: "mainPic",
+			width: 140,
+			component: {
+				name: "cl-image",
+				props: {
+					size: 40
+				}
+			}
+		},
+		{
+			label: "閿�鍞噾棰�",
+			prop: "total",
+			width: 140
+		}
+	]
+});
+</script>
+
+<style lang="scss" scoped>
+.goods-rank {
+	&__header {
+		display: flex;
+		align-items: center;
+		height: 50px;
+		font-size: 15px;
+		font-weight: bold;
+		padding: 0 20px;
+	}
+
+	&__table {
+		padding: 0 10px 20px 10px;
+		margin: 0 10px;
+		background-color: var(--el-bg-color);
+	}
+}
+</style>
diff --git a/src/modules/demo/views/test/crud.vue b/src/modules/demo/views/test/crud.vue
new file mode 100644
index 0000000..958bd79
--- /dev/null
+++ b/src/modules/demo/views/test/crud.vue
@@ -0,0 +1,205 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<cl-refresh-btn />
+			<cl-add-btn />
+			<cl-flex1 />
+			<cl-search ref="Search" />
+		</cl-row>
+
+		<cl-row>
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<cl-pagination />
+		</cl-row>
+
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" setup>
+defineOptions({
+	name: 'user-info'
+});
+
+import { useCrud, useTable, useUpsert, useSearch } from '@cool-vue/crud';
+import { useCool } from '/@/cool';
+import { useDict } from '/$/dict';
+import { useI18n } from 'vue-i18n';
+import { reactive } from 'vue';
+
+const { service } = useCool();
+const { t } = useI18n();
+const { dict } = useDict();
+
+const options = reactive({
+	gender: [
+		{ label: t('鏈煡'), value: 0, type: 'default' },
+		{ label: t('鐢�'), value: 1, type: 'success' },
+		{ label: t('濂�'), value: 2, type: 'danger' }
+	],
+	status: [
+		{ label: t('绂佺敤'), value: 0, type: 'danger' },
+		{ label: t('姝e父'), value: 1, type: 'success' },
+		{ label: t('宸叉敞閿�'), value: 2, type: 'warning' }
+	],
+	loginType: [
+		{ label: t('灏忕▼搴�'), value: 0, type: 'default' },
+		{ label: t('鍏紬鍙�'), value: 1, type: 'success' },
+		{ label: t('H5'), value: 2, type: 'info' }
+	]
+});
+
+const Upsert = useUpsert({
+	items: [
+		{
+			label: t('鐧诲綍鍞竴ID'),
+			prop: 'unionid',
+			component: { name: 'el-input' },
+			required: false,
+			span: 12
+		},
+		{
+			label: t('澶村儚'),
+			prop: 'avatarUrl',
+			component: { name: 'cl-upload', props: { size: 120 } },
+			required: false,
+			span: 12
+		},
+		{
+			label: t('鏄电О'),
+			prop: 'nickName',
+			component: { name: 'el-input' },
+			required: true,
+			span: 12
+		},
+		{
+			label: t('鎵嬫満鍙�'),
+			prop: 'phone',
+			component: { name: 'el-input' },
+			required: false,
+			span: 12
+		},
+		{
+			label: t('鎬у埆'),
+			prop: 'gender',
+			component: { name: 'cl-select', props: { options: options.gender } },
+			required: true,
+			value: 0,
+			span: 12
+		},
+		{
+			label: t('鐘舵��'),
+			prop: 'status',
+			component: { name: 'cl-select', props: { options: options.status } },
+			required: true,
+			value: 1,
+			span: 12
+		},
+		{
+			label: t('鐧诲綍鏂瑰紡'),
+			prop: 'loginType',
+			component: { name: 'cl-select', props: { options: options.loginType } },
+			required: true,
+			value: 0,
+			span: 12
+		},
+		{
+			label: t('鏉ユ簮'),
+			prop: 'source',
+			component: { name: 'cl-select', props: { dict: dict.get('sourceType') } },
+			required: true,
+			value: 0,
+			span: 12
+		},
+		{
+			label: t('瀵嗙爜'),
+			prop: 'password',
+			component: { name: 'el-input' },
+			required: false,
+			span: 12
+		},
+		{
+			label: t('浠嬬粛'),
+			prop: 'description',
+			component: { name: 'el-input', props: { type: 'textarea' } },
+			required: false,
+			span: 24
+		},
+		{
+			label: t('浣欓'),
+			prop: 'balance',
+			component: { name: 'el-input-number', props: { precision: 2 } },
+			required: true,
+			value: 0,
+			span: 12
+		},
+		{
+			label: t('鏍囬'),
+			prop: 'goodsName',
+			component: { name: 'el-input' },
+			required: true,
+			span: 12
+		}
+	]
+});
+
+const Table = useTable({
+	columns: [
+		{ label: t('ID'), prop: 'id', minWidth: 120 },
+		{ label: t('鐧诲綍鍞竴ID'), prop: 'unionid', minWidth: 120, showOverflowTooltip: true },
+		{
+			label: t('澶村儚'),
+			prop: 'avatarUrl',
+			minWidth: 120,
+			component: { name: 'cl-image', props: { size: ['50px', '50px'] } }
+		},
+		{ label: t('鏄电О'), prop: 'nickName', minWidth: 120, showOverflowTooltip: true },
+		{ label: t('鎵嬫満鍙�'), prop: 'phone', minWidth: 120, showOverflowTooltip: true },
+		{ label: t('鎬у埆'), prop: 'gender', minWidth: 120, dict: options.gender },
+		{ label: t('鐘舵��'), prop: 'status', minWidth: 120, dict: options.status },
+		{ label: t('鐧诲綍鏂瑰紡'), prop: 'loginType', minWidth: 120, dict: options.loginType },
+		{ label: t('鏉ユ簮'), prop: 'source', minWidth: 120, dict: dict.get('sourceType') },
+		{ label: t('鏍囬'), prop: 'goodsName', minWidth: 120, showOverflowTooltip: true },
+		{ label: t('鍒涘缓鏃堕棿'), prop: 'createTime', minWidth: 170, sortable: 'desc' },
+		{ label: t('鏇存柊鏃堕棿'), prop: 'updateTime', minWidth: 170, sortable: 'custom' }
+	]
+});
+
+const Crud = useCrud(
+	{
+		service: service.user.info
+	},
+	app => {
+		app.refresh();
+	}
+);
+
+const Search = useSearch({
+	items: [
+		{
+			label: t('鎬у埆'),
+			prop: 'gender',
+			component: { name: 'cl-select', props: { options: options.gender } }
+		},
+		{
+			label: t('鐘舵��'),
+			prop: 'status',
+			component: { name: 'cl-select', props: { options: options.status } }
+		},
+		{
+			prop: 'keyWord',
+			component: {
+				name: 'el-input',
+				props: {
+					placeholder: t('鎼滅储鎵嬫満鍙枫�佹樀绉�'),
+					clearable: true
+				}
+			}
+		}
+	]
+});
+</script>
diff --git a/src/modules/goods/components/select.vue b/src/modules/goods/components/select.vue
new file mode 100644
index 0000000..ca689cd
--- /dev/null
+++ b/src/modules/goods/components/select.vue
@@ -0,0 +1,371 @@
+<template>
+	<div class="goods-select__inner">
+		<template v-if="multiple">
+			<div class="btns">
+				<el-button type="success" @click="open">娣诲姞</el-button>
+				<el-button
+					type="danger"
+					:disabled="refs.table?.selection.length == 0"
+					@click="remove"
+					>绉婚櫎</el-button
+				>
+			</div>
+
+			<cl-crud padding="0">
+				<cl-table :data="data" :ref="setRefs('table')" :auto-height="false" />
+
+				<cl-row type="flex" align="middle" justify="end" :style="{ marginTop: '10px' }">
+					<el-pagination
+						v-model:current-page="pager.page"
+						:page-size="pager.size"
+						:total="list.length"
+						background
+						layout="total, prev, pager, next, jumper"
+					/>
+				</cl-row>
+			</cl-crud>
+		</template>
+
+		<template v-else>
+			<slot>
+				<div class="goods" @click="open">
+					<template v-if="data[0]">
+						<cl-avatar :size="24" :src="data[0].mainPic"></cl-avatar>
+						<span>{{ data[0].name }}</span>
+
+						<el-icon @click.stop="remove">
+							<circle-close />
+						</el-icon>
+					</template>
+
+					<span class="placeholder" v-else>璇烽�夋嫨鍟嗗搧</span>
+				</div>
+			</slot>
+		</template>
+	</div>
+
+	<cl-dialog v-model="visible" width="1200px" title="閫夋嫨鍟嗗搧">
+		<cl-crud ref="Crud" padding="0">
+			<cl-row>
+				<!-- 鍒锋柊鎸夐挳 -->
+				<cl-refresh-btn />
+
+				<!-- 鍏ㄩ�� -->
+				<el-button type="primary" @click="selectAll" v-if="multiple">鍏ㄩ��</el-button>
+
+				<cl-filter label="鍒嗙被">
+					<cl-select
+						tree
+						:options="options.type"
+						prop="typeId"
+						all-levels-id
+						:width="140"
+					/>
+				</cl-filter>
+
+				<cl-filter label="鐘舵��">
+					<cl-select :options="options.status" prop="status" :width="140" />
+				</cl-filter>
+
+				<cl-flex1 />
+				<!-- 鍏抽敭瀛楁悳绱� -->
+				<cl-search-key placeholder="鎼滅储鏍囬" />
+			</cl-row>
+
+			<cl-row>
+				<!-- 鏁版嵁琛ㄦ牸 -->
+				<cl-table ref="Table" :auto-height="false" @selection-change="onSelectionChange">
+					<template #column-check="{ scope }">
+						<el-button type="success" disabled v-if="selection[0]?.id == scope.row.id"
+							>宸查��</el-button
+						>
+						<el-button @click="select(scope.row)" v-else>閫夋嫨</el-button>
+					</template>
+				</cl-table>
+			</cl-row>
+
+			<cl-row>
+				<span v-if="multiple">宸查�� {{ selection.length }} 浠�</span>
+				<cl-flex1 />
+				<!-- 鍒嗛〉鎺т欢 -->
+				<cl-pagination />
+			</cl-row>
+		</cl-crud>
+
+		<template #footer>
+			<el-button @click="close">鍙栨秷</el-button>
+			<el-button
+				type="success"
+				:disabled="isEmpty(selection)"
+				@click="select()"
+				v-if="multiple"
+				>閫夋嫨</el-button
+			>
+		</template>
+	</cl-dialog>
+</template>
+
+<script lang="ts" setup name="goods-select">
+import { useCrud, useForm, useTable } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { type PropType, computed, nextTick, reactive, ref, watch } from "vue";
+import { cloneDeep, isEmpty } from "lodash-es";
+import { CircleClose } from "@element-plus/icons-vue";
+import type { Dict } from "/$/dict/types";
+import { deepTree } from "/@/cool/utils";
+
+// 鏇挎崲浣犵殑绫诲瀷
+type Item = Eps.GoodsInfoEntity;
+
+const props = defineProps({
+	modelValue: {
+		type: Array as PropType<Item[]>,
+		default: () => []
+	},
+	isDisabled: Boolean,
+	prop: String,
+	scope: null,
+	disabled: Boolean,
+
+	// 鏄惁澶氶��
+	multiple: {
+		type: Boolean,
+		default: true
+	}
+});
+
+const emit = defineEmits(["update:modelValue", "change"]);
+
+const { service, refs, setRefs } = useCool();
+
+// 涓婄骇琛ㄥ崟
+const Form = useForm();
+
+// 閫夐」
+const options = reactive({
+	status: [
+		{
+			label: "鍚敤",
+			value: 1,
+			type: "success"
+		},
+		{
+			label: "绂佺敤",
+			value: 0,
+			type: "danger"
+		}
+	],
+	type: [] as Dict.Item[]
+});
+
+// cl-table
+const Table = useTable({
+	contextMenu: [],
+	columns: [
+		props.multiple
+			? {
+					type: "selection",
+					width: 60,
+					reserveSelection: true
+			  }
+			: {
+					label: "鎿嶄綔",
+					prop: "check",
+					width: 100
+			  },
+		{ label: "鍒嗙被", prop: "typeId", minWidth: 160, dict: computed(() => options.type) },
+		{ label: "鏍囬", prop: "title", minWidth: 240 },
+		{
+			label: "涓诲浘",
+			prop: "mainPic",
+			minWidth: 100,
+			component: { name: "cl-image", props: { size: 50 } }
+		},
+		{
+			label: "绀轰緥鍥�",
+			prop: "pics",
+			minWidth: 100,
+			component: { name: "cl-image", props: { size: 50 } }
+		},
+		{ label: "浠锋牸", prop: "price", minWidth: 100, sortable: "custom" },
+		{ label: "宸插敭", prop: "sold", minWidth: 100, sortable: "custom" },
+		{ label: "鎺掑簭", prop: "sortNum", minWidth: 100, sortable: "desc" },
+		{
+			label: "鐘舵��",
+			prop: "status",
+			minWidth: 100,
+			dict: options.status
+		},
+		{
+			label: "鍒涘缓鏃堕棿",
+			prop: "createTime",
+			sortable: "desc",
+			minWidth: 160
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud({
+	service: service.goods.info,
+	async onRefresh(params, { next }) {
+		const res = await next(params);
+
+		// 娣诲姞宸插姞杞藉垪琛ㄧ殑 id
+		loadIds.value.push(...res.list.map((e) => e.id));
+
+		// 鏁版嵁鍙嶉��
+		selection.value.forEach((e) => {
+			const d = Table.value?.data.find((a) => a.id == e.id);
+
+			if (d) {
+				Table.value?.toggleRowSelection(d, true);
+			}
+		});
+	}
+});
+
+// 鍒锋柊
+async function refresh(params?: any) {
+	return Crud.value?.refresh(params);
+}
+
+// 寮圭獥鏄惁鍙
+const visible = ref(false);
+
+// 宸查�夌殑鏁版嵁鍒楄〃锛屽弻鍚戠粦瀹氱敤
+const list = ref<Item[]>([]);
+
+// 宸查�夊垪琛�
+const selection = ref<any[]>([]);
+
+// 鍒嗛〉
+const pager = reactive({
+	page: 1,
+	size: 10
+});
+
+// 鍒嗛〉鏁版嵁
+const data = computed(() => {
+	const { page, size } = pager;
+	return list.value.slice((page - 1) * size, page * size);
+});
+
+// 宸插姞杞藉垪琛ㄧ殑 id
+const loadIds = ref<number[]>([]);
+
+// 鐩戝惉宸查�夊垪琛�
+function onSelectionChange(arr: Item[]) {
+	// 宸插姞杞界殑
+	const ids = Array.from(new Set(loadIds.value));
+
+	// 杩囨护鎺夊凡鍔犺浇鐨勶紝鍐嶅姞涓婂凡閫夌殑
+	selection.value = selection.value.filter((e) => !ids.includes(e.id!)).concat(...arr);
+}
+
+// 鎵撳紑閫夋嫨寮圭獥
+function open() {
+	visible.value = true;
+
+	// 娓呯┖鏁版嵁
+	loadIds.value = [];
+
+	// 璁剧疆宸查��
+	selection.value = cloneDeep(list.value);
+
+	nextTick(() => {
+		// 鑾峰彇鍒嗙被
+		service.goods.type.list().then((res) => {
+			res.forEach((e) => {
+				e.label = e.name;
+				e.value = e.id;
+			});
+
+			options.type = deepTree(res);
+		});
+
+		refresh({
+			size: 10
+		});
+	});
+}
+
+// 鍏抽棴閫夋嫨寮圭獥
+function close() {
+	visible.value = false;
+}
+
+// 閫夋嫨
+function select(item?: Item) {
+	// 鍗曢�変笉瑙﹀彂 onSelectionChange 鎵嬪姩璁剧疆
+	if (item) {
+		selection.value = [item];
+	}
+
+	list.value = cloneDeep(selection.value || []);
+
+	close();
+}
+
+// 鍏ㄩ��
+async function selectAll() {
+	// 鍏ㄩ儴鏁版嵁
+	await Crud.value?.refresh({ page: 1, size: 10000 }).then((res) => {
+		list.value = res.list;
+	});
+
+	// 褰撳墠椤垫暟鎹�
+	// list.value = Table.value?.data || [];
+
+	close();
+}
+
+// 绉婚櫎
+function remove() {
+	const ids = selection.value.map((e) => e.id);
+
+	list.value = list.value.filter((e) => {
+		// 娓呯┖閫夋嫨鐘舵��
+		refs.table?.toggleRowSelection(e, false);
+
+		// 绉婚櫎宸查�夌殑
+		return !ids.find((id) => id == e.id);
+	});
+}
+
+// 鐩戝惉宸查�夊垪琛紝杩斿洖 ids/id
+watch(
+	list,
+	(arr = []) => {
+		const ids = arr.map((e) => e.id);
+
+		if (props.multiple) {
+			emit("update:modelValue", ids);
+			emit("change", ids);
+		} else {
+			emit("update:modelValue", ids[0]);
+			emit("change", ids[0]);
+		}
+
+		Form.value?.validateField(props.prop);
+	},
+	{
+		deep: true
+	}
+);
+
+defineExpose({
+	remove,
+	select,
+	selectAll,
+	open
+});
+</script>
+
+<style lang="scss" scoped>
+.goods-select__inner {
+	.btns {
+		margin-bottom: 10px;
+	}
+}
+</style>
diff --git a/src/modules/goods/components/spec.vue b/src/modules/goods/components/spec.vue
new file mode 100644
index 0000000..e4a0293
--- /dev/null
+++ b/src/modules/goods/components/spec.vue
@@ -0,0 +1,322 @@
+<template>
+	<cl-form ref="Form">
+		<template #slot-spec>
+			<cl-crud padding="0">
+				<cl-row>
+					<el-button type="success" @click="add">娣诲姞瑙勬牸</el-button>
+					<el-button
+						:disabled="Table?.selection.length == 0"
+						type="danger"
+						@click="remove()"
+						>鍒犻櫎</el-button
+					>
+				</cl-row>
+
+				<cl-row>
+					<cl-table ref="Table" :data="data" :auto-height="false">
+						<template #column-images="{ scope }">
+							<cl-upload
+								small
+								:size="40"
+								draggable
+								multiple
+								v-model="scope.row.images"
+								@change="onChange(scope.row)"
+							/>
+						</template>
+
+						<template #column-name="{ scope }">
+							<el-form-item
+								:prop="`spec.${scope.$index}.name`"
+								:rules="{
+									required: true,
+									message: '鍚嶇О涓嶈兘涓虹┖'
+								}"
+							>
+								<el-input
+									v-model="scope.row.name"
+									clearable
+									placeholder="璇疯緭鍏ュ悕绉�"
+									@change="onChange(scope.row)"
+								/>
+							</el-form-item>
+						</template>
+
+						<template #column-price="{ scope }">
+							<el-form-item
+								:prop="`spec.${scope.$index}.price`"
+								:rules="{
+									required: true,
+									message: '浠锋牸涓嶈兘涓虹┖'
+								}"
+							>
+								<el-input-number
+									v-model="scope.row.price"
+									:min="0.01"
+									:max="100000"
+									:precision="2"
+									:controls="false"
+									placeholder="浠锋牸"
+									@change="onChange(scope.row)"
+								/>
+							</el-form-item>
+						</template>
+
+						<template #column-stock="{ scope }">
+							<el-form-item>
+								<el-input-number
+									v-model="scope.row.stock"
+									:min="0"
+									:max="100000"
+									:precision="0"
+									:controls="false"
+									placeholder="搴撳瓨"
+									@change="onChange(scope.row)"
+								/>
+							</el-form-item>
+						</template>
+
+						<template #column-sortNum="{ scope }">
+							<el-form-item>
+								<el-input-number
+									v-model="scope.row.sortNum"
+									:min="0"
+									:max="100000"
+									:precision="0"
+									:controls="false"
+									placeholder="鎺掑簭"
+								/>
+							</el-form-item>
+						</template>
+
+						<template #slot-btn="{ scope }">
+							<el-icon class="del-btn" @click="remove(scope.row.uid)">
+								<delete />
+							</el-icon>
+						</template>
+					</cl-table>
+				</cl-row>
+			</cl-crud>
+		</template>
+	</cl-form>
+</template>
+
+<script lang="ts" setup name="goods-spec">
+import { useForm, useTable } from "@cool-vue/crud";
+import { computed, ref } from "vue";
+import { useCool } from "/@/cool";
+import { ElMessage } from "element-plus";
+import { isEmpty, orderBy } from "lodash-es";
+import { Delete } from "@element-plus/icons-vue";
+import { uuid } from "/@/cool/utils";
+
+const { service } = useCool();
+const Form = useForm();
+
+// 瑙勬牸鍒楄〃
+const list = ref<Eps.GoodsSpecEntity[]>([]);
+
+// 琛ㄦ牸鏁版嵁
+const data = computed(() => {
+	return list.value.filter((e) => !e.isDel);
+});
+
+// 浠ヨ鎯呮柟寮忔墦寮�
+async function openById(id: number) {
+	const data = await service.goods.info.info({ id });
+
+	if (data) {
+		open(data);
+	}
+}
+
+// 鎵撳紑
+async function open(info: Eps.GoodsInfoEntity) {
+	await refresh(info.id!);
+
+	Form.value?.open({
+		title: "缂栬緫瑙勬牸",
+		form: {
+			spec: list.value
+		},
+		width: "70%",
+		items: [
+			{
+				prop: "spec",
+				component: {
+					name: "slot-spec"
+				}
+			}
+		],
+		on: {
+			submit(_, { close, done }) {
+				const delIds: number[] = [];
+				const add: Eps.GoodsSpecEntity[] = [];
+				const update: Eps.GoodsSpecEntity[] = [];
+
+				list.value.forEach((e) => {
+					if (e.id) {
+						if (e.isDel) {
+							delIds.push(e.id);
+						}
+
+						if (e.isEdit) {
+							update.push(e);
+						}
+					} else {
+						if (!e.isDel) {
+							add.push(e);
+						}
+					}
+				});
+
+				const arr: Promise<any>[] = [];
+
+				// 瑕佸垹闄ょ殑
+				if (!isEmpty(delIds)) {
+					arr.push(service.goods.spec.delete({ ids: delIds }));
+				}
+
+				// 瑕佹洿鏂扮殑
+				if (!isEmpty(update)) {
+					arr.push(
+						...update.map((e) => {
+							return service.goods.spec.update(e);
+						})
+					);
+				}
+
+				// 瑕佹坊鍔犵殑
+				if (!isEmpty(add)) {
+					arr.push(
+						service.goods.spec.add(
+							add.map((e) => {
+								return {
+									...e,
+									goodsId: info.id
+								};
+							})
+						)
+					);
+				}
+
+				Promise.all(arr)
+					.then(() => {
+						ElMessage.success("淇濆瓨鎴愬姛");
+						close();
+					})
+					.catch((err) => {
+						ElMessage.error(err.message);
+						refresh(info.id!);
+						done();
+					});
+			}
+		}
+	});
+}
+
+// 鍒锋柊
+async function refresh(goodsId: number) {
+	await service.goods.spec.list({ goodsId, order: "sortNum", sort: "desc" }).then((res) => {
+		list.value = res.map((e) => {
+			return {
+				...e,
+				price: Number(e.price),
+				uid: e.id
+			};
+		});
+	});
+}
+
+// 娣诲姞
+function add() {
+	list.value.push({
+		uid: uuid(),
+		name: "",
+		images: []
+	});
+}
+
+// 绉婚櫎
+function remove(uid?: string) {
+	const arr = uid ? [uid] : Table.value?.selection.map((e) => e.uid);
+
+	list.value.forEach((e) => {
+		if (arr?.includes(e.uid)) {
+			e.isDel = true;
+		}
+	});
+}
+
+// 杈撳叆鏀瑰彉
+function onChange(item: Eps.GoodsSpecEntity, prop?: string) {
+	item.isEdit = true;
+
+	// 鎺掑簭鏀瑰彉
+	if (prop == "sortNum") {
+		list.value = orderBy(list.value, "sortNum", "desc");
+	}
+}
+
+const Table = useTable({
+	columns: [
+		{
+			type: "selection"
+		},
+		{
+			label: "鍚嶇О",
+			prop: "name",
+			minWidth: 200,
+			align: "left"
+		},
+		{
+			label: "鍥剧墖",
+			prop: "images",
+			minWidth: 160,
+			align: "left"
+		},
+		{
+			label: "浠锋牸",
+			prop: "price",
+			minWidth: 140,
+			align: "left"
+		},
+		{
+			label: "搴撳瓨",
+			prop: "stock",
+			minWidth: 120,
+			align: "left"
+		},
+		{
+			label: "鎺掑簭",
+			prop: "sortNum",
+			minWidth: 120,
+			align: "left"
+		},
+		{
+			type: "op",
+			width: 80,
+			buttons: ["slot-btn"]
+		}
+	]
+});
+
+defineExpose({
+	open,
+	openById
+});
+</script>
+
+<style lang="scss" scoped>
+.el-form-item {
+	margin-bottom: 0;
+}
+
+.del-btn {
+	cursor: pointer;
+
+	&:hover {
+		color: red;
+	}
+}
+</style>
diff --git a/src/modules/goods/views/comment.vue b/src/modules/goods/views/comment.vue
new file mode 100644
index 0000000..7f289bb
--- /dev/null
+++ b/src/modules/goods/views/comment.vue
@@ -0,0 +1,72 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-view-head />
+
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鐢ㄦ埛鏄电О銆佽瘎璁哄唴瀹�" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+	</cl-crud>
+</template>
+
+<script lang="ts" name="goods-comment" setup>
+import { useCrud, useTable } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+
+const { service, route } = useCool();
+
+// cl-table
+const Table = useTable({
+	contextMenu: [],
+	columns: [
+		{ label: "#", type: "index" },
+		{ label: "鐢ㄦ埛鏄电О", prop: "nickName", minWidth: 140 },
+		{ label: "鍐呭", prop: "content", showOverflowTooltip: true, minWidth: 200 },
+		{
+			label: "鏄熸暟",
+			prop: "starCount",
+			minWidth: 150,
+			component: { name: "el-rate", props: { disabled: true } }
+		},
+		{
+			label: "鍥剧墖",
+			prop: "pics",
+			minWidth: 100,
+			component: { name: "cl-image", props: { size: 60 } }
+		},
+		{
+			label: "鍒涘缓鏃堕棿",
+			prop: "createTime",
+			minWidth: 160,
+			component: { name: "cl-date-text" }
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.goods.comment
+	},
+	(app) => {
+		app.refresh({
+			goodsId: route.query.id
+		});
+	}
+);
+</script>
diff --git a/src/modules/goods/views/info.vue b/src/modules/goods/views/info.vue
new file mode 100644
index 0000000..ab46cf0
--- /dev/null
+++ b/src/modules/goods/views/info.vue
@@ -0,0 +1,277 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+
+			<cl-filter label="鍒嗙被">
+				<cl-select tree :options="options.type" prop="typeId" all-levels-id :width="140" />
+			</cl-filter>
+
+			<cl-filter label="鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="140" />
+			</cl-filter>
+
+			<cl-flex1 />
+
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鏍囬" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+
+		<!-- 鍟嗗搧瑙勬牸 -->
+		<goods-spec :ref="setRefs('goodsSpec')" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="goods-info" setup>
+import { useCrud, useTable, useUpsert } from '@cool-vue/crud';
+import { router, useCool } from '/@/cool';
+import { computed, onActivated, reactive } from 'vue';
+import { deepTree } from '/@/cool/utils';
+import type { Dict } from '/$/dict/types';
+import GoodsSpec from '../components/spec.vue';
+
+const { service, refs, setRefs } = useCool();
+
+const options = reactive({
+	type: [] as Dict.Item[],
+	status: [
+		{
+			label: '宸蹭笂鏋�',
+			value: 1
+		},
+		{
+			label: '宸蹭笅鏋�',
+			value: 0
+		}
+	]
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	dialog: {
+		width: '1000px'
+	},
+	items: [
+		{
+			type: 'tabs',
+			props: {
+				labels: [
+					{
+						label: '鍟嗗搧淇℃伅',
+						value: 'base'
+					},
+					{
+						label: '鍟嗗搧浠嬬粛',
+						value: 'detail'
+					}
+				]
+			}
+		},
+		{
+			group: 'base',
+			label: '鍒嗙被',
+			prop: 'typeId',
+			component: {
+				name: 'cl-select',
+				props: {
+					options: computed(() => options.type),
+					tree: true
+				}
+			},
+			required: true
+		},
+		{
+			group: 'base',
+			label: '鏍囬',
+			prop: 'title',
+			component: { name: 'el-input', props: { clearable: true } },
+			required: true
+		},
+		{
+			group: 'base',
+			label: '鍓爣棰�',
+			prop: 'subTitle',
+			component: { name: 'el-input', props: { clearable: true, type: 'textarea', rows: 3 } }
+		},
+		{
+			group: 'base',
+			label: '涓诲浘',
+			prop: 'mainPic',
+			component: { name: 'cl-upload' },
+			required: true
+		},
+		{
+			group: 'base',
+			label: '绀轰緥鍥�',
+			prop: 'pics',
+			component: { name: 'cl-upload', props: { multiple: true, draggable: true } }
+		},
+		{
+			group: 'base',
+			label: '浠锋牸',
+			prop: 'price',
+			hook: 'number',
+			span: 12,
+			component: {
+				name: 'el-input-number',
+				props: {
+					min: 0.01,
+					max: 1000000
+				}
+			},
+			required: true
+		},
+		{
+			group: 'base',
+			label: '宸插敭',
+			prop: 'sold',
+			hook: 'number',
+			span: 12,
+			component: {
+				name: 'el-input-number',
+				props: {
+					min: 0,
+					max: 1000000
+				}
+			},
+			required: true
+		},
+		{
+			group: 'base',
+			label: '鎺掑簭',
+			prop: 'sortNum',
+			hook: 'number',
+			component: { name: 'el-input-number' }
+		},
+		{
+			group: 'base',
+			label: '鐘舵��',
+			prop: 'status',
+			flex: false,
+			value: 1,
+			component: { name: 'cl-switch' },
+			required: true
+		},
+		{
+			group: 'detail',
+			prop: 'content',
+			component: {
+				name: 'cl-editor-wang'
+			}
+		}
+	],
+	async onSubmit(data, { next }) {
+		const info = await next(data);
+
+		// 鏂板鍚庡脊鍑鸿鏍兼坊鍔�
+		if (Upsert.value?.mode == 'add') {
+			refs.goodsSpec.openById(info.id);
+		}
+	}
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: 'selection' },
+		{ label: '鍒嗙被', prop: 'typeId', minWidth: 160, dict: computed(() => options.type) },
+		{ label: '鏍囬', prop: 'title', minWidth: 240 },
+		{
+			label: '涓诲浘',
+			prop: 'mainPic',
+			minWidth: 100,
+			component: { name: 'cl-image', props: { size: 50 } }
+		},
+		{
+			label: '绀轰緥鍥�',
+			prop: 'pics',
+			minWidth: 100,
+			component: { name: 'cl-image', props: { size: 50 } }
+		},
+		{ label: '浠锋牸', prop: 'price', minWidth: 100, sortable: 'custom' },
+		{ label: '宸插敭', prop: 'sold', minWidth: 100, sortable: 'custom' },
+		{ label: '鐘舵��', prop: 'status', minWidth: 100, component: { name: 'cl-switch' } },
+		{ label: '鎺掑簭', prop: 'sortNum', minWidth: 100, sortable: 'desc' },
+		{ label: '鍒涘缓鏃堕棿', prop: 'createTime', minWidth: 160, sortable: 'custom' },
+		{
+			label: '鏇存柊鏃堕棿',
+			prop: 'updateTime',
+			minWidth: 160,
+			sortable: 'custom'
+		},
+		{
+			type: 'op',
+			width: 300,
+			buttons({ scope }) {
+				return [
+					'edit',
+					'delete',
+					{
+						label: '瑙勬牸',
+						onClick() {
+							refs.goodsSpec.open(scope.row);
+						}
+					},
+					{
+						label: '璇勮',
+						onClick() {
+							router.push({
+								path: '/goods/comment',
+								query: {
+									id: scope.row.id,
+									title: scope.row.title
+								}
+							});
+						}
+					}
+				];
+			}
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.goods.info
+	},
+	app => {
+		app.refresh();
+	}
+);
+
+// 鑾峰彇鍒嗙被
+function getTypes() {
+	service.goods.type.list().then(res => {
+		res.forEach(e => {
+			e.label = e.name;
+			e.value = e.id;
+		});
+
+		options.type = deepTree(res);
+	});
+}
+
+onActivated(() => {
+	getTypes();
+});
+</script>
diff --git a/src/modules/goods/views/search-keyword.vue b/src/modules/goods/views/search-keyword.vue
new file mode 100644
index 0000000..915b788
--- /dev/null
+++ b/src/modules/goods/views/search-keyword.vue
@@ -0,0 +1,85 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鍚嶇О" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="goods-search-keyword" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+
+const { service } = useCool();
+
+// cl-upsert
+const Upsert = useUpsert({
+	dialog: {
+		width: "500px"
+	},
+	props: {
+		labelWidth: "60px"
+	},
+	items: [
+		{
+			label: "鍚嶇О",
+			prop: "name",
+			component: { name: "el-input", props: { clearable: true } },
+			required: true
+		},
+		{ label: "鎺掑簭", prop: "sortNum", hook: "number", component: { name: "el-input-number" } }
+	]
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: "selection" },
+		{ label: "鍚嶇О", prop: "name", minWidth: 140 },
+		{ label: "鎺掑簭", prop: "sortNum", minWidth: 140, sortable: "desc" },
+		{
+			label: "鍒涘缓鏃堕棿",
+			prop: "createTime",
+			minWidth: 160
+		},
+		{
+			label: "鏇存柊鏃堕棿",
+			prop: "updateTime",
+			minWidth: 160
+		},
+		{ type: "op", buttons: ["edit", "delete"] }
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.goods.searchKeyword
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>
diff --git a/src/modules/goods/views/type.vue b/src/modules/goods/views/type.vue
new file mode 100644
index 0000000..fcd2719
--- /dev/null
+++ b/src/modules/goods/views/type.vue
@@ -0,0 +1,163 @@
+<template>
+	<cl-view-group ref="ViewGroup">
+		<template #right>
+			<cl-crud ref="Crud">
+				<cl-row>
+					<!-- 鍒锋柊鎸夐挳 -->
+					<cl-refresh-btn />
+					<!-- 鏂板鎸夐挳 -->
+					<cl-add-btn />
+					<!-- 鍒犻櫎鎸夐挳 -->
+					<cl-multi-delete-btn />
+					<cl-flex1 />
+					<!-- 鍏抽敭瀛楁悳绱� -->
+					<cl-search-key placeholder="鎼滅储鍚嶇О" />
+				</cl-row>
+
+				<cl-row>
+					<!-- 鏁版嵁琛ㄦ牸 -->
+					<cl-table ref="Table" />
+				</cl-row>
+
+				<cl-row>
+					<cl-flex1 />
+					<!-- 鍒嗛〉鎺т欢 -->
+					<cl-pagination />
+				</cl-row>
+
+				<!-- 鏂板銆佺紪杈� -->
+				<cl-upsert ref="Upsert" />
+			</cl-crud>
+		</template>
+	</cl-view-group>
+</template>
+
+<script lang="tsx" name="goods-type" setup>
+import { useCrud, useTable, useUpsert } from '@cool-vue/crud';
+import { useCool } from '/@/cool';
+import { useViewGroup } from '/@/plugins/view';
+import { deepTree } from '/@/cool/utils';
+import { setFocus } from '/@/plugins/crud/plugins/form/setFocus';
+
+const { service } = useCool();
+const { ViewGroup } = useViewGroup<Eps.GoodsTypeEntity>({
+	service: service.goods.type,
+	label: '涓�绾у垎绫�',
+	title: '浜岀骇鍒嗙被',
+	data: {
+		size: 1000
+	},
+	onEdit() {
+		return {
+			width: '500px',
+			props: {
+				labelWidth: '60px'
+			},
+			items: [
+				{
+					label: '鍚嶇О',
+					prop: 'name',
+					required: true,
+					component: {
+						name: 'el-input'
+					}
+				},
+				{
+					label: '鍥炬爣',
+					prop: 'pic',
+					component: {
+						name: 'cl-upload'
+					}
+				},
+				{
+					label: '鎺掑簭',
+					prop: 'sortNum',
+					component: {
+						name: 'el-input-number'
+					}
+				}
+			]
+		};
+	},
+	onData(list) {
+		return deepTree(list);
+	},
+	onSelect(item) {
+		refresh({
+			parentId: item.id
+		});
+	}
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	items: [
+		{
+			label: '鍚嶇О',
+			prop: 'name',
+			component: { name: 'el-input', props: { clearable: true } },
+			required: true
+		},
+		{
+			label: '鎺掑簭',
+			prop: 'sortNum',
+			hook: 'number',
+			component: { name: 'el-input-number' }
+		},
+		{
+			label: '鍥炬爣',
+			prop: 'pic',
+			component: {
+				name: 'cl-upload'
+			}
+		},
+		{ label: '鐘舵��', prop: 'status', value: 1, component: { name: 'cl-switch' }, flex: false }
+	],
+	plugins: [setFocus('name')],
+	onSubmit(data, { next }) {
+		next({
+			...data,
+			parentId: ViewGroup.value?.selected?.id
+		});
+	}
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: 'selection' },
+		{ label: '鍚嶇О', prop: 'name', align: 'left', minWidth: 200 },
+		{
+			label: '鍥炬爣',
+			prop: 'pic',
+			minWidth: 100,
+			component: { name: 'cl-image', props: { size: 40 } }
+		},
+		{ label: '鎺掑簭', prop: 'sortNum', minWidth: 100, sortable: 'desc' },
+		{ label: '鐘舵��', prop: 'status', minWidth: 100, component: { name: 'cl-switch' } },
+		{
+			label: '鍒涘缓鏃堕棿',
+			prop: 'createTime',
+			minWidth: 160
+		},
+		{
+			label: '鏇存柊鏃堕棿',
+			prop: 'updateTime',
+			minWidth: 160
+		},
+		{
+			type: 'op'
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud({
+	service: service.goods.type
+});
+
+// 鍒锋柊
+function refresh(params?: any) {
+	Crud.value?.refresh(params);
+}
+</script>
diff --git a/src/modules/helper/hooks/ai.ts b/src/modules/helper/hooks/ai.ts
new file mode 100644
index 0000000..070e0c9
--- /dev/null
+++ b/src/modules/helper/hooks/ai.ts
@@ -0,0 +1,102 @@
+import { module } from '/@/cool';
+import { useBase } from '/$/base';
+
+export function useAi() {
+	const { api } = module.config('helper');
+	const { user } = useBase();
+
+	// 璋冪敤娴佺▼
+	async function invokeFlow(
+		label: string,
+		params: any,
+		streamCb?: ({ isEnd, content }: { isEnd: boolean; content: string }) => void
+	): Promise<any> {
+		const stream = !!streamCb;
+
+		let cacheText = '';
+
+		return new Promise((resolve, reject) => {
+			fetch(api + '/open/code/gen/data', {
+				method: 'POST',
+				headers: {
+					Authorization: user.token,
+					'Content-Type': 'application/json'
+				},
+				body: JSON.stringify({
+					params,
+					label,
+					stream
+				})
+			})
+				.then(res => {
+					if (res.body) {
+						if (stream) {
+							const reader = res.body.getReader();
+							const decoder = new TextDecoder('utf-8');
+							const stream = new ReadableStream({
+								start(controller) {
+									function push() {
+										reader.read().then(({ done, value }) => {
+											if (done) {
+												controller.close();
+												return;
+											}
+
+											let text = decoder.decode(value, { stream: true });
+
+											if (streamCb) {
+												if (cacheText) {
+													text = cacheText + text;
+												}
+
+												if (text.indexOf('data:') == 0) {
+													text = '\n\n' + text;
+												}
+
+												try {
+													const arr = text
+														.split(/\n\ndata:/g)
+														.filter(Boolean)
+														.map(e => JSON.parse(e));
+
+													arr.forEach(streamCb);
+
+													cacheText = '';
+												} catch (err) {
+													cacheText = text;
+												}
+											}
+
+											controller.enqueue(text);
+											push();
+										});
+									}
+									push();
+								}
+							});
+
+							return new Response(stream);
+						} else {
+							return res.json();
+						}
+					}
+				})
+				.then(res => {
+					if (stream) {
+						return res;
+					}
+
+					if (res.code == 1000) {
+						resolve(res.data.result);
+					} else {
+						reject(res);
+					}
+				})
+				.catch(reject);
+		});
+	}
+
+	return {
+		invokeFlow
+	};
+}
diff --git a/src/modules/helper/hooks/index.ts b/src/modules/helper/hooks/index.ts
index 83c9777..fe2e345 100644
--- a/src/modules/helper/hooks/index.ts
+++ b/src/modules/helper/hooks/index.ts
@@ -1,2 +1,3 @@
+export * from './ai';
 export * from './menu';
 export * from './plugin';
diff --git a/src/modules/helper/static/svg/arrow-down.svg b/src/modules/helper/static/svg/arrow-down.svg
new file mode 100644
index 0000000..3348788
--- /dev/null
+++ b/src/modules/helper/static/svg/arrow-down.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1719536095395" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2583" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M61.44 512C61.44 263.168 263.168 61.44 512 61.44s450.56 201.728 450.56 450.56-201.728 450.56-450.56 450.56S61.44 760.832 61.44 512z m397.312 180.85888c29.61408 31.92832 76.88192 31.92832 106.496 0l199.63904-215.28576 0.90112-1.00352c17.01888-19.456 16.52736-50.44224-1.10592-69.2224-19.29216-20.52096-48.82432-23.81824-71.4752-7.96672l-150.58944 105.49248c-18.67776 13.1072-42.55744 13.1072-61.2352 0L330.1376 398.9504c-22.26176-15.5648-51.3024-12.34944-70.26688 7.84384l-0.55296 0.57344a46.8992 46.8992 0 0 0-0.90112 1.024c-17.14176 19.31264-16.83456 50.29888 0.69632 69.2224l199.65952 215.26528z" p-id="2584"></path></svg>
\ No newline at end of file
diff --git a/src/modules/helper/static/svg/code.svg b/src/modules/helper/static/svg/code.svg
new file mode 100644
index 0000000..12e1ae3
--- /dev/null
+++ b/src/modules/helper/static/svg/code.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1719377496622" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6926" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M213.333 128h85.334v85.333h-85.334v213.334A85.333 85.333 0 0 1 128 512a85.333 85.333 0 0 1 85.333 85.333v213.334h85.334V896h-85.334C167.68 884.48 128 857.6 128 810.667V640a85.333 85.333 0 0 0-85.333-85.333H0v-85.334h42.667A85.333 85.333 0 0 0 128 384V213.333A85.333 85.333 0 0 1 213.333 128m597.334 0A85.333 85.333 0 0 1 896 213.333V384a85.333 85.333 0 0 0 85.333 85.333H1024v85.334h-42.667A85.333 85.333 0 0 0 896 640v170.667A85.333 85.333 0 0 1 810.667 896h-85.334v-85.333h85.334V597.333A85.333 85.333 0 0 1 896 512a85.333 85.333 0 0 1-85.333-85.333V213.333h-85.334V128h85.334M512 640a42.667 42.667 0 0 1 42.667 42.667A42.667 42.667 0 0 1 512 725.333a42.667 42.667 0 0 1-42.667-42.666A42.667 42.667 0 0 1 512 640m-170.667 0A42.667 42.667 0 0 1 384 682.667a42.667 42.667 0 0 1-42.667 42.666 42.667 42.667 0 0 1-42.666-42.666A42.667 42.667 0 0 1 341.333 640m341.334 0a42.667 42.667 0 0 1 42.666 42.667 42.667 42.667 0 0 1-42.666 42.666A42.667 42.667 0 0 1 640 682.667 42.667 42.667 0 0 1 682.667 640z" p-id="6927"></path></svg>
\ No newline at end of file
diff --git a/src/modules/helper/static/svg/quick.svg b/src/modules/helper/static/svg/quick.svg
new file mode 100644
index 0000000..e14cc32
--- /dev/null
+++ b/src/modules/helper/static/svg/quick.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg
+	t="1739266182011"
+	class="icon"
+	viewBox="0 0 1024 1024"
+	version="1.1"
+	xmlns="http://www.w3.org/2000/svg"
+	p-id="16931"
+	xmlns:xlink="http://www.w3.org/1999/xlink"
+	width="128"
+	height="128"
+>
+	<path
+		class="p"
+		d="M305.572 958.122c-20.41-0.01-36.95-16.56-36.94-36.97 0-3.35 0.46-6.69 1.36-9.92l84.28-302.19-184.32 1.42a36.055 36.055 0 0 1-30.89-16.24 36.946 36.946 0 0 1-3.6-34.7l193.8-474.36a36.97 36.97 0 0 1 34.22-22.98h362.23c20.42 0.01 36.96 16.57 36.95 36.99 0 4.65-0.88 9.27-2.6 13.6l-117.61 296.37h210.65c20.41 0.01 36.95 16.56 36.94 36.97 0 10.71-4.65 20.88-12.74 27.9l-547.57 475.05a36.875 36.875 0 0 1-24.16 9.06z m97.47-423.35c20.41 0.01 36.95 16.56 36.94 36.97 0 3.35-0.46 6.68-1.36 9.9l-64.45 231.07 379.98-329.68h-166.05c-20.39 0.02-36.94-16.5-36.96-36.89 0-4.68 0.88-9.33 2.61-13.68l117.62-296.39h-283.04l-163.49 400.05 177.9-1.42 0.3 0.07z"
+		p-id="16932"
+	></path>
+</svg>
diff --git a/src/modules/info/views/banner.vue b/src/modules/info/views/banner.vue
new file mode 100644
index 0000000..06f388f
--- /dev/null
+++ b/src/modules/info/views/banner.vue
@@ -0,0 +1,137 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+
+			<cl-flex1 />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert">
+			<template #slot-path="{ scope }">
+				<el-row>
+					<el-input
+						v-model="scope.path"
+						placeholder="濡傦細/pages/goods/detail?id="
+						:style="{ marginRight: '10px', flex: 1 }"
+					/>
+
+					<goods-select
+						:ref="setRefs('goodsSelect')"
+						:multiple="false"
+						@change="onGoodsSelectChange"
+					>
+						<el-button @click="refs.goodsSelect?.open">閫夋嫨鍟嗗搧</el-button>
+					</goods-select>
+				</el-row>
+			</template>
+		</cl-upsert>
+	</cl-crud>
+</template>
+
+<script lang="ts" name="info-banner" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import GoodsSelect from "/$/goods/components/select.vue";
+
+const { service, refs, setRefs } = useCool();
+
+// cl-upsert
+const Upsert = useUpsert({
+	items: [
+		{
+			label: "鍥剧墖",
+			prop: "pic",
+			component: {
+				name: "cl-upload",
+				props: {
+					size: [120, 230]
+				}
+			},
+			required: true
+		},
+		{
+			label: "鎻忚堪",
+			prop: "description",
+			component: { name: "el-input", props: { clearable: true } }
+		},
+		{
+			label: "璺宠浆璺緞",
+			prop: "path",
+			component: { name: "slot-path" }
+		},
+		{
+			label: "鎺掑簭",
+			prop: "sortNum",
+			hook: "number",
+			component: { name: "el-input-number" }
+		},
+		{
+			label: "鐘舵��",
+			prop: "status",
+			flex: false,
+			value: 1,
+			component: { name: "cl-switch" }
+		}
+	]
+});
+
+// cl-table
+const Table = useTable<Eps.InfoBannerEntity>({
+	columns: [
+		{ type: "selection" },
+		{
+			label: "鍥剧墖",
+			prop: "pic",
+			minWidth: 160,
+			component: { name: "cl-image", props: { size: [60, 115] } }
+		},
+		{ label: "鎻忚堪", prop: "description", minWidth: 160 },
+		{ label: "璺宠浆璺緞", prop: "path", minWidth: 160 },
+		{ label: "鎺掑簭", prop: "sortNum", minWidth: 100, sortable: "desc" },
+		{ label: "鐘舵��", prop: "status", minWidth: 100, component: { name: "cl-switch" } },
+		{
+			label: "鍒涘缓鏃堕棿",
+			prop: "createTime",
+			minWidth: 160
+		},
+		{
+			label: "鏇存柊鏃堕棿",
+			prop: "updateTime",
+			minWidth: 160
+		},
+		{ type: "op", buttons: ["edit", "delete"] }
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.info.banner
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+
+// 閫夋嫨鍟嗗搧鍚�
+function onGoodsSelectChange(id: number) {
+	Upsert.value?.setForm("path", `/pages/goods/detail?id=${id}`);
+}
+</script>
diff --git a/src/modules/market/views/coupon/info.vue b/src/modules/market/views/coupon/info.vue
new file mode 100644
index 0000000..172b12a
--- /dev/null
+++ b/src/modules/market/views/coupon/info.vue
@@ -0,0 +1,282 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+
+			<cl-filter label="鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="140" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鏍囬" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert">
+			<template #slot-condition="{ scope }">
+				<div class="condition">
+					<div class="row">
+						<span>婊�</span>
+						<el-input-number
+							v-model="scope.condition.fullAmount"
+							:max="10000"
+							:min="scope.amount"
+						/>
+						<span>鍑� {{ scope.amount || 0 }} 鍏�</span>
+					</div>
+				</div>
+			</template>
+		</cl-upsert>
+	</cl-crud>
+</template>
+
+<script lang="ts" name="market-coupon-info" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { reactive } from "vue";
+import { isEmpty } from "lodash-es";
+import dayjs from "dayjs";
+
+const { service, router } = useCool();
+
+const options = reactive({
+	type: [
+		{
+			label: "婊″噺鍒�",
+			value: 0
+		}
+	],
+	status: [
+		{
+			label: "鍚敤",
+			value: 1
+		},
+		{
+			label: "绂佺敤",
+			value: 0
+		}
+	]
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	props: {
+		labelWidth: "100px"
+	},
+	items: [
+		{
+			label: "绫诲瀷",
+			prop: "type",
+			value: 0,
+			component: { name: "el-radio-group", options: options.type },
+			required: true
+		},
+		{
+			label: "鏍囬",
+			prop: "title",
+			component: { name: "el-input", props: { clearable: true } },
+			required: true
+		},
+		{
+			label: "鎻忚堪",
+			prop: "description",
+			component: { name: "el-input", props: { type: "textarea", rows: 4 } },
+			required: true
+		},
+
+		{
+			label: "閲戦",
+			prop: "amount",
+			hook: "number",
+			component: {
+				name: "el-input-number",
+				props: {
+					min: 0.01,
+					max: 100000
+				}
+			},
+			required: true,
+			span: 12
+		},
+		{
+			label: "鏈夋晥鏈�",
+			prop: "time",
+			component: {
+				name: "el-date-picker",
+				props: {
+					type: "daterange",
+					valueFormat: "YYYY-MM-DD"
+				}
+			},
+			rules: {
+				required: true,
+				validator(rule, value, callback) {
+					if (isEmpty(value)) {
+						callback(Error("鏈夋晥鏈熶笉鑳戒负绌�"));
+					} else {
+						callback();
+					}
+				}
+			},
+			hook: "datetimeRange",
+			span: 12
+		},
+		{
+			label: "鎬绘暟閲�",
+			prop: "num",
+			hook: "number",
+			value: 100,
+			component: { name: "el-input-number" },
+			required: true,
+			span: 12
+		},
+		{
+			label: "宸查鍙�",
+			prop: "receivedNum",
+			hook: "number",
+			value: 0,
+			component: { name: "el-input-number" },
+			required: true,
+			span: 12
+		},
+		{
+			label: "浣跨敤鏉′欢",
+			prop: "condition",
+			value: {
+				fullAmount: undefined
+			},
+			component: { name: "slot-condition" },
+			rules: {
+				required: true,
+				validator(rule, value, callback) {
+					if (!value.fullAmount) {
+						callback(Error("璇峰~鍐欐弧鍑忔潯浠�"));
+					} else {
+						callback();
+					}
+				}
+			}
+		},
+		{
+			label: "鐘舵��",
+			prop: "status",
+			flex: false,
+			component: { name: "cl-switch" },
+			required: true
+		}
+	]
+});
+
+// cl-table
+const Table = useTable<Eps.MarketCouponInfoEntity>({
+	columns: [
+		{ type: "selection" },
+		{ label: "鏍囬", prop: "title", minWidth: 200 },
+		{ label: "鎻忚堪", prop: "description", showOverflowTooltip: true, minWidth: 200 },
+		{ label: "绫诲瀷", prop: "type", minWidth: 120, dict: options.type },
+		{
+			label: "鏉′欢",
+			prop: "condition",
+			minWidth: 140,
+			formatter(row) {
+				switch (row.type) {
+					case 0:
+						return `婊� ${row.condition?.fullAmount} 鍑� ${row.amount}`;
+
+					default:
+						return "鏃犻棬妲�";
+				}
+			}
+		},
+		{ label: "閲戦", prop: "amount", minWidth: 120, sortable: "custom" },
+		{ label: "鏁伴噺", prop: "num", minWidth: 120, sortable: "custom" },
+		{ label: "宸查鍙�", prop: "receivedNum", minWidth: 120, sortable: "custom" },
+		{ label: "鐘舵��", prop: "status", minWidth: 100, component: { name: "cl-switch" } },
+		{
+			label: "鏈夋晥鏈�",
+			prop: "startTime",
+			minWidth: 160,
+			formatter(row) {
+				return (
+					dayjs(row.startTime).format("YYYY-MM-DD") +
+					" ~ " +
+					dayjs(row.endTime).format("YYYY-MM-DD")
+				);
+			}
+		},
+		{
+			label: "鍒涘缓鏃堕棿",
+			prop: "createTime",
+			minWidth: 160,
+			component: { name: "cl-date-text" }
+		},
+		{
+			label: "鏇存柊鏃堕棿",
+			prop: "updateTime",
+			minWidth: 160,
+			component: { name: "cl-date-text" }
+		},
+		{
+			type: "op",
+			width: 260,
+			buttons: [
+				"edit",
+				"delete",
+				{
+					label: "棰嗗彇鍒楄〃",
+					onClick({ scope }) {
+						router.push({
+							path: "/market/coupon/user",
+							query: {
+								id: scope.row.id,
+								title: scope.row.title
+							}
+						});
+					}
+				}
+			]
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.market.coupon.info
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>
+
+<style lang="scss" scoped>
+.condition {
+	.row {
+		display: flex;
+		align-items: center;
+
+		.el-input-number {
+			margin: 0 10px;
+			width: 200px;
+		}
+	}
+}
+</style>
diff --git a/src/modules/market/views/coupon/user.vue b/src/modules/market/views/coupon/user.vue
new file mode 100644
index 0000000..4d02ddb
--- /dev/null
+++ b/src/modules/market/views/coupon/user.vue
@@ -0,0 +1,129 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-view-head />
+
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+			<!-- 鏂板鎸夐挳 -->
+			<cl-add-btn />
+			<!-- 鍒犻櫎鎸夐挳 -->
+			<cl-multi-delete-btn />
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储鐢ㄦ埛鏄电О" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 鏂板銆佺紪杈� -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="market-coupon-user" setup>
+import { useCrud, useTable, useUpsert } from '@cool-vue/crud';
+import { useCool } from '/@/cool';
+import { reactive } from 'vue';
+import UserSelect from '/$/user/components/user-select.vue';
+
+const { service, route, refs, setRefs } = useCool();
+
+const options = reactive({
+	status: [
+		{ label: '鏈娇鐢�', value: 0, type: 'info' },
+		{ label: '宸蹭娇鐢�', value: 1, type: 'success' }
+	]
+});
+
+// cl-upsert
+const Upsert = useUpsert({
+	dialog: {
+		width: '600px'
+	},
+	items: [
+		{
+			label: '閫夋嫨鐢ㄦ埛',
+			prop: 'userId',
+			component: {
+				vm: UserSelect,
+				ref: setRefs('userSelect'),
+				props: {
+					multiple: false
+				}
+			},
+			required: true
+		},
+		{
+			label: '鐘舵��',
+			prop: 'status',
+			component: {
+				name: 'el-radio-group',
+				options: options.status
+			},
+			value: 0,
+			required: true
+		}
+	],
+	onOpened(data) {
+		if (Upsert.value?.mode != 'add') {
+			service.user.info
+				.info({
+					id: data.userId
+				})
+				.then(res => {
+					refs.userSelect.select(res);
+				});
+		}
+	},
+	onSubmit(data, { next }) {
+		next({
+			...data,
+			couponId: route.query.id
+		});
+	}
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: 'selection' },
+		{ label: '鐢ㄦ埛鏄电О', prop: 'nickName', minWidth: 140 },
+		{
+			label: '鐘舵��',
+			prop: 'status',
+			dict: options.status,
+			minWidth: 120
+		},
+		{ label: '浣跨敤鏃堕棿', prop: 'useTime', minWidth: 160, sortable: 'custom' },
+		{
+			label: '鍒涘缓鏃堕棿',
+			prop: 'createTime',
+			minWidth: 160,
+			sortable: 'desc'
+		},
+		{ type: 'op', buttons: ['edit', 'delete'] }
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.market.coupon.user
+	},
+	app => {
+		app.refresh({
+			couponId: route.query.id
+		});
+	}
+);
+</script>
diff --git a/src/modules/monitor/components/site-tree.vue b/src/modules/monitor/components/site-tree.vue
index ab20d1d..86e0ba6 100644
--- a/src/modules/monitor/components/site-tree.vue
+++ b/src/modules/monitor/components/site-tree.vue
@@ -13,32 +13,21 @@
 
 		<div class="site-tree__container">
 			<el-scrollbar>
-				<el-tree
-					v-loading="loading"
-					node-key="a_id"
-					default-expand-all
-					:data="list"
-					:props="{
-						label: 'a_name',
-						children: 'children'
-					}"
-					highlight-current
-					:expand-on-click-node="false"
-					@node-click="rowClick"
-				>
+				<el-tree v-loading="loading" node-key="a_id" default-expand-all :data="list" :props="{
+					label: 'a_name',
+					children: 'children'
+				}" highlight-current :expand-on-click-node="false" @node-click="rowClick">
 					<template #default="{ node, data }">
 						<div class="site-tree__node">
-							<span
-								class="site-tree__node-label"
-								:class="{
-									'is-active': data.a_id == selectId
-								}"
-							>
+							<span class="site-tree__node-label" :class="{
+								'is-active': data.a_id == selectId
+							}">
 								{{ node.label }}
-								<span v-if="!/^\d+$/.test(data.a_id)" style="margin-left:6px;color:#67c23a;font-size:12px;">(绔欑偣)</span>
+								<span v-if="!/^\d+$/.test(data.a_id)"
+									style="margin-left:6px;color:#67c23a;font-size:12px;">(绔欑偣)</span>
 							</span>
 						</div>
-					</template>					
+					</template>
 				</el-tree>
 			</el-scrollbar>
 		</div>
@@ -66,37 +55,37 @@
 const selectId = ref<number | string>();
 
 function buildTree(source: any[]) {
-  const map = new Map<string, any>();
-  const roots: any[] = [];
-  source.forEach(item => {
-    map.set(item.a_id, { ...item, children: [] });
-  });
-  source.forEach(item => {
-    const node = map.get(item.a_id);
-    if (item.a_parentId && map.has(item.a_parentId)) {
-      map.get(item.a_parentId).children.push(node);
-    } else {
-      roots.push(node);
-    }
-  });
-  return roots;
+	const map = new Map<string, any>();
+	const roots: any[] = [];
+	source.forEach(item => {
+		map.set(item.a_id, { ...item, children: [] });
+	});
+	source.forEach(item => {
+		const node = map.get(item.a_id);
+		if (item.a_parentId && map.has(item.a_parentId)) {
+			map.get(item.a_parentId).children.push(node);
+		} else {
+			roots.push(node);
+		}
+	});
+	return roots;
 }
 
 async function refresh() {
-  loading.value = true;
-  try {
-    const res = await service.basicdata.iot.list();
-    const formatList = res.map(item => ({
-      ...item,
-      a_id: String(item.a_id),
-      a_parentId: item.a_parentId === null ? null : String(item.a_parentId)
-    }));
-    list.value = buildTree(formatList);
-  } catch (err) {
-    ElMessage.error('鍔犺浇鏍戝舰澶辫触');
-  } finally {
-    loading.value = false;
-  }
+	loading.value = true;
+	try {
+		const res = await service.basicdata.iot.getSitelist();
+		const formatList = res.map(item => ({
+			...item,
+			a_id: String(item.a_id),
+			a_parentId: item.a_parentId === null ? null : String(item.a_parentId)
+		}));
+		list.value = buildTree(formatList);
+	} catch (err) {
+		ElMessage.error('鍔犺浇鏍戝舰澶辫触');
+	} finally {
+		loading.value = false;
+	}
 }
 
 // 鑺傜偣鐐瑰嚮
@@ -135,6 +124,7 @@
 	&__op {
 		display: flex;
 		align-items: center;
+
 		.item {
 			display: flex;
 			justify-content: center;
@@ -146,6 +136,7 @@
 			height: 26px;
 			width: 26px;
 			color: var(--el-text-color-primary);
+
 			&:hover {
 				background-color: var(--el-fill-color-light);
 			}
@@ -155,6 +146,7 @@
 	&__container {
 		height: calc(100% - 40px);
 		padding: 10px;
+
 		:deep(.el-tree-node__content) {
 			height: 38px;
 			border-radius: 4px;
@@ -167,6 +159,7 @@
 		height: 100%;
 		width: 100%;
 		box-sizing: border-box;
+
 		&-label {
 			display: flex;
 			align-items: center;
@@ -176,6 +169,7 @@
 			overflow: hidden;
 			text-overflow: ellipsis;
 			white-space: nowrap;
+
 			&.is-active {
 				color: var(--el-color-primary);
 			}
diff --git a/src/modules/order/components/discount-item.vue b/src/modules/order/components/discount-item.vue
new file mode 100644
index 0000000..234626a
--- /dev/null
+++ b/src/modules/order/components/discount-item.vue
@@ -0,0 +1,45 @@
+<template>
+	<div class="discount-item" v-if="scope.discountSource">
+		<p class="t1">- {{ scope.discountPrice }}</p>
+		<p class="t2">{{ doc }}</p>
+	</div>
+
+	<span v-else>-</span>
+</template>
+
+<script lang="ts" setup name="order-discount-item">
+import { type PropType, computed } from "vue";
+
+const props = defineProps({
+	scope: {
+		type: Object as PropType<Eps.OrderInfoEntity>,
+		default: () => ({})
+	}
+});
+
+const doc = computed(() => {
+	const { info, type } = props.scope.discountSource || {};
+
+	switch (type) {
+		case 0:
+			return `${info.title}锛堟弧 ${info.condition.fullAmount} 鍏冨噺 ${info.amount} 鍏冿級`;
+
+		default:
+			return "";
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.discount-item {
+	text-align: left;
+
+	.t1 {
+		color: red;
+	}
+
+	.t2 {
+		font-size: 12px;
+	}
+}
+</style>
diff --git a/src/modules/order/components/goods.vue b/src/modules/order/components/goods.vue
new file mode 100644
index 0000000..47dd51c
--- /dev/null
+++ b/src/modules/order/components/goods.vue
@@ -0,0 +1,145 @@
+<template>
+	<div class="order-goods">
+		<div class="list">
+			<div class="goods" v-for="goods in list" :key="goods.id">
+				<p class="name">{{ goods.name }}</p>
+
+				<div class="specs">
+					<div class="item" v-for="item in goods.children" :key="item.id">
+						<cl-image :src="item.cover" :size="60" />
+
+						<div class="det">
+							<p class="name">{{ item.spec.name }}</p>
+							<p class="flex1"></p>
+							<p class="price">
+								<span>楼{{ item.spec.price }}</span>
+								<span>x{{ item.count }}</span>
+							</p>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="order-goods">
+import { isEmpty } from "lodash-es";
+import { PropType, computed } from "vue";
+
+interface Item {
+	id: number;
+	name: string;
+	children: Eps.GoodsInfoEntity[];
+}
+
+const props = defineProps({
+	scope: {
+		type: Object as PropType<Eps.OrderInfoEntity & { goodsList?: any[] }>,
+		default: () => ({})
+	}
+});
+
+const list = computed(() => {
+	const arr: Item[] = [];
+
+	props.scope.goodsList
+		?.filter((e) => !!e)
+		.forEach((e) => {
+			// 灏侀潰鍥�
+			let pics = e.spec.images || [];
+			if (isEmpty(pics)) {
+				pics = [e.goodsInfo.mainPic];
+			}
+			e.cover = pics[0];
+
+			const d = arr.find((a) => a.id == e.goodsInfo.id);
+
+			if (d) {
+				d.children?.push(e);
+			} else {
+				arr.push({
+					id: e.goodsInfo.id!,
+					name: e.goodsInfo.title!,
+					children: [e]
+				});
+			}
+		});
+
+	return arr;
+});
+</script>
+
+<style lang="scss" scoped>
+.order-goods {
+	.list {
+		display: flex;
+		flex-wrap: wrap;
+
+		.goods {
+			margin-left: 10px;
+
+			& > .name {
+				font-size: 14px;
+				margin-bottom: 5px;
+				padding: 0 2px;
+				height: 20px;
+				max-width: 200px;
+				box-sizing: border-box;
+				overflow: hidden;
+				display: -webkit-box;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 1;
+			}
+
+			.specs {
+				display: flex;
+			}
+
+			.item {
+				display: flex;
+				align-items: center;
+				font-size: 12px;
+				position: relative;
+				border: 1px solid var(--el-bg-color-page);
+				border-radius: 6px;
+				padding: 10px;
+				height: 80px;
+				width: 250px;
+				margin-right: 10px;
+
+				.cl-image {
+					margin-right: 10px;
+					border-radius: 6px;
+					overflow: hidden;
+				}
+
+				.det {
+					display: flex;
+					flex-direction: column;
+					flex: 1;
+					height: 100%;
+					padding: 2px 0;
+
+					.name {
+						overflow: hidden;
+						display: -webkit-box;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 2;
+					}
+
+					.flex1 {
+						flex: 1;
+					}
+
+					.price {
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+					}
+				}
+			}
+		}
+	}
+}
+</style>
diff --git a/src/modules/order/components/info-item.vue b/src/modules/order/components/info-item.vue
new file mode 100644
index 0000000..ec2a9e1
--- /dev/null
+++ b/src/modules/order/components/info-item.vue
@@ -0,0 +1,24 @@
+<template>
+	<div class="info-item">
+		<p>鏍囬锛歿{ scope.title }}</p>
+		<p>鍗曞彿锛歿{ scope.orderNum }}</p>
+	</div>
+</template>
+
+<script lang="ts" setup name="order-info-item">
+import { type PropType } from "vue";
+
+const props = defineProps({
+	scope: {
+		type: Object as PropType<Eps.OrderInfoEntity>,
+		default: () => ({})
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.info-item {
+	text-align: left;
+	font-size: 12px;
+}
+</style>
diff --git a/src/modules/order/components/logistics-item.vue b/src/modules/order/components/logistics-item.vue
new file mode 100644
index 0000000..c6b183b
--- /dev/null
+++ b/src/modules/order/components/logistics-item.vue
@@ -0,0 +1,229 @@
+<template>
+	<div class="logistics-item">
+		<div class="row">
+			<span>鑱旂郴鐢佃瘽锛�</span>
+
+			<span>{{ scope.address.phone }}锛坽{ scope.address.contact }}锛�</span>
+		</div>
+
+		<div class="row">
+			<span>鎵�鍦ㄥ湴鍖猴細</span>
+
+			<span>
+				{{ scope.address.province }}{{ scope.address.city }}{{ scope.address.district }}
+			</span>
+		</div>
+
+		<div class="row">
+			<span>璇︾粏鍦板潃锛�</span>
+
+			<span>
+				{{ scope.address.address }}
+			</span>
+		</div>
+
+		<div class="btns" v-if="scope.status != 0">
+			<el-button size="small" @click="toDeliver()" v-if="[1, 2].includes(scope.status!)">{{
+				scope.status == 1 ? "鍙戣揣" : "缂栬緫"
+			}}</el-button>
+
+			<el-button size="small" @click="open" v-if="scope.logistics">鏌ョ湅鐗╂祦</el-button>
+		</div>
+
+		<!-- 鍙戣揣 -->
+		<cl-form ref="Form" />
+
+		<!-- 鐗╂祦淇℃伅 -->
+		<cl-dialog v-model="visible" title="鐗╂祦淇℃伅" height="60vh">
+			<div class="info" v-loading="loading">
+				<template v-if="info?.expName">
+					<el-descriptions :column="1" :style="{ marginBottom: '10px' }">
+						<el-descriptions-item label="蹇�掑悕绉帮細">{{
+							info?.expName
+						}}</el-descriptions-item>
+						<el-descriptions-item label="鐗╂祦鍗曞彿锛�">{{
+							info?.number
+						}}</el-descriptions-item>
+					</el-descriptions>
+
+					<el-timeline>
+						<el-timeline-item
+							v-for="(item, index) in info?.list"
+							:key="index"
+							hollow
+							:timestamp="item.time"
+						>
+							{{ item.status }}
+						</el-timeline-item>
+					</el-timeline>
+				</template>
+
+				<el-empty :image-size="80" description="鏆傛棤鐗╂祦淇℃伅" v-else />
+			</div>
+		</cl-dialog>
+	</div>
+</template>
+
+<script lang="ts" setup name="order-logistics-item">
+import { useForm } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { PropType, ref } from "vue";
+import { ElMessage } from "element-plus";
+import { useDict } from "/$/dict";
+import { isString } from "lodash-es";
+
+const props = defineProps({
+	scope: {
+		type: Object as PropType<Eps.OrderInfoEntity>,
+		default: () => ({})
+	},
+	disabled: Boolean
+});
+
+const { service } = useCool();
+const { dict } = useDict();
+const Form = useForm();
+
+// 鐗╂祦淇℃伅
+const info = ref<{
+	expName: string;
+	number: string;
+	list: {
+		time: string;
+		status: string;
+	}[];
+}>();
+
+// 鏄惁鍙
+const visible = ref(false);
+
+// 淇℃伅鍔犺浇涓�
+const loading = ref(false);
+
+// 鏌ョ湅鐗╂祦
+async function open() {
+	visible.value = true;
+	loading.value = true;
+
+	await service.order.info
+		.logistics({
+			orderId: props.scope.id
+		})
+		.then((res) => {
+			info.value = undefined;
+
+			if (isString(res)) {
+				ElMessage.error(res);
+			} else {
+				info.value = res;
+			}
+		})
+		.catch((err) => {
+			ElMessage.error(err.message);
+		});
+
+	loading.value = false;
+}
+
+// 鍙戣揣
+function toDeliver() {
+	const { num, company } = props.scope.logistics || {};
+	const isEdit = props.scope.status != 1;
+
+	Form.value?.open({
+		title: isEdit ? "缂栬緫鍗曞彿" : "璁㈠崟鍙戣揣",
+		width: "500px",
+		props: {
+			labelPosition: "top"
+		},
+		form: {
+			num,
+			company
+		},
+		items: [
+			{
+				label: "鐗╂祦鍏徃",
+				prop: "company",
+				required: true,
+				component: {
+					name: "el-select",
+					options: dict.get("logisticsCompany"),
+					props: {
+						filterable: true
+					}
+				}
+			},
+			{
+				label: "鐗╂祦鍗曞彿",
+				prop: "num",
+				required: true,
+				component: {
+					name: "el-input",
+					props: {
+						clearable: true
+					}
+				}
+			}
+		],
+		on: {
+			submit(data, { close, done }) {
+				if (data.company == "sf") {
+					if (!data.num.includes(":")) {
+						data.num += `:${props.scope.address.phone.slice(-4)}`;
+					}
+				}
+
+				service.order.info[isEdit ? "update" : "deliver"]({
+					[isEdit ? "id" : "orderId"]: props.scope.id,
+					logistics: data
+				})
+					.then(() => {
+						ElMessage.success("淇濆瓨鎴愬姛");
+						close();
+
+						// 鏇存柊鐘舵�佷负寰呮敹璐�
+						props.scope.status = 2;
+
+						// 鏇存柊鐗╂祦淇℃伅
+						props.scope.logistics = data;
+					})
+					.catch((err) => {
+						ElMessage.error(err.message);
+						done();
+					});
+			}
+		}
+	});
+}
+</script>
+
+<style lang="scss" scoped>
+.logistics-item {
+	text-align: left;
+	font-size: 12px;
+	position: relative;
+
+	.icon {
+		position: absolute;
+		right: -5px;
+		top: 0;
+		cursor: pointer;
+		font-size: 16px;
+		color: var(--el-color-danger);
+	}
+
+	.row {
+		display: flex;
+
+		& > span {
+			&:first-child {
+				flex-shrink: 0;
+			}
+		}
+	}
+
+	.btns {
+		margin-top: 4px;
+	}
+}
+</style>
diff --git a/src/modules/order/components/pay-item.vue b/src/modules/order/components/pay-item.vue
new file mode 100644
index 0000000..87c0298
--- /dev/null
+++ b/src/modules/order/components/pay-item.vue
@@ -0,0 +1,20 @@
+<template>
+	<div class="pay-item">
+		<el-tag v-if="scope.payType == 0" effect="dark" type="info">鏈敮浠�</el-tag>
+		<el-tag v-else-if="scope.payType == 1" effect="dark" color="#2aae67">寰俊</el-tag>
+		<el-tag v-else-if="scope.payType == 2" effect="dark" color="#1678FF">鏀粯瀹�</el-tag>
+
+		<p :style="{ marginTop: '5px' }">{{ scope.payTime }}</p>
+	</div>
+</template>
+
+<script lang="ts" setup name="order-pay-item">
+import { type PropType } from "vue";
+
+const props = defineProps({
+	scope: {
+		type: Object as PropType<Eps.OrderInfoEntity>,
+		default: () => ({})
+	}
+});
+</script>
diff --git a/src/modules/order/components/remark-item.vue b/src/modules/order/components/remark-item.vue
new file mode 100644
index 0000000..adf5fa0
--- /dev/null
+++ b/src/modules/order/components/remark-item.vue
@@ -0,0 +1,26 @@
+<template>
+	<div class="remark-item">
+		<p v-if="scope.remark">鐢ㄦ埛涓嬪崟锛歿{ scope.remark }}</p>
+		<p v-if="scope.closeRemark">鍙栨秷璁㈠崟锛歿{ scope.closeRemark }}</p>
+		<p v-if="scope.refund?.refuseReason">鎷掔粷閫�娆撅細{{ scope.refund?.refuseReason }}</p>
+		<p v-if="scope.refund?.reason">鐢宠閫�娆撅細{{ scope.refund?.reason }}</p>
+	</div>
+</template>
+
+<script lang="ts" setup name="order-remark-item">
+import { type PropType } from "vue";
+
+const props = defineProps({
+	scope: {
+		type: Object as PropType<Eps.OrderInfoEntity>,
+		default: () => ({})
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.remark-item {
+	text-align: left;
+	font-size: 12px;
+}
+</style>
diff --git a/src/modules/order/components/user-item.vue b/src/modules/order/components/user-item.vue
new file mode 100644
index 0000000..88bc284
--- /dev/null
+++ b/src/modules/order/components/user-item.vue
@@ -0,0 +1,20 @@
+<template>
+	<div class="order-user-item">
+		<cl-avatar :src="scope.avatarUrl" :size="36"></cl-avatar>
+		<span>{{ scope.nickName }}</span>
+	</div>
+</template>
+
+<script lang="ts" setup name="order-user-item">
+const props = defineProps({
+	scope: null
+});
+</script>
+
+<style lang="scss" scoped>
+.order-user-item {
+	.cl-avatar {
+		margin-bottom: 5px;
+	}
+}
+</style>
diff --git a/src/modules/order/dict/index.ts b/src/modules/order/dict/index.ts
new file mode 100644
index 0000000..667e175
--- /dev/null
+++ b/src/modules/order/dict/index.ts
@@ -0,0 +1,16 @@
+export const OrderStatus = [
+	{ label: "寰呬粯娆�", value: 0, type: "info" },
+	{ label: "寰呭彂璐�", value: 1, type: "warning" },
+	{ label: "寰呮敹璐�", value: 2 },
+	{ label: "寰呰瘎浠�", value: 3, type: "success" },
+	{ label: "浜ゆ槗瀹屾垚", value: 4, type: "success" },
+	{ label: "閫�娆句腑", value: 5, type: "danger" },
+	{ label: "宸查��娆�", value: 6, type: "danger" },
+	{ label: "宸插叧闂�", value: 7, type: "danger" }
+];
+
+export const PayType = [
+	{ label: "寰呮敮浠�", value: 0, type: "info" },
+	{ label: "寰俊", value: 1, color: "#2aae67" },
+	{ label: "鏀粯瀹�", value: 2, color: "#1678FF" }
+];
diff --git a/src/modules/order/views/info.vue b/src/modules/order/views/info.vue
new file mode 100644
index 0000000..8865899
--- /dev/null
+++ b/src/modules/order/views/info.vue
@@ -0,0 +1,165 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+
+			<cl-filter label="鏀粯鏂瑰紡">
+				<cl-select :options="options.payType" prop="payType" :width="140" />
+			</cl-filter>
+
+			<cl-filter label="璁㈠崟鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="140" />
+			</cl-filter>
+
+			<cl-filter label="鍒涘缓鏃堕棿">
+				<cl-date-picker type="datetimerange" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储璁㈠崟鍙枫�佹爣棰樸�佺敤鎴锋樀绉�" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" show-summary :summary-method="onSummaryMethod" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+	</cl-crud>
+</template>
+
+<script lang="ts" name="order-info" setup>
+import { useCrud, useTable } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { reactive, ref } from "vue";
+import { OrderStatus, PayType } from "../dict";
+import OrderUserItem from "../components/user-item.vue";
+import OrderLogisticsItem from "../components/logistics-item.vue";
+import OrderPayItem from "../components/pay-item.vue";
+import OrderRemarkItem from "../components/remark-item.vue";
+import OrderInfoItem from "../components/info-item.vue";
+import OrderDiscountItem from "../components/discount-item.vue";
+import OrderGoods from "../components/goods.vue";
+
+const { service } = useCool();
+
+// 閫夐」
+const options = reactive({
+	payType: PayType,
+	status: OrderStatus
+});
+
+// 鍚堣鏁版嵁
+const subData = ref({
+	totalCount: 0,
+	totalPrice: 0
+});
+
+// cl-table
+const Table = useTable<Eps.OrderInfoEntity>({
+	contextMenu: ["delete"],
+	columns: [
+		{
+			type: "expand",
+			label: "鍟嗗搧",
+			width: 60,
+			component: {
+				vm: OrderGoods
+			}
+		},
+		{
+			label: "璁㈠崟淇℃伅",
+			prop: "orderNum",
+			minWidth: 160,
+			component: {
+				vm: OrderInfoItem
+			}
+		},
+		{
+			label: "鐢ㄦ埛淇℃伅",
+			prop: "user",
+			minWidth: 120,
+			component: {
+				vm: OrderUserItem
+			}
+		},
+		{
+			label: "閲戦锛堝厓锛�",
+			prop: "price",
+			minWidth: 120,
+			sortable: "custom"
+		},
+		{
+			label: "浼樻儬璇存槑",
+			prop: "discount",
+			minWidth: 160,
+			component: {
+				vm: OrderDiscountItem
+			}
+		},
+		{
+			label: "浠樻淇℃伅",
+			prop: "pay",
+			minWidth: 160,
+			component: {
+				vm: OrderPayItem
+			}
+		},
+		{
+			label: "鐗╂祦淇℃伅",
+			prop: "logistics",
+			minWidth: 250,
+			component: {
+				vm: OrderLogisticsItem
+			}
+		},
+		{
+			label: "澶囨敞",
+			prop: "remark",
+			minWidth: 200,
+			component: {
+				vm: OrderRemarkItem
+			}
+		},
+		{
+			label: "鍒涘缓鏃堕棿",
+			prop: "createTime",
+			minWidth: 160,
+			sortable: "desc"
+		},
+		{
+			label: "鐘舵��",
+			prop: "status",
+			dict: options.status,
+			minWidth: 100,
+			fixed: "right"
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.order.info,
+		async onRefresh(params, { next }) {
+			const res = await next(params);
+
+			// 璁剧疆鍚堣鏁版嵁
+			subData.value = res.subData;
+		}
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+
+function onSummaryMethod() {
+	return ["鍚堣", "", "", subData.value.totalPrice + " 鍏�"];
+}
+</script>
diff --git a/src/modules/order/views/refund.vue b/src/modules/order/views/refund.vue
new file mode 100644
index 0000000..59f4275
--- /dev/null
+++ b/src/modules/order/views/refund.vue
@@ -0,0 +1,272 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 鍒锋柊鎸夐挳 -->
+			<cl-refresh-btn />
+
+			<cl-filter label="鏀粯鏂瑰紡">
+				<cl-select :options="options.payType" prop="payType" :width="140" />
+			</cl-filter>
+
+			<cl-filter label="璁㈠崟鐘舵��">
+				<cl-select :options="options.status" prop="status" :width="140" />
+			</cl-filter>
+
+			<cl-filter label="鐢宠鏃堕棿">
+				<cl-date-picker prop="refundApply" type="datetimerange" />
+			</cl-filter>
+
+			<cl-flex1 />
+			<!-- 鍏抽敭瀛楁悳绱� -->
+			<cl-search-key placeholder="鎼滅储璁㈠崟鍙枫�佹爣棰樸�佺敤鎴锋樀绉�" />
+		</cl-row>
+
+		<cl-row>
+			<!-- 鏁版嵁琛ㄦ牸 -->
+			<cl-table ref="Table" show-summary :summary-method="onSummaryMethod" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 鍒嗛〉鎺т欢 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 閫�娆� -->
+		<cl-form ref="Form" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="order-refund" setup>
+import { useCrud, useForm, useTable } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { reactive, ref } from "vue";
+import { ElMessage } from "element-plus";
+import OrderUserItem from "../components/user-item.vue";
+import OrderLogisticsItem from "../components/logistics-item.vue";
+import OrderPayItem from "../components/pay-item.vue";
+import OrderRemarkItem from "../components/remark-item.vue";
+import OrderInfoItem from "../components/info-item.vue";
+import OrderDiscountItem from "../components/discount-item.vue";
+import OrderGoods from "../components/goods.vue";
+
+const { service } = useCool();
+
+const options = reactive({
+	payType: [
+		{ label: "寰俊", value: 1, color: "#2aae67" },
+		{ label: "鏀粯瀹�", value: 2, color: "1678FF" }
+	],
+	status: [
+		{ label: "鐢宠涓�", value: 0, type: "info" },
+		{ label: "宸查��娆�", value: 1, type: "success" },
+		{ label: "宸叉嫆缁�", value: 2, type: "danger" }
+	]
+});
+
+// 鍚堣鏁版嵁
+const subData = ref({
+	totalCount: 0,
+	totalPrice: 0
+});
+
+// cl-table
+const Table = useTable({
+	contextMenu: [],
+	columns: [
+		{
+			type: "expand",
+			label: "鍟嗗搧",
+			width: 60,
+			component: {
+				vm: OrderGoods
+			}
+		},
+		{
+			label: "璁㈠崟淇℃伅",
+			prop: "orderNum",
+			minWidth: 160,
+			component: {
+				vm: OrderInfoItem
+			}
+		},
+		{
+			label: "鐢ㄦ埛淇℃伅",
+			prop: "user",
+			minWidth: 120,
+			component: {
+				vm: OrderUserItem
+			}
+		},
+		{
+			label: "閲戦锛堝厓锛�",
+			prop: "price",
+			minWidth: 120,
+			sortable: "custom"
+		},
+		{
+			label: "浼樻儬璇存槑",
+			prop: "discount",
+			minWidth: 160,
+			component: {
+				vm: OrderDiscountItem
+			}
+		},
+		{
+			label: "浠樻淇℃伅",
+			prop: "pay",
+			minWidth: 160,
+			component: {
+				vm: OrderPayItem
+			}
+		},
+		{
+			label: "鐗╂祦淇℃伅",
+			prop: "logistics",
+			minWidth: 250,
+			component: {
+				vm: OrderLogisticsItem
+			}
+		},
+		{
+			label: "澶囨敞",
+			prop: "remark",
+			minWidth: 200,
+			component: {
+				vm: OrderRemarkItem
+			}
+		},
+		{
+			label: "鐢宠鏃堕棿",
+			prop: "refund.applyTime",
+			minWidth: 160
+		},
+		{
+			label: "鐘舵��",
+			prop: "refund",
+			dict: options.status,
+			formatter(row) {
+				return row.refund?.status;
+			},
+			minWidth: 100,
+			fixed: "right"
+		},
+		{
+			type: "op",
+			width: 100,
+			buttons({ scope }) {
+				return [
+					{
+						label: "閫�娆�",
+						type: "danger",
+						hidden: !(
+							service.order.info._permission.refundHandle &&
+							scope.row.refund.status == 0
+						),
+						onClick() {
+							toRefund(scope.row);
+						}
+					}
+				];
+			}
+		}
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.order.info,
+		async onRefresh(params, { next }) {
+			const res = await next(params);
+
+			// 璁剧疆鍚堣鏁版嵁
+			subData.value = res.subData;
+		}
+	},
+	(app) => {
+		app.refresh({
+			status: [5, 6]
+		});
+	}
+);
+
+function refresh(params?: any) {
+	Crud.value?.refresh(params);
+}
+
+function onSummaryMethod() {
+	return ["鍚堣", "", "", subData.value.totalPrice + " 鍏�"];
+}
+
+// 鍙戣捣閫�娆�
+const Form = useForm();
+
+function toRefund(item: Eps.OrderInfoEntity) {
+	Form.value?.open({
+		title: "鍙戣捣閫�娆�",
+		width: "500px",
+		props: {
+			labelWidth: "80px"
+		},
+		op: {
+			saveButtonText: "鎻愪氦"
+		},
+		items: [
+			{
+				label: "閫�娆剧姸鎬�",
+				prop: "action",
+				value: 1,
+				required: true,
+				component: {
+					name: "el-radio-group",
+					options: [
+						{
+							label: "鍚屾剰",
+							value: 1
+						},
+						{
+							label: "鎷掔粷",
+							value: 0
+						}
+					]
+				}
+			},
+			{
+				label: "鎷掔粷鍘熷洜",
+				prop: "refuseReason",
+				required: true,
+				hidden({ scope }) {
+					return scope.action != 0;
+				},
+				component: {
+					name: "el-input",
+					props: {
+						type: "textarea",
+						rows: 4
+					}
+				}
+			}
+		],
+		on: {
+			submit(data, { done, close }) {
+				service.order.info
+					.refundHandle({
+						...data,
+						orderId: item.id,
+						amount: item.price
+					})
+					.then(() => {
+						ElMessage.success("鎿嶄綔鎴愬姛");
+						refresh();
+						close();
+					})
+					.catch((err) => {
+						ElMessage.error(err.message);
+						done();
+					});
+			}
+		}
+	});
+}
+</script>
diff --git a/src/modules/shop/views/recycleorderitem.vue b/src/modules/shop/views/recycleorderitem.vue
index fd18d1f..300fe16 100644
--- a/src/modules/shop/views/recycleorderitem.vue
+++ b/src/modules/shop/views/recycleorderitem.vue
@@ -37,8 +37,8 @@
 import { useCool } from "/@/cool";
 import { useI18n } from "vue-i18n";
 import { reactive } from "vue";
-import OrderSelect from "/$/recycle/components/order-select.vue";
-import ItemSelect from "/$/recycle/components/item-select.vue";
+import OrderSelect from "../components/order-select.vue";
+import ItemSelect from "../components/item-select.vue";
 
 const { service } = useCool();
 const { t } = useI18n();
diff --git a/src/modules/user/locales/zh-cn.json b/src/modules/user/locales/zh-cn.json
index 91ac918..9c2cba2 100644
--- a/src/modules/user/locales/zh-cn.json
+++ b/src/modules/user/locales/zh-cn.json
@@ -16,15 +16,5 @@
   "鐘舵��": "鐘舵��",
   "鍒涘缓鏃堕棿": "鍒涘缓鏃堕棿",
   "閫夋嫨鐢ㄦ埛": "閫夋嫨鐢ㄦ埛",
-  "濮撳悕": "濮撳悕",
-  "瀛︾敓": "瀛︾敓",
-  "鑰佸笀": "鑰佸笀",
-  "瀛﹂櫌鍚嶇О": "瀛﹂櫌鍚嶇О",
-  "涓撲笟鍚嶇О": "涓撲笟鍚嶇О",
-  "鐝骇鍚嶇О": "鐝骇鍚嶇О",
-  "瀛﹂櫌ID": "瀛﹂櫌ID",
-  "涓撲笟ID": "涓撲笟ID",
-  "鐝骇ID": "鐝骇ID",
-  "纰崇Н鍒嗘�婚":"纰崇Н鍒嗘�婚",
-  "鍞竴鏍囪瘑":"鍞竴鏍囪瘑"
+  "濮撳悕": "濮撳悕"
 }
\ No newline at end of file

--
Gitblit v1.9.1