From 327df5d61cc3beb0cd22bbb594a1231a23481fb6 Mon Sep 17 00:00:00 2001
From: "DESKTOP-V763RJ7\\Administrator" <835606593@qq.com>
Date: Wed, 7 Jan 2026 11:34:02 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AC=A1=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 216 +-
config.js | 71 +
game.js | 519 ++
index.html | 35 +
lib/protobuf.min.js | 8 +
lib/vue.global.js | 18193 ++++++++++++++++++++++++++++++++++++++++++
proto.js | 303 +
proto/action.proto | 33 +
proto/common.proto | 6 +
proto/define.proto | 16 +
style.css | 293 +
utils.js | 214 +
12 files changed, 19906 insertions(+), 1 deletion(-)
create mode 100644 config.js
create mode 100644 game.js
create mode 100644 index.html
create mode 100644 lib/protobuf.min.js
create mode 100644 lib/vue.global.js
create mode 100644 proto.js
create mode 100644 proto/action.proto
create mode 100644 proto/common.proto
create mode 100644 proto/define.proto
create mode 100644 style.css
create mode 100644 utils.js
diff --git a/README.md b/README.md
index 5e92c41..1d306bf 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,216 @@
-# client-web
+# 游戏方块容器 - 优化版本
+## 🚀 项目概述
+
+这是一个基于Vue 3和WebSocket的实时游戏监控系统,用于显示4个游戏方块的连接状态和动态圆点。
+
+## ✨ 优化内容
+
+### 1. **性能优化**
+- ✅ **WebSocket连接管理优化**:使用连接池和自动重连机制
+- ✅ **DOM操作优化**:使用Vue响应式数据替代直接DOM操作
+- ✅ **内存管理**:限制圆点数量,防止内存泄漏
+- ✅ **动画性能**:使用CSS3硬件加速和will-change属性
+
+### 2. **代码结构优化**
+- ✅ **组件化设计**:将方块组件化,提高代码复用性
+- ✅ **服务类分离**:WebSocket逻辑独立到服务类
+- ✅ **配置管理**:统一的配置文件管理
+- ✅ **工具类**:通用工具函数和日志系统
+
+### 3. **用户体验优化**
+- ✅ **响应式设计**:支持不同屏幕尺寸
+- ✅ **加载状态**:连接状态指示器和加载动画
+- ✅ **键盘快捷键**:快速操作功能
+- ✅ **状态栏**:实时显示连接状态和统计信息
+
+### 4. **错误处理增强**
+- ✅ **完善的错误处理**:WebSocket连接错误处理
+- ✅ **自动重连机制**:指数退避算法
+- ✅ **日志系统**:分级日志记录
+- ✅ **性能监控**:性能测量和分析
+
+### 5. **安全性优化**
+- ✅ **输入验证**:坐标范围验证
+- ✅ **连接验证**:WebSocket连接状态检查
+- ✅ **错误边界**:防止应用崩溃
+
+## 🛠️ 技术栈
+
+- **前端框架**:Vue 3
+- **通信协议**:WebSocket
+- **样式**:CSS3 + 响应式设计
+- **协议缓冲**:Protobuf.js
+- **工具库**:自定义工具类
+
+## 📁 项目结构
+
+```
+web/
+├── index.html # 主页面
+├── game.js # 主应用逻辑
+├── config.js # 配置文件
+├── utils.js # 工具类
+├── style.css # 样式文件
+├── proto/ # 协议文件
+│ ├── action.proto # 动作协议
+│ └── define.proto # 定义协议
+└── README.md # 项目说明
+```
+
+## 🚀 快速开始
+
+### 1. 启动项目
+```bash
+# 使用任何HTTP服务器启动项目
+python -m http.server 8000
+# 或
+npx serve .
+```
+
+### 2. 访问应用
+打开浏览器访问 `http://localhost:8000`
+
+## ⌨️ 键盘快捷键
+
+| 快捷键 | 功能 |
+|--------|------|
+| `H` | 隐藏/显示状态栏 |
+| `C` | 清除所有圆点 |
+| `R` | 重新连接所有WebSocket |
+
+## ⚙️ 配置说明
+
+### WebSocket配置
+```javascript
+websocket: {
+ baseUrl: 'ws://localhost:8501', // WebSocket服务器地址
+ reconnectAttempts: 5, // 重连次数
+ reconnectDelay: 1000, // 重连延迟
+ heartbeatInterval: 30000, // 心跳间隔
+ connectionTimeout: 10000 // 连接超时
+}
+```
+
+### 游戏配置
+```javascript
+game: {
+ maxDotsPerSquare: 100, // 每个方块最大圆点数
+ dotLifetime: 30000, // 圆点生命周期
+ gridSize: { width: 400, height: 400 }, // 网格大小
+ animationDuration: 300 // 动画持续时间
+}
+```
+
+## 🔧 自定义配置
+
+### 修改WebSocket服务器地址
+在 `config.js` 中修改 `websocket.baseUrl`:
+
+```javascript
+websocket: {
+ baseUrl: 'ws://your-server:port',
+ // ... 其他配置
+}
+```
+
+### 调整性能参数
+```javascript
+performance: {
+ enableAnimations: true, // 启用动画
+ enableHoverEffects: true, // 启用悬停效果
+ enableBackdropFilter: true, // 启用背景模糊
+ maxFPS: 60 // 最大帧率
+}
+```
+
+## 📊 性能特性
+
+### 1. **响应式布局**
+- 桌面端:2x2网格布局
+- 平板端:2x2自适应布局
+- 移动端:1x4垂直布局
+
+### 2. **动画优化**
+- CSS3硬件加速
+- 帧率控制
+- 动画性能监控
+
+### 3. **内存管理**
+- 圆点数量限制
+- 自动清理机制
+- 内存泄漏防护
+
+## 🐛 调试功能
+
+### 日志系统
+```javascript
+// 在浏览器控制台查看详细日志
+utils.debug('调试信息');
+utils.info('一般信息');
+utils.warn('警告信息');
+utils.error('错误信息');
+```
+
+### 性能监控
+```javascript
+// 测量函数执行时间
+const { result, duration } = utils.measurePerformance('函数名', () => {
+ // 要测量的代码
+});
+```
+
+## 🔒 安全特性
+
+### 1. **输入验证**
+- 坐标范围检查
+- 数据类型验证
+- 恶意数据过滤
+
+### 2. **连接安全**
+- WebSocket状态验证
+- 连接超时处理
+- 错误恢复机制
+
+## 📱 移动端支持
+
+- 响应式设计
+- 触摸友好的界面
+- 性能优化
+- 电池友好的动画
+
+## 🎨 主题定制
+
+### 颜色方案
+可以通过修改CSS变量来自定义主题:
+
+```css
+:root {
+ --primary-color: #ff6b6b;
+ --secondary-color: #4ecdc4;
+ --background-color: #f5f5f5;
+ --border-color: #555;
+}
+```
+
+## 🤝 贡献指南
+
+1. Fork 项目
+2. 创建功能分支
+3. 提交更改
+4. 推送到分支
+5. 创建 Pull Request
+
+## 📄 许可证
+
+MIT License
+
+## 📞 支持
+
+如有问题或建议,请提交 Issue 或联系开发团队。
+
+---
+
+**版本**: 2.0.0
+**最后更新**: 2024年
+**维护者**: 游戏开发团队
\ No newline at end of file
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..09d1bf9
--- /dev/null
+++ b/config.js
@@ -0,0 +1,71 @@
+// 游戏配置文件
+const GameConfig = {
+ // WebSocket配置
+ websocket: {
+ baseUrl: 'ws://localhost:8501',
+ reconnectAttempts: 5,
+ reconnectDelay: 1000,
+ heartbeatInterval: 30000, // 心跳间隔(毫秒)
+ connectionTimeout: 10000, // 连接超时(毫秒)
+ },
+
+ // 游戏配置
+ game: {
+ maxDotsPerSquare: 100, // 每个方块最大圆点数
+ dotLifetime: 30000, // 圆点生命周期(毫秒)
+ gridSize: {
+ width: 400,
+ height: 400
+ },
+ animationDuration: 300, // 动画持续时间(毫秒)
+ },
+
+ // UI配置
+ ui: {
+ showStatusBar: true,
+ showKeyboardHints: true,
+ autoHideHints: true,
+ hintsHideDelay: 5000, // 提示自动隐藏延迟(毫秒)
+ },
+
+ // 性能配置
+ performance: {
+ enableAnimations: true,
+ enableHoverEffects: true,
+ enableBackdropFilter: true,
+ maxFPS: 60,
+ },
+
+ // 调试配置
+ debug: {
+ enableLogging: true,
+ logLevel: 'info', // 'debug', 'info', 'warn', 'error'
+ showConnectionDetails: false,
+ }
+};
+
+// 环境检测
+const isDevelopment = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1';
+const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+
+// 根据环境调整配置
+if (isDevelopment) {
+ GameConfig.debug.enableLogging = true;
+ GameConfig.debug.logLevel = 'debug';
+} else {
+ GameConfig.debug.enableLogging = false;
+ GameConfig.performance.enableAnimations = true;
+}
+
+if (isMobile) {
+ GameConfig.ui.showKeyboardHints = false;
+ GameConfig.performance.enableHoverEffects = false;
+ GameConfig.game.maxDotsPerSquare = 50; // 移动端减少圆点数量
+}
+
+// 导出配置
+if (typeof module !== 'undefined' && module.exports) {
+ module.exports = GameConfig;
+} else {
+ window.GameConfig = GameConfig;
+}
\ No newline at end of file
diff --git a/game.js b/game.js
new file mode 100644
index 0000000..3c1fb95
--- /dev/null
+++ b/game.js
@@ -0,0 +1,519 @@
+const { createApp } = Vue;
+
+// WebSocket服务类
+class WebSocketService {
+ constructor() {
+ this.connections = new Map();
+ this.reconnectAttempts = new Map();
+ this.maxReconnectAttempts = 5;
+ this.reconnectDelay = 1000;
+ }
+
+ connect(squareId, onMessage, onStatusChange) {
+ const wsUrl = `wss://www.hlsq.asia/ws/?token=${squareId}`;
+
+ try {
+ const ws = new WebSocket(wsUrl);
+ ws.binaryType = 'arraybuffer';
+
+ ws.onopen = () => {
+ console.log(`WebSocket ${squareId} connected`);
+ onStatusChange(true);
+ this.reconnectAttempts.set(squareId, 0);
+
+ // 发送进入实例消息(protobuf)
+ protoUtils.readyPromise.then(() => {
+ const enterInstanceBuffer = protoUtils.createEnterInstanceMessage(1);
+ if (enterInstanceBuffer) {
+ this.sendMessage(ws, enterInstanceBuffer);
+ }
+ });
+ };
+
+ ws.onclose = (e) => {
+ console.log(`WebSocket ${squareId} disconnected:`, e.code, e.reason);
+ onStatusChange(false);
+ this.connections.delete(squareId);
+
+ // 自动重连
+ this.scheduleReconnect(squareId, onMessage, onStatusChange);
+ };
+
+ ws.onerror = (error) => {
+ console.error(`WebSocket ${squareId} error:`, error);
+ };
+
+ ws.onmessage = (event) => {
+ try {
+ onMessage(event.data, squareId);
+ } catch (error) {
+ console.error('Error processing message:', error);
+ }
+ };
+
+ this.connections.set(squareId, ws);
+ } catch (error) {
+ console.error(`WebSocket ${squareId} init error:`, error);
+ }
+ }
+
+ sendMessage(ws, data) {
+ if (ws.readyState === WebSocket.OPEN) {
+ try {
+ if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
+ ws.send(data);
+ } else {
+ console.error('Attempted to send non-binary data through binary channel.');
+ }
+ } catch (error) {
+ console.error('Failed to send message:', error);
+ }
+ }
+ }
+
+ // 发送动作消息
+ sendAction(squareId, actionId, x, y) {
+ const ws = this.connections.get(squareId);
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
+ console.warn(`Cannot send action: WebSocket ${squareId} not connected`);
+ return false;
+ }
+
+ protoUtils.readyPromise.then(() => {
+ const actionBuffer = protoUtils.createActionMessage(actionId, x, y);
+ if (actionBuffer) {
+ this.sendMessage(ws, actionBuffer);
+ console.log(`Action sent to square ${squareId}: actionId=${actionId}, x=${x}, y=${y}`);
+ return true;
+ }
+ });
+
+ return false;
+ }
+
+ // 发送方向动作消息
+ sendDirectionAction(squareId, directionBits) {
+ const ws = this.connections.get(squareId);
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
+ console.warn(`Cannot send direction action: WebSocket ${squareId} not connected`);
+ return false;
+ }
+
+ protoUtils.readyPromise.then(() => {
+ const actionBuffer = protoUtils.createDirectionActionMessage(directionBits);
+ if (actionBuffer) {
+ this.sendMessage(ws, actionBuffer);
+ console.log(`Direction action sent to square ${squareId}: directionBits=${directionBits}`);
+ return true;
+ }
+ });
+
+ return false;
+ }
+
+ scheduleReconnect(squareId, onMessage, onStatusChange) {
+ const attempts = this.reconnectAttempts.get(squareId) || 0;
+
+ if (attempts < this.maxReconnectAttempts) {
+ const delay = this.reconnectDelay * Math.pow(2, attempts);
+ this.reconnectAttempts.set(squareId, attempts + 1);
+
+ setTimeout(() => {
+ console.log(`Attempting to reconnect WebSocket ${squareId} (attempt ${attempts + 1})`);
+ this.connect(squareId, onMessage, onStatusChange);
+ }, delay);
+ } else {
+ console.error(`Max reconnection attempts reached for WebSocket ${squareId}`);
+ }
+ }
+
+ disconnect(squareId) {
+ const ws = this.connections.get(squareId);
+ if (ws) {
+ ws.close();
+ this.connections.delete(squareId);
+ }
+ }
+
+ disconnectAll() {
+ this.connections.forEach((ws, squareId) => {
+ this.disconnect(squareId);
+ });
+ }
+}
+
+// 方块组件
+const SquareComponent = {
+ props: ['squareId', 'connected', 'dots'],
+ template: `
+
+ `,
+ methods: {
+ // 转换Y坐标,使左下角为原点
+ transformY(y) {
+ // 假设方块高度为400px(从GameConfig获取)
+ const height = GameConfig.game.gridSize.height;
+ // 将y坐标从"从下到上"转换为"从上到下"
+ return height - y;
+ }
+ }
+};
+
+// 主应用组件
+const App = {
+ components: {
+ 'square-component': SquareComponent
+ },
+ template: `
+
+
+
+
+
+
+ 连接状态: {{ connectedCount }}/{{ squares.length }}
+
+
+ 总圆点数: {{ totalDots }}
+
+
+ 当前方块: {{ activeSquareId }}
+
+
+ 方向键: {{ directionStateText }}
+
+
+
+ `,
+ data() {
+ return {
+ squares: [
+ { connected: false, dots: [] },
+ { connected: false, dots: [] },
+ { connected: false, dots: [] },
+ { connected: false, dots: [] }
+ ],
+ wsService: null,
+ showStatusBar: true,
+ activeSquareId: null,
+ directionState: {
+ active: false,
+ w: false, // 1
+ s: false, // 2
+ a: false, // 4
+ d: false // 8
+ },
+ directionKeyCodes: {
+ 'KeyW': 'w',
+ 'KeyS': 's',
+ 'KeyA': 'a',
+ 'KeyD': 'd',
+ // 兼容箭头键
+ 'ArrowUp': 'w',
+ 'ArrowDown': 's',
+ 'ArrowLeft': 'a',
+ 'ArrowRight': 'd'
+ }
+ }
+ },
+ computed: {
+ connectedCount() {
+ return this.squares.filter(square => square.connected).length;
+ },
+ totalDots() {
+ return this.squares.reduce((total, square) => total + square.dots.length, 0);
+ },
+ // 计算方向状态文本
+ directionStateText() {
+ const keys = [];
+ if (this.directionState.w) keys.push('W');
+ if (this.directionState.s) keys.push('S');
+ if (this.directionState.a) keys.push('A');
+ if (this.directionState.d) keys.push('D');
+ return keys.join('+') || '无';
+ },
+ // 计算方向位
+ directionBits() {
+ let bits = 0;
+ if (this.directionState.w) bits |= 1; // W = 1
+ if (this.directionState.s) bits |= 2; // S = 2
+ if (this.directionState.a) bits |= 4; // A = 4
+ if (this.directionState.d) bits |= 8; // D = 8
+ return bits;
+ }
+ },
+ mounted() {
+ this.wsService = new WebSocketService();
+ this.initializeConnections();
+
+ // 添加键盘事件监听
+ window.addEventListener('keydown', this.handleKeyDown);
+ window.addEventListener('keyup', this.handleKeyUp);
+
+ // 添加键盘快捷键
+ this.addKeyboardShortcuts();
+ },
+ beforeUnmount() {
+ if (this.wsService) {
+ this.wsService.disconnectAll();
+ }
+
+ // 移除键盘事件监听
+ window.removeEventListener('keydown', this.handleKeyDown);
+ window.removeEventListener('keyup', this.handleKeyUp);
+ },
+ methods: {
+ initializeConnections() {
+ this.squares.forEach((square, index) => {
+ const squareId = index + 1;
+ this.wsService.connect(
+ squareId,
+ this.handleMessage,
+ (connected) => this.updateConnectionStatus(index, connected)
+ );
+ });
+ },
+
+ updateConnectionStatus(index, connected) {
+ this.squares[index].connected = connected;
+ },
+
+ handleMessage(rawData, squareId) {
+ const squareIndex = squareId - 1;
+
+ try {
+ // 仅处理二进制 protobuf 消息
+ if (rawData instanceof ArrayBuffer || rawData instanceof Uint8Array) {
+ const arrayBuf = rawData instanceof Uint8Array ? rawData : new Uint8Array(rawData);
+ const outerMsg = protoUtils.encoder.decodeMessage(arrayBuf);
+ if (!outerMsg) return;
+
+ const msgId = outerMsg.ID;
+ const msgEnum = protoUtils.encoder.MessageID;
+
+ // 根据消息ID处理不同类型的消息
+ switch (msgId) {
+ case msgEnum.MESSAGE_ID_POSITION: {
+ // 处理位置更新消息
+ const S2C_Position = protoUtils.encoder.root.lookupType('S2C_Position');
+ const positionMsg = S2C_Position.decode(outerMsg.Payload);
+
+ // 处理所有位置信息
+ if (positionMsg.Info && positionMsg.Info.length > 0) {
+ positionMsg.Info.forEach(info => {
+ // 注意:坐标已经是以左下角为原点,保持原样
+ if (utils.validateCoordinates(info.X, info.Y)) {
+ // 查找是否已存在该UID的点
+ const existingDotIndex = this.squares[squareIndex].dots.findIndex(dot => dot.uid === info.UID);
+
+ if (existingDotIndex !== -1) {
+ // 已存在,更新位置
+ this.squares[squareIndex].dots[existingDotIndex].x = info.X;
+ this.squares[squareIndex].dots[existingDotIndex].y = info.Y;
+ this.squares[squareIndex].dots[existingDotIndex].timestamp = Date.now();
+ console.log(`Dot updated for square ${squareId}, UID ${info.UID}: (${info.X}, ${info.Y})`);
+ } else {
+ // 不存在,创建新点
+ this.squares[squareIndex].dots.push({
+ x: info.X,
+ y: info.Y,
+ timestamp: Date.now(),
+ uid: info.UID,
+ // 判断是否是玩家控制的点(假设UID为当前squareId的是玩家控制的)
+ isPlayerControlled: info.UID === squareId
+ });
+
+ // 限制每个方块的圆点数量,避免内存泄漏
+ if (this.squares[squareIndex].dots.length > GameConfig.game.maxDotsPerSquare) {
+ this.squares[squareIndex].dots.shift();
+ }
+
+ console.log(`New dot added to square ${squareId} at (${info.X}, ${info.Y}) for UID ${info.UID}`);
+ }
+ }
+ });
+ }
+ break;
+ }
+
+ case msgEnum.MESSAGE_ID_ENTER_INSTANCE: {
+ // 处理进入实例响应消息
+ const S2C_EnterInstance = protoUtils.encoder.root.lookupType('S2C_EnterInstance');
+ const enterInstanceMsg = S2C_EnterInstance.decode(outerMsg.Payload);
+
+ // 如果有位置信息,添加到对应方块
+ if (enterInstanceMsg.Info) {
+ const info = enterInstanceMsg.Info;
+ // 注意:坐标已经是以左下角为原点,保持原样
+ if (utils.validateCoordinates(info.X, info.Y)) {
+ // 查找是否已存在该UID的点
+ const existingDotIndex = this.squares[squareIndex].dots.findIndex(dot => dot.uid === info.UID);
+
+ if (existingDotIndex !== -1) {
+ // 已存在,更新位置
+ this.squares[squareIndex].dots[existingDotIndex].x = info.X;
+ this.squares[squareIndex].dots[existingDotIndex].y = info.Y;
+ this.squares[squareIndex].dots[existingDotIndex].timestamp = Date.now();
+ this.squares[squareIndex].dots[existingDotIndex].isInitial = true;
+ this.squares[squareIndex].dots[existingDotIndex].isPlayerControlled = info.UID === squareId;
+ console.log(`Initial position updated for square ${squareId}, UID ${info.UID}: (${info.X}, ${info.Y})`);
+ } else {
+ // 不存在,创建新点
+ this.squares[squareIndex].dots.push({
+ x: info.X,
+ y: info.Y,
+ timestamp: Date.now(),
+ uid: info.UID,
+ isInitial: true, // 标记为初始位置
+ // 判断是否是玩家控制的点(假设UID为当前squareId的是玩家控制的)
+ isPlayerControlled: info.UID === squareId
+ });
+
+ console.log(`Initial position created for square ${squareId}: (${info.X}, ${info.Y}) UID: ${info.UID}`);
+ }
+ }
+ }
+ break;
+ }
+
+ default:
+ console.warn('Unhandled message ID:', msgId);
+ break;
+ }
+ return; // 已处理protobuf
+ }
+ } catch (error) {
+ console.error('Error processing message:', error);
+ }
+ },
+
+ // 设置当前活动方块
+ setActiveSquare(squareId) {
+ if (this.squares[squareId - 1].connected) {
+ this.activeSquareId = squareId;
+ this.directionState.active = true;
+ console.log(`Active square set to ${squareId}`);
+ }
+ },
+
+ // 清除当前活动方块
+ clearActiveSquare() {
+ if (this.activeSquareId) {
+ // 在清除之前发送一个id=0的action消息
+ this.sendDirectionAction(this.activeSquareId, 0);
+
+ // 然后清除状态
+ this.activeSquareId = null;
+ this.directionState.active = false;
+ // 重置所有方向键状态
+ this.directionState.w = false;
+ this.directionState.s = false;
+ this.directionState.a = false;
+ this.directionState.d = false;
+ }
+ },
+
+ // 处理键盘按下事件
+ handleKeyDown(event) {
+ if (!this.activeSquareId) return;
+
+ const key = this.directionKeyCodes[event.code];
+ if (key && this.directionState.hasOwnProperty(key)) {
+ // 只有当状态真正变化时才发送
+ if (!this.directionState[key]) {
+ this.directionState[key] = true;
+ // 计算新的方向位并发送
+ const directionBits = this.directionBits;
+ this.sendDirectionAction(this.activeSquareId, directionBits);
+ }
+ event.preventDefault(); // 防止页面滚动
+ }
+ },
+
+ // 处理键盘释放事件
+ handleKeyUp(event) {
+ if (!this.activeSquareId) return;
+
+ const key = this.directionKeyCodes[event.code];
+ if (key && this.directionState.hasOwnProperty(key)) {
+ // 只有当状态真正变化时才发送
+ if (this.directionState[key]) {
+ this.directionState[key] = false;
+ // 计算新的方向位并发送
+ const directionBits = this.directionBits;
+ this.sendDirectionAction(this.activeSquareId, directionBits);
+ }
+ event.preventDefault();
+ }
+ },
+
+ addKeyboardShortcuts() {
+ document.addEventListener('keydown', (e) => {
+ switch (e.key) {
+ case 'h':
+ this.showStatusBar = !this.showStatusBar;
+ break;
+ case 'c':
+ this.clearAllDots();
+ break;
+ case 'r':
+ this.reconnectAll();
+ break;
+ }
+ });
+ },
+
+ clearAllDots() {
+ this.squares.forEach(square => {
+ square.dots = [];
+ });
+ console.log('All dots cleared');
+ },
+
+ reconnectAll() {
+ this.wsService.disconnectAll();
+ setTimeout(() => {
+ this.initializeConnections();
+ }, 1000);
+ console.log('Reconnecting all WebSockets...');
+ },
+
+ // 发送动作消息到服务器
+ sendAction(squareId, actionId, x, y) {
+ if (this.wsService) {
+ return this.wsService.sendAction(squareId, actionId, x, y);
+ }
+ return false;
+ },
+
+ // 发送方向动作消息到服务器
+ sendDirectionAction(squareId, directionBits) {
+ if (this.wsService) {
+ return this.wsService.sendDirectionAction(squareId, directionBits);
+ }
+ return false;
+ }
+ }
+};
+
+createApp(App).mount('#app');
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..da357b6
--- /dev/null
+++ b/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+ 游戏方块容器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
键盘快捷键
+
+ - H - 隐藏/显示状态栏
+ - C - 清除所有圆点
+ - R - 重新连接所有WebSocket
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/protobuf.min.js b/lib/protobuf.min.js
new file mode 100644
index 0000000..3c9a67e
--- /dev/null
+++ b/lib/protobuf.min.js
@@ -0,0 +1,8 @@
+/*!
+ * protobuf.js v7.5.3 (c) 2016, daniel wirtz
+ * compiled wed, 28 may 2025 22:23:47 utc
+ * licensed under the bsd-3-clause license
+ * see: https://github.com/dcodeio/protobuf.js for details
+ */
+!function(rt){"use strict";!function(r,e,t){var i=function t(i){var n=e[i];return n||r[i][0].call(n=e[i]={exports:{}},t,n,n.exports),n.exports}(t[0]);i.util.global.protobuf=i,"function"==typeof define&&define.amd&&define(["long"],function(t){return t&&t.isLong&&(i.util.Long=t,i.configure()),i}),"object"==typeof module&&module&&module.exports&&(module.exports=i)}({1:[function(t,i,n){i.exports=function(t,i){var n=Array(arguments.length-1),s=0,r=2,o=!0;for(;r>2],r=(3&f)<<4,u=1;break;case 1:s[o++]=h[r|f>>4],r=(15&f)<<2,u=2;break;case 2:s[o++]=h[r|f>>6],s[o++]=h[63&f],u=0}8191>4,r=u,s=2;break;case 2:i[n++]=(15&r)<<4|(60&u)>>2,r=u,s=3;break;case 3:i[n++]=(3&r)<<6|u,s=0}}if(1===s)throw Error(a);return n-e},n.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)}},{}],3:[function(t,i,n){function c(i,n){"string"==typeof i&&(n=i,i=rt);var f=[];function h(t){if("string"!=typeof t){var i=a();if(c.verbose&&console.log("codegen: "+i),i="return "+i,t){for(var n=Object.keys(t),r=Array(n.length+1),e=Array(n.length),s=0;s>>0:i<11754943508222875e-54?(e<<31|Math.round(i/1401298464324817e-60))>>>0:(e<<31|127+(t=Math.floor(Math.log(i)/Math.LN2))<<23|8388607&Math.round(i*Math.pow(2,-t)*8388608))>>>0,n,r)}function n(t,i,n){t=t(i,n),i=2*(t>>31)+1,n=t>>>23&255,t&=8388607;return 255==n?t?NaN:1/0*i:0==n?1401298464324817e-60*i*t:i*Math.pow(2,n-150)*(8388608+t)}function r(t,i,n){u[0]=t,i[n]=f[0],i[n+1]=f[1],i[n+2]=f[2],i[n+3]=f[3]}function e(t,i,n){u[0]=t,i[n]=f[3],i[n+1]=f[2],i[n+2]=f[1],i[n+3]=f[0]}function s(t,i){return f[0]=t[i],f[1]=t[i+1],f[2]=t[i+2],f[3]=t[i+3],u[0]}function o(t,i){return f[3]=t[i],f[2]=t[i+1],f[1]=t[i+2],f[0]=t[i+3],u[0]}var u,f,h,a,c;function l(t,i,n,r,e,s){var o,u=r<0?1:0;0===(r=u?-r:r)?(t(0,e,s+i),t(0<1/r?0:2147483648,e,s+n)):isNaN(r)?(t(0,e,s+i),t(2146959360,e,s+n)):17976931348623157e292>>0,e,s+n)):r<22250738585072014e-324?(t((o=r/5e-324)>>>0,e,s+i),t((u<<31|o/4294967296)>>>0,e,s+n)):(t(4503599627370496*(o=r*Math.pow(2,-(r=1024===(r=Math.floor(Math.log(r)/Math.LN2))?1023:r)))>>>0,e,s+i),t((u<<31|r+1023<<20|1048576*o&1048575)>>>0,e,s+n))}function d(t,i,n,r,e){i=t(r,e+i),t=t(r,e+n),r=2*(t>>31)+1,e=t>>>20&2047,n=4294967296*(1048575&t)+i;return 2047==e?n?NaN:1/0*r:0==e?5e-324*r*n:r*Math.pow(2,e-1075)*(n+4503599627370496)}function p(t,i,n){h[0]=t,i[n]=a[0],i[n+1]=a[1],i[n+2]=a[2],i[n+3]=a[3],i[n+4]=a[4],i[n+5]=a[5],i[n+6]=a[6],i[n+7]=a[7]}function v(t,i,n){h[0]=t,i[n]=a[7],i[n+1]=a[6],i[n+2]=a[5],i[n+3]=a[4],i[n+4]=a[3],i[n+5]=a[2],i[n+6]=a[1],i[n+7]=a[0]}function b(t,i){return a[0]=t[i],a[1]=t[i+1],a[2]=t[i+2],a[3]=t[i+3],a[4]=t[i+4],a[5]=t[i+5],a[6]=t[i+6],a[7]=t[i+7],h[0]}function w(t,i){return a[7]=t[i],a[6]=t[i+1],a[5]=t[i+2],a[4]=t[i+3],a[3]=t[i+4],a[2]=t[i+5],a[1]=t[i+6],a[0]=t[i+7],h[0]}return"undefined"!=typeof Float32Array?(u=new Float32Array([-0]),f=new Uint8Array(u.buffer),c=128===f[3],t.writeFloatLE=c?r:e,t.writeFloatBE=c?e:r,t.readFloatLE=c?s:o,t.readFloatBE=c?o:s):(t.writeFloatLE=i.bind(null,y),t.writeFloatBE=i.bind(null,m),t.readFloatLE=n.bind(null,g),t.readFloatBE=n.bind(null,j)),"undefined"!=typeof Float64Array?(h=new Float64Array([-0]),a=new Uint8Array(h.buffer),c=128===a[7],t.writeDoubleLE=c?p:v,t.writeDoubleBE=c?v:p,t.readDoubleLE=c?b:w,t.readDoubleBE=c?w:b):(t.writeDoubleLE=l.bind(null,y,0,4),t.writeDoubleBE=l.bind(null,m,4,0),t.readDoubleLE=d.bind(null,g,0,4),t.readDoubleBE=d.bind(null,j,4,0)),t}function y(t,i,n){i[n]=255&t,i[n+1]=t>>>8&255,i[n+2]=t>>>16&255,i[n+3]=t>>>24}function m(t,i,n){i[n]=t>>>24,i[n+1]=t>>>16&255,i[n+2]=t>>>8&255,i[n+3]=255&t}function g(t,i){return(t[i]|t[i+1]<<8|t[i+2]<<16|t[i+3]<<24)>>>0}function j(t,i){return(t[i]<<24|t[i+1]<<16|t[i+2]<<8|t[i+3])>>>0}i.exports=r(r)},{}],7:[function(t,i,n){function r(t){try{var i=eval("require")(t);if(i&&(i.length||Object.keys(i).length))return i}catch(t){}return null}i.exports=r},{}],8:[function(t,i,n){var e=n.isAbsolute=function(t){return/^(?:\/|\w+:)/.test(t)},r=n.normalize=function(t){var i=(t=t.replace(/\\/g,"/").replace(/\/{2,}/g,"/")).split("/"),n=e(t),t="";n&&(t=i.shift()+"/");for(var r=0;r>>1,s=null,o=r;return function(t){if(t<1||e>10),s[o++]=56320+(1023&r)):s[o++]=(15&r)<<12|(63&t[i++])<<6|63&t[i++],8191>6|192:(55296==(64512&r)&&56320==(64512&(e=t.charCodeAt(o+1)))?(++o,i[n++]=(r=65536+((1023&r)<<10)+(1023&e))>>18|240,i[n++]=r>>12&63|128):i[n++]=r>>12|224,i[n++]=r>>6&63|128),i[n++]=63&r|128);return n-s}},{}],11:[function(t,i,n){i.exports=e;var r=/\/|\./;function e(t,i){r.test(t)||(t="google/protobuf/"+t+".proto",i={nested:{google:{nested:{protobuf:{nested:i}}}}}),e[t]=i}e("any",{Any:{fields:{type_url:{type:"string",id:1},value:{type:"bytes",id:2}}}}),e("duration",{Duration:i={fields:{seconds:{type:"int64",id:1},nanos:{type:"int32",id:2}}}}),e("timestamp",{Timestamp:i}),e("empty",{Empty:{fields:{}}}),e("struct",{Struct:{fields:{fields:{keyType:"string",type:"Value",id:1}}},Value:{oneofs:{kind:{oneof:["nullValue","numberValue","stringValue","boolValue","structValue","listValue"]}},fields:{nullValue:{type:"NullValue",id:1},numberValue:{type:"double",id:2},stringValue:{type:"string",id:3},boolValue:{type:"bool",id:4},structValue:{type:"Struct",id:5},listValue:{type:"ListValue",id:6}}},NullValue:{values:{NULL_VALUE:0}},ListValue:{fields:{values:{rule:"repeated",type:"Value",id:1}}}}),e("wrappers",{DoubleValue:{fields:{value:{type:"double",id:1}}},FloatValue:{fields:{value:{type:"float",id:1}}},Int64Value:{fields:{value:{type:"int64",id:1}}},UInt64Value:{fields:{value:{type:"uint64",id:1}}},Int32Value:{fields:{value:{type:"int32",id:1}}},UInt32Value:{fields:{value:{type:"uint32",id:1}}},BoolValue:{fields:{value:{type:"bool",id:1}}},StringValue:{fields:{value:{type:"string",id:1}}},BytesValue:{fields:{value:{type:"bytes",id:1}}}}),e("field_mask",{FieldMask:{fields:{paths:{rule:"repeated",type:"string",id:1}}}}),e.get=function(t){return e[t]||null}},{}],12:[function(t,i,n){var l=t(15),d=t(37);function o(t,i,n,r){var e=!1;if(i.resolvedType)if(i.resolvedType instanceof l){t("switch(d%s){",r);for(var s=i.resolvedType.values,o=Object.keys(s),u=0;u>>0",r,r);break;case"int32":case"sint32":case"sfixed32":t("m%s=d%s|0",r,r);break;case"uint64":f=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":t("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",r,r,f)('else if(typeof d%s==="string")',r)("m%s=parseInt(d%s,10)",r,r)('else if(typeof d%s==="number")',r)("m%s=d%s",r,r)('else if(typeof d%s==="object")',r)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",r,r,r,f?"true":"");break;case"bytes":t('if(typeof d%s==="string")',r)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",r,r,r)("else if(d%s.length >= 0)",r)("m%s=d%s",r,r);break;case"string":t("m%s=String(d%s)",r,r);break;case"bool":t("m%s=Boolean(d%s)",r,r)}}return t}function p(t,i,n,r){if(i.resolvedType)i.resolvedType instanceof l?t("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s",r,n,r,r,n,r,r):t("d%s=types[%i].toObject(m%s,o)",r,n,r);else{var e=!1;switch(i.type){case"double":case"float":t("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",r,r,r,r);break;case"uint64":e=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":t('if(typeof m%s==="number")',r)("d%s=o.longs===String?String(m%s):m%s",r,r,r)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",r,r,r,r,e?"true":"",r);break;case"bytes":t("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",r,r,r,r,r);break;default:t("d%s=m%s",r,r)}}return t}n.fromObject=function(t){var i=t.fieldsArray,n=d.codegen(["d"],t.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!i.length)return n("return new this.ctor");n("var m=new this.ctor");for(var r=0;r>>3){"),n=0;n>>3){")("case 1: k=r.%s(); break",r.keyType)("case 2:"),f.basic[e]===rt?i("value=types[%i].decode(r,r.uint32())",n):i("value=r.%s()",e),i("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),f.long[r.keyType]!==rt?i('%s[typeof k==="object"?util.longToHash(k):k]=value',s):i("%s[k]=value",s)):r.repeated?(i("if(!(%s&&%s.length))",s,s)("%s=[]",s),f.packed[e]!==rt&&i("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0,8|a.mapKey[s.keyType],s.keyType),f===rt?n("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",o,i):n(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|f,u,i),n("}")("}")):s.repeated?(n("if(%s!=null&&%s.length){",i,i),s.packed&&a.packed[u]!==rt?n("w.uint32(%i).fork()",(s.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",i)("w.%s(%s[i])",u,i)("w.ldelim()"):(n("for(var i=0;i<%s.length;++i)",i),f===rt?l(n,s,o,i+"[i]"):n("w.uint32(%i).%s(%s[i])",(s.id<<3|f)>>>0,u,i)),n("}")):(s.optional&&n("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",i,s.name),f===rt?l(n,s,o,i):n("w.uint32(%i).%s(%s)",(s.id<<3|f)>>>0,u,i))}return n("return w")};var h=t(15),a=t(36),c=t(37);function l(t,i,n,r){i.delimited?t("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",n,r,(i.id<<3|3)>>>0,(i.id<<3|4)>>>0):t("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",n,r,(i.id<<3|2)>>>0)}},{15:15,36:36,37:37}],15:[function(t,i,n){i.exports=s;var f=t(24),r=(((s.prototype=Object.create(f.prototype)).constructor=s).className="Enum",t(23)),e=t(37);function s(t,i,n,r,e,s){if(f.call(this,t,n),i&&"object"!=typeof i)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=r,this.comments=e||{},this.valuesOptions=s,this.o={},this.reserved=rt,i)for(var o=Object.keys(i),u=0;u{var i=Object.assign({},this.h);this.o[t]=Object.assign(i,this.valuesOptions&&this.valuesOptions[t]&&this.valuesOptions[t].features)}),this},s.fromJSON=function(t,i){t=new s(t,i.values,i.options,i.comment,i.comments);return t.reserved=i.reserved,i.edition&&(t.f=i.edition),t.a="proto3",t},s.prototype.toJSON=function(t){t=!!t&&!!t.keepComments;return e.toObject(["edition",this.c(),"options",this.options,"valuesOptions",this.valuesOptions,"values",this.values,"reserved",this.reserved&&this.reserved.length?this.reserved:rt,"comment",t?this.comment:rt,"comments",t?this.comments:rt])},s.prototype.add=function(t,i,n,r){if(!e.isString(t))throw TypeError("name must be a string");if(!e.isInteger(i))throw TypeError("id must be an integer");if(this.values[t]!==rt)throw Error("duplicate name '"+t+"' in "+this);if(this.isReservedId(i))throw Error("id "+i+" is reserved in "+this);if(this.isReservedName(t))throw Error("name '"+t+"' is reserved in "+this);if(this.valuesById[i]!==rt){if(!this.options||!this.options.allow_alias)throw Error("duplicate id "+i+" in "+this);this.values[t]=i}else this.valuesById[this.values[t]=i]=t;return r&&(this.valuesOptions===rt&&(this.valuesOptions={}),this.valuesOptions[t]=r||null),this.comments[t]=n||null,this},s.prototype.remove=function(t){if(!e.isString(t))throw TypeError("name must be a string");var i=this.values[t];if(null==i)throw Error("name '"+t+"' does not exist in "+this);return delete this.valuesById[i],delete this.values[t],delete this.comments[t],this.valuesOptions&&delete this.valuesOptions[t],this},s.prototype.isReservedId=function(t){return r.isReservedId(this.reserved,t)},s.prototype.isReservedName=function(t){return r.isReservedName(this.reserved,t)}},{23:23,24:24,37:37}],16:[function(t,i,n){i.exports=o;var r,u=t(24),e=(((o.prototype=Object.create(u.prototype)).constructor=o).className="Field",t(15)),f=t(36),h=t(37),a=/^required|optional|repeated$/;function o(t,i,n,r,e,s,o){if(h.isObject(r)?(o=e,s=r,r=e=rt):h.isObject(e)&&(o=s,s=e,e=rt),u.call(this,t,s),!h.isInteger(i)||i<0)throw TypeError("id must be a non-negative integer");if(!h.isString(n))throw TypeError("type must be a string");if(r!==rt&&!a.test(r=r.toString().toLowerCase()))throw TypeError("rule must be a string rule");if(e!==rt&&!h.isString(e))throw TypeError("extend must be a string");this.rule=(r="proto3_optional"===r?"optional":r)&&"optional"!==r?r:rt,this.type=n,this.id=i,this.extend=e||rt,this.repeated="repeated"===r,this.map=!1,this.message=null,this.partOf=null,this.typeDefault=null,this.defaultValue=null,this.long=!!h.Long&&f.long[n]!==rt,this.bytes="bytes"===n,this.resolvedType=null,this.extensionField=null,this.declaringField=null,this.comment=o}o.fromJSON=function(t,i){t=new o(t,i.id,i.type,i.rule,i.extend,i.options,i.comment);return i.edition&&(t.f=i.edition),t.a="proto3",t},Object.defineProperty(o.prototype,"required",{get:function(){return"LEGACY_REQUIRED"===this.h.field_presence}}),Object.defineProperty(o.prototype,"optional",{get:function(){return!this.required}}),Object.defineProperty(o.prototype,"delimited",{get:function(){return this.resolvedType instanceof r&&"DELIMITED"===this.h.message_encoding}}),Object.defineProperty(o.prototype,"packed",{get:function(){return"PACKED"===this.h.repeated_field_encoding}}),Object.defineProperty(o.prototype,"hasPresence",{get:function(){return!this.repeated&&!this.map&&(this.partOf||this.declaringField||this.extensionField||"IMPLICIT"!==this.h.field_presence)}}),o.prototype.setOption=function(t,i,n){return u.prototype.setOption.call(this,t,i,n)},o.prototype.toJSON=function(t){t=!!t&&!!t.keepComments;return h.toObject(["edition",this.c(),"rule","optional"!==this.rule&&this.rule||rt,"type",this.type,"id",this.id,"extend",this.extend,"options",this.options,"comment",t?this.comment:rt])},o.prototype.resolve=function(){var t;return this.resolved?this:((this.typeDefault=f.defaults[this.type])===rt?(this.resolvedType=(this.declaringField||this).parent.lookupTypeOrEnum(this.type),this.resolvedType instanceof r?this.typeDefault=null:this.typeDefault=this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]):this.options&&this.options.proto3_optional&&(this.typeDefault=null),this.options&&null!=this.options.default&&(this.typeDefault=this.options.default,this.resolvedType instanceof e&&"string"==typeof this.typeDefault&&(this.typeDefault=this.resolvedType.values[this.typeDefault])),this.options&&(this.options.packed===rt||!this.resolvedType||this.resolvedType instanceof e||delete this.options.packed,Object.keys(this.options).length||(this.options=rt)),this.long?(this.typeDefault=h.Long.fromNumber(this.typeDefault,"u"==(this.type[0]||"")),Object.freeze&&Object.freeze(this.typeDefault)):this.bytes&&"string"==typeof this.typeDefault&&(h.base64.test(this.typeDefault)?h.base64.decode(this.typeDefault,t=h.newBuffer(h.base64.length(this.typeDefault)),0):h.utf8.write(this.typeDefault,t=h.newBuffer(h.utf8.length(this.typeDefault)),0),this.typeDefault=t),this.map?this.defaultValue=h.emptyObject:this.repeated?this.defaultValue=h.emptyArray:this.defaultValue=this.typeDefault,this.parent instanceof r&&(this.parent.ctor.prototype[this.name]=this.defaultValue),u.prototype.resolve.call(this))},o.prototype.l=function(t){var i;return"proto2"!==t&&"proto3"!==t?{}:(t={},"required"===this.rule&&(t.field_presence="LEGACY_REQUIRED"),this.parent&&f.defaults[this.type]===rt&&(i=this.parent.get(this.type.split(".").pop()))&&i instanceof r&&i.group&&(t.message_encoding="DELIMITED"),!0===this.getOption("packed")?t.repeated_field_encoding="PACKED":!1===this.getOption("packed")&&(t.repeated_field_encoding="EXPANDED"),t)},o.prototype.u=function(t){return u.prototype.u.call(this,this.f||t)},o.d=function(n,r,e,s){return"function"==typeof r?r=h.decorateType(r).name:r&&"object"==typeof r&&(r=h.decorateEnum(r).name),function(t,i){h.decorateType(t.constructor).add(new o(i,n,r,e,{default:s}))}},o.p=function(t){r=t}},{15:15,24:24,36:36,37:37}],17:[function(t,i,n){var r=i.exports=t(18);r.build="light",r.load=function(t,i,n){return(i="function"==typeof i?(n=i,new r.Root):i||new r.Root).load(t,n)},r.loadSync=function(t,i){return(i=i||new r.Root).loadSync(t)},r.encoder=t(14),r.decoder=t(13),r.verifier=t(40),r.converter=t(12),r.ReflectionObject=t(24),r.Namespace=t(23),r.Root=t(29),r.Enum=t(15),r.Type=t(35),r.Field=t(16),r.OneOf=t(25),r.MapField=t(20),r.Service=t(33),r.Method=t(22),r.Message=t(21),r.wrappers=t(41),r.types=t(36),r.util=t(37),r.ReflectionObject.p(r.Root),r.Namespace.p(r.Type,r.Service,r.Enum),r.Root.p(r.Type),r.Field.p(r.Type)},{12:12,13:13,14:14,15:15,16:16,18:18,20:20,21:21,22:22,23:23,24:24,25:25,29:29,33:33,35:35,36:36,37:37,40:40,41:41}],18:[function(t,i,n){var r=n;function e(){r.util.p(),r.Writer.p(r.BufferWriter),r.Reader.p(r.BufferReader)}r.build="minimal",r.Writer=t(42),r.BufferWriter=t(43),r.Reader=t(27),r.BufferReader=t(28),r.util=t(39),r.rpc=t(31),r.roots=t(30),r.configure=e,e()},{27:27,28:28,30:30,31:31,39:39,42:42,43:43}],19:[function(t,i,n){i=i.exports=t(17);i.build="full",i.tokenize=t(34),i.parse=t(26),i.common=t(11),i.Root.p(i.Type,i.parse,i.common)},{11:11,17:17,26:26,34:34}],20:[function(t,i,n){i.exports=s;var o=t(16),r=(((s.prototype=Object.create(o.prototype)).constructor=s).className="MapField",t(36)),u=t(37);function s(t,i,n,r,e,s){if(o.call(this,t,i,r,rt,rt,e,s),!u.isString(n))throw TypeError("keyType must be a string");this.keyType=n,this.resolvedKeyType=null,this.map=!0}s.fromJSON=function(t,i){return new s(t,i.id,i.keyType,i.type,i.options,i.comment)},s.prototype.toJSON=function(t){t=!!t&&!!t.keepComments;return u.toObject(["keyType",this.keyType,"type",this.type,"id",this.id,"extend",this.extend,"options",this.options,"comment",t?this.comment:rt])},s.prototype.resolve=function(){if(this.resolved)return this;if(r.mapKey[this.keyType]===rt)throw Error("invalid key type: "+this.keyType);return o.prototype.resolve.call(this)},s.d=function(n,r,e){return"function"==typeof e?e=u.decorateType(e).name:e&&"object"==typeof e&&(e=u.decorateEnum(e).name),function(t,i){u.decorateType(t.constructor).add(new s(i,n,r,e))}}},{16:16,36:36,37:37}],21:[function(t,i,n){i.exports=e;var r=t(39);function e(t){if(t)for(var i=Object.keys(t),n=0;ni)return!0;return!1},c.isReservedName=function(t,i){if(t)for(var n=0;n{t.g(i)})),this},c.prototype.lookup=function(t,i,n){if("boolean"==typeof i?(n=i,i=rt):i&&!Array.isArray(i)&&(i=[i]),h.isString(t)&&t.length){if("."===t)return this.root;t=t.split(".")}else if(!t.length)return this;var r=t.join(".");if(""===t[0])return this.root.lookup(t.slice(1),i);var e=this.root.j&&this.root.j["."+r];if(e&&(!i||~i.indexOf(e.constructor)))return e;if((e=this.k(t,r))&&(!i||~i.indexOf(e.constructor)))return e;if(!n)for(var s=this;s.parent;){if((e=s.parent.k(t,r))&&(!i||~i.indexOf(e.constructor)))return e;s=s.parent}return null},c.prototype.k=function(t,i){if(Object.prototype.hasOwnProperty.call(this.b,i))return this.b[i];var n=this.get(t[0]),r=null;if(n)1===t.length?r=n:n instanceof c&&(t=t.slice(1),r=n.k(t,t.join(".")));else for(var e=0;e");var e=c();if(!tt.test(e))throw k(e,"name");p("=");var s=new U(j(e),T(c()),n,r);x(s,function(t){if("option"!==t)throw k(t);L(s,t),p(";")},function(){M(s)}),i.add(s);break;case"required":if("proto2"!==w)throw k(t);case"repeated":I(u,t);break;case"optional":if("proto3"===w)I(u,"proto3_optional");else{if("proto2"!==w)throw k(t);I(u,"optional")}break;case"oneof":e=u,n=t;if(!tt.test(n=c()))throw k(n,"name");var o=new D(j(n));x(o,function(t){"option"===t?(L(o,t),p(";")):(l(t),I(o,"optional"))}),e.add(o);break;case"extensions":A(u.extensions||(u.extensions=[]));break;case"reserved":A(u.reserved||(u.reserved=[]),!0);break;default:if("proto2"===w||!it.test(t))throw k(t);l(t),I(u,"optional")}}),t.add(u),t===y&&m.push(u)}function I(t,i,n){var r=c();if("group"===r){var e=t,s=i;if(2023<=w)throw k("group");var o,u,f=c();if(tt.test(f))return u=B.lcFirst(f),f===u&&(f=B.ucFirst(f)),p("="),h=T(c()),(o=new P(f)).group=!0,(u=new R(u,h,f,s)).filename=nt.filename,x(o,function(t){switch(t){case"option":L(o,t),p(";");break;case"required":case"repeated":I(o,t);break;case"optional":I(o,"proto3"===w?"proto3_optional":"optional");break;case"message":S(o);break;case"enum":N(o);break;case"reserved":A(o.reserved||(o.reserved=[]),!0);break;default:throw k(t)}}),void e.add(o).add(u);throw k(f,"name")}for(;r.endsWith(".")||d().startsWith(".");)r+=c();if(!it.test(r))throw k(r,"type");var h=c();if(!tt.test(h))throw k(h,"name");h=j(h),p("=");var a=new R(h,T(c()),r,i,n);x(a,function(t){if("option"!==t)throw k(t);L(a,t),p(";")},function(){M(a)}),"proto3_optional"===i?(s=new D("_"+h),a.setOption("proto3_optional",!0),s.add(a),t.add(s)):t.add(a),t===y&&m.push(a)}function N(t,i){if(!tt.test(i=c()))throw k(i,"name");var s=new q(i);x(s,function(t){switch(t){case"option":L(s,t),p(";");break;case"reserved":A(s.reserved||(s.reserved=[]),!0),s.reserved===rt&&(s.reserved=[]);break;default:var i=s,n=t;if(!tt.test(n))throw k(n,"name");p("=");var r=T(c(),!0),e={options:rt,getOption:function(t){return this.options[t]},setOption:function(t,i){X.prototype.setOption.call(e,t,i)},setParsedOption:function(){return rt}};return x(e,function(t){if("option"!==t)throw k(t);L(e,t),p(";")},function(){M(e)}),void i.add(n,r,e.comment,e.parsedOptions||e.options)}}),t.add(s),t===y&&m.push(s)}function L(t,i){var n=!0;for("option"===i&&(i=c());"="!==i;){if("("===i&&(r=c(),p(")"),i="("+r+")"),n){if(n=!1,i.includes(".")&&!i.includes("(")){var r=i.split("."),e=r[0]+".";i=r[1];continue}e=i}else f=f?f+i:i;i=c()}var s,o,u=f?e.concat(f):e,u=function t(i,n){if(p("{",!0)){for(var r={};!p("}",!0);){if(!tt.test(h=c()))throw k(h,"name");if(null===h)throw k(h,"end of input");var e,s,o=h;if(p(":",!0),"{"===d())e=t(i,n+"."+h);else if("["===d()){if(e=[],p("[",!0)){for(;s=O(!0),e.push(s),p(",",!0););p("]"),void 0!==s&&V(i,n+"."+h,s)}}else e=O(!0),V(i,n+"."+h,e);var u=r[o];u&&(e=[].concat(u).concat(e)),r[o]=e,p(",",!0),p(";",!0)}return r}var f=O(!0);V(i,n,f);return f}(t,u),f=f&&"."===f[0]?f.slice(1):f;e=e&&"."===e[e.length-1]?e.slice(0,-1):e,s=e,u=u,o=f,(t=t).setParsedOption&&t.setParsedOption(s,u,o)}function V(t,i,n){y===t&&/^features\./.test(i)?g[i]=n:t.setOption&&t.setOption(i,n)}function M(t){if(p("[",!0)){for(;L(t,"option"),p(",",!0););p("]")}}for(;null!==(h=c());)switch(h){case"package":if(!b)throw k(h);if(r!==rt)throw k("package");if(r=c(),!it.test(r))throw k(r,"name");y=y.define(r),p(";");break;case"import":if(!b)throw k(h);switch(u=o=void 0,d()){case"weak":u=s=s||[],c();break;case"public":c();default:u=e=e||[]}o=E(),p(";"),u.push(o);break;case"syntax":if(!b)throw k(h);if(p("="),(w=E())<2023)throw k(w,"syntax");p(";");break;case"edition":if(!b)throw k(h);if(p("="),w=E(),!["2023"].includes(w))throw k(w,"edition");p(";");break;case"option":L(y,h),p(";",!0);break;default:if(_(y,h)){b=!1;continue}throw k(h)}return m.forEach(i=>{i.f=w,Object.keys(g).forEach(t=>{i.getOption(t)===rt&&i.setOption(t,g[t],!0)})}),nt.filename=null,{package:r,imports:e,weakImports:s,root:i}}},{15:15,16:16,20:20,22:22,24:24,25:25,29:29,33:33,34:34,35:35,36:36,37:37}],27:[function(t,i,n){i.exports=f;var r,e=t(39),s=e.LongBits,o=e.utf8;function u(t,i){return RangeError("index out of range: "+t.pos+" + "+(i||1)+" > "+t.len)}function f(t){this.buf=t,this.pos=0,this.len=t.length}function h(){return e.Buffer?function(t){return(f.create=function(t){return e.Buffer.isBuffer(t)?new r(t):c(t)})(t)}:c}var a,c="undefined"!=typeof Uint8Array?function(t){if(t instanceof Uint8Array||Array.isArray(t))return new f(t);throw Error("illegal buffer")}:function(t){if(Array.isArray(t))return new f(t);throw Error("illegal buffer")};function l(){var t=new s(0,0),i=0;if(!(4=this.len)throw u(this);if(t.lo=(t.lo|(127&this.buf[this.pos])<<7*i)>>>0,this.buf[this.pos++]<128)return t}return t.lo=(t.lo|(127&this.buf[this.pos++])<<7*i)>>>0,t}for(;i<4;++i)if(t.lo=(t.lo|(127&this.buf[this.pos])<<7*i)>>>0,this.buf[this.pos++]<128)return t;if(t.lo=(t.lo|(127&this.buf[this.pos])<<28)>>>0,t.hi=(t.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return t;if(i=0,4>>0,this.buf[this.pos++]<128)return t}else for(;i<5;++i){if(this.pos>=this.len)throw u(this);if(t.hi=(t.hi|(127&this.buf[this.pos])<<7*i+3)>>>0,this.buf[this.pos++]<128)return t}throw Error("invalid varint encoding")}function d(t,i){return(t[i-4]|t[i-3]<<8|t[i-2]<<16|t[i-1]<<24)>>>0}function p(){if(this.pos+8>this.len)throw u(this,8);return new s(d(this.buf,this.pos+=4),d(this.buf,this.pos+=4))}f.create=h(),f.prototype._=e.Array.prototype.subarray||e.Array.prototype.slice,f.prototype.uint32=(a=4294967295,function(){if(a=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128||(a=(a|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128||(a=(a|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128||(a=(a|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128||(a=(a|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128||!((this.pos+=5)>this.len))))))return a;throw this.pos=this.len,u(this,10)}),f.prototype.int32=function(){return 0|this.uint32()},f.prototype.sint32=function(){var t=this.uint32();return t>>>1^-(1&t)|0},f.prototype.bool=function(){return 0!==this.uint32()},f.prototype.fixed32=function(){if(this.pos+4>this.len)throw u(this,4);return d(this.buf,this.pos+=4)},f.prototype.sfixed32=function(){if(this.pos+4>this.len)throw u(this,4);return 0|d(this.buf,this.pos+=4)},f.prototype.float=function(){if(this.pos+4>this.len)throw u(this,4);var t=e.float.readFloatLE(this.buf,this.pos);return this.pos+=4,t},f.prototype.double=function(){if(this.pos+8>this.len)throw u(this,4);var t=e.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,t},f.prototype.bytes=function(){var t=this.uint32(),i=this.pos,n=this.pos+t;if(n>this.len)throw u(this,t);return this.pos+=t,Array.isArray(this.buf)?this.buf.slice(i,n):i===n?(t=e.Buffer)?t.alloc(0):new this.buf.constructor(0):this._.call(this.buf,i,n)},f.prototype.string=function(){var t=this.bytes();return o.read(t,0,t.length)},f.prototype.skip=function(t){if("number"==typeof t){if(this.pos+t>this.len)throw u(this,t);this.pos+=t}else do{if(this.pos>=this.len)throw u(this)}while(128&this.buf[this.pos++]);return this},f.prototype.skipType=function(t){switch(t){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(t=7&this.uint32());)this.skipType(t);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+t+" at offset "+this.pos)}return this},f.p=function(t){r=t,f.create=h(),r.p();var i=e.Long?"toLong":"toNumber";e.merge(f.prototype,{int64:function(){return l.call(this)[i](!1)},uint64:function(){return l.call(this)[i](!0)},sint64:function(){return l.call(this).zzDecode()[i](!1)},fixed64:function(){return p.call(this)[i](!0)},sfixed64:function(){return p.call(this)[i](!1)}})}},{39:39}],28:[function(t,i,n){i.exports=s;var r=t(27),e=((s.prototype=Object.create(r.prototype)).constructor=s,t(39));function s(t){r.call(this,t)}s.p=function(){e.Buffer&&(s.prototype._=e.Buffer.prototype.slice)},s.prototype.string=function(){var t=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+t,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+t,this.len))},s.p()},{27:27,39:39}],29:[function(t,i,n){i.exports=f;var r,d,p,e=t(23),s=(((f.prototype=Object.create(e.prototype)).constructor=f).className="Root",t(16)),o=t(15),u=t(25),v=t(37);function f(t){e.call(this,"",t),this.deferred=[],this.files=[],this.f="proto2",this.j={}}function b(){}f.fromJSON=function(t,i){return i=i||new f,t.options&&i.setOptions(t.options),i.addJSON(t.nested).resolveAll()},f.prototype.resolvePath=v.path.resolve,f.prototype.fetch=v.fetch,f.prototype.load=function t(i,s,e){"function"==typeof s&&(e=s,s=rt);var o=this;if(!e)return v.asPromise(t,o,i,s);var u=e===b;function f(t,i){if(e){if(u)throw t;i&&i.resolveAll();var n=e;e=null,n(t,i)}}function h(t){var i=t.lastIndexOf("google/protobuf/");if(-1{t.g(i)})),this},o.prototype.add=function(t){if(this.get(t.name))throw Error("duplicate name '"+t.name+"' in "+this);return t instanceof s?e((this.methods[t.name]=t).parent=this):r.prototype.add.call(this,t)},o.prototype.remove=function(t){if(t instanceof s){if(this.methods[t.name]!==t)throw Error(t+" is not a member of "+this);return delete this.methods[t.name],t.parent=null,e(this)}return r.prototype.remove.call(this,t)},o.prototype.create=function(t,i,n){for(var r,e=new f.Service(t,i,n),s=0;s]/g,O=/(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g,A=/(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g,T=/^ *[*/]+ */,_=/^\s*\*?\/*/,x=/\n/g,S=/\s/,r=/\\(.?)/g,e={0:"\0",r:"\r",n:"\n",t:"\t"};function I(t){return t.replace(r,function(t,i){switch(i){case"\\":case"":return i;default:return e[i]||""}})}function s(h,a){h=h.toString();var c=0,l=h.length,d=1,f=0,p={},v=[],b=null;function w(t){return Error("illegal "+t+" (line "+d+")")}function y(t){return h[0|t]||""}function m(t,i,n){var r,e={type:h[0|t++]||"",lineEmpty:!1,leading:n},n=a?2:3,s=t-n;do{if(--s<0||"\n"==(r=h[0|s]||"")){e.lineEmpty=!0;break}}while(" "===r||"\t"===r);for(var o=h.substring(t,i).split(x),u=0;u{t.u(i)}),this.fieldsArray.forEach(t=>{t.u(i)})),this},m.prototype.get=function(t){return this.fields[t]||this.oneofs&&this.oneofs[t]||this.nested&&this.nested[t]||null},m.prototype.add=function(t){if(this.get(t.name))throw Error("duplicate name '"+t.name+"' in "+this);if(t instanceof h&&t.extend===rt){if((this.S||this.fieldsById)[t.id])throw Error("duplicate id "+t.id+" in "+this);if(this.isReservedId(t.id))throw Error("id "+t.id+" is reserved in "+this);if(this.isReservedName(t.name))throw Error("name '"+t.name+"' is reserved in "+this);return t.parent&&t.parent.remove(t),(this.fields[t.name]=t).message=this,t.onAdd(this),r(this)}return t instanceof f?(this.oneofs||(this.oneofs={}),(this.oneofs[t.name]=t).onAdd(this),r(this)):o.prototype.add.call(this,t)},m.prototype.remove=function(t){if(t instanceof h&&t.extend===rt){if(this.fields&&this.fields[t.name]===t)return delete this.fields[t.name],t.parent=null,t.onRemove(this),r(this);throw Error(t+" is not a member of "+this)}if(t instanceof f){if(this.oneofs&&this.oneofs[t.name]===t)return delete this.oneofs[t.name],t.parent=null,t.onRemove(this),r(this);throw Error(t+" is not a member of "+this)}return o.prototype.remove.call(this,t)},m.prototype.isReservedId=function(t){return o.isReservedId(this.reserved,t)},m.prototype.isReservedName=function(t){return o.isReservedName(this.reserved,t)},m.prototype.create=function(t){return new this.ctor(t)},m.prototype.setup=function(){for(var t=this.fullName,i=[],n=0;n>>0,this.hi=i>>>0}var s=e.zero=new e(0,0),o=(s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1},e.zeroHash="\0\0\0\0\0\0\0\0",e.fromNumber=function(t){var i,n;return 0===t?s:(n=(t=(i=t<0)?-t:t)>>>0,t=(t-n)/4294967296>>>0,i&&(t=~t>>>0,n=~n>>>0,4294967295<++n&&(n=0,4294967295<++t&&(t=0))),new e(n,t))},e.from=function(t){if("number"==typeof t)return e.fromNumber(t);if(r.isString(t)){if(!r.Long)return e.fromNumber(parseInt(t,10));t=r.Long.fromString(t)}return t.low||t.high?new e(t.low>>>0,t.high>>>0):s},e.prototype.toNumber=function(t){var i;return!t&&this.hi>>>31?(t=1+~this.lo>>>0,i=~this.hi>>>0,-(t+4294967296*(i=t?i:i+1>>>0))):this.lo+4294967296*this.hi},e.prototype.toLong=function(t){return r.Long?new r.Long(0|this.lo,0|this.hi,!!t):{low:0|this.lo,high:0|this.hi,unsigned:!!t}},String.prototype.charCodeAt);e.fromHash=function(t){return"\0\0\0\0\0\0\0\0"===t?s:new e((o.call(t,0)|o.call(t,1)<<8|o.call(t,2)<<16|o.call(t,3)<<24)>>>0,(o.call(t,4)|o.call(t,5)<<8|o.call(t,6)<<16|o.call(t,7)<<24)>>>0)},e.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},e.prototype.zzEncode=function(){var t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this},e.prototype.zzDecode=function(){var t=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this},e.prototype.length=function(){var t=this.lo,i=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0==n?0==i?t<16384?t<128?1:2:t<2097152?3:4:i<16384?i<128?5:6:i<2097152?7:8:n<128?9:10}},{39:39}],39:[function(t,i,n){var r=n;function e(t,i,n){for(var r=Object.keys(i),e=0;e>>7|t.hi<<25)>>>0,t.hi>>>=7;for(;127>>7;i[n++]=t.lo}function b(t,i,n){i[n]=255&t,i[n+1]=t>>>8&255,i[n+2]=t>>>16&255,i[n+3]=t>>>24}c.create=l(),c.alloc=function(t){return new e.Array(t)},e.Array!==Array&&(c.alloc=e.pool(c.alloc,e.Array.prototype.subarray)),c.prototype.M=function(t,i,n){return this.tail=this.tail.next=new f(t,i,n),this.len+=i,this},(p.prototype=Object.create(f.prototype)).fn=function(t,i,n){for(;127>>=7;i[n]=t},c.prototype.uint32=function(t){return this.len+=(this.tail=this.tail.next=new p((t>>>=0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this},c.prototype.int32=function(t){return t<0?this.M(v,10,s.fromNumber(t)):this.uint32(t)},c.prototype.sint32=function(t){return this.uint32((t<<1^t>>31)>>>0)},c.prototype.int64=c.prototype.uint64=function(t){t=s.from(t);return this.M(v,t.length(),t)},c.prototype.sint64=function(t){t=s.from(t).zzEncode();return this.M(v,t.length(),t)},c.prototype.bool=function(t){return this.M(d,1,t?1:0)},c.prototype.sfixed32=c.prototype.fixed32=function(t){return this.M(b,4,t>>>0)},c.prototype.sfixed64=c.prototype.fixed64=function(t){t=s.from(t);return this.M(b,4,t.lo).M(b,4,t.hi)},c.prototype.float=function(t){return this.M(e.float.writeFloatLE,4,t)},c.prototype.double=function(t){return this.M(e.float.writeDoubleLE,8,t)};var w=e.Array.prototype.set?function(t,i,n){i.set(t,n)}:function(t,i,n){for(var r=0;r>>0;return n?(e.isString(t)&&(i=c.alloc(n=o.length(t)),o.decode(t,i,0),t=i),this.uint32(n).M(w,n,t)):this.M(d,1,0)},c.prototype.string=function(t){var i=u.length(t);return i?this.uint32(i).M(u.write,i,t):this.M(d,1,0)},c.prototype.fork=function(){return this.states=new a(this),this.head=this.tail=new f(h,0,0),this.len=0,this},c.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new f(h,0,0),this.len=0),this},c.prototype.ldelim=function(){var t=this.head,i=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=t.next,this.tail=i,this.len+=n),this},c.prototype.finish=function(){for(var t=this.head.next,i=this.constructor.alloc(this.len),n=0;t;)t.fn(t.val,i,n),n+=t.len,t=t.next;return i},c.p=function(t){r=t,c.create=l(),r.p()}},{39:39}],43:[function(t,i,n){i.exports=s;var r=t(42),e=((s.prototype=Object.create(r.prototype)).constructor=s,t(39));function s(){r.call(this)}function o(t,i,n){t.length<40?e.utf8.write(t,i,n):i.utf8Write?i.utf8Write(t,n):i.write(t,n)}s.p=function(){s.alloc=e.V,s.writeBytesBuffer=e.Buffer&&e.Buffer.prototype instanceof Uint8Array&&"set"===e.Buffer.prototype.set.name?function(t,i,n){i.set(t,n)}:function(t,i,n){if(t.copy)t.copy(i,n,0,t.length);else for(var r=0;r>>0;return this.uint32(i),i&&this.M(s.writeBytesBuffer,i,t),this},s.prototype.string=function(t){var i=e.Buffer.byteLength(t);return this.uint32(i),i&&this.M(o,i,t),this},s.p()},{39:39,42:42}]},{},[19])}();
+//# sourceMappingURL=protobuf.min.js.map
diff --git a/lib/vue.global.js b/lib/vue.global.js
new file mode 100644
index 0000000..a44287e
--- /dev/null
+++ b/lib/vue.global.js
@@ -0,0 +1,18193 @@
+/**
+* vue v3.5.17
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+var Vue = (function (exports) {
+ 'use strict';
+
+ /*! #__NO_SIDE_EFFECTS__ */
+ // @__NO_SIDE_EFFECTS__
+ function makeMap(str) {
+ const map = /* @__PURE__ */ Object.create(null);
+ for (const key of str.split(",")) map[key] = 1;
+ return (val) => val in map;
+ }
+
+ const EMPTY_OBJ = Object.freeze({}) ;
+ const EMPTY_ARR = Object.freeze([]) ;
+ const NOOP = () => {
+ };
+ const NO = () => false;
+ const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
+ (key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
+ const isModelListener = (key) => key.startsWith("onUpdate:");
+ const extend = Object.assign;
+ const remove = (arr, el) => {
+ const i = arr.indexOf(el);
+ if (i > -1) {
+ arr.splice(i, 1);
+ }
+ };
+ const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+ const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
+ const isArray = Array.isArray;
+ const isMap = (val) => toTypeString(val) === "[object Map]";
+ const isSet = (val) => toTypeString(val) === "[object Set]";
+ const isDate = (val) => toTypeString(val) === "[object Date]";
+ const isRegExp = (val) => toTypeString(val) === "[object RegExp]";
+ const isFunction = (val) => typeof val === "function";
+ const isString = (val) => typeof val === "string";
+ const isSymbol = (val) => typeof val === "symbol";
+ const isObject = (val) => val !== null && typeof val === "object";
+ const isPromise = (val) => {
+ return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
+ };
+ const objectToString = Object.prototype.toString;
+ const toTypeString = (value) => objectToString.call(value);
+ const toRawType = (value) => {
+ return toTypeString(value).slice(8, -1);
+ };
+ const isPlainObject = (val) => toTypeString(val) === "[object Object]";
+ const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
+ const isReservedProp = /* @__PURE__ */ makeMap(
+ // the leading comma is intentional so empty string "" is also included
+ ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
+ );
+ const isBuiltInDirective = /* @__PURE__ */ makeMap(
+ "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
+ );
+ const cacheStringFunction = (fn) => {
+ const cache = /* @__PURE__ */ Object.create(null);
+ return (str) => {
+ const hit = cache[str];
+ return hit || (cache[str] = fn(str));
+ };
+ };
+ const camelizeRE = /-(\w)/g;
+ const camelize = cacheStringFunction(
+ (str) => {
+ return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
+ }
+ );
+ const hyphenateRE = /\B([A-Z])/g;
+ const hyphenate = cacheStringFunction(
+ (str) => str.replace(hyphenateRE, "-$1").toLowerCase()
+ );
+ const capitalize = cacheStringFunction((str) => {
+ return str.charAt(0).toUpperCase() + str.slice(1);
+ });
+ const toHandlerKey = cacheStringFunction(
+ (str) => {
+ const s = str ? `on${capitalize(str)}` : ``;
+ return s;
+ }
+ );
+ const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
+ const invokeArrayFns = (fns, ...arg) => {
+ for (let i = 0; i < fns.length; i++) {
+ fns[i](...arg);
+ }
+ };
+ const def = (obj, key, value, writable = false) => {
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ enumerable: false,
+ writable,
+ value
+ });
+ };
+ const looseToNumber = (val) => {
+ const n = parseFloat(val);
+ return isNaN(n) ? val : n;
+ };
+ const toNumber = (val) => {
+ const n = isString(val) ? Number(val) : NaN;
+ return isNaN(n) ? val : n;
+ };
+ let _globalThis;
+ const getGlobalThis = () => {
+ return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
+ };
+ function genCacheKey(source, options) {
+ return source + JSON.stringify(
+ options,
+ (_, val) => typeof val === "function" ? val.toString() : val
+ );
+ }
+
+ const PatchFlagNames = {
+ [1]: `TEXT`,
+ [2]: `CLASS`,
+ [4]: `STYLE`,
+ [8]: `PROPS`,
+ [16]: `FULL_PROPS`,
+ [32]: `NEED_HYDRATION`,
+ [64]: `STABLE_FRAGMENT`,
+ [128]: `KEYED_FRAGMENT`,
+ [256]: `UNKEYED_FRAGMENT`,
+ [512]: `NEED_PATCH`,
+ [1024]: `DYNAMIC_SLOTS`,
+ [2048]: `DEV_ROOT_FRAGMENT`,
+ [-1]: `CACHED`,
+ [-2]: `BAIL`
+ };
+
+ const slotFlagsText = {
+ [1]: "STABLE",
+ [2]: "DYNAMIC",
+ [3]: "FORWARDED"
+ };
+
+ const GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol";
+ const isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);
+
+ const range = 2;
+ function generateCodeFrame(source, start = 0, end = source.length) {
+ start = Math.max(0, Math.min(start, source.length));
+ end = Math.max(0, Math.min(end, source.length));
+ if (start > end) return "";
+ let lines = source.split(/(\r?\n)/);
+ const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);
+ lines = lines.filter((_, idx) => idx % 2 === 0);
+ let count = 0;
+ const res = [];
+ for (let i = 0; i < lines.length; i++) {
+ count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);
+ if (count >= start) {
+ for (let j = i - range; j <= i + range || end > count; j++) {
+ if (j < 0 || j >= lines.length) continue;
+ const line = j + 1;
+ res.push(
+ `${line}${" ".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`
+ );
+ const lineLength = lines[j].length;
+ const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;
+ if (j === i) {
+ const pad = start - (count - (lineLength + newLineSeqLength));
+ const length = Math.max(
+ 1,
+ end > count ? lineLength - pad : end - start
+ );
+ res.push(` | ` + " ".repeat(pad) + "^".repeat(length));
+ } else if (j > i) {
+ if (end > count) {
+ const length = Math.max(Math.min(end - count, lineLength), 1);
+ res.push(` | ` + "^".repeat(length));
+ }
+ count += lineLength + newLineSeqLength;
+ }
+ }
+ break;
+ }
+ }
+ return res.join("\n");
+ }
+
+ function normalizeStyle(value) {
+ if (isArray(value)) {
+ const res = {};
+ for (let i = 0; i < value.length; i++) {
+ const item = value[i];
+ const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
+ if (normalized) {
+ for (const key in normalized) {
+ res[key] = normalized[key];
+ }
+ }
+ }
+ return res;
+ } else if (isString(value) || isObject(value)) {
+ return value;
+ }
+ }
+ const listDelimiterRE = /;(?![^(]*\))/g;
+ const propertyDelimiterRE = /:([^]+)/;
+ const styleCommentRE = /\/\*[^]*?\*\//g;
+ function parseStringStyle(cssText) {
+ const ret = {};
+ cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
+ if (item) {
+ const tmp = item.split(propertyDelimiterRE);
+ tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
+ }
+ });
+ return ret;
+ }
+ function stringifyStyle(styles) {
+ if (!styles) return "";
+ if (isString(styles)) return styles;
+ let ret = "";
+ for (const key in styles) {
+ const value = styles[key];
+ if (isString(value) || typeof value === "number") {
+ const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);
+ ret += `${normalizedKey}:${value};`;
+ }
+ }
+ return ret;
+ }
+ function normalizeClass(value) {
+ let res = "";
+ if (isString(value)) {
+ res = value;
+ } else if (isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ const normalized = normalizeClass(value[i]);
+ if (normalized) {
+ res += normalized + " ";
+ }
+ }
+ } else if (isObject(value)) {
+ for (const name in value) {
+ if (value[name]) {
+ res += name + " ";
+ }
+ }
+ }
+ return res.trim();
+ }
+ function normalizeProps(props) {
+ if (!props) return null;
+ let { class: klass, style } = props;
+ if (klass && !isString(klass)) {
+ props.class = normalizeClass(klass);
+ }
+ if (style) {
+ props.style = normalizeStyle(style);
+ }
+ return props;
+ }
+
+ const HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot";
+ const SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view";
+ const MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics";
+ const VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr";
+ const isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);
+ const isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);
+ const isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);
+ const isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);
+
+ const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
+ const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);
+ const isBooleanAttr = /* @__PURE__ */ makeMap(
+ specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`
+ );
+ function includeBooleanAttr(value) {
+ return !!value || value === "";
+ }
+ const isKnownHtmlAttr = /* @__PURE__ */ makeMap(
+ `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`
+ );
+ const isKnownSvgAttr = /* @__PURE__ */ makeMap(
+ `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`
+ );
+ function isRenderableAttrValue(value) {
+ if (value == null) {
+ return false;
+ }
+ const type = typeof value;
+ return type === "string" || type === "number" || type === "boolean";
+ }
+
+ const cssVarNameEscapeSymbolsRE = /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g;
+ function getEscapedCssVarName(key, doubleEscape) {
+ return key.replace(
+ cssVarNameEscapeSymbolsRE,
+ (s) => `\\${s}`
+ );
+ }
+
+ function looseCompareArrays(a, b) {
+ if (a.length !== b.length) return false;
+ let equal = true;
+ for (let i = 0; equal && i < a.length; i++) {
+ equal = looseEqual(a[i], b[i]);
+ }
+ return equal;
+ }
+ function looseEqual(a, b) {
+ if (a === b) return true;
+ let aValidType = isDate(a);
+ let bValidType = isDate(b);
+ if (aValidType || bValidType) {
+ return aValidType && bValidType ? a.getTime() === b.getTime() : false;
+ }
+ aValidType = isSymbol(a);
+ bValidType = isSymbol(b);
+ if (aValidType || bValidType) {
+ return a === b;
+ }
+ aValidType = isArray(a);
+ bValidType = isArray(b);
+ if (aValidType || bValidType) {
+ return aValidType && bValidType ? looseCompareArrays(a, b) : false;
+ }
+ aValidType = isObject(a);
+ bValidType = isObject(b);
+ if (aValidType || bValidType) {
+ if (!aValidType || !bValidType) {
+ return false;
+ }
+ const aKeysCount = Object.keys(a).length;
+ const bKeysCount = Object.keys(b).length;
+ if (aKeysCount !== bKeysCount) {
+ return false;
+ }
+ for (const key in a) {
+ const aHasKey = a.hasOwnProperty(key);
+ const bHasKey = b.hasOwnProperty(key);
+ if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {
+ return false;
+ }
+ }
+ }
+ return String(a) === String(b);
+ }
+ function looseIndexOf(arr, val) {
+ return arr.findIndex((item) => looseEqual(item, val));
+ }
+
+ const isRef$1 = (val) => {
+ return !!(val && val["__v_isRef"] === true);
+ };
+ const toDisplayString = (val) => {
+ return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef$1(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);
+ };
+ const replacer = (_key, val) => {
+ if (isRef$1(val)) {
+ return replacer(_key, val.value);
+ } else if (isMap(val)) {
+ return {
+ [`Map(${val.size})`]: [...val.entries()].reduce(
+ (entries, [key, val2], i) => {
+ entries[stringifySymbol(key, i) + " =>"] = val2;
+ return entries;
+ },
+ {}
+ )
+ };
+ } else if (isSet(val)) {
+ return {
+ [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))
+ };
+ } else if (isSymbol(val)) {
+ return stringifySymbol(val);
+ } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
+ return String(val);
+ }
+ return val;
+ };
+ const stringifySymbol = (v, i = "") => {
+ var _a;
+ return (
+ // Symbol.description in es2019+ so we need to cast here to pass
+ // the lib: es2016 check
+ isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v
+ );
+ };
+
+ function warn$2(msg, ...args) {
+ console.warn(`[Vue warn] ${msg}`, ...args);
+ }
+
+ let activeEffectScope;
+ class EffectScope {
+ constructor(detached = false) {
+ this.detached = detached;
+ /**
+ * @internal
+ */
+ this._active = true;
+ /**
+ * @internal track `on` calls, allow `on` call multiple times
+ */
+ this._on = 0;
+ /**
+ * @internal
+ */
+ this.effects = [];
+ /**
+ * @internal
+ */
+ this.cleanups = [];
+ this._isPaused = false;
+ this.parent = activeEffectScope;
+ if (!detached && activeEffectScope) {
+ this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
+ this
+ ) - 1;
+ }
+ }
+ get active() {
+ return this._active;
+ }
+ pause() {
+ if (this._active) {
+ this._isPaused = true;
+ let i, l;
+ if (this.scopes) {
+ for (i = 0, l = this.scopes.length; i < l; i++) {
+ this.scopes[i].pause();
+ }
+ }
+ for (i = 0, l = this.effects.length; i < l; i++) {
+ this.effects[i].pause();
+ }
+ }
+ }
+ /**
+ * Resumes the effect scope, including all child scopes and effects.
+ */
+ resume() {
+ if (this._active) {
+ if (this._isPaused) {
+ this._isPaused = false;
+ let i, l;
+ if (this.scopes) {
+ for (i = 0, l = this.scopes.length; i < l; i++) {
+ this.scopes[i].resume();
+ }
+ }
+ for (i = 0, l = this.effects.length; i < l; i++) {
+ this.effects[i].resume();
+ }
+ }
+ }
+ }
+ run(fn) {
+ if (this._active) {
+ const currentEffectScope = activeEffectScope;
+ try {
+ activeEffectScope = this;
+ return fn();
+ } finally {
+ activeEffectScope = currentEffectScope;
+ }
+ } else {
+ warn$2(`cannot run an inactive effect scope.`);
+ }
+ }
+ /**
+ * This should only be called on non-detached scopes
+ * @internal
+ */
+ on() {
+ if (++this._on === 1) {
+ this.prevScope = activeEffectScope;
+ activeEffectScope = this;
+ }
+ }
+ /**
+ * This should only be called on non-detached scopes
+ * @internal
+ */
+ off() {
+ if (this._on > 0 && --this._on === 0) {
+ activeEffectScope = this.prevScope;
+ this.prevScope = void 0;
+ }
+ }
+ stop(fromParent) {
+ if (this._active) {
+ this._active = false;
+ let i, l;
+ for (i = 0, l = this.effects.length; i < l; i++) {
+ this.effects[i].stop();
+ }
+ this.effects.length = 0;
+ for (i = 0, l = this.cleanups.length; i < l; i++) {
+ this.cleanups[i]();
+ }
+ this.cleanups.length = 0;
+ if (this.scopes) {
+ for (i = 0, l = this.scopes.length; i < l; i++) {
+ this.scopes[i].stop(true);
+ }
+ this.scopes.length = 0;
+ }
+ if (!this.detached && this.parent && !fromParent) {
+ const last = this.parent.scopes.pop();
+ if (last && last !== this) {
+ this.parent.scopes[this.index] = last;
+ last.index = this.index;
+ }
+ }
+ this.parent = void 0;
+ }
+ }
+ }
+ function effectScope(detached) {
+ return new EffectScope(detached);
+ }
+ function getCurrentScope() {
+ return activeEffectScope;
+ }
+ function onScopeDispose(fn, failSilently = false) {
+ if (activeEffectScope) {
+ activeEffectScope.cleanups.push(fn);
+ } else if (!failSilently) {
+ warn$2(
+ `onScopeDispose() is called when there is no active effect scope to be associated with.`
+ );
+ }
+ }
+
+ let activeSub;
+ const pausedQueueEffects = /* @__PURE__ */ new WeakSet();
+ class ReactiveEffect {
+ constructor(fn) {
+ this.fn = fn;
+ /**
+ * @internal
+ */
+ this.deps = void 0;
+ /**
+ * @internal
+ */
+ this.depsTail = void 0;
+ /**
+ * @internal
+ */
+ this.flags = 1 | 4;
+ /**
+ * @internal
+ */
+ this.next = void 0;
+ /**
+ * @internal
+ */
+ this.cleanup = void 0;
+ this.scheduler = void 0;
+ if (activeEffectScope && activeEffectScope.active) {
+ activeEffectScope.effects.push(this);
+ }
+ }
+ pause() {
+ this.flags |= 64;
+ }
+ resume() {
+ if (this.flags & 64) {
+ this.flags &= -65;
+ if (pausedQueueEffects.has(this)) {
+ pausedQueueEffects.delete(this);
+ this.trigger();
+ }
+ }
+ }
+ /**
+ * @internal
+ */
+ notify() {
+ if (this.flags & 2 && !(this.flags & 32)) {
+ return;
+ }
+ if (!(this.flags & 8)) {
+ batch(this);
+ }
+ }
+ run() {
+ if (!(this.flags & 1)) {
+ return this.fn();
+ }
+ this.flags |= 2;
+ cleanupEffect(this);
+ prepareDeps(this);
+ const prevEffect = activeSub;
+ const prevShouldTrack = shouldTrack;
+ activeSub = this;
+ shouldTrack = true;
+ try {
+ return this.fn();
+ } finally {
+ if (activeSub !== this) {
+ warn$2(
+ "Active effect was not restored correctly - this is likely a Vue internal bug."
+ );
+ }
+ cleanupDeps(this);
+ activeSub = prevEffect;
+ shouldTrack = prevShouldTrack;
+ this.flags &= -3;
+ }
+ }
+ stop() {
+ if (this.flags & 1) {
+ for (let link = this.deps; link; link = link.nextDep) {
+ removeSub(link);
+ }
+ this.deps = this.depsTail = void 0;
+ cleanupEffect(this);
+ this.onStop && this.onStop();
+ this.flags &= -2;
+ }
+ }
+ trigger() {
+ if (this.flags & 64) {
+ pausedQueueEffects.add(this);
+ } else if (this.scheduler) {
+ this.scheduler();
+ } else {
+ this.runIfDirty();
+ }
+ }
+ /**
+ * @internal
+ */
+ runIfDirty() {
+ if (isDirty(this)) {
+ this.run();
+ }
+ }
+ get dirty() {
+ return isDirty(this);
+ }
+ }
+ let batchDepth = 0;
+ let batchedSub;
+ let batchedComputed;
+ function batch(sub, isComputed = false) {
+ sub.flags |= 8;
+ if (isComputed) {
+ sub.next = batchedComputed;
+ batchedComputed = sub;
+ return;
+ }
+ sub.next = batchedSub;
+ batchedSub = sub;
+ }
+ function startBatch() {
+ batchDepth++;
+ }
+ function endBatch() {
+ if (--batchDepth > 0) {
+ return;
+ }
+ if (batchedComputed) {
+ let e = batchedComputed;
+ batchedComputed = void 0;
+ while (e) {
+ const next = e.next;
+ e.next = void 0;
+ e.flags &= -9;
+ e = next;
+ }
+ }
+ let error;
+ while (batchedSub) {
+ let e = batchedSub;
+ batchedSub = void 0;
+ while (e) {
+ const next = e.next;
+ e.next = void 0;
+ e.flags &= -9;
+ if (e.flags & 1) {
+ try {
+ ;
+ e.trigger();
+ } catch (err) {
+ if (!error) error = err;
+ }
+ }
+ e = next;
+ }
+ }
+ if (error) throw error;
+ }
+ function prepareDeps(sub) {
+ for (let link = sub.deps; link; link = link.nextDep) {
+ link.version = -1;
+ link.prevActiveLink = link.dep.activeLink;
+ link.dep.activeLink = link;
+ }
+ }
+ function cleanupDeps(sub) {
+ let head;
+ let tail = sub.depsTail;
+ let link = tail;
+ while (link) {
+ const prev = link.prevDep;
+ if (link.version === -1) {
+ if (link === tail) tail = prev;
+ removeSub(link);
+ removeDep(link);
+ } else {
+ head = link;
+ }
+ link.dep.activeLink = link.prevActiveLink;
+ link.prevActiveLink = void 0;
+ link = prev;
+ }
+ sub.deps = head;
+ sub.depsTail = tail;
+ }
+ function isDirty(sub) {
+ for (let link = sub.deps; link; link = link.nextDep) {
+ if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {
+ return true;
+ }
+ }
+ if (sub._dirty) {
+ return true;
+ }
+ return false;
+ }
+ function refreshComputed(computed) {
+ if (computed.flags & 4 && !(computed.flags & 16)) {
+ return;
+ }
+ computed.flags &= -17;
+ if (computed.globalVersion === globalVersion) {
+ return;
+ }
+ computed.globalVersion = globalVersion;
+ if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {
+ return;
+ }
+ computed.flags |= 2;
+ const dep = computed.dep;
+ const prevSub = activeSub;
+ const prevShouldTrack = shouldTrack;
+ activeSub = computed;
+ shouldTrack = true;
+ try {
+ prepareDeps(computed);
+ const value = computed.fn(computed._value);
+ if (dep.version === 0 || hasChanged(value, computed._value)) {
+ computed.flags |= 128;
+ computed._value = value;
+ dep.version++;
+ }
+ } catch (err) {
+ dep.version++;
+ throw err;
+ } finally {
+ activeSub = prevSub;
+ shouldTrack = prevShouldTrack;
+ cleanupDeps(computed);
+ computed.flags &= -3;
+ }
+ }
+ function removeSub(link, soft = false) {
+ const { dep, prevSub, nextSub } = link;
+ if (prevSub) {
+ prevSub.nextSub = nextSub;
+ link.prevSub = void 0;
+ }
+ if (nextSub) {
+ nextSub.prevSub = prevSub;
+ link.nextSub = void 0;
+ }
+ if (dep.subsHead === link) {
+ dep.subsHead = nextSub;
+ }
+ if (dep.subs === link) {
+ dep.subs = prevSub;
+ if (!prevSub && dep.computed) {
+ dep.computed.flags &= -5;
+ for (let l = dep.computed.deps; l; l = l.nextDep) {
+ removeSub(l, true);
+ }
+ }
+ }
+ if (!soft && !--dep.sc && dep.map) {
+ dep.map.delete(dep.key);
+ }
+ }
+ function removeDep(link) {
+ const { prevDep, nextDep } = link;
+ if (prevDep) {
+ prevDep.nextDep = nextDep;
+ link.prevDep = void 0;
+ }
+ if (nextDep) {
+ nextDep.prevDep = prevDep;
+ link.nextDep = void 0;
+ }
+ }
+ function effect(fn, options) {
+ if (fn.effect instanceof ReactiveEffect) {
+ fn = fn.effect.fn;
+ }
+ const e = new ReactiveEffect(fn);
+ if (options) {
+ extend(e, options);
+ }
+ try {
+ e.run();
+ } catch (err) {
+ e.stop();
+ throw err;
+ }
+ const runner = e.run.bind(e);
+ runner.effect = e;
+ return runner;
+ }
+ function stop(runner) {
+ runner.effect.stop();
+ }
+ let shouldTrack = true;
+ const trackStack = [];
+ function pauseTracking() {
+ trackStack.push(shouldTrack);
+ shouldTrack = false;
+ }
+ function resetTracking() {
+ const last = trackStack.pop();
+ shouldTrack = last === void 0 ? true : last;
+ }
+ function cleanupEffect(e) {
+ const { cleanup } = e;
+ e.cleanup = void 0;
+ if (cleanup) {
+ const prevSub = activeSub;
+ activeSub = void 0;
+ try {
+ cleanup();
+ } finally {
+ activeSub = prevSub;
+ }
+ }
+ }
+
+ let globalVersion = 0;
+ class Link {
+ constructor(sub, dep) {
+ this.sub = sub;
+ this.dep = dep;
+ this.version = dep.version;
+ this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;
+ }
+ }
+ class Dep {
+ // TODO isolatedDeclarations "__v_skip"
+ constructor(computed) {
+ this.computed = computed;
+ this.version = 0;
+ /**
+ * Link between this dep and the current active effect
+ */
+ this.activeLink = void 0;
+ /**
+ * Doubly linked list representing the subscribing effects (tail)
+ */
+ this.subs = void 0;
+ /**
+ * For object property deps cleanup
+ */
+ this.map = void 0;
+ this.key = void 0;
+ /**
+ * Subscriber counter
+ */
+ this.sc = 0;
+ /**
+ * @internal
+ */
+ this.__v_skip = true;
+ {
+ this.subsHead = void 0;
+ }
+ }
+ track(debugInfo) {
+ if (!activeSub || !shouldTrack || activeSub === this.computed) {
+ return;
+ }
+ let link = this.activeLink;
+ if (link === void 0 || link.sub !== activeSub) {
+ link = this.activeLink = new Link(activeSub, this);
+ if (!activeSub.deps) {
+ activeSub.deps = activeSub.depsTail = link;
+ } else {
+ link.prevDep = activeSub.depsTail;
+ activeSub.depsTail.nextDep = link;
+ activeSub.depsTail = link;
+ }
+ addSub(link);
+ } else if (link.version === -1) {
+ link.version = this.version;
+ if (link.nextDep) {
+ const next = link.nextDep;
+ next.prevDep = link.prevDep;
+ if (link.prevDep) {
+ link.prevDep.nextDep = next;
+ }
+ link.prevDep = activeSub.depsTail;
+ link.nextDep = void 0;
+ activeSub.depsTail.nextDep = link;
+ activeSub.depsTail = link;
+ if (activeSub.deps === link) {
+ activeSub.deps = next;
+ }
+ }
+ }
+ if (activeSub.onTrack) {
+ activeSub.onTrack(
+ extend(
+ {
+ effect: activeSub
+ },
+ debugInfo
+ )
+ );
+ }
+ return link;
+ }
+ trigger(debugInfo) {
+ this.version++;
+ globalVersion++;
+ this.notify(debugInfo);
+ }
+ notify(debugInfo) {
+ startBatch();
+ try {
+ if (true) {
+ for (let head = this.subsHead; head; head = head.nextSub) {
+ if (head.sub.onTrigger && !(head.sub.flags & 8)) {
+ head.sub.onTrigger(
+ extend(
+ {
+ effect: head.sub
+ },
+ debugInfo
+ )
+ );
+ }
+ }
+ }
+ for (let link = this.subs; link; link = link.prevSub) {
+ if (link.sub.notify()) {
+ ;
+ link.sub.dep.notify();
+ }
+ }
+ } finally {
+ endBatch();
+ }
+ }
+ }
+ function addSub(link) {
+ link.dep.sc++;
+ if (link.sub.flags & 4) {
+ const computed = link.dep.computed;
+ if (computed && !link.dep.subs) {
+ computed.flags |= 4 | 16;
+ for (let l = computed.deps; l; l = l.nextDep) {
+ addSub(l);
+ }
+ }
+ const currentTail = link.dep.subs;
+ if (currentTail !== link) {
+ link.prevSub = currentTail;
+ if (currentTail) currentTail.nextSub = link;
+ }
+ if (link.dep.subsHead === void 0) {
+ link.dep.subsHead = link;
+ }
+ link.dep.subs = link;
+ }
+ }
+ const targetMap = /* @__PURE__ */ new WeakMap();
+ const ITERATE_KEY = Symbol(
+ "Object iterate"
+ );
+ const MAP_KEY_ITERATE_KEY = Symbol(
+ "Map keys iterate"
+ );
+ const ARRAY_ITERATE_KEY = Symbol(
+ "Array iterate"
+ );
+ function track(target, type, key) {
+ if (shouldTrack && activeSub) {
+ let depsMap = targetMap.get(target);
+ if (!depsMap) {
+ targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
+ }
+ let dep = depsMap.get(key);
+ if (!dep) {
+ depsMap.set(key, dep = new Dep());
+ dep.map = depsMap;
+ dep.key = key;
+ }
+ {
+ dep.track({
+ target,
+ type,
+ key
+ });
+ }
+ }
+ }
+ function trigger(target, type, key, newValue, oldValue, oldTarget) {
+ const depsMap = targetMap.get(target);
+ if (!depsMap) {
+ globalVersion++;
+ return;
+ }
+ const run = (dep) => {
+ if (dep) {
+ {
+ dep.trigger({
+ target,
+ type,
+ key,
+ newValue,
+ oldValue,
+ oldTarget
+ });
+ }
+ }
+ };
+ startBatch();
+ if (type === "clear") {
+ depsMap.forEach(run);
+ } else {
+ const targetIsArray = isArray(target);
+ const isArrayIndex = targetIsArray && isIntegerKey(key);
+ if (targetIsArray && key === "length") {
+ const newLength = Number(newValue);
+ depsMap.forEach((dep, key2) => {
+ if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {
+ run(dep);
+ }
+ });
+ } else {
+ if (key !== void 0 || depsMap.has(void 0)) {
+ run(depsMap.get(key));
+ }
+ if (isArrayIndex) {
+ run(depsMap.get(ARRAY_ITERATE_KEY));
+ }
+ switch (type) {
+ case "add":
+ if (!targetIsArray) {
+ run(depsMap.get(ITERATE_KEY));
+ if (isMap(target)) {
+ run(depsMap.get(MAP_KEY_ITERATE_KEY));
+ }
+ } else if (isArrayIndex) {
+ run(depsMap.get("length"));
+ }
+ break;
+ case "delete":
+ if (!targetIsArray) {
+ run(depsMap.get(ITERATE_KEY));
+ if (isMap(target)) {
+ run(depsMap.get(MAP_KEY_ITERATE_KEY));
+ }
+ }
+ break;
+ case "set":
+ if (isMap(target)) {
+ run(depsMap.get(ITERATE_KEY));
+ }
+ break;
+ }
+ }
+ }
+ endBatch();
+ }
+ function getDepFromReactive(object, key) {
+ const depMap = targetMap.get(object);
+ return depMap && depMap.get(key);
+ }
+
+ function reactiveReadArray(array) {
+ const raw = toRaw(array);
+ if (raw === array) return raw;
+ track(raw, "iterate", ARRAY_ITERATE_KEY);
+ return isShallow(array) ? raw : raw.map(toReactive);
+ }
+ function shallowReadArray(arr) {
+ track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY);
+ return arr;
+ }
+ const arrayInstrumentations = {
+ __proto__: null,
+ [Symbol.iterator]() {
+ return iterator(this, Symbol.iterator, toReactive);
+ },
+ concat(...args) {
+ return reactiveReadArray(this).concat(
+ ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)
+ );
+ },
+ entries() {
+ return iterator(this, "entries", (value) => {
+ value[1] = toReactive(value[1]);
+ return value;
+ });
+ },
+ every(fn, thisArg) {
+ return apply(this, "every", fn, thisArg, void 0, arguments);
+ },
+ filter(fn, thisArg) {
+ return apply(this, "filter", fn, thisArg, (v) => v.map(toReactive), arguments);
+ },
+ find(fn, thisArg) {
+ return apply(this, "find", fn, thisArg, toReactive, arguments);
+ },
+ findIndex(fn, thisArg) {
+ return apply(this, "findIndex", fn, thisArg, void 0, arguments);
+ },
+ findLast(fn, thisArg) {
+ return apply(this, "findLast", fn, thisArg, toReactive, arguments);
+ },
+ findLastIndex(fn, thisArg) {
+ return apply(this, "findLastIndex", fn, thisArg, void 0, arguments);
+ },
+ // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement
+ forEach(fn, thisArg) {
+ return apply(this, "forEach", fn, thisArg, void 0, arguments);
+ },
+ includes(...args) {
+ return searchProxy(this, "includes", args);
+ },
+ indexOf(...args) {
+ return searchProxy(this, "indexOf", args);
+ },
+ join(separator) {
+ return reactiveReadArray(this).join(separator);
+ },
+ // keys() iterator only reads `length`, no optimisation required
+ lastIndexOf(...args) {
+ return searchProxy(this, "lastIndexOf", args);
+ },
+ map(fn, thisArg) {
+ return apply(this, "map", fn, thisArg, void 0, arguments);
+ },
+ pop() {
+ return noTracking(this, "pop");
+ },
+ push(...args) {
+ return noTracking(this, "push", args);
+ },
+ reduce(fn, ...args) {
+ return reduce(this, "reduce", fn, args);
+ },
+ reduceRight(fn, ...args) {
+ return reduce(this, "reduceRight", fn, args);
+ },
+ shift() {
+ return noTracking(this, "shift");
+ },
+ // slice could use ARRAY_ITERATE but also seems to beg for range tracking
+ some(fn, thisArg) {
+ return apply(this, "some", fn, thisArg, void 0, arguments);
+ },
+ splice(...args) {
+ return noTracking(this, "splice", args);
+ },
+ toReversed() {
+ return reactiveReadArray(this).toReversed();
+ },
+ toSorted(comparer) {
+ return reactiveReadArray(this).toSorted(comparer);
+ },
+ toSpliced(...args) {
+ return reactiveReadArray(this).toSpliced(...args);
+ },
+ unshift(...args) {
+ return noTracking(this, "unshift", args);
+ },
+ values() {
+ return iterator(this, "values", toReactive);
+ }
+ };
+ function iterator(self, method, wrapValue) {
+ const arr = shallowReadArray(self);
+ const iter = arr[method]();
+ if (arr !== self && !isShallow(self)) {
+ iter._next = iter.next;
+ iter.next = () => {
+ const result = iter._next();
+ if (result.value) {
+ result.value = wrapValue(result.value);
+ }
+ return result;
+ };
+ }
+ return iter;
+ }
+ const arrayProto = Array.prototype;
+ function apply(self, method, fn, thisArg, wrappedRetFn, args) {
+ const arr = shallowReadArray(self);
+ const needsWrap = arr !== self && !isShallow(self);
+ const methodFn = arr[method];
+ if (methodFn !== arrayProto[method]) {
+ const result2 = methodFn.apply(self, args);
+ return needsWrap ? toReactive(result2) : result2;
+ }
+ let wrappedFn = fn;
+ if (arr !== self) {
+ if (needsWrap) {
+ wrappedFn = function(item, index) {
+ return fn.call(this, toReactive(item), index, self);
+ };
+ } else if (fn.length > 2) {
+ wrappedFn = function(item, index) {
+ return fn.call(this, item, index, self);
+ };
+ }
+ }
+ const result = methodFn.call(arr, wrappedFn, thisArg);
+ return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;
+ }
+ function reduce(self, method, fn, args) {
+ const arr = shallowReadArray(self);
+ let wrappedFn = fn;
+ if (arr !== self) {
+ if (!isShallow(self)) {
+ wrappedFn = function(acc, item, index) {
+ return fn.call(this, acc, toReactive(item), index, self);
+ };
+ } else if (fn.length > 3) {
+ wrappedFn = function(acc, item, index) {
+ return fn.call(this, acc, item, index, self);
+ };
+ }
+ }
+ return arr[method](wrappedFn, ...args);
+ }
+ function searchProxy(self, method, args) {
+ const arr = toRaw(self);
+ track(arr, "iterate", ARRAY_ITERATE_KEY);
+ const res = arr[method](...args);
+ if ((res === -1 || res === false) && isProxy(args[0])) {
+ args[0] = toRaw(args[0]);
+ return arr[method](...args);
+ }
+ return res;
+ }
+ function noTracking(self, method, args = []) {
+ pauseTracking();
+ startBatch();
+ const res = toRaw(self)[method].apply(self, args);
+ endBatch();
+ resetTracking();
+ return res;
+ }
+
+ const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
+ const builtInSymbols = new Set(
+ /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
+ );
+ function hasOwnProperty(key) {
+ if (!isSymbol(key)) key = String(key);
+ const obj = toRaw(this);
+ track(obj, "has", key);
+ return obj.hasOwnProperty(key);
+ }
+ class BaseReactiveHandler {
+ constructor(_isReadonly = false, _isShallow = false) {
+ this._isReadonly = _isReadonly;
+ this._isShallow = _isShallow;
+ }
+ get(target, key, receiver) {
+ if (key === "__v_skip") return target["__v_skip"];
+ const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
+ if (key === "__v_isReactive") {
+ return !isReadonly2;
+ } else if (key === "__v_isReadonly") {
+ return isReadonly2;
+ } else if (key === "__v_isShallow") {
+ return isShallow2;
+ } else if (key === "__v_raw") {
+ if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
+ // this means the receiver is a user proxy of the reactive proxy
+ Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
+ return target;
+ }
+ return;
+ }
+ const targetIsArray = isArray(target);
+ if (!isReadonly2) {
+ let fn;
+ if (targetIsArray && (fn = arrayInstrumentations[key])) {
+ return fn;
+ }
+ if (key === "hasOwnProperty") {
+ return hasOwnProperty;
+ }
+ }
+ const res = Reflect.get(
+ target,
+ key,
+ // if this is a proxy wrapping a ref, return methods using the raw ref
+ // as receiver so that we don't have to call `toRaw` on the ref in all
+ // its class methods
+ isRef(target) ? target : receiver
+ );
+ if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
+ return res;
+ }
+ if (!isReadonly2) {
+ track(target, "get", key);
+ }
+ if (isShallow2) {
+ return res;
+ }
+ if (isRef(res)) {
+ return targetIsArray && isIntegerKey(key) ? res : res.value;
+ }
+ if (isObject(res)) {
+ return isReadonly2 ? readonly(res) : reactive(res);
+ }
+ return res;
+ }
+ }
+ class MutableReactiveHandler extends BaseReactiveHandler {
+ constructor(isShallow2 = false) {
+ super(false, isShallow2);
+ }
+ set(target, key, value, receiver) {
+ let oldValue = target[key];
+ if (!this._isShallow) {
+ const isOldValueReadonly = isReadonly(oldValue);
+ if (!isShallow(value) && !isReadonly(value)) {
+ oldValue = toRaw(oldValue);
+ value = toRaw(value);
+ }
+ if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
+ if (isOldValueReadonly) {
+ return false;
+ } else {
+ oldValue.value = value;
+ return true;
+ }
+ }
+ }
+ const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
+ const result = Reflect.set(
+ target,
+ key,
+ value,
+ isRef(target) ? target : receiver
+ );
+ if (target === toRaw(receiver)) {
+ if (!hadKey) {
+ trigger(target, "add", key, value);
+ } else if (hasChanged(value, oldValue)) {
+ trigger(target, "set", key, value, oldValue);
+ }
+ }
+ return result;
+ }
+ deleteProperty(target, key) {
+ const hadKey = hasOwn(target, key);
+ const oldValue = target[key];
+ const result = Reflect.deleteProperty(target, key);
+ if (result && hadKey) {
+ trigger(target, "delete", key, void 0, oldValue);
+ }
+ return result;
+ }
+ has(target, key) {
+ const result = Reflect.has(target, key);
+ if (!isSymbol(key) || !builtInSymbols.has(key)) {
+ track(target, "has", key);
+ }
+ return result;
+ }
+ ownKeys(target) {
+ track(
+ target,
+ "iterate",
+ isArray(target) ? "length" : ITERATE_KEY
+ );
+ return Reflect.ownKeys(target);
+ }
+ }
+ class ReadonlyReactiveHandler extends BaseReactiveHandler {
+ constructor(isShallow2 = false) {
+ super(true, isShallow2);
+ }
+ set(target, key) {
+ {
+ warn$2(
+ `Set operation on key "${String(key)}" failed: target is readonly.`,
+ target
+ );
+ }
+ return true;
+ }
+ deleteProperty(target, key) {
+ {
+ warn$2(
+ `Delete operation on key "${String(key)}" failed: target is readonly.`,
+ target
+ );
+ }
+ return true;
+ }
+ }
+ const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();
+ const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();
+ const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);
+ const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);
+
+ const toShallow = (value) => value;
+ const getProto = (v) => Reflect.getPrototypeOf(v);
+ function createIterableMethod(method, isReadonly2, isShallow2) {
+ return function(...args) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const targetIsMap = isMap(rawTarget);
+ const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
+ const isKeyOnly = method === "keys" && targetIsMap;
+ const innerIterator = target[method](...args);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ !isReadonly2 && track(
+ rawTarget,
+ "iterate",
+ isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
+ );
+ return {
+ // iterator protocol
+ next() {
+ const { value, done } = innerIterator.next();
+ return done ? { value, done } : {
+ value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
+ done
+ };
+ },
+ // iterable protocol
+ [Symbol.iterator]() {
+ return this;
+ }
+ };
+ };
+ }
+ function createReadonlyMethod(type) {
+ return function(...args) {
+ {
+ const key = args[0] ? `on key "${args[0]}" ` : ``;
+ warn$2(
+ `${capitalize(type)} operation ${key}failed: target is readonly.`,
+ toRaw(this)
+ );
+ }
+ return type === "delete" ? false : type === "clear" ? void 0 : this;
+ };
+ }
+ function createInstrumentations(readonly, shallow) {
+ const instrumentations = {
+ get(key) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const rawKey = toRaw(key);
+ if (!readonly) {
+ if (hasChanged(key, rawKey)) {
+ track(rawTarget, "get", key);
+ }
+ track(rawTarget, "get", rawKey);
+ }
+ const { has } = getProto(rawTarget);
+ const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;
+ if (has.call(rawTarget, key)) {
+ return wrap(target.get(key));
+ } else if (has.call(rawTarget, rawKey)) {
+ return wrap(target.get(rawKey));
+ } else if (target !== rawTarget) {
+ target.get(key);
+ }
+ },
+ get size() {
+ const target = this["__v_raw"];
+ !readonly && track(toRaw(target), "iterate", ITERATE_KEY);
+ return Reflect.get(target, "size", target);
+ },
+ has(key) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const rawKey = toRaw(key);
+ if (!readonly) {
+ if (hasChanged(key, rawKey)) {
+ track(rawTarget, "has", key);
+ }
+ track(rawTarget, "has", rawKey);
+ }
+ return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
+ },
+ forEach(callback, thisArg) {
+ const observed = this;
+ const target = observed["__v_raw"];
+ const rawTarget = toRaw(target);
+ const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;
+ !readonly && track(rawTarget, "iterate", ITERATE_KEY);
+ return target.forEach((value, key) => {
+ return callback.call(thisArg, wrap(value), wrap(key), observed);
+ });
+ }
+ };
+ extend(
+ instrumentations,
+ readonly ? {
+ add: createReadonlyMethod("add"),
+ set: createReadonlyMethod("set"),
+ delete: createReadonlyMethod("delete"),
+ clear: createReadonlyMethod("clear")
+ } : {
+ add(value) {
+ if (!shallow && !isShallow(value) && !isReadonly(value)) {
+ value = toRaw(value);
+ }
+ const target = toRaw(this);
+ const proto = getProto(target);
+ const hadKey = proto.has.call(target, value);
+ if (!hadKey) {
+ target.add(value);
+ trigger(target, "add", value, value);
+ }
+ return this;
+ },
+ set(key, value) {
+ if (!shallow && !isShallow(value) && !isReadonly(value)) {
+ value = toRaw(value);
+ }
+ const target = toRaw(this);
+ const { has, get } = getProto(target);
+ let hadKey = has.call(target, key);
+ if (!hadKey) {
+ key = toRaw(key);
+ hadKey = has.call(target, key);
+ } else {
+ checkIdentityKeys(target, has, key);
+ }
+ const oldValue = get.call(target, key);
+ target.set(key, value);
+ if (!hadKey) {
+ trigger(target, "add", key, value);
+ } else if (hasChanged(value, oldValue)) {
+ trigger(target, "set", key, value, oldValue);
+ }
+ return this;
+ },
+ delete(key) {
+ const target = toRaw(this);
+ const { has, get } = getProto(target);
+ let hadKey = has.call(target, key);
+ if (!hadKey) {
+ key = toRaw(key);
+ hadKey = has.call(target, key);
+ } else {
+ checkIdentityKeys(target, has, key);
+ }
+ const oldValue = get ? get.call(target, key) : void 0;
+ const result = target.delete(key);
+ if (hadKey) {
+ trigger(target, "delete", key, void 0, oldValue);
+ }
+ return result;
+ },
+ clear() {
+ const target = toRaw(this);
+ const hadItems = target.size !== 0;
+ const oldTarget = isMap(target) ? new Map(target) : new Set(target) ;
+ const result = target.clear();
+ if (hadItems) {
+ trigger(
+ target,
+ "clear",
+ void 0,
+ void 0,
+ oldTarget
+ );
+ }
+ return result;
+ }
+ }
+ );
+ const iteratorMethods = [
+ "keys",
+ "values",
+ "entries",
+ Symbol.iterator
+ ];
+ iteratorMethods.forEach((method) => {
+ instrumentations[method] = createIterableMethod(method, readonly, shallow);
+ });
+ return instrumentations;
+ }
+ function createInstrumentationGetter(isReadonly2, shallow) {
+ const instrumentations = createInstrumentations(isReadonly2, shallow);
+ return (target, key, receiver) => {
+ if (key === "__v_isReactive") {
+ return !isReadonly2;
+ } else if (key === "__v_isReadonly") {
+ return isReadonly2;
+ } else if (key === "__v_raw") {
+ return target;
+ }
+ return Reflect.get(
+ hasOwn(instrumentations, key) && key in target ? instrumentations : target,
+ key,
+ receiver
+ );
+ };
+ }
+ const mutableCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(false, false)
+ };
+ const shallowCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(false, true)
+ };
+ const readonlyCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(true, false)
+ };
+ const shallowReadonlyCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(true, true)
+ };
+ function checkIdentityKeys(target, has, key) {
+ const rawKey = toRaw(key);
+ if (rawKey !== key && has.call(target, rawKey)) {
+ const type = toRawType(target);
+ warn$2(
+ `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
+ );
+ }
+ }
+
+ const reactiveMap = /* @__PURE__ */ new WeakMap();
+ const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
+ const readonlyMap = /* @__PURE__ */ new WeakMap();
+ const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
+ function targetTypeMap(rawType) {
+ switch (rawType) {
+ case "Object":
+ case "Array":
+ return 1 /* COMMON */;
+ case "Map":
+ case "Set":
+ case "WeakMap":
+ case "WeakSet":
+ return 2 /* COLLECTION */;
+ default:
+ return 0 /* INVALID */;
+ }
+ }
+ function getTargetType(value) {
+ return value["__v_skip"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));
+ }
+ function reactive(target) {
+ if (isReadonly(target)) {
+ return target;
+ }
+ return createReactiveObject(
+ target,
+ false,
+ mutableHandlers,
+ mutableCollectionHandlers,
+ reactiveMap
+ );
+ }
+ function shallowReactive(target) {
+ return createReactiveObject(
+ target,
+ false,
+ shallowReactiveHandlers,
+ shallowCollectionHandlers,
+ shallowReactiveMap
+ );
+ }
+ function readonly(target) {
+ return createReactiveObject(
+ target,
+ true,
+ readonlyHandlers,
+ readonlyCollectionHandlers,
+ readonlyMap
+ );
+ }
+ function shallowReadonly(target) {
+ return createReactiveObject(
+ target,
+ true,
+ shallowReadonlyHandlers,
+ shallowReadonlyCollectionHandlers,
+ shallowReadonlyMap
+ );
+ }
+ function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
+ if (!isObject(target)) {
+ {
+ warn$2(
+ `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String(
+ target
+ )}`
+ );
+ }
+ return target;
+ }
+ if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
+ return target;
+ }
+ const targetType = getTargetType(target);
+ if (targetType === 0 /* INVALID */) {
+ return target;
+ }
+ const existingProxy = proxyMap.get(target);
+ if (existingProxy) {
+ return existingProxy;
+ }
+ const proxy = new Proxy(
+ target,
+ targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers
+ );
+ proxyMap.set(target, proxy);
+ return proxy;
+ }
+ function isReactive(value) {
+ if (isReadonly(value)) {
+ return isReactive(value["__v_raw"]);
+ }
+ return !!(value && value["__v_isReactive"]);
+ }
+ function isReadonly(value) {
+ return !!(value && value["__v_isReadonly"]);
+ }
+ function isShallow(value) {
+ return !!(value && value["__v_isShallow"]);
+ }
+ function isProxy(value) {
+ return value ? !!value["__v_raw"] : false;
+ }
+ function toRaw(observed) {
+ const raw = observed && observed["__v_raw"];
+ return raw ? toRaw(raw) : observed;
+ }
+ function markRaw(value) {
+ if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) {
+ def(value, "__v_skip", true);
+ }
+ return value;
+ }
+ const toReactive = (value) => isObject(value) ? reactive(value) : value;
+ const toReadonly = (value) => isObject(value) ? readonly(value) : value;
+
+ function isRef(r) {
+ return r ? r["__v_isRef"] === true : false;
+ }
+ function ref(value) {
+ return createRef(value, false);
+ }
+ function shallowRef(value) {
+ return createRef(value, true);
+ }
+ function createRef(rawValue, shallow) {
+ if (isRef(rawValue)) {
+ return rawValue;
+ }
+ return new RefImpl(rawValue, shallow);
+ }
+ class RefImpl {
+ constructor(value, isShallow2) {
+ this.dep = new Dep();
+ this["__v_isRef"] = true;
+ this["__v_isShallow"] = false;
+ this._rawValue = isShallow2 ? value : toRaw(value);
+ this._value = isShallow2 ? value : toReactive(value);
+ this["__v_isShallow"] = isShallow2;
+ }
+ get value() {
+ {
+ this.dep.track({
+ target: this,
+ type: "get",
+ key: "value"
+ });
+ }
+ return this._value;
+ }
+ set value(newValue) {
+ const oldValue = this._rawValue;
+ const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue);
+ newValue = useDirectValue ? newValue : toRaw(newValue);
+ if (hasChanged(newValue, oldValue)) {
+ this._rawValue = newValue;
+ this._value = useDirectValue ? newValue : toReactive(newValue);
+ {
+ this.dep.trigger({
+ target: this,
+ type: "set",
+ key: "value",
+ newValue,
+ oldValue
+ });
+ }
+ }
+ }
+ }
+ function triggerRef(ref2) {
+ if (ref2.dep) {
+ {
+ ref2.dep.trigger({
+ target: ref2,
+ type: "set",
+ key: "value",
+ newValue: ref2._value
+ });
+ }
+ }
+ }
+ function unref(ref2) {
+ return isRef(ref2) ? ref2.value : ref2;
+ }
+ function toValue(source) {
+ return isFunction(source) ? source() : unref(source);
+ }
+ const shallowUnwrapHandlers = {
+ get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)),
+ set: (target, key, value, receiver) => {
+ const oldValue = target[key];
+ if (isRef(oldValue) && !isRef(value)) {
+ oldValue.value = value;
+ return true;
+ } else {
+ return Reflect.set(target, key, value, receiver);
+ }
+ }
+ };
+ function proxyRefs(objectWithRefs) {
+ return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
+ }
+ class CustomRefImpl {
+ constructor(factory) {
+ this["__v_isRef"] = true;
+ this._value = void 0;
+ const dep = this.dep = new Dep();
+ const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));
+ this._get = get;
+ this._set = set;
+ }
+ get value() {
+ return this._value = this._get();
+ }
+ set value(newVal) {
+ this._set(newVal);
+ }
+ }
+ function customRef(factory) {
+ return new CustomRefImpl(factory);
+ }
+ function toRefs(object) {
+ if (!isProxy(object)) {
+ warn$2(`toRefs() expects a reactive object but received a plain one.`);
+ }
+ const ret = isArray(object) ? new Array(object.length) : {};
+ for (const key in object) {
+ ret[key] = propertyToRef(object, key);
+ }
+ return ret;
+ }
+ class ObjectRefImpl {
+ constructor(_object, _key, _defaultValue) {
+ this._object = _object;
+ this._key = _key;
+ this._defaultValue = _defaultValue;
+ this["__v_isRef"] = true;
+ this._value = void 0;
+ }
+ get value() {
+ const val = this._object[this._key];
+ return this._value = val === void 0 ? this._defaultValue : val;
+ }
+ set value(newVal) {
+ this._object[this._key] = newVal;
+ }
+ get dep() {
+ return getDepFromReactive(toRaw(this._object), this._key);
+ }
+ }
+ class GetterRefImpl {
+ constructor(_getter) {
+ this._getter = _getter;
+ this["__v_isRef"] = true;
+ this["__v_isReadonly"] = true;
+ this._value = void 0;
+ }
+ get value() {
+ return this._value = this._getter();
+ }
+ }
+ function toRef(source, key, defaultValue) {
+ if (isRef(source)) {
+ return source;
+ } else if (isFunction(source)) {
+ return new GetterRefImpl(source);
+ } else if (isObject(source) && arguments.length > 1) {
+ return propertyToRef(source, key, defaultValue);
+ } else {
+ return ref(source);
+ }
+ }
+ function propertyToRef(source, key, defaultValue) {
+ const val = source[key];
+ return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);
+ }
+
+ class ComputedRefImpl {
+ constructor(fn, setter, isSSR) {
+ this.fn = fn;
+ this.setter = setter;
+ /**
+ * @internal
+ */
+ this._value = void 0;
+ /**
+ * @internal
+ */
+ this.dep = new Dep(this);
+ /**
+ * @internal
+ */
+ this.__v_isRef = true;
+ // TODO isolatedDeclarations "__v_isReadonly"
+ // A computed is also a subscriber that tracks other deps
+ /**
+ * @internal
+ */
+ this.deps = void 0;
+ /**
+ * @internal
+ */
+ this.depsTail = void 0;
+ /**
+ * @internal
+ */
+ this.flags = 16;
+ /**
+ * @internal
+ */
+ this.globalVersion = globalVersion - 1;
+ /**
+ * @internal
+ */
+ this.next = void 0;
+ // for backwards compat
+ this.effect = this;
+ this["__v_isReadonly"] = !setter;
+ this.isSSR = isSSR;
+ }
+ /**
+ * @internal
+ */
+ notify() {
+ this.flags |= 16;
+ if (!(this.flags & 8) && // avoid infinite self recursion
+ activeSub !== this) {
+ batch(this, true);
+ return true;
+ }
+ }
+ get value() {
+ const link = this.dep.track({
+ target: this,
+ type: "get",
+ key: "value"
+ }) ;
+ refreshComputed(this);
+ if (link) {
+ link.version = this.dep.version;
+ }
+ return this._value;
+ }
+ set value(newValue) {
+ if (this.setter) {
+ this.setter(newValue);
+ } else {
+ warn$2("Write operation failed: computed value is readonly");
+ }
+ }
+ }
+ function computed$1(getterOrOptions, debugOptions, isSSR = false) {
+ let getter;
+ let setter;
+ if (isFunction(getterOrOptions)) {
+ getter = getterOrOptions;
+ } else {
+ getter = getterOrOptions.get;
+ setter = getterOrOptions.set;
+ }
+ const cRef = new ComputedRefImpl(getter, setter, isSSR);
+ if (debugOptions && !isSSR) {
+ cRef.onTrack = debugOptions.onTrack;
+ cRef.onTrigger = debugOptions.onTrigger;
+ }
+ return cRef;
+ }
+
+ const TrackOpTypes = {
+ "GET": "get",
+ "HAS": "has",
+ "ITERATE": "iterate"
+ };
+ const TriggerOpTypes = {
+ "SET": "set",
+ "ADD": "add",
+ "DELETE": "delete",
+ "CLEAR": "clear"
+ };
+
+ const INITIAL_WATCHER_VALUE = {};
+ const cleanupMap = /* @__PURE__ */ new WeakMap();
+ let activeWatcher = void 0;
+ function getCurrentWatcher() {
+ return activeWatcher;
+ }
+ function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {
+ if (owner) {
+ let cleanups = cleanupMap.get(owner);
+ if (!cleanups) cleanupMap.set(owner, cleanups = []);
+ cleanups.push(cleanupFn);
+ } else if (!failSilently) {
+ warn$2(
+ `onWatcherCleanup() was called when there was no active watcher to associate with.`
+ );
+ }
+ }
+ function watch$1(source, cb, options = EMPTY_OBJ) {
+ const { immediate, deep, once, scheduler, augmentJob, call } = options;
+ const warnInvalidSource = (s) => {
+ (options.onWarn || warn$2)(
+ `Invalid watch source: `,
+ s,
+ `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
+ );
+ };
+ const reactiveGetter = (source2) => {
+ if (deep) return source2;
+ if (isShallow(source2) || deep === false || deep === 0)
+ return traverse(source2, 1);
+ return traverse(source2);
+ };
+ let effect;
+ let getter;
+ let cleanup;
+ let boundCleanup;
+ let forceTrigger = false;
+ let isMultiSource = false;
+ if (isRef(source)) {
+ getter = () => source.value;
+ forceTrigger = isShallow(source);
+ } else if (isReactive(source)) {
+ getter = () => reactiveGetter(source);
+ forceTrigger = true;
+ } else if (isArray(source)) {
+ isMultiSource = true;
+ forceTrigger = source.some((s) => isReactive(s) || isShallow(s));
+ getter = () => source.map((s) => {
+ if (isRef(s)) {
+ return s.value;
+ } else if (isReactive(s)) {
+ return reactiveGetter(s);
+ } else if (isFunction(s)) {
+ return call ? call(s, 2) : s();
+ } else {
+ warnInvalidSource(s);
+ }
+ });
+ } else if (isFunction(source)) {
+ if (cb) {
+ getter = call ? () => call(source, 2) : source;
+ } else {
+ getter = () => {
+ if (cleanup) {
+ pauseTracking();
+ try {
+ cleanup();
+ } finally {
+ resetTracking();
+ }
+ }
+ const currentEffect = activeWatcher;
+ activeWatcher = effect;
+ try {
+ return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);
+ } finally {
+ activeWatcher = currentEffect;
+ }
+ };
+ }
+ } else {
+ getter = NOOP;
+ warnInvalidSource(source);
+ }
+ if (cb && deep) {
+ const baseGetter = getter;
+ const depth = deep === true ? Infinity : deep;
+ getter = () => traverse(baseGetter(), depth);
+ }
+ const scope = getCurrentScope();
+ const watchHandle = () => {
+ effect.stop();
+ if (scope && scope.active) {
+ remove(scope.effects, effect);
+ }
+ };
+ if (once && cb) {
+ const _cb = cb;
+ cb = (...args) => {
+ _cb(...args);
+ watchHandle();
+ };
+ }
+ let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
+ const job = (immediateFirstRun) => {
+ if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {
+ return;
+ }
+ if (cb) {
+ const newValue = effect.run();
+ if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {
+ if (cleanup) {
+ cleanup();
+ }
+ const currentWatcher = activeWatcher;
+ activeWatcher = effect;
+ try {
+ const args = [
+ newValue,
+ // pass undefined as the old value when it's changed for the first time
+ oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
+ boundCleanup
+ ];
+ oldValue = newValue;
+ call ? call(cb, 3, args) : (
+ // @ts-expect-error
+ cb(...args)
+ );
+ } finally {
+ activeWatcher = currentWatcher;
+ }
+ }
+ } else {
+ effect.run();
+ }
+ };
+ if (augmentJob) {
+ augmentJob(job);
+ }
+ effect = new ReactiveEffect(getter);
+ effect.scheduler = scheduler ? () => scheduler(job, false) : job;
+ boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);
+ cleanup = effect.onStop = () => {
+ const cleanups = cleanupMap.get(effect);
+ if (cleanups) {
+ if (call) {
+ call(cleanups, 4);
+ } else {
+ for (const cleanup2 of cleanups) cleanup2();
+ }
+ cleanupMap.delete(effect);
+ }
+ };
+ {
+ effect.onTrack = options.onTrack;
+ effect.onTrigger = options.onTrigger;
+ }
+ if (cb) {
+ if (immediate) {
+ job(true);
+ } else {
+ oldValue = effect.run();
+ }
+ } else if (scheduler) {
+ scheduler(job.bind(null, true), true);
+ } else {
+ effect.run();
+ }
+ watchHandle.pause = effect.pause.bind(effect);
+ watchHandle.resume = effect.resume.bind(effect);
+ watchHandle.stop = watchHandle;
+ return watchHandle;
+ }
+ function traverse(value, depth = Infinity, seen) {
+ if (depth <= 0 || !isObject(value) || value["__v_skip"]) {
+ return value;
+ }
+ seen = seen || /* @__PURE__ */ new Set();
+ if (seen.has(value)) {
+ return value;
+ }
+ seen.add(value);
+ depth--;
+ if (isRef(value)) {
+ traverse(value.value, depth, seen);
+ } else if (isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ traverse(value[i], depth, seen);
+ }
+ } else if (isSet(value) || isMap(value)) {
+ value.forEach((v) => {
+ traverse(v, depth, seen);
+ });
+ } else if (isPlainObject(value)) {
+ for (const key in value) {
+ traverse(value[key], depth, seen);
+ }
+ for (const key of Object.getOwnPropertySymbols(value)) {
+ if (Object.prototype.propertyIsEnumerable.call(value, key)) {
+ traverse(value[key], depth, seen);
+ }
+ }
+ }
+ return value;
+ }
+
+ const stack$1 = [];
+ function pushWarningContext(vnode) {
+ stack$1.push(vnode);
+ }
+ function popWarningContext() {
+ stack$1.pop();
+ }
+ let isWarning = false;
+ function warn$1(msg, ...args) {
+ if (isWarning) return;
+ isWarning = true;
+ pauseTracking();
+ const instance = stack$1.length ? stack$1[stack$1.length - 1].component : null;
+ const appWarnHandler = instance && instance.appContext.config.warnHandler;
+ const trace = getComponentTrace();
+ if (appWarnHandler) {
+ callWithErrorHandling(
+ appWarnHandler,
+ instance,
+ 11,
+ [
+ // eslint-disable-next-line no-restricted-syntax
+ msg + args.map((a) => {
+ var _a, _b;
+ return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
+ }).join(""),
+ instance && instance.proxy,
+ trace.map(
+ ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
+ ).join("\n"),
+ trace
+ ]
+ );
+ } else {
+ const warnArgs = [`[Vue warn]: ${msg}`, ...args];
+ if (trace.length && // avoid spamming console during tests
+ true) {
+ warnArgs.push(`
+`, ...formatTrace(trace));
+ }
+ console.warn(...warnArgs);
+ }
+ resetTracking();
+ isWarning = false;
+ }
+ function getComponentTrace() {
+ let currentVNode = stack$1[stack$1.length - 1];
+ if (!currentVNode) {
+ return [];
+ }
+ const normalizedStack = [];
+ while (currentVNode) {
+ const last = normalizedStack[0];
+ if (last && last.vnode === currentVNode) {
+ last.recurseCount++;
+ } else {
+ normalizedStack.push({
+ vnode: currentVNode,
+ recurseCount: 0
+ });
+ }
+ const parentInstance = currentVNode.component && currentVNode.component.parent;
+ currentVNode = parentInstance && parentInstance.vnode;
+ }
+ return normalizedStack;
+ }
+ function formatTrace(trace) {
+ const logs = [];
+ trace.forEach((entry, i) => {
+ logs.push(...i === 0 ? [] : [`
+`], ...formatTraceEntry(entry));
+ });
+ return logs;
+ }
+ function formatTraceEntry({ vnode, recurseCount }) {
+ const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
+ const isRoot = vnode.component ? vnode.component.parent == null : false;
+ const open = ` at <${formatComponentName(
+ vnode.component,
+ vnode.type,
+ isRoot
+ )}`;
+ const close = `>` + postfix;
+ return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
+ }
+ function formatProps(props) {
+ const res = [];
+ const keys = Object.keys(props);
+ keys.slice(0, 3).forEach((key) => {
+ res.push(...formatProp(key, props[key]));
+ });
+ if (keys.length > 3) {
+ res.push(` ...`);
+ }
+ return res;
+ }
+ function formatProp(key, value, raw) {
+ if (isString(value)) {
+ value = JSON.stringify(value);
+ return raw ? value : [`${key}=${value}`];
+ } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
+ return raw ? value : [`${key}=${value}`];
+ } else if (isRef(value)) {
+ value = formatProp(key, toRaw(value.value), true);
+ return raw ? value : [`${key}=Ref<`, value, `>`];
+ } else if (isFunction(value)) {
+ return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
+ } else {
+ value = toRaw(value);
+ return raw ? value : [`${key}=`, value];
+ }
+ }
+ function assertNumber(val, type) {
+ if (val === void 0) {
+ return;
+ } else if (typeof val !== "number") {
+ warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);
+ } else if (isNaN(val)) {
+ warn$1(`${type} is NaN - the duration expression might be incorrect.`);
+ }
+ }
+
+ const ErrorCodes = {
+ "SETUP_FUNCTION": 0,
+ "0": "SETUP_FUNCTION",
+ "RENDER_FUNCTION": 1,
+ "1": "RENDER_FUNCTION",
+ "NATIVE_EVENT_HANDLER": 5,
+ "5": "NATIVE_EVENT_HANDLER",
+ "COMPONENT_EVENT_HANDLER": 6,
+ "6": "COMPONENT_EVENT_HANDLER",
+ "VNODE_HOOK": 7,
+ "7": "VNODE_HOOK",
+ "DIRECTIVE_HOOK": 8,
+ "8": "DIRECTIVE_HOOK",
+ "TRANSITION_HOOK": 9,
+ "9": "TRANSITION_HOOK",
+ "APP_ERROR_HANDLER": 10,
+ "10": "APP_ERROR_HANDLER",
+ "APP_WARN_HANDLER": 11,
+ "11": "APP_WARN_HANDLER",
+ "FUNCTION_REF": 12,
+ "12": "FUNCTION_REF",
+ "ASYNC_COMPONENT_LOADER": 13,
+ "13": "ASYNC_COMPONENT_LOADER",
+ "SCHEDULER": 14,
+ "14": "SCHEDULER",
+ "COMPONENT_UPDATE": 15,
+ "15": "COMPONENT_UPDATE",
+ "APP_UNMOUNT_CLEANUP": 16,
+ "16": "APP_UNMOUNT_CLEANUP"
+ };
+ const ErrorTypeStrings$1 = {
+ ["sp"]: "serverPrefetch hook",
+ ["bc"]: "beforeCreate hook",
+ ["c"]: "created hook",
+ ["bm"]: "beforeMount hook",
+ ["m"]: "mounted hook",
+ ["bu"]: "beforeUpdate hook",
+ ["u"]: "updated",
+ ["bum"]: "beforeUnmount hook",
+ ["um"]: "unmounted hook",
+ ["a"]: "activated hook",
+ ["da"]: "deactivated hook",
+ ["ec"]: "errorCaptured hook",
+ ["rtc"]: "renderTracked hook",
+ ["rtg"]: "renderTriggered hook",
+ [0]: "setup function",
+ [1]: "render function",
+ [2]: "watcher getter",
+ [3]: "watcher callback",
+ [4]: "watcher cleanup function",
+ [5]: "native event handler",
+ [6]: "component event handler",
+ [7]: "vnode hook",
+ [8]: "directive hook",
+ [9]: "transition hook",
+ [10]: "app errorHandler",
+ [11]: "app warnHandler",
+ [12]: "ref function",
+ [13]: "async component loader",
+ [14]: "scheduler flush",
+ [15]: "component update",
+ [16]: "app unmount cleanup function"
+ };
+ function callWithErrorHandling(fn, instance, type, args) {
+ try {
+ return args ? fn(...args) : fn();
+ } catch (err) {
+ handleError(err, instance, type);
+ }
+ }
+ function callWithAsyncErrorHandling(fn, instance, type, args) {
+ if (isFunction(fn)) {
+ const res = callWithErrorHandling(fn, instance, type, args);
+ if (res && isPromise(res)) {
+ res.catch((err) => {
+ handleError(err, instance, type);
+ });
+ }
+ return res;
+ }
+ if (isArray(fn)) {
+ const values = [];
+ for (let i = 0; i < fn.length; i++) {
+ values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));
+ }
+ return values;
+ } else {
+ warn$1(
+ `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`
+ );
+ }
+ }
+ function handleError(err, instance, type, throwInDev = true) {
+ const contextVNode = instance ? instance.vnode : null;
+ const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;
+ if (instance) {
+ let cur = instance.parent;
+ const exposedInstance = instance.proxy;
+ const errorInfo = ErrorTypeStrings$1[type] ;
+ while (cur) {
+ const errorCapturedHooks = cur.ec;
+ if (errorCapturedHooks) {
+ for (let i = 0; i < errorCapturedHooks.length; i++) {
+ if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
+ return;
+ }
+ }
+ }
+ cur = cur.parent;
+ }
+ if (errorHandler) {
+ pauseTracking();
+ callWithErrorHandling(errorHandler, null, 10, [
+ err,
+ exposedInstance,
+ errorInfo
+ ]);
+ resetTracking();
+ return;
+ }
+ }
+ logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);
+ }
+ function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {
+ {
+ const info = ErrorTypeStrings$1[type];
+ if (contextVNode) {
+ pushWarningContext(contextVNode);
+ }
+ warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
+ if (contextVNode) {
+ popWarningContext();
+ }
+ if (throwInDev) {
+ throw err;
+ } else {
+ console.error(err);
+ }
+ }
+ }
+
+ const queue = [];
+ let flushIndex = -1;
+ const pendingPostFlushCbs = [];
+ let activePostFlushCbs = null;
+ let postFlushIndex = 0;
+ const resolvedPromise = /* @__PURE__ */ Promise.resolve();
+ let currentFlushPromise = null;
+ const RECURSION_LIMIT = 100;
+ function nextTick(fn) {
+ const p = currentFlushPromise || resolvedPromise;
+ return fn ? p.then(this ? fn.bind(this) : fn) : p;
+ }
+ function findInsertionIndex(id) {
+ let start = flushIndex + 1;
+ let end = queue.length;
+ while (start < end) {
+ const middle = start + end >>> 1;
+ const middleJob = queue[middle];
+ const middleJobId = getId(middleJob);
+ if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {
+ start = middle + 1;
+ } else {
+ end = middle;
+ }
+ }
+ return start;
+ }
+ function queueJob(job) {
+ if (!(job.flags & 1)) {
+ const jobId = getId(job);
+ const lastJob = queue[queue.length - 1];
+ if (!lastJob || // fast path when the job id is larger than the tail
+ !(job.flags & 2) && jobId >= getId(lastJob)) {
+ queue.push(job);
+ } else {
+ queue.splice(findInsertionIndex(jobId), 0, job);
+ }
+ job.flags |= 1;
+ queueFlush();
+ }
+ }
+ function queueFlush() {
+ if (!currentFlushPromise) {
+ currentFlushPromise = resolvedPromise.then(flushJobs);
+ }
+ }
+ function queuePostFlushCb(cb) {
+ if (!isArray(cb)) {
+ if (activePostFlushCbs && cb.id === -1) {
+ activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);
+ } else if (!(cb.flags & 1)) {
+ pendingPostFlushCbs.push(cb);
+ cb.flags |= 1;
+ }
+ } else {
+ pendingPostFlushCbs.push(...cb);
+ }
+ queueFlush();
+ }
+ function flushPreFlushCbs(instance, seen, i = flushIndex + 1) {
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ for (; i < queue.length; i++) {
+ const cb = queue[i];
+ if (cb && cb.flags & 2) {
+ if (instance && cb.id !== instance.uid) {
+ continue;
+ }
+ if (checkRecursiveUpdates(seen, cb)) {
+ continue;
+ }
+ queue.splice(i, 1);
+ i--;
+ if (cb.flags & 4) {
+ cb.flags &= -2;
+ }
+ cb();
+ if (!(cb.flags & 4)) {
+ cb.flags &= -2;
+ }
+ }
+ }
+ }
+ function flushPostFlushCbs(seen) {
+ if (pendingPostFlushCbs.length) {
+ const deduped = [...new Set(pendingPostFlushCbs)].sort(
+ (a, b) => getId(a) - getId(b)
+ );
+ pendingPostFlushCbs.length = 0;
+ if (activePostFlushCbs) {
+ activePostFlushCbs.push(...deduped);
+ return;
+ }
+ activePostFlushCbs = deduped;
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
+ const cb = activePostFlushCbs[postFlushIndex];
+ if (checkRecursiveUpdates(seen, cb)) {
+ continue;
+ }
+ if (cb.flags & 4) {
+ cb.flags &= -2;
+ }
+ if (!(cb.flags & 8)) cb();
+ cb.flags &= -2;
+ }
+ activePostFlushCbs = null;
+ postFlushIndex = 0;
+ }
+ }
+ const getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;
+ function flushJobs(seen) {
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ const check = (job) => checkRecursiveUpdates(seen, job) ;
+ try {
+ for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
+ const job = queue[flushIndex];
+ if (job && !(job.flags & 8)) {
+ if (check(job)) {
+ continue;
+ }
+ if (job.flags & 4) {
+ job.flags &= ~1;
+ }
+ callWithErrorHandling(
+ job,
+ job.i,
+ job.i ? 15 : 14
+ );
+ if (!(job.flags & 4)) {
+ job.flags &= ~1;
+ }
+ }
+ }
+ } finally {
+ for (; flushIndex < queue.length; flushIndex++) {
+ const job = queue[flushIndex];
+ if (job) {
+ job.flags &= -2;
+ }
+ }
+ flushIndex = -1;
+ queue.length = 0;
+ flushPostFlushCbs(seen);
+ currentFlushPromise = null;
+ if (queue.length || pendingPostFlushCbs.length) {
+ flushJobs(seen);
+ }
+ }
+ }
+ function checkRecursiveUpdates(seen, fn) {
+ const count = seen.get(fn) || 0;
+ if (count > RECURSION_LIMIT) {
+ const instance = fn.i;
+ const componentName = instance && getComponentName(instance.type);
+ handleError(
+ `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
+ null,
+ 10
+ );
+ return true;
+ }
+ seen.set(fn, count + 1);
+ return false;
+ }
+
+ let isHmrUpdating = false;
+ const hmrDirtyComponents = /* @__PURE__ */ new Map();
+ {
+ getGlobalThis().__VUE_HMR_RUNTIME__ = {
+ createRecord: tryWrap(createRecord),
+ rerender: tryWrap(rerender),
+ reload: tryWrap(reload)
+ };
+ }
+ const map = /* @__PURE__ */ new Map();
+ function registerHMR(instance) {
+ const id = instance.type.__hmrId;
+ let record = map.get(id);
+ if (!record) {
+ createRecord(id, instance.type);
+ record = map.get(id);
+ }
+ record.instances.add(instance);
+ }
+ function unregisterHMR(instance) {
+ map.get(instance.type.__hmrId).instances.delete(instance);
+ }
+ function createRecord(id, initialDef) {
+ if (map.has(id)) {
+ return false;
+ }
+ map.set(id, {
+ initialDef: normalizeClassComponent(initialDef),
+ instances: /* @__PURE__ */ new Set()
+ });
+ return true;
+ }
+ function normalizeClassComponent(component) {
+ return isClassComponent(component) ? component.__vccOpts : component;
+ }
+ function rerender(id, newRender) {
+ const record = map.get(id);
+ if (!record) {
+ return;
+ }
+ record.initialDef.render = newRender;
+ [...record.instances].forEach((instance) => {
+ if (newRender) {
+ instance.render = newRender;
+ normalizeClassComponent(instance.type).render = newRender;
+ }
+ instance.renderCache = [];
+ isHmrUpdating = true;
+ instance.update();
+ isHmrUpdating = false;
+ });
+ }
+ function reload(id, newComp) {
+ const record = map.get(id);
+ if (!record) return;
+ newComp = normalizeClassComponent(newComp);
+ updateComponentDef(record.initialDef, newComp);
+ const instances = [...record.instances];
+ for (let i = 0; i < instances.length; i++) {
+ const instance = instances[i];
+ const oldComp = normalizeClassComponent(instance.type);
+ let dirtyInstances = hmrDirtyComponents.get(oldComp);
+ if (!dirtyInstances) {
+ if (oldComp !== record.initialDef) {
+ updateComponentDef(oldComp, newComp);
+ }
+ hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());
+ }
+ dirtyInstances.add(instance);
+ instance.appContext.propsCache.delete(instance.type);
+ instance.appContext.emitsCache.delete(instance.type);
+ instance.appContext.optionsCache.delete(instance.type);
+ if (instance.ceReload) {
+ dirtyInstances.add(instance);
+ instance.ceReload(newComp.styles);
+ dirtyInstances.delete(instance);
+ } else if (instance.parent) {
+ queueJob(() => {
+ isHmrUpdating = true;
+ instance.parent.update();
+ isHmrUpdating = false;
+ dirtyInstances.delete(instance);
+ });
+ } else if (instance.appContext.reload) {
+ instance.appContext.reload();
+ } else if (typeof window !== "undefined") {
+ window.location.reload();
+ } else {
+ console.warn(
+ "[HMR] Root or manually mounted instance modified. Full reload required."
+ );
+ }
+ if (instance.root.ce && instance !== instance.root) {
+ instance.root.ce._removeChildStyle(oldComp);
+ }
+ }
+ queuePostFlushCb(() => {
+ hmrDirtyComponents.clear();
+ });
+ }
+ function updateComponentDef(oldComp, newComp) {
+ extend(oldComp, newComp);
+ for (const key in oldComp) {
+ if (key !== "__file" && !(key in newComp)) {
+ delete oldComp[key];
+ }
+ }
+ }
+ function tryWrap(fn) {
+ return (id, arg) => {
+ try {
+ return fn(id, arg);
+ } catch (e) {
+ console.error(e);
+ console.warn(
+ `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`
+ );
+ }
+ };
+ }
+
+ let devtools$1;
+ let buffer = [];
+ let devtoolsNotInstalled = false;
+ function emit$1(event, ...args) {
+ if (devtools$1) {
+ devtools$1.emit(event, ...args);
+ } else if (!devtoolsNotInstalled) {
+ buffer.push({ event, args });
+ }
+ }
+ function setDevtoolsHook$1(hook, target) {
+ var _a, _b;
+ devtools$1 = hook;
+ if (devtools$1) {
+ devtools$1.enabled = true;
+ buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));
+ buffer = [];
+ } else if (
+ // handle late devtools injection - only do this if we are in an actual
+ // browser environment to avoid the timer handle stalling test runner exit
+ // (#4815)
+ typeof window !== "undefined" && // some envs mock window but not fully
+ window.HTMLElement && // also exclude jsdom
+ // eslint-disable-next-line no-restricted-syntax
+ !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
+ ) {
+ const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
+ replay.push((newHook) => {
+ setDevtoolsHook$1(newHook, target);
+ });
+ setTimeout(() => {
+ if (!devtools$1) {
+ target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
+ devtoolsNotInstalled = true;
+ buffer = [];
+ }
+ }, 3e3);
+ } else {
+ devtoolsNotInstalled = true;
+ buffer = [];
+ }
+ }
+ function devtoolsInitApp(app, version) {
+ emit$1("app:init" /* APP_INIT */, app, version, {
+ Fragment,
+ Text,
+ Comment,
+ Static
+ });
+ }
+ function devtoolsUnmountApp(app) {
+ emit$1("app:unmount" /* APP_UNMOUNT */, app);
+ }
+ const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook("component:added" /* COMPONENT_ADDED */);
+ const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook("component:updated" /* COMPONENT_UPDATED */);
+ const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:removed" /* COMPONENT_REMOVED */
+ );
+ const devtoolsComponentRemoved = (component) => {
+ if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered
+ !devtools$1.cleanupBuffer(component)) {
+ _devtoolsComponentRemoved(component);
+ }
+ };
+ /*! #__NO_SIDE_EFFECTS__ */
+ // @__NO_SIDE_EFFECTS__
+ function createDevtoolsComponentHook(hook) {
+ return (component) => {
+ emit$1(
+ hook,
+ component.appContext.app,
+ component.uid,
+ component.parent ? component.parent.uid : void 0,
+ component
+ );
+ };
+ }
+ const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook("perf:start" /* PERFORMANCE_START */);
+ const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook("perf:end" /* PERFORMANCE_END */);
+ function createDevtoolsPerformanceHook(hook) {
+ return (component, type, time) => {
+ emit$1(hook, component.appContext.app, component.uid, component, type, time);
+ };
+ }
+ function devtoolsComponentEmit(component, event, params) {
+ emit$1(
+ "component:emit" /* COMPONENT_EMIT */,
+ component.appContext.app,
+ component,
+ event,
+ params
+ );
+ }
+
+ let currentRenderingInstance = null;
+ let currentScopeId = null;
+ function setCurrentRenderingInstance(instance) {
+ const prev = currentRenderingInstance;
+ currentRenderingInstance = instance;
+ currentScopeId = instance && instance.type.__scopeId || null;
+ return prev;
+ }
+ function pushScopeId(id) {
+ currentScopeId = id;
+ }
+ function popScopeId() {
+ currentScopeId = null;
+ }
+ const withScopeId = (_id) => withCtx;
+ function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {
+ if (!ctx) return fn;
+ if (fn._n) {
+ return fn;
+ }
+ const renderFnWithContext = (...args) => {
+ if (renderFnWithContext._d) {
+ setBlockTracking(-1);
+ }
+ const prevInstance = setCurrentRenderingInstance(ctx);
+ let res;
+ try {
+ res = fn(...args);
+ } finally {
+ setCurrentRenderingInstance(prevInstance);
+ if (renderFnWithContext._d) {
+ setBlockTracking(1);
+ }
+ }
+ {
+ devtoolsComponentUpdated(ctx);
+ }
+ return res;
+ };
+ renderFnWithContext._n = true;
+ renderFnWithContext._c = true;
+ renderFnWithContext._d = true;
+ return renderFnWithContext;
+ }
+
+ function validateDirectiveName(name) {
+ if (isBuiltInDirective(name)) {
+ warn$1("Do not use built-in directive ids as custom directive id: " + name);
+ }
+ }
+ function withDirectives(vnode, directives) {
+ if (currentRenderingInstance === null) {
+ warn$1(`withDirectives can only be used inside render functions.`);
+ return vnode;
+ }
+ const instance = getComponentPublicInstance(currentRenderingInstance);
+ const bindings = vnode.dirs || (vnode.dirs = []);
+ for (let i = 0; i < directives.length; i++) {
+ let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
+ if (dir) {
+ if (isFunction(dir)) {
+ dir = {
+ mounted: dir,
+ updated: dir
+ };
+ }
+ if (dir.deep) {
+ traverse(value);
+ }
+ bindings.push({
+ dir,
+ instance,
+ value,
+ oldValue: void 0,
+ arg,
+ modifiers
+ });
+ }
+ }
+ return vnode;
+ }
+ function invokeDirectiveHook(vnode, prevVNode, instance, name) {
+ const bindings = vnode.dirs;
+ const oldBindings = prevVNode && prevVNode.dirs;
+ for (let i = 0; i < bindings.length; i++) {
+ const binding = bindings[i];
+ if (oldBindings) {
+ binding.oldValue = oldBindings[i].value;
+ }
+ let hook = binding.dir[name];
+ if (hook) {
+ pauseTracking();
+ callWithAsyncErrorHandling(hook, instance, 8, [
+ vnode.el,
+ binding,
+ vnode,
+ prevVNode
+ ]);
+ resetTracking();
+ }
+ }
+ }
+
+ const TeleportEndKey = Symbol("_vte");
+ const isTeleport = (type) => type.__isTeleport;
+ const isTeleportDisabled = (props) => props && (props.disabled || props.disabled === "");
+ const isTeleportDeferred = (props) => props && (props.defer || props.defer === "");
+ const isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement;
+ const isTargetMathML = (target) => typeof MathMLElement === "function" && target instanceof MathMLElement;
+ const resolveTarget = (props, select) => {
+ const targetSelector = props && props.to;
+ if (isString(targetSelector)) {
+ if (!select) {
+ warn$1(
+ `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`
+ );
+ return null;
+ } else {
+ const target = select(targetSelector);
+ if (!target && !isTeleportDisabled(props)) {
+ warn$1(
+ `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`
+ );
+ }
+ return target;
+ }
+ } else {
+ if (!targetSelector && !isTeleportDisabled(props)) {
+ warn$1(`Invalid Teleport target: ${targetSelector}`);
+ }
+ return targetSelector;
+ }
+ };
+ const TeleportImpl = {
+ name: "Teleport",
+ __isTeleport: true,
+ process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {
+ const {
+ mc: mountChildren,
+ pc: patchChildren,
+ pbc: patchBlockChildren,
+ o: { insert, querySelector, createText, createComment }
+ } = internals;
+ const disabled = isTeleportDisabled(n2.props);
+ let { shapeFlag, children, dynamicChildren } = n2;
+ if (isHmrUpdating) {
+ optimized = false;
+ dynamicChildren = null;
+ }
+ if (n1 == null) {
+ const placeholder = n2.el = createComment("teleport start") ;
+ const mainAnchor = n2.anchor = createComment("teleport end") ;
+ insert(placeholder, container, anchor);
+ insert(mainAnchor, container, anchor);
+ const mount = (container2, anchor2) => {
+ if (shapeFlag & 16) {
+ if (parentComponent && parentComponent.isCE) {
+ parentComponent.ce._teleportTarget = container2;
+ }
+ mountChildren(
+ children,
+ container2,
+ anchor2,
+ parentComponent,
+ parentSuspense,
+ namespace,
+ slotScopeIds,
+ optimized
+ );
+ }
+ };
+ const mountToTarget = () => {
+ const target = n2.target = resolveTarget(n2.props, querySelector);
+ const targetAnchor = prepareAnchor(target, n2, createText, insert);
+ if (target) {
+ if (namespace !== "svg" && isTargetSVG(target)) {
+ namespace = "svg";
+ } else if (namespace !== "mathml" && isTargetMathML(target)) {
+ namespace = "mathml";
+ }
+ if (!disabled) {
+ mount(target, targetAnchor);
+ updateCssVars(n2, false);
+ }
+ } else if (!disabled) {
+ warn$1(
+ "Invalid Teleport target on mount:",
+ target,
+ `(${typeof target})`
+ );
+ }
+ };
+ if (disabled) {
+ mount(container, mainAnchor);
+ updateCssVars(n2, true);
+ }
+ if (isTeleportDeferred(n2.props)) {
+ n2.el.__isMounted = false;
+ queuePostRenderEffect(() => {
+ mountToTarget();
+ delete n2.el.__isMounted;
+ }, parentSuspense);
+ } else {
+ mountToTarget();
+ }
+ } else {
+ if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {
+ queuePostRenderEffect(() => {
+ TeleportImpl.process(
+ n1,
+ n2,
+ container,
+ anchor,
+ parentComponent,
+ parentSuspense,
+ namespace,
+ slotScopeIds,
+ optimized,
+ internals
+ );
+ }, parentSuspense);
+ return;
+ }
+ n2.el = n1.el;
+ n2.targetStart = n1.targetStart;
+ const mainAnchor = n2.anchor = n1.anchor;
+ const target = n2.target = n1.target;
+ const targetAnchor = n2.targetAnchor = n1.targetAnchor;
+ const wasDisabled = isTeleportDisabled(n1.props);
+ const currentContainer = wasDisabled ? container : target;
+ const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;
+ if (namespace === "svg" || isTargetSVG(target)) {
+ namespace = "svg";
+ } else if (namespace === "mathml" || isTargetMathML(target)) {
+ namespace = "mathml";
+ }
+ if (dynamicChildren) {
+ patchBlockChildren(
+ n1.dynamicChildren,
+ dynamicChildren,
+ currentContainer,
+ parentComponent,
+ parentSuspense,
+ namespace,
+ slotScopeIds
+ );
+ traverseStaticChildren(n1, n2, false);
+ } else if (!optimized) {
+ patchChildren(
+ n1,
+ n2,
+ currentContainer,
+ currentAnchor,
+ parentComponent,
+ parentSuspense,
+ namespace,
+ slotScopeIds,
+ false
+ );
+ }
+ if (disabled) {
+ if (!wasDisabled) {
+ moveTeleport(
+ n2,
+ container,
+ mainAnchor,
+ internals,
+ 1
+ );
+ } else {
+ if (n2.props && n1.props && n2.props.to !== n1.props.to) {
+ n2.props.to = n1.props.to;
+ }
+ }
+ } else {
+ if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {
+ const nextTarget = n2.target = resolveTarget(
+ n2.props,
+ querySelector
+ );
+ if (nextTarget) {
+ moveTeleport(
+ n2,
+ nextTarget,
+ null,
+ internals,
+ 0
+ );
+ } else {
+ warn$1(
+ "Invalid Teleport target on update:",
+ target,
+ `(${typeof target})`
+ );
+ }
+ } else if (wasDisabled) {
+ moveTeleport(
+ n2,
+ target,
+ targetAnchor,
+ internals,
+ 1
+ );
+ }
+ }
+ updateCssVars(n2, disabled);
+ }
+ },
+ remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {
+ const {
+ shapeFlag,
+ children,
+ anchor,
+ targetStart,
+ targetAnchor,
+ target,
+ props
+ } = vnode;
+ if (target) {
+ hostRemove(targetStart);
+ hostRemove(targetAnchor);
+ }
+ doRemove && hostRemove(anchor);
+ if (shapeFlag & 16) {
+ const shouldRemove = doRemove || !isTeleportDisabled(props);
+ for (let i = 0; i < children.length; i++) {
+ const child = children[i];
+ unmount(
+ child,
+ parentComponent,
+ parentSuspense,
+ shouldRemove,
+ !!child.dynamicChildren
+ );
+ }
+ }
+ },
+ move: moveTeleport,
+ hydrate: hydrateTeleport
+ };
+ function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {
+ if (moveType === 0) {
+ insert(vnode.targetAnchor, container, parentAnchor);
+ }
+ const { el, anchor, shapeFlag, children, props } = vnode;
+ const isReorder = moveType === 2;
+ if (isReorder) {
+ insert(el, container, parentAnchor);
+ }
+ if (!isReorder || isTeleportDisabled(props)) {
+ if (shapeFlag & 16) {
+ for (let i = 0; i < children.length; i++) {
+ move(
+ children[i],
+ container,
+ parentAnchor,
+ 2
+ );
+ }
+ }
+ }
+ if (isReorder) {
+ insert(anchor, container, parentAnchor);
+ }
+ }
+ function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {
+ o: { nextSibling, parentNode, querySelector, insert, createText }
+ }, hydrateChildren) {
+ const target = vnode.target = resolveTarget(
+ vnode.props,
+ querySelector
+ );
+ if (target) {
+ const disabled = isTeleportDisabled(vnode.props);
+ const targetNode = target._lpa || target.firstChild;
+ if (vnode.shapeFlag & 16) {
+ if (disabled) {
+ vnode.anchor = hydrateChildren(
+ nextSibling(node),
+ vnode,
+ parentNode(node),
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ vnode.targetStart = targetNode;
+ vnode.targetAnchor = targetNode && nextSibling(targetNode);
+ } else {
+ vnode.anchor = nextSibling(node);
+ let targetAnchor = targetNode;
+ while (targetAnchor) {
+ if (targetAnchor && targetAnchor.nodeType === 8) {
+ if (targetAnchor.data === "teleport start anchor") {
+ vnode.targetStart = targetAnchor;
+ } else if (targetAnchor.data === "teleport anchor") {
+ vnode.targetAnchor = targetAnchor;
+ target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);
+ break;
+ }
+ }
+ targetAnchor = nextSibling(targetAnchor);
+ }
+ if (!vnode.targetAnchor) {
+ prepareAnchor(target, vnode, createText, insert);
+ }
+ hydrateChildren(
+ targetNode && nextSibling(targetNode),
+ vnode,
+ target,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ }
+ }
+ updateCssVars(vnode, disabled);
+ }
+ return vnode.anchor && nextSibling(vnode.anchor);
+ }
+ const Teleport = TeleportImpl;
+ function updateCssVars(vnode, isDisabled) {
+ const ctx = vnode.ctx;
+ if (ctx && ctx.ut) {
+ let node, anchor;
+ if (isDisabled) {
+ node = vnode.el;
+ anchor = vnode.anchor;
+ } else {
+ node = vnode.targetStart;
+ anchor = vnode.targetAnchor;
+ }
+ while (node && node !== anchor) {
+ if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx.uid);
+ node = node.nextSibling;
+ }
+ ctx.ut();
+ }
+ }
+ function prepareAnchor(target, vnode, createText, insert) {
+ const targetStart = vnode.targetStart = createText("");
+ const targetAnchor = vnode.targetAnchor = createText("");
+ targetStart[TeleportEndKey] = targetAnchor;
+ if (target) {
+ insert(targetStart, target);
+ insert(targetAnchor, target);
+ }
+ return targetAnchor;
+ }
+
+ const leaveCbKey = Symbol("_leaveCb");
+ const enterCbKey$1 = Symbol("_enterCb");
+ function useTransitionState() {
+ const state = {
+ isMounted: false,
+ isLeaving: false,
+ isUnmounting: false,
+ leavingVNodes: /* @__PURE__ */ new Map()
+ };
+ onMounted(() => {
+ state.isMounted = true;
+ });
+ onBeforeUnmount(() => {
+ state.isUnmounting = true;
+ });
+ return state;
+ }
+ const TransitionHookValidator = [Function, Array];
+ const BaseTransitionPropsValidators = {
+ mode: String,
+ appear: Boolean,
+ persisted: Boolean,
+ // enter
+ onBeforeEnter: TransitionHookValidator,
+ onEnter: TransitionHookValidator,
+ onAfterEnter: TransitionHookValidator,
+ onEnterCancelled: TransitionHookValidator,
+ // leave
+ onBeforeLeave: TransitionHookValidator,
+ onLeave: TransitionHookValidator,
+ onAfterLeave: TransitionHookValidator,
+ onLeaveCancelled: TransitionHookValidator,
+ // appear
+ onBeforeAppear: TransitionHookValidator,
+ onAppear: TransitionHookValidator,
+ onAfterAppear: TransitionHookValidator,
+ onAppearCancelled: TransitionHookValidator
+ };
+ const recursiveGetSubtree = (instance) => {
+ const subTree = instance.subTree;
+ return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;
+ };
+ const BaseTransitionImpl = {
+ name: `BaseTransition`,
+ props: BaseTransitionPropsValidators,
+ setup(props, { slots }) {
+ const instance = getCurrentInstance();
+ const state = useTransitionState();
+ return () => {
+ const children = slots.default && getTransitionRawChildren(slots.default(), true);
+ if (!children || !children.length) {
+ return;
+ }
+ const child = findNonCommentChild(children);
+ const rawProps = toRaw(props);
+ const { mode } = rawProps;
+ if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") {
+ warn$1(`invalid mode: ${mode}`);
+ }
+ if (state.isLeaving) {
+ return emptyPlaceholder(child);
+ }
+ const innerChild = getInnerChild$1(child);
+ if (!innerChild) {
+ return emptyPlaceholder(child);
+ }
+ let enterHooks = resolveTransitionHooks(
+ innerChild,
+ rawProps,
+ state,
+ instance,
+ // #11061, ensure enterHooks is fresh after clone
+ (hooks) => enterHooks = hooks
+ );
+ if (innerChild.type !== Comment) {
+ setTransitionHooks(innerChild, enterHooks);
+ }
+ let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);
+ if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) {
+ let leavingHooks = resolveTransitionHooks(
+ oldInnerChild,
+ rawProps,
+ state,
+ instance
+ );
+ setTransitionHooks(oldInnerChild, leavingHooks);
+ if (mode === "out-in" && innerChild.type !== Comment) {
+ state.isLeaving = true;
+ leavingHooks.afterLeave = () => {
+ state.isLeaving = false;
+ if (!(instance.job.flags & 8)) {
+ instance.update();
+ }
+ delete leavingHooks.afterLeave;
+ oldInnerChild = void 0;
+ };
+ return emptyPlaceholder(child);
+ } else if (mode === "in-out" && innerChild.type !== Comment) {
+ leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {
+ const leavingVNodesCache = getLeavingNodesForType(
+ state,
+ oldInnerChild
+ );
+ leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;
+ el[leaveCbKey] = () => {
+ earlyRemove();
+ el[leaveCbKey] = void 0;
+ delete enterHooks.delayedLeave;
+ oldInnerChild = void 0;
+ };
+ enterHooks.delayedLeave = () => {
+ delayedLeave();
+ delete enterHooks.delayedLeave;
+ oldInnerChild = void 0;
+ };
+ };
+ } else {
+ oldInnerChild = void 0;
+ }
+ } else if (oldInnerChild) {
+ oldInnerChild = void 0;
+ }
+ return child;
+ };
+ }
+ };
+ function findNonCommentChild(children) {
+ let child = children[0];
+ if (children.length > 1) {
+ let hasFound = false;
+ for (const c of children) {
+ if (c.type !== Comment) {
+ if (hasFound) {
+ warn$1(
+ " can only be used on a single element or component. Use for lists."
+ );
+ break;
+ }
+ child = c;
+ hasFound = true;
+ }
+ }
+ }
+ return child;
+ }
+ const BaseTransition = BaseTransitionImpl;
+ function getLeavingNodesForType(state, vnode) {
+ const { leavingVNodes } = state;
+ let leavingVNodesCache = leavingVNodes.get(vnode.type);
+ if (!leavingVNodesCache) {
+ leavingVNodesCache = /* @__PURE__ */ Object.create(null);
+ leavingVNodes.set(vnode.type, leavingVNodesCache);
+ }
+ return leavingVNodesCache;
+ }
+ function resolveTransitionHooks(vnode, props, state, instance, postClone) {
+ const {
+ appear,
+ mode,
+ persisted = false,
+ onBeforeEnter,
+ onEnter,
+ onAfterEnter,
+ onEnterCancelled,
+ onBeforeLeave,
+ onLeave,
+ onAfterLeave,
+ onLeaveCancelled,
+ onBeforeAppear,
+ onAppear,
+ onAfterAppear,
+ onAppearCancelled
+ } = props;
+ const key = String(vnode.key);
+ const leavingVNodesCache = getLeavingNodesForType(state, vnode);
+ const callHook = (hook, args) => {
+ hook && callWithAsyncErrorHandling(
+ hook,
+ instance,
+ 9,
+ args
+ );
+ };
+ const callAsyncHook = (hook, args) => {
+ const done = args[1];
+ callHook(hook, args);
+ if (isArray(hook)) {
+ if (hook.every((hook2) => hook2.length <= 1)) done();
+ } else if (hook.length <= 1) {
+ done();
+ }
+ };
+ const hooks = {
+ mode,
+ persisted,
+ beforeEnter(el) {
+ let hook = onBeforeEnter;
+ if (!state.isMounted) {
+ if (appear) {
+ hook = onBeforeAppear || onBeforeEnter;
+ } else {
+ return;
+ }
+ }
+ if (el[leaveCbKey]) {
+ el[leaveCbKey](
+ true
+ /* cancelled */
+ );
+ }
+ const leavingVNode = leavingVNodesCache[key];
+ if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {
+ leavingVNode.el[leaveCbKey]();
+ }
+ callHook(hook, [el]);
+ },
+ enter(el) {
+ let hook = onEnter;
+ let afterHook = onAfterEnter;
+ let cancelHook = onEnterCancelled;
+ if (!state.isMounted) {
+ if (appear) {
+ hook = onAppear || onEnter;
+ afterHook = onAfterAppear || onAfterEnter;
+ cancelHook = onAppearCancelled || onEnterCancelled;
+ } else {
+ return;
+ }
+ }
+ let called = false;
+ const done = el[enterCbKey$1] = (cancelled) => {
+ if (called) return;
+ called = true;
+ if (cancelled) {
+ callHook(cancelHook, [el]);
+ } else {
+ callHook(afterHook, [el]);
+ }
+ if (hooks.delayedLeave) {
+ hooks.delayedLeave();
+ }
+ el[enterCbKey$1] = void 0;
+ };
+ if (hook) {
+ callAsyncHook(hook, [el, done]);
+ } else {
+ done();
+ }
+ },
+ leave(el, remove) {
+ const key2 = String(vnode.key);
+ if (el[enterCbKey$1]) {
+ el[enterCbKey$1](
+ true
+ /* cancelled */
+ );
+ }
+ if (state.isUnmounting) {
+ return remove();
+ }
+ callHook(onBeforeLeave, [el]);
+ let called = false;
+ const done = el[leaveCbKey] = (cancelled) => {
+ if (called) return;
+ called = true;
+ remove();
+ if (cancelled) {
+ callHook(onLeaveCancelled, [el]);
+ } else {
+ callHook(onAfterLeave, [el]);
+ }
+ el[leaveCbKey] = void 0;
+ if (leavingVNodesCache[key2] === vnode) {
+ delete leavingVNodesCache[key2];
+ }
+ };
+ leavingVNodesCache[key2] = vnode;
+ if (onLeave) {
+ callAsyncHook(onLeave, [el, done]);
+ } else {
+ done();
+ }
+ },
+ clone(vnode2) {
+ const hooks2 = resolveTransitionHooks(
+ vnode2,
+ props,
+ state,
+ instance,
+ postClone
+ );
+ if (postClone) postClone(hooks2);
+ return hooks2;
+ }
+ };
+ return hooks;
+ }
+ function emptyPlaceholder(vnode) {
+ if (isKeepAlive(vnode)) {
+ vnode = cloneVNode(vnode);
+ vnode.children = null;
+ return vnode;
+ }
+ }
+ function getInnerChild$1(vnode) {
+ if (!isKeepAlive(vnode)) {
+ if (isTeleport(vnode.type) && vnode.children) {
+ return findNonCommentChild(vnode.children);
+ }
+ return vnode;
+ }
+ if (vnode.component) {
+ return vnode.component.subTree;
+ }
+ const { shapeFlag, children } = vnode;
+ if (children) {
+ if (shapeFlag & 16) {
+ return children[0];
+ }
+ if (shapeFlag & 32 && isFunction(children.default)) {
+ return children.default();
+ }
+ }
+ }
+ function setTransitionHooks(vnode, hooks) {
+ if (vnode.shapeFlag & 6 && vnode.component) {
+ vnode.transition = hooks;
+ setTransitionHooks(vnode.component.subTree, hooks);
+ } else if (vnode.shapeFlag & 128) {
+ vnode.ssContent.transition = hooks.clone(vnode.ssContent);
+ vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);
+ } else {
+ vnode.transition = hooks;
+ }
+ }
+ function getTransitionRawChildren(children, keepComment = false, parentKey) {
+ let ret = [];
+ let keyedFragmentCount = 0;
+ for (let i = 0; i < children.length; i++) {
+ let child = children[i];
+ const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);
+ if (child.type === Fragment) {
+ if (child.patchFlag & 128) keyedFragmentCount++;
+ ret = ret.concat(
+ getTransitionRawChildren(child.children, keepComment, key)
+ );
+ } else if (keepComment || child.type !== Comment) {
+ ret.push(key != null ? cloneVNode(child, { key }) : child);
+ }
+ }
+ if (keyedFragmentCount > 1) {
+ for (let i = 0; i < ret.length; i++) {
+ ret[i].patchFlag = -2;
+ }
+ }
+ return ret;
+ }
+
+ /*! #__NO_SIDE_EFFECTS__ */
+ // @__NO_SIDE_EFFECTS__
+ function defineComponent(options, extraOptions) {
+ return isFunction(options) ? (
+ // #8236: extend call and options.name access are considered side-effects
+ // by Rollup, so we have to wrap it in a pure-annotated IIFE.
+ /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()
+ ) : options;
+ }
+
+ function useId() {
+ const i = getCurrentInstance();
+ if (i) {
+ return (i.appContext.config.idPrefix || "v") + "-" + i.ids[0] + i.ids[1]++;
+ } else {
+ warn$1(
+ `useId() is called when there is no active component instance to be associated with.`
+ );
+ }
+ return "";
+ }
+ function markAsyncBoundary(instance) {
+ instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0];
+ }
+
+ const knownTemplateRefs = /* @__PURE__ */ new WeakSet();
+ function useTemplateRef(key) {
+ const i = getCurrentInstance();
+ const r = shallowRef(null);
+ if (i) {
+ const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;
+ let desc;
+ if ((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) {
+ warn$1(`useTemplateRef('${key}') already exists.`);
+ } else {
+ Object.defineProperty(refs, key, {
+ enumerable: true,
+ get: () => r.value,
+ set: (val) => r.value = val
+ });
+ }
+ } else {
+ warn$1(
+ `useTemplateRef() is called when there is no active component instance to be associated with.`
+ );
+ }
+ const ret = readonly(r) ;
+ {
+ knownTemplateRefs.add(ret);
+ }
+ return ret;
+ }
+
+ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
+ if (isArray(rawRef)) {
+ rawRef.forEach(
+ (r, i) => setRef(
+ r,
+ oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),
+ parentSuspense,
+ vnode,
+ isUnmount
+ )
+ );
+ return;
+ }
+ if (isAsyncWrapper(vnode) && !isUnmount) {
+ if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {
+ setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);
+ }
+ return;
+ }
+ const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;
+ const value = isUnmount ? null : refValue;
+ const { i: owner, r: ref } = rawRef;
+ if (!owner) {
+ warn$1(
+ `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`
+ );
+ return;
+ }
+ const oldRef = oldRawRef && oldRawRef.r;
+ const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;
+ const setupState = owner.setupState;
+ const rawSetupState = toRaw(setupState);
+ const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => {
+ {
+ if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {
+ warn$1(
+ `Template ref "${key}" used on a non-ref value. It will not work in the production build.`
+ );
+ }
+ if (knownTemplateRefs.has(rawSetupState[key])) {
+ return false;
+ }
+ }
+ return hasOwn(rawSetupState, key);
+ };
+ if (oldRef != null && oldRef !== ref) {
+ if (isString(oldRef)) {
+ refs[oldRef] = null;
+ if (canSetSetupRef(oldRef)) {
+ setupState[oldRef] = null;
+ }
+ } else if (isRef(oldRef)) {
+ oldRef.value = null;
+ }
+ }
+ if (isFunction(ref)) {
+ callWithErrorHandling(ref, owner, 12, [value, refs]);
+ } else {
+ const _isString = isString(ref);
+ const _isRef = isRef(ref);
+ if (_isString || _isRef) {
+ const doSet = () => {
+ if (rawRef.f) {
+ const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value;
+ if (isUnmount) {
+ isArray(existing) && remove(existing, refValue);
+ } else {
+ if (!isArray(existing)) {
+ if (_isString) {
+ refs[ref] = [refValue];
+ if (canSetSetupRef(ref)) {
+ setupState[ref] = refs[ref];
+ }
+ } else {
+ ref.value = [refValue];
+ if (rawRef.k) refs[rawRef.k] = ref.value;
+ }
+ } else if (!existing.includes(refValue)) {
+ existing.push(refValue);
+ }
+ }
+ } else if (_isString) {
+ refs[ref] = value;
+ if (canSetSetupRef(ref)) {
+ setupState[ref] = value;
+ }
+ } else if (_isRef) {
+ ref.value = value;
+ if (rawRef.k) refs[rawRef.k] = value;
+ } else {
+ warn$1("Invalid template ref type:", ref, `(${typeof ref})`);
+ }
+ };
+ if (value) {
+ doSet.id = -1;
+ queuePostRenderEffect(doSet, parentSuspense);
+ } else {
+ doSet();
+ }
+ } else {
+ warn$1("Invalid template ref type:", ref, `(${typeof ref})`);
+ }
+ }
+ }
+
+ let hasLoggedMismatchError = false;
+ const logMismatchError = () => {
+ if (hasLoggedMismatchError) {
+ return;
+ }
+ console.error("Hydration completed but contains mismatches.");
+ hasLoggedMismatchError = true;
+ };
+ const isSVGContainer = (container) => container.namespaceURI.includes("svg") && container.tagName !== "foreignObject";
+ const isMathMLContainer = (container) => container.namespaceURI.includes("MathML");
+ const getContainerType = (container) => {
+ if (container.nodeType !== 1) return void 0;
+ if (isSVGContainer(container)) return "svg";
+ if (isMathMLContainer(container)) return "mathml";
+ return void 0;
+ };
+ const isComment = (node) => node.nodeType === 8;
+ function createHydrationFunctions(rendererInternals) {
+ const {
+ mt: mountComponent,
+ p: patch,
+ o: {
+ patchProp,
+ createText,
+ nextSibling,
+ parentNode,
+ remove,
+ insert,
+ createComment
+ }
+ } = rendererInternals;
+ const hydrate = (vnode, container) => {
+ if (!container.hasChildNodes()) {
+ warn$1(
+ `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`
+ );
+ patch(null, vnode, container);
+ flushPostFlushCbs();
+ container._vnode = vnode;
+ return;
+ }
+ hydrateNode(container.firstChild, vnode, null, null, null);
+ flushPostFlushCbs();
+ container._vnode = vnode;
+ };
+ const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {
+ optimized = optimized || !!vnode.dynamicChildren;
+ const isFragmentStart = isComment(node) && node.data === "[";
+ const onMismatch = () => handleMismatch(
+ node,
+ vnode,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ isFragmentStart
+ );
+ const { type, ref, shapeFlag, patchFlag } = vnode;
+ let domType = node.nodeType;
+ vnode.el = node;
+ {
+ def(node, "__vnode", vnode, true);
+ def(node, "__vueParentComponent", parentComponent, true);
+ }
+ if (patchFlag === -2) {
+ optimized = false;
+ vnode.dynamicChildren = null;
+ }
+ let nextNode = null;
+ switch (type) {
+ case Text:
+ if (domType !== 3) {
+ if (vnode.children === "") {
+ insert(vnode.el = createText(""), parentNode(node), node);
+ nextNode = node;
+ } else {
+ nextNode = onMismatch();
+ }
+ } else {
+ if (node.data !== vnode.children) {
+ warn$1(
+ `Hydration text mismatch in`,
+ node.parentNode,
+ `
+ - rendered on server: ${JSON.stringify(
+ node.data
+ )}
+ - expected on client: ${JSON.stringify(vnode.children)}`
+ );
+ logMismatchError();
+ node.data = vnode.children;
+ }
+ nextNode = nextSibling(node);
+ }
+ break;
+ case Comment:
+ if (isTemplateNode(node)) {
+ nextNode = nextSibling(node);
+ replaceNode(
+ vnode.el = node.content.firstChild,
+ node,
+ parentComponent
+ );
+ } else if (domType !== 8 || isFragmentStart) {
+ nextNode = onMismatch();
+ } else {
+ nextNode = nextSibling(node);
+ }
+ break;
+ case Static:
+ if (isFragmentStart) {
+ node = nextSibling(node);
+ domType = node.nodeType;
+ }
+ if (domType === 1 || domType === 3) {
+ nextNode = node;
+ const needToAdoptContent = !vnode.children.length;
+ for (let i = 0; i < vnode.staticCount; i++) {
+ if (needToAdoptContent)
+ vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;
+ if (i === vnode.staticCount - 1) {
+ vnode.anchor = nextNode;
+ }
+ nextNode = nextSibling(nextNode);
+ }
+ return isFragmentStart ? nextSibling(nextNode) : nextNode;
+ } else {
+ onMismatch();
+ }
+ break;
+ case Fragment:
+ if (!isFragmentStart) {
+ nextNode = onMismatch();
+ } else {
+ nextNode = hydrateFragment(
+ node,
+ vnode,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ }
+ break;
+ default:
+ if (shapeFlag & 1) {
+ if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {
+ nextNode = onMismatch();
+ } else {
+ nextNode = hydrateElement(
+ node,
+ vnode,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ }
+ } else if (shapeFlag & 6) {
+ vnode.slotScopeIds = slotScopeIds;
+ const container = parentNode(node);
+ if (isFragmentStart) {
+ nextNode = locateClosingAnchor(node);
+ } else if (isComment(node) && node.data === "teleport start") {
+ nextNode = locateClosingAnchor(node, node.data, "teleport end");
+ } else {
+ nextNode = nextSibling(node);
+ }
+ mountComponent(
+ vnode,
+ container,
+ null,
+ parentComponent,
+ parentSuspense,
+ getContainerType(container),
+ optimized
+ );
+ if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {
+ let subTree;
+ if (isFragmentStart) {
+ subTree = createVNode(Fragment);
+ subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;
+ } else {
+ subTree = node.nodeType === 3 ? createTextVNode("") : createVNode("div");
+ }
+ subTree.el = node;
+ vnode.component.subTree = subTree;
+ }
+ } else if (shapeFlag & 64) {
+ if (domType !== 8) {
+ nextNode = onMismatch();
+ } else {
+ nextNode = vnode.type.hydrate(
+ node,
+ vnode,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized,
+ rendererInternals,
+ hydrateChildren
+ );
+ }
+ } else if (shapeFlag & 128) {
+ nextNode = vnode.type.hydrate(
+ node,
+ vnode,
+ parentComponent,
+ parentSuspense,
+ getContainerType(parentNode(node)),
+ slotScopeIds,
+ optimized,
+ rendererInternals,
+ hydrateNode
+ );
+ } else {
+ warn$1("Invalid HostVNode type:", type, `(${typeof type})`);
+ }
+ }
+ if (ref != null) {
+ setRef(ref, null, parentSuspense, vnode);
+ }
+ return nextNode;
+ };
+ const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {
+ optimized = optimized || !!vnode.dynamicChildren;
+ const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;
+ const forcePatch = type === "input" || type === "option";
+ {
+ if (dirs) {
+ invokeDirectiveHook(vnode, null, parentComponent, "created");
+ }
+ let needCallTransitionHooks = false;
+ if (isTemplateNode(el)) {
+ needCallTransitionHooks = needTransition(
+ null,
+ // no need check parentSuspense in hydration
+ transition
+ ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;
+ const content = el.content.firstChild;
+ if (needCallTransitionHooks) {
+ const cls = content.getAttribute("class");
+ if (cls) content.$cls = cls;
+ transition.beforeEnter(content);
+ }
+ replaceNode(content, el, parentComponent);
+ vnode.el = el = content;
+ }
+ if (shapeFlag & 16 && // skip if element has innerHTML / textContent
+ !(props && (props.innerHTML || props.textContent))) {
+ let next = hydrateChildren(
+ el.firstChild,
+ vnode,
+ el,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ let hasWarned = false;
+ while (next) {
+ if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {
+ if (!hasWarned) {
+ warn$1(
+ `Hydration children mismatch on`,
+ el,
+ `
+Server rendered element contains more child nodes than client vdom.`
+ );
+ hasWarned = true;
+ }
+ logMismatchError();
+ }
+ const cur = next;
+ next = next.nextSibling;
+ remove(cur);
+ }
+ } else if (shapeFlag & 8) {
+ let clientText = vnode.children;
+ if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) {
+ clientText = clientText.slice(1);
+ }
+ if (el.textContent !== clientText) {
+ if (!isMismatchAllowed(el, 0 /* TEXT */)) {
+ warn$1(
+ `Hydration text content mismatch on`,
+ el,
+ `
+ - rendered on server: ${el.textContent}
+ - expected on client: ${vnode.children}`
+ );
+ logMismatchError();
+ }
+ el.textContent = vnode.children;
+ }
+ }
+ if (props) {
+ {
+ const isCustomElement = el.tagName.includes("-");
+ for (const key in props) {
+ if (// #11189 skip if this node has directives that have created hooks
+ // as it could have mutated the DOM in any possible way
+ !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {
+ logMismatchError();
+ }
+ if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers
+ key[0] === "." || isCustomElement) {
+ patchProp(el, key, null, props[key], void 0, parentComponent);
+ }
+ }
+ }
+ }
+ let vnodeHooks;
+ if (vnodeHooks = props && props.onVnodeBeforeMount) {
+ invokeVNodeHook(vnodeHooks, parentComponent, vnode);
+ }
+ if (dirs) {
+ invokeDirectiveHook(vnode, null, parentComponent, "beforeMount");
+ }
+ if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {
+ queueEffectWithSuspense(() => {
+ vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);
+ needCallTransitionHooks && transition.enter(el);
+ dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted");
+ }, parentSuspense);
+ }
+ }
+ return el.nextSibling;
+ };
+ const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {
+ optimized = optimized || !!parentVNode.dynamicChildren;
+ const children = parentVNode.children;
+ const l = children.length;
+ let hasWarned = false;
+ for (let i = 0; i < l; i++) {
+ const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);
+ const isText = vnode.type === Text;
+ if (node) {
+ if (isText && !optimized) {
+ if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {
+ insert(
+ createText(
+ node.data.slice(vnode.children.length)
+ ),
+ container,
+ nextSibling(node)
+ );
+ node.data = vnode.children;
+ }
+ }
+ node = hydrateNode(
+ node,
+ vnode,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ } else if (isText && !vnode.children) {
+ insert(vnode.el = createText(""), container);
+ } else {
+ if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {
+ if (!hasWarned) {
+ warn$1(
+ `Hydration children mismatch on`,
+ container,
+ `
+Server rendered element contains fewer child nodes than client vdom.`
+ );
+ hasWarned = true;
+ }
+ logMismatchError();
+ }
+ patch(
+ null,
+ vnode,
+ container,
+ null,
+ parentComponent,
+ parentSuspense,
+ getContainerType(container),
+ slotScopeIds
+ );
+ }
+ }
+ return node;
+ };
+ const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {
+ const { slotScopeIds: fragmentSlotScopeIds } = vnode;
+ if (fragmentSlotScopeIds) {
+ slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;
+ }
+ const container = parentNode(node);
+ const next = hydrateChildren(
+ nextSibling(node),
+ vnode,
+ container,
+ parentComponent,
+ parentSuspense,
+ slotScopeIds,
+ optimized
+ );
+ if (next && isComment(next) && next.data === "]") {
+ return nextSibling(vnode.anchor = next);
+ } else {
+ logMismatchError();
+ insert(vnode.anchor = createComment(`]`), container, next);
+ return next;
+ }
+ };
+ const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {
+ if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {
+ warn$1(
+ `Hydration node mismatch:
+- rendered on server:`,
+ node,
+ node.nodeType === 3 ? `(text)` : isComment(node) && node.data === "[" ? `(start of fragment)` : ``,
+ `
+- expected on client:`,
+ vnode.type
+ );
+ logMismatchError();
+ }
+ vnode.el = null;
+ if (isFragment) {
+ const end = locateClosingAnchor(node);
+ while (true) {
+ const next2 = nextSibling(node);
+ if (next2 && next2 !== end) {
+ remove(next2);
+ } else {
+ break;
+ }
+ }
+ }
+ const next = nextSibling(node);
+ const container = parentNode(node);
+ remove(node);
+ patch(
+ null,
+ vnode,
+ container,
+ next,
+ parentComponent,
+ parentSuspense,
+ getContainerType(container),
+ slotScopeIds
+ );
+ if (parentComponent) {
+ parentComponent.vnode.el = vnode.el;
+ updateHOCHostEl(parentComponent, vnode.el);
+ }
+ return next;
+ };
+ const locateClosingAnchor = (node, open = "[", close = "]") => {
+ let match = 0;
+ while (node) {
+ node = nextSibling(node);
+ if (node && isComment(node)) {
+ if (node.data === open) match++;
+ if (node.data === close) {
+ if (match === 0) {
+ return nextSibling(node);
+ } else {
+ match--;
+ }
+ }
+ }
+ }
+ return node;
+ };
+ const replaceNode = (newNode, oldNode, parentComponent) => {
+ const parentNode2 = oldNode.parentNode;
+ if (parentNode2) {
+ parentNode2.replaceChild(newNode, oldNode);
+ }
+ let parent = parentComponent;
+ while (parent) {
+ if (parent.vnode.el === oldNode) {
+ parent.vnode.el = parent.subTree.el = newNode;
+ }
+ parent = parent.parent;
+ }
+ };
+ const isTemplateNode = (node) => {
+ return node.nodeType === 1 && node.tagName === "TEMPLATE";
+ };
+ return [hydrate, hydrateNode];
+ }
+ function propHasMismatch(el, key, clientValue, vnode, instance) {
+ let mismatchType;
+ let mismatchKey;
+ let actual;
+ let expected;
+ if (key === "class") {
+ if (el.$cls) {
+ actual = el.$cls;
+ delete el.$cls;
+ } else {
+ actual = el.getAttribute("class");
+ }
+ expected = normalizeClass(clientValue);
+ if (!isSetEqual(toClassSet(actual || ""), toClassSet(expected))) {
+ mismatchType = 2 /* CLASS */;
+ mismatchKey = `class`;
+ }
+ } else if (key === "style") {
+ actual = el.getAttribute("style") || "";
+ expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));
+ const actualMap = toStyleMap(actual);
+ const expectedMap = toStyleMap(expected);
+ if (vnode.dirs) {
+ for (const { dir, value } of vnode.dirs) {
+ if (dir.name === "show" && !value) {
+ expectedMap.set("display", "none");
+ }
+ }
+ }
+ if (instance) {
+ resolveCssVars(instance, vnode, expectedMap);
+ }
+ if (!isMapEqual(actualMap, expectedMap)) {
+ mismatchType = 3 /* STYLE */;
+ mismatchKey = "style";
+ }
+ } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {
+ if (isBooleanAttr(key)) {
+ actual = el.hasAttribute(key);
+ expected = includeBooleanAttr(clientValue);
+ } else if (clientValue == null) {
+ actual = el.hasAttribute(key);
+ expected = false;
+ } else {
+ if (el.hasAttribute(key)) {
+ actual = el.getAttribute(key);
+ } else if (key === "value" && el.tagName === "TEXTAREA") {
+ actual = el.value;
+ } else {
+ actual = false;
+ }
+ expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;
+ }
+ if (actual !== expected) {
+ mismatchType = 4 /* ATTRIBUTE */;
+ mismatchKey = key;
+ }
+ }
+ if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {
+ const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}="${v}"`;
+ const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;
+ const postSegment = `
+ - rendered on server: ${format(actual)}
+ - expected on client: ${format(expected)}
+ Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.
+ You should fix the source of the mismatch.`;
+ {
+ warn$1(preSegment, el, postSegment);
+ }
+ return true;
+ }
+ return false;
+ }
+ function toClassSet(str) {
+ return new Set(str.trim().split(/\s+/));
+ }
+ function isSetEqual(a, b) {
+ if (a.size !== b.size) {
+ return false;
+ }
+ for (const s of a) {
+ if (!b.has(s)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function toStyleMap(str) {
+ const styleMap = /* @__PURE__ */ new Map();
+ for (const item of str.split(";")) {
+ let [key, value] = item.split(":");
+ key = key.trim();
+ value = value && value.trim();
+ if (key && value) {
+ styleMap.set(key, value);
+ }
+ }
+ return styleMap;
+ }
+ function isMapEqual(a, b) {
+ if (a.size !== b.size) {
+ return false;
+ }
+ for (const [key, value] of a) {
+ if (value !== b.get(key)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function resolveCssVars(instance, vnode, expectedMap) {
+ const root = instance.subTree;
+ if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {
+ const cssVars = instance.getCssVars();
+ for (const key in cssVars) {
+ expectedMap.set(
+ `--${getEscapedCssVarName(key)}`,
+ String(cssVars[key])
+ );
+ }
+ }
+ if (vnode === root && instance.parent) {
+ resolveCssVars(instance.parent, instance.vnode, expectedMap);
+ }
+ }
+ const allowMismatchAttr = "data-allow-mismatch";
+ const MismatchTypeString = {
+ [0 /* TEXT */]: "text",
+ [1 /* CHILDREN */]: "children",
+ [2 /* CLASS */]: "class",
+ [3 /* STYLE */]: "style",
+ [4 /* ATTRIBUTE */]: "attribute"
+ };
+ function isMismatchAllowed(el, allowedType) {
+ if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {
+ while (el && !el.hasAttribute(allowMismatchAttr)) {
+ el = el.parentElement;
+ }
+ }
+ const allowedAttr = el && el.getAttribute(allowMismatchAttr);
+ if (allowedAttr == null) {
+ return false;
+ } else if (allowedAttr === "") {
+ return true;
+ } else {
+ const list = allowedAttr.split(",");
+ if (allowedType === 0 /* TEXT */ && list.includes("children")) {
+ return true;
+ }
+ return list.includes(MismatchTypeString[allowedType]);
+ }
+ }
+
+ const requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));
+ const cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));
+ const hydrateOnIdle = (timeout = 1e4) => (hydrate) => {
+ const id = requestIdleCallback(hydrate, { timeout });
+ return () => cancelIdleCallback(id);
+ };
+ function elementIsVisibleInViewport(el) {
+ const { top, left, bottom, right } = el.getBoundingClientRect();
+ const { innerHeight, innerWidth } = window;
+ return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);
+ }
+ const hydrateOnVisible = (opts) => (hydrate, forEach) => {
+ const ob = new IntersectionObserver((entries) => {
+ for (const e of entries) {
+ if (!e.isIntersecting) continue;
+ ob.disconnect();
+ hydrate();
+ break;
+ }
+ }, opts);
+ forEach((el) => {
+ if (!(el instanceof Element)) return;
+ if (elementIsVisibleInViewport(el)) {
+ hydrate();
+ ob.disconnect();
+ return false;
+ }
+ ob.observe(el);
+ });
+ return () => ob.disconnect();
+ };
+ const hydrateOnMediaQuery = (query) => (hydrate) => {
+ if (query) {
+ const mql = matchMedia(query);
+ if (mql.matches) {
+ hydrate();
+ } else {
+ mql.addEventListener("change", hydrate, { once: true });
+ return () => mql.removeEventListener("change", hydrate);
+ }
+ }
+ };
+ const hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {
+ if (isString(interactions)) interactions = [interactions];
+ let hasHydrated = false;
+ const doHydrate = (e) => {
+ if (!hasHydrated) {
+ hasHydrated = true;
+ teardown();
+ hydrate();
+ e.target.dispatchEvent(new e.constructor(e.type, e));
+ }
+ };
+ const teardown = () => {
+ forEach((el) => {
+ for (const i of interactions) {
+ el.removeEventListener(i, doHydrate);
+ }
+ });
+ };
+ forEach((el) => {
+ for (const i of interactions) {
+ el.addEventListener(i, doHydrate, { once: true });
+ }
+ });
+ return teardown;
+ };
+ function forEachElement(node, cb) {
+ if (isComment(node) && node.data === "[") {
+ let depth = 1;
+ let next = node.nextSibling;
+ while (next) {
+ if (next.nodeType === 1) {
+ const result = cb(next);
+ if (result === false) {
+ break;
+ }
+ } else if (isComment(next)) {
+ if (next.data === "]") {
+ if (--depth === 0) break;
+ } else if (next.data === "[") {
+ depth++;
+ }
+ }
+ next = next.nextSibling;
+ }
+ } else {
+ cb(node);
+ }
+ }
+
+ const isAsyncWrapper = (i) => !!i.type.__asyncLoader;
+ /*! #__NO_SIDE_EFFECTS__ */
+ // @__NO_SIDE_EFFECTS__
+ function defineAsyncComponent(source) {
+ if (isFunction(source)) {
+ source = { loader: source };
+ }
+ const {
+ loader,
+ loadingComponent,
+ errorComponent,
+ delay = 200,
+ hydrate: hydrateStrategy,
+ timeout,
+ // undefined = never times out
+ suspensible = true,
+ onError: userOnError
+ } = source;
+ let pendingRequest = null;
+ let resolvedComp;
+ let retries = 0;
+ const retry = () => {
+ retries++;
+ pendingRequest = null;
+ return load();
+ };
+ const load = () => {
+ let thisRequest;
+ return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {
+ err = err instanceof Error ? err : new Error(String(err));
+ if (userOnError) {
+ return new Promise((resolve, reject) => {
+ const userRetry = () => resolve(retry());
+ const userFail = () => reject(err);
+ userOnError(err, userRetry, userFail, retries + 1);
+ });
+ } else {
+ throw err;
+ }
+ }).then((comp) => {
+ if (thisRequest !== pendingRequest && pendingRequest) {
+ return pendingRequest;
+ }
+ if (!comp) {
+ warn$1(
+ `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`
+ );
+ }
+ if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) {
+ comp = comp.default;
+ }
+ if (comp && !isObject(comp) && !isFunction(comp)) {
+ throw new Error(`Invalid async component load result: ${comp}`);
+ }
+ resolvedComp = comp;
+ return comp;
+ }));
+ };
+ return defineComponent({
+ name: "AsyncComponentWrapper",
+ __asyncLoader: load,
+ __asyncHydrate(el, instance, hydrate) {
+ let patched = false;
+ const doHydrate = hydrateStrategy ? () => {
+ const performHydrate = () => {
+ if (patched) {
+ warn$1(
+ `Skipping lazy hydration for component '${getComponentName(resolvedComp)}': it was updated before lazy hydration performed.`
+ );
+ return;
+ }
+ hydrate();
+ };
+ const teardown = hydrateStrategy(
+ performHydrate,
+ (cb) => forEachElement(el, cb)
+ );
+ if (teardown) {
+ (instance.bum || (instance.bum = [])).push(teardown);
+ }
+ (instance.u || (instance.u = [])).push(() => patched = true);
+ } : hydrate;
+ if (resolvedComp) {
+ doHydrate();
+ } else {
+ load().then(() => !instance.isUnmounted && doHydrate());
+ }
+ },
+ get __asyncResolved() {
+ return resolvedComp;
+ },
+ setup() {
+ const instance = currentInstance;
+ markAsyncBoundary(instance);
+ if (resolvedComp) {
+ return () => createInnerComp(resolvedComp, instance);
+ }
+ const onError = (err) => {
+ pendingRequest = null;
+ handleError(
+ err,
+ instance,
+ 13,
+ !errorComponent
+ );
+ };
+ if (suspensible && instance.suspense || false) {
+ return load().then((comp) => {
+ return () => createInnerComp(comp, instance);
+ }).catch((err) => {
+ onError(err);
+ return () => errorComponent ? createVNode(errorComponent, {
+ error: err
+ }) : null;
+ });
+ }
+ const loaded = ref(false);
+ const error = ref();
+ const delayed = ref(!!delay);
+ if (delay) {
+ setTimeout(() => {
+ delayed.value = false;
+ }, delay);
+ }
+ if (timeout != null) {
+ setTimeout(() => {
+ if (!loaded.value && !error.value) {
+ const err = new Error(
+ `Async component timed out after ${timeout}ms.`
+ );
+ onError(err);
+ error.value = err;
+ }
+ }, timeout);
+ }
+ load().then(() => {
+ loaded.value = true;
+ if (instance.parent && isKeepAlive(instance.parent.vnode)) {
+ instance.parent.update();
+ }
+ }).catch((err) => {
+ onError(err);
+ error.value = err;
+ });
+ return () => {
+ if (loaded.value && resolvedComp) {
+ return createInnerComp(resolvedComp, instance);
+ } else if (error.value && errorComponent) {
+ return createVNode(errorComponent, {
+ error: error.value
+ });
+ } else if (loadingComponent && !delayed.value) {
+ return createVNode(loadingComponent);
+ }
+ };
+ }
+ });
+ }
+ function createInnerComp(comp, parent) {
+ const { ref: ref2, props, children, ce } = parent.vnode;
+ const vnode = createVNode(comp, props, children);
+ vnode.ref = ref2;
+ vnode.ce = ce;
+ delete parent.vnode.ce;
+ return vnode;
+ }
+
+ const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
+ const KeepAliveImpl = {
+ name: `KeepAlive`,
+ // Marker for special handling inside the renderer. We are not using a ===
+ // check directly on KeepAlive in the renderer, because importing it directly
+ // would prevent it from being tree-shaken.
+ __isKeepAlive: true,
+ props: {
+ include: [String, RegExp, Array],
+ exclude: [String, RegExp, Array],
+ max: [String, Number]
+ },
+ setup(props, { slots }) {
+ const instance = getCurrentInstance();
+ const sharedContext = instance.ctx;
+ const cache = /* @__PURE__ */ new Map();
+ const keys = /* @__PURE__ */ new Set();
+ let current = null;
+ {
+ instance.__v_cache = cache;
+ }
+ const parentSuspense = instance.suspense;
+ const {
+ renderer: {
+ p: patch,
+ m: move,
+ um: _unmount,
+ o: { createElement }
+ }
+ } = sharedContext;
+ const storageContainer = createElement("div");
+ sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {
+ const instance2 = vnode.component;
+ move(vnode, container, anchor, 0, parentSuspense);
+ patch(
+ instance2.vnode,
+ vnode,
+ container,
+ anchor,
+ instance2,
+ parentSuspense,
+ namespace,
+ vnode.slotScopeIds,
+ optimized
+ );
+ queuePostRenderEffect(() => {
+ instance2.isDeactivated = false;
+ if (instance2.a) {
+ invokeArrayFns(instance2.a);
+ }
+ const vnodeHook = vnode.props && vnode.props.onVnodeMounted;
+ if (vnodeHook) {
+ invokeVNodeHook(vnodeHook, instance2.parent, vnode);
+ }
+ }, parentSuspense);
+ {
+ devtoolsComponentAdded(instance2);
+ }
+ };
+ sharedContext.deactivate = (vnode) => {
+ const instance2 = vnode.component;
+ invalidateMount(instance2.m);
+ invalidateMount(instance2.a);
+ move(vnode, storageContainer, null, 1, parentSuspense);
+ queuePostRenderEffect(() => {
+ if (instance2.da) {
+ invokeArrayFns(instance2.da);
+ }
+ const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;
+ if (vnodeHook) {
+ invokeVNodeHook(vnodeHook, instance2.parent, vnode);
+ }
+ instance2.isDeactivated = true;
+ }, parentSuspense);
+ {
+ devtoolsComponentAdded(instance2);
+ }
+ {
+ instance2.__keepAliveStorageContainer = storageContainer;
+ }
+ };
+ function unmount(vnode) {
+ resetShapeFlag(vnode);
+ _unmount(vnode, instance, parentSuspense, true);
+ }
+ function pruneCache(filter) {
+ cache.forEach((vnode, key) => {
+ const name = getComponentName(vnode.type);
+ if (name && !filter(name)) {
+ pruneCacheEntry(key);
+ }
+ });
+ }
+ function pruneCacheEntry(key) {
+ const cached = cache.get(key);
+ if (cached && (!current || !isSameVNodeType(cached, current))) {
+ unmount(cached);
+ } else if (current) {
+ resetShapeFlag(current);
+ }
+ cache.delete(key);
+ keys.delete(key);
+ }
+ watch(
+ () => [props.include, props.exclude],
+ ([include, exclude]) => {
+ include && pruneCache((name) => matches(include, name));
+ exclude && pruneCache((name) => !matches(exclude, name));
+ },
+ // prune post-render after `current` has been updated
+ { flush: "post", deep: true }
+ );
+ let pendingCacheKey = null;
+ const cacheSubtree = () => {
+ if (pendingCacheKey != null) {
+ if (isSuspense(instance.subTree.type)) {
+ queuePostRenderEffect(() => {
+ cache.set(pendingCacheKey, getInnerChild(instance.subTree));
+ }, instance.subTree.suspense);
+ } else {
+ cache.set(pendingCacheKey, getInnerChild(instance.subTree));
+ }
+ }
+ };
+ onMounted(cacheSubtree);
+ onUpdated(cacheSubtree);
+ onBeforeUnmount(() => {
+ cache.forEach((cached) => {
+ const { subTree, suspense } = instance;
+ const vnode = getInnerChild(subTree);
+ if (cached.type === vnode.type && cached.key === vnode.key) {
+ resetShapeFlag(vnode);
+ const da = vnode.component.da;
+ da && queuePostRenderEffect(da, suspense);
+ return;
+ }
+ unmount(cached);
+ });
+ });
+ return () => {
+ pendingCacheKey = null;
+ if (!slots.default) {
+ return current = null;
+ }
+ const children = slots.default();
+ const rawVNode = children[0];
+ if (children.length > 1) {
+ {
+ warn$1(`KeepAlive should contain exactly one component child.`);
+ }
+ current = null;
+ return children;
+ } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {
+ current = null;
+ return rawVNode;
+ }
+ let vnode = getInnerChild(rawVNode);
+ if (vnode.type === Comment) {
+ current = null;
+ return vnode;
+ }
+ const comp = vnode.type;
+ const name = getComponentName(
+ isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp
+ );
+ const { include, exclude, max } = props;
+ if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {
+ vnode.shapeFlag &= -257;
+ current = vnode;
+ return rawVNode;
+ }
+ const key = vnode.key == null ? comp : vnode.key;
+ const cachedVNode = cache.get(key);
+ if (vnode.el) {
+ vnode = cloneVNode(vnode);
+ if (rawVNode.shapeFlag & 128) {
+ rawVNode.ssContent = vnode;
+ }
+ }
+ pendingCacheKey = key;
+ if (cachedVNode) {
+ vnode.el = cachedVNode.el;
+ vnode.component = cachedVNode.component;
+ if (vnode.transition) {
+ setTransitionHooks(vnode, vnode.transition);
+ }
+ vnode.shapeFlag |= 512;
+ keys.delete(key);
+ keys.add(key);
+ } else {
+ keys.add(key);
+ if (max && keys.size > parseInt(max, 10)) {
+ pruneCacheEntry(keys.values().next().value);
+ }
+ }
+ vnode.shapeFlag |= 256;
+ current = vnode;
+ return isSuspense(rawVNode.type) ? rawVNode : vnode;
+ };
+ }
+ };
+ const KeepAlive = KeepAliveImpl;
+ function matches(pattern, name) {
+ if (isArray(pattern)) {
+ return pattern.some((p) => matches(p, name));
+ } else if (isString(pattern)) {
+ return pattern.split(",").includes(name);
+ } else if (isRegExp(pattern)) {
+ pattern.lastIndex = 0;
+ return pattern.test(name);
+ }
+ return false;
+ }
+ function onActivated(hook, target) {
+ registerKeepAliveHook(hook, "a", target);
+ }
+ function onDeactivated(hook, target) {
+ registerKeepAliveHook(hook, "da", target);
+ }
+ function registerKeepAliveHook(hook, type, target = currentInstance) {
+ const wrappedHook = hook.__wdc || (hook.__wdc = () => {
+ let current = target;
+ while (current) {
+ if (current.isDeactivated) {
+ return;
+ }
+ current = current.parent;
+ }
+ return hook();
+ });
+ injectHook(type, wrappedHook, target);
+ if (target) {
+ let current = target.parent;
+ while (current && current.parent) {
+ if (isKeepAlive(current.parent.vnode)) {
+ injectToKeepAliveRoot(wrappedHook, type, target, current);
+ }
+ current = current.parent;
+ }
+ }
+ }
+ function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {
+ const injected = injectHook(
+ type,
+ hook,
+ keepAliveRoot,
+ true
+ /* prepend */
+ );
+ onUnmounted(() => {
+ remove(keepAliveRoot[type], injected);
+ }, target);
+ }
+ function resetShapeFlag(vnode) {
+ vnode.shapeFlag &= -257;
+ vnode.shapeFlag &= -513;
+ }
+ function getInnerChild(vnode) {
+ return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;
+ }
+
+ function injectHook(type, hook, target = currentInstance, prepend = false) {
+ if (target) {
+ const hooks = target[type] || (target[type] = []);
+ const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
+ pauseTracking();
+ const reset = setCurrentInstance(target);
+ const res = callWithAsyncErrorHandling(hook, target, type, args);
+ reset();
+ resetTracking();
+ return res;
+ });
+ if (prepend) {
+ hooks.unshift(wrappedHook);
+ } else {
+ hooks.push(wrappedHook);
+ }
+ return wrappedHook;
+ } else {
+ const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, ""));
+ warn$1(
+ `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )
+ );
+ }
+ }
+ const createHook = (lifecycle) => (hook, target = currentInstance) => {
+ if (!isInSSRComponentSetup || lifecycle === "sp") {
+ injectHook(lifecycle, (...args) => hook(...args), target);
+ }
+ };
+ const onBeforeMount = createHook("bm");
+ const onMounted = createHook("m");
+ const onBeforeUpdate = createHook(
+ "bu"
+ );
+ const onUpdated = createHook("u");
+ const onBeforeUnmount = createHook(
+ "bum"
+ );
+ const onUnmounted = createHook("um");
+ const onServerPrefetch = createHook(
+ "sp"
+ );
+ const onRenderTriggered = createHook("rtg");
+ const onRenderTracked = createHook("rtc");
+ function onErrorCaptured(hook, target = currentInstance) {
+ injectHook("ec", hook, target);
+ }
+
+ const COMPONENTS = "components";
+ const DIRECTIVES = "directives";
+ function resolveComponent(name, maybeSelfReference) {
+ return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
+ }
+ const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc");
+ function resolveDynamicComponent(component) {
+ if (isString(component)) {
+ return resolveAsset(COMPONENTS, component, false) || component;
+ } else {
+ return component || NULL_DYNAMIC_COMPONENT;
+ }
+ }
+ function resolveDirective(name) {
+ return resolveAsset(DIRECTIVES, name);
+ }
+ function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {
+ const instance = currentRenderingInstance || currentInstance;
+ if (instance) {
+ const Component = instance.type;
+ if (type === COMPONENTS) {
+ const selfName = getComponentName(
+ Component,
+ false
+ );
+ if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
+ return Component;
+ }
+ }
+ const res = (
+ // local registration
+ // check instance[type] first which is resolved for options API
+ resolve(instance[type] || Component[type], name) || // global registration
+ resolve(instance.appContext[type], name)
+ );
+ if (!res && maybeSelfReference) {
+ return Component;
+ }
+ if (warnMissing && !res) {
+ const extra = type === COMPONENTS ? `
+If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;
+ warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
+ }
+ return res;
+ } else {
+ warn$1(
+ `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`
+ );
+ }
+ }
+ function resolve(registry, name) {
+ return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
+ }
+
+ function renderList(source, renderItem, cache, index) {
+ let ret;
+ const cached = cache && cache[index];
+ const sourceIsArray = isArray(source);
+ if (sourceIsArray || isString(source)) {
+ const sourceIsReactiveArray = sourceIsArray && isReactive(source);
+ let needsWrap = false;
+ let isReadonlySource = false;
+ if (sourceIsReactiveArray) {
+ needsWrap = !isShallow(source);
+ isReadonlySource = isReadonly(source);
+ source = shallowReadArray(source);
+ }
+ ret = new Array(source.length);
+ for (let i = 0, l = source.length; i < l; i++) {
+ ret[i] = renderItem(
+ needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],
+ i,
+ void 0,
+ cached && cached[i]
+ );
+ }
+ } else if (typeof source === "number") {
+ if (!Number.isInteger(source)) {
+ warn$1(`The v-for range expect an integer value but got ${source}.`);
+ }
+ ret = new Array(source);
+ for (let i = 0; i < source; i++) {
+ ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);
+ }
+ } else if (isObject(source)) {
+ if (source[Symbol.iterator]) {
+ ret = Array.from(
+ source,
+ (item, i) => renderItem(item, i, void 0, cached && cached[i])
+ );
+ } else {
+ const keys = Object.keys(source);
+ ret = new Array(keys.length);
+ for (let i = 0, l = keys.length; i < l; i++) {
+ const key = keys[i];
+ ret[i] = renderItem(source[key], key, i, cached && cached[i]);
+ }
+ }
+ } else {
+ ret = [];
+ }
+ if (cache) {
+ cache[index] = ret;
+ }
+ return ret;
+ }
+
+ function createSlots(slots, dynamicSlots) {
+ for (let i = 0; i < dynamicSlots.length; i++) {
+ const slot = dynamicSlots[i];
+ if (isArray(slot)) {
+ for (let j = 0; j < slot.length; j++) {
+ slots[slot[j].name] = slot[j].fn;
+ }
+ } else if (slot) {
+ slots[slot.name] = slot.key ? (...args) => {
+ const res = slot.fn(...args);
+ if (res) res.key = slot.key;
+ return res;
+ } : slot.fn;
+ }
+ }
+ return slots;
+ }
+
+ function renderSlot(slots, name, props = {}, fallback, noSlotted) {
+ if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {
+ if (name !== "default") props.name = name;
+ return openBlock(), createBlock(
+ Fragment,
+ null,
+ [createVNode("slot", props, fallback && fallback())],
+ 64
+ );
+ }
+ let slot = slots[name];
+ if (slot && slot.length > 1) {
+ warn$1(
+ `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`
+ );
+ slot = () => [];
+ }
+ if (slot && slot._c) {
+ slot._d = false;
+ }
+ openBlock();
+ const validSlotContent = slot && ensureValidVNode(slot(props));
+ const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch
+ // key attached in the `createSlots` helper, respect that
+ validSlotContent && validSlotContent.key;
+ const rendered = createBlock(
+ Fragment,
+ {
+ key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content
+ (!validSlotContent && fallback ? "_fb" : "")
+ },
+ validSlotContent || (fallback ? fallback() : []),
+ validSlotContent && slots._ === 1 ? 64 : -2
+ );
+ if (!noSlotted && rendered.scopeId) {
+ rendered.slotScopeIds = [rendered.scopeId + "-s"];
+ }
+ if (slot && slot._c) {
+ slot._d = true;
+ }
+ return rendered;
+ }
+ function ensureValidVNode(vnodes) {
+ return vnodes.some((child) => {
+ if (!isVNode(child)) return true;
+ if (child.type === Comment) return false;
+ if (child.type === Fragment && !ensureValidVNode(child.children))
+ return false;
+ return true;
+ }) ? vnodes : null;
+ }
+
+ function toHandlers(obj, preserveCaseIfNecessary) {
+ const ret = {};
+ if (!isObject(obj)) {
+ warn$1(`v-on with no argument expects an object value.`);
+ return ret;
+ }
+ for (const key in obj) {
+ ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];
+ }
+ return ret;
+ }
+
+ const getPublicInstance = (i) => {
+ if (!i) return null;
+ if (isStatefulComponent(i)) return getComponentPublicInstance(i);
+ return getPublicInstance(i.parent);
+ };
+ const publicPropertiesMap = (
+ // Move PURE marker to new line to workaround compiler discarding it
+ // due to type annotation
+ /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
+ $: (i) => i,
+ $el: (i) => i.vnode.el,
+ $data: (i) => i.data,
+ $props: (i) => shallowReadonly(i.props) ,
+ $attrs: (i) => shallowReadonly(i.attrs) ,
+ $slots: (i) => shallowReadonly(i.slots) ,
+ $refs: (i) => shallowReadonly(i.refs) ,
+ $parent: (i) => getPublicInstance(i.parent),
+ $root: (i) => getPublicInstance(i.root),
+ $host: (i) => i.ce,
+ $emit: (i) => i.emit,
+ $options: (i) => resolveMergedOptions(i) ,
+ $forceUpdate: (i) => i.f || (i.f = () => {
+ queueJob(i.update);
+ }),
+ $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),
+ $watch: (i) => instanceWatch.bind(i)
+ })
+ );
+ const isReservedPrefix = (key) => key === "_" || key === "$";
+ const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);
+ const PublicInstanceProxyHandlers = {
+ get({ _: instance }, key) {
+ if (key === "__v_skip") {
+ return true;
+ }
+ const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
+ if (key === "__isVue") {
+ return true;
+ }
+ let normalizedProps;
+ if (key[0] !== "$") {
+ const n = accessCache[key];
+ if (n !== void 0) {
+ switch (n) {
+ case 1 /* SETUP */:
+ return setupState[key];
+ case 2 /* DATA */:
+ return data[key];
+ case 4 /* CONTEXT */:
+ return ctx[key];
+ case 3 /* PROPS */:
+ return props[key];
+ }
+ } else if (hasSetupBinding(setupState, key)) {
+ accessCache[key] = 1 /* SETUP */;
+ return setupState[key];
+ } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
+ accessCache[key] = 2 /* DATA */;
+ return data[key];
+ } else if (
+ // only cache other properties when instance has declared (thus stable)
+ // props
+ (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)
+ ) {
+ accessCache[key] = 3 /* PROPS */;
+ return props[key];
+ } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+ accessCache[key] = 4 /* CONTEXT */;
+ return ctx[key];
+ } else if (shouldCacheAccess) {
+ accessCache[key] = 0 /* OTHER */;
+ }
+ }
+ const publicGetter = publicPropertiesMap[key];
+ let cssModule, globalProperties;
+ if (publicGetter) {
+ if (key === "$attrs") {
+ track(instance.attrs, "get", "");
+ markAttrsAccessed();
+ } else if (key === "$slots") {
+ track(instance, "get", key);
+ }
+ return publicGetter(instance);
+ } else if (
+ // css module (injected by vue-loader)
+ (cssModule = type.__cssModules) && (cssModule = cssModule[key])
+ ) {
+ return cssModule;
+ } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+ accessCache[key] = 4 /* CONTEXT */;
+ return ctx[key];
+ } else if (
+ // global properties
+ globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)
+ ) {
+ {
+ return globalProperties[key];
+ }
+ } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
+ // to infinite warning loop
+ key.indexOf("__v") !== 0)) {
+ if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {
+ warn$1(
+ `Property ${JSON.stringify(
+ key
+ )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
+ );
+ } else if (instance === currentRenderingInstance) {
+ warn$1(
+ `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
+ );
+ }
+ }
+ },
+ set({ _: instance }, key, value) {
+ const { data, setupState, ctx } = instance;
+ if (hasSetupBinding(setupState, key)) {
+ setupState[key] = value;
+ return true;
+ } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) {
+ warn$1(`Cannot mutate