From cf26a3f8b650ef5394d123bd2d0669398b11d613 Mon Sep 17 00:00:00 2001
From: MrJ200011 <1765683934@qq.com>
Date: Thu, 27 Nov 2025 17:07:32 +0800
Subject: [PATCH 1/3] feat: B7&B8 Add scheduled tasks and a portion of
notification services
---
.idea/.gitignore | 8 +
.idea/modules.xml | 8 +
.idea/progress-wall.iml | 9 +
.idea/vcs.xml | 6 +
backend/docs/API.md | 4 +-
backend/go.mod | 1 +
backend/go.sum | 2 +
backend/handlers/notification/notification.go | 72 ++
backend/main.go | 30 +
backend/models/task.go | 46 +-
backend/routes/routes.go | 6 +
backend/services/notification_service.go | 61 ++
backend/services/scheduler_service.go | 144 +++
frontend/pnpm-lock.yaml | 960 +++++++-----------
14 files changed, 723 insertions(+), 634 deletions(-)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/modules.xml
create mode 100644 .idea/progress-wall.iml
create mode 100644 .idea/vcs.xml
create mode 100644 backend/handlers/notification/notification.go
create mode 100644 backend/services/notification_service.go
create mode 100644 backend/services/scheduler_service.go
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..6151d5d
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/progress-wall.iml b/.idea/progress-wall.iml
new file mode 100644
index 0000000..5e764c4
--- /dev/null
+++ b/.idea/progress-wall.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/docs/API.md b/backend/docs/API.md
index 54bfa04..303bc5e 100644
--- a/backend/docs/API.md
+++ b/backend/docs/API.md
@@ -513,7 +513,7 @@ Authorization: Bearer
- `boardId`: 看板ID (number)
**请求体**:
-```json
+```json
{
"name": "string (必填)",
"description": "string (可选)",
@@ -698,7 +698,7 @@ Authorization: Bearer
"assignee_id": "number (可选)",
"project_id": "number (必填)"
}
-```
+```
**响应** (201 Created):
```json
diff --git a/backend/go.mod b/backend/go.mod
index b4c2232..4eafa45 100644
--- a/backend/go.mod
+++ b/backend/go.mod
@@ -10,6 +10,7 @@ require (
github.com/glebarez/sqlite v1.11.0
github.com/golang-jwt/jwt/v5 v5.3.0
github.com/joho/godotenv v1.4.0
+ github.com/robfig/cron/v3 v3.0.1
golang.org/x/crypto v0.43.0
gorm.io/driver/mysql v1.5.2
gorm.io/gorm v1.25.7
diff --git a/backend/go.sum b/backend/go.sum
index d535bfe..343f6e4 100644
--- a/backend/go.sum
+++ b/backend/go.sum
@@ -74,6 +74,8 @@ github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQ
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
+github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
diff --git a/backend/handlers/notification/notification.go b/backend/handlers/notification/notification.go
new file mode 100644
index 0000000..c0cc99d
--- /dev/null
+++ b/backend/handlers/notification/notification.go
@@ -0,0 +1,72 @@
+package notification
+
+import (
+ "fmt"
+ "net/http"
+ "time"
+
+ "github.com/gin-gonic/gin"
+ "gorm.io/gorm"
+ "progress-wall-backend/services"
+)
+
+// NotificationHandler 通知服务处理器
+type NotificationHandler struct {
+ notificationService *services.TaskNotificationService // 若有服务层可关联,无则留空
+}
+
+// NewNotificationHandler 创建通知处理器
+func NewNotificationHandler(db *gorm.DB) *NotificationHandler {
+ return &NotificationHandler{
+ notificationService: services.NewTaskNotificationService(db), // 若无需服务层可简化为 nil
+ }
+}
+
+// 通知请求体结构(与定时任务格式匹配)
+type TaskNotificationReq struct {
+ UserID uint `json:"user_id"` // 任务创建者ID
+ TaskID uint `json:"task_id"` // 任务ID
+ TaskTitle string `json:"task_title"` // 任务标题
+ NotificationType string `json:"notification_type"` // 通知类型
+}
+
+// ReceiveTaskNotification 接收定时任务发送的通知
+// 对应路由:POST /api/notifications
+func (h *NotificationHandler) ReceiveTaskNotification(c *gin.Context) {
+ var req TaskNotificationReq
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "无效的通知参数",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 终端打印定时任务信息(核心逻辑)
+ h.printNotification(req)
+
+ // 若有业务逻辑可调用服务层处理(如存储通知记录)
+ // err := h.notificationService.SaveNotification(req)
+ // if err != nil {
+ // c.JSON(http.StatusInternalServerError, gin.H{"message": "保存通知失败"})
+ // return
+ // }
+
+ c.JSON(http.StatusOK, gin.H{
+ "code": 0,
+ "message": "通知接收成功",
+ })
+}
+
+// 终端打印通知信息
+func (h *NotificationHandler) printNotification(req TaskNotificationReq) {
+ fmt.Println("======================================")
+ fmt.Printf("【定时任务通知】\n")
+ fmt.Printf("时间:%s\n", time.Now().Format("2006-01-02 15:04:05"))
+ fmt.Printf("用户ID:%d\n", req.UserID)
+ fmt.Printf("任务ID:%d\n", req.TaskID)
+ fmt.Printf("任务标题:%s\n", req.TaskTitle)
+ fmt.Printf("类型:%s\n", req.NotificationType)
+ fmt.Println("======================================\n")
+}
diff --git a/backend/main.go b/backend/main.go
index e70549d..bd86e3f 100644
--- a/backend/main.go
+++ b/backend/main.go
@@ -3,10 +3,16 @@ package main
import (
"fmt"
"log"
+ "os"
+ "os/signal"
+ "syscall"
"progress-wall-backend/config"
"progress-wall-backend/database"
"progress-wall-backend/routes"
+ "progress-wall-backend/services"
+
+ "github.com/robfig/cron/v3"
)
func main() {
@@ -38,10 +44,34 @@ func main() {
// 设置路由
r := routes.SetupRoutes(db, cfg)
+ // 初始化并启动定时任务调度器(核心新增逻辑)
+ var cronInstance *cron.Cron // 声明定时任务实例
+ // 创建调度器实例(传入数据库连接和通知服务URL)(若是后端有了NotificationService,则将URL改成cfg.NotificationService.URL)
+ schedulerIns := services.NewScheduler(db, "http://localhost:8080")
+ // 启动定时任务,返回cron实例用于后续关闭
+ cronInstance = schedulerIns.Start()
+ defer cronInstance.Stop() // 程序退出时停止定时任务
+ log.Println("定时任务调度器已启动")
+
// 启动HTTP服务器
addr := fmt.Sprintf(":%s", cfg.Server.Port)
log.Printf("服务器启动在端口 %s", cfg.Server.Port)
if err := r.Run(addr); err != nil {
log.Fatalf("服务器启动失败: %v", err)
}
+
+ // 等待中断信号(优雅退出逻辑)
+ quit := make(chan os.Signal, 1)
+ // 监听Ctrl+C和kill信号
+ signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
+ <-quit // 阻塞等待信号
+ log.Println("开始优雅关闭服务...")
+
+ // 若定时任务已启动,等待其完全停止
+ if cronInstance != nil {
+ cronInstance.Stop()
+ log.Println("定时任务已停止")
+ }
+
+ log.Println("服务已正常退出")
}
diff --git a/backend/models/task.go b/backend/models/task.go
index 7e13571..57275b2 100644
--- a/backend/models/task.go
+++ b/backend/models/task.go
@@ -8,24 +8,25 @@ import (
// Task 任务表
type Task struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- Title string `json:"title" gorm:"size:200;not null"`
- Description string `json:"description" gorm:"type:text"`
- Priority TaskPriority `json:"priority" gorm:"type:tinyint;default:2;comment:'任务优先级:1=低,2=中,3=高,4=紧急'"`
- Status TaskStatus `json:"status" gorm:"type:tinyint;default:1;comment:'任务状态:1=待办,2=进行中,3=已完成,4=已取消'"`
- Position int `json:"position" gorm:"not null;comment:'任务在列中的排序位置'"`
- DueDate *time.Time `json:"due_date"`
- StartDate *time.Time `json:"start_date"`
- EndDate *time.Time `json:"end_date"`
- EstimatedHours *float64 `json:"estimated_hours" gorm:"type:decimal(8,2);comment:'预估工时(小时)'"`
- ActualHours *float64 `json:"actual_hours" gorm:"type:decimal(8,2);comment:'实际工时(小时)'"`
- ColumnID uint `json:"column_id" gorm:"not null;index"`
- CreatorID uint `json:"creator_id" gorm:"not null;index"`
- AssigneeID *uint `json:"assignee_id" gorm:"index"`
- ProjectID uint `json:"project_id" gorm:"not null;index"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
- DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
+ ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
+ Title string `json:"title" gorm:"size:200;not null"`
+ Description string `json:"description" gorm:"type:text"`
+ Priority TaskPriority `json:"priority" gorm:"type:tinyint;default:2;comment:'任务优先级:1=低,2=中,3=高,4=紧急'"`
+ Status TaskStatus `json:"status" gorm:"type:tinyint;default:1;comment:'任务状态:1=待办,2=进行中,3=已完成,4=已取消,5=已归档'"`
+ Position int `json:"position" gorm:"not null;comment:'任务在列中的排序位置'"`
+ DueDate *time.Time `json:"due_date"`
+ StartDate *time.Time `json:"start_date"`
+ EndDate *time.Time `json:"end_date"`
+ EstimatedHours *float64 `json:"estimated_hours" gorm:"type:decimal(8,2);comment:'预估工时(小时)'"`
+ ActualHours *float64 `json:"actual_hours" gorm:"type:decimal(8,2);comment:'实际工时(小时)'"`
+ ColumnID uint `json:"column_id" gorm:"not null;index"`
+ CreatorID uint `json:"creator_id" gorm:"not null;index"`
+ AssigneeID *uint `json:"assignee_id" gorm:"index"`
+ ProjectID uint `json:"project_id" gorm:"not null;index"`
+ CreatedAt time.Time `json:"created_at"`
+ UpdatedAt time.Time `json:"updated_at"`
+ DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
+ DeadlineAlertSent int `json:"deadline_alert_sent" gorm:"default:0;index;comment:'是否发送提醒:1=已发送,0=未发送'"` // 新增字段:是否已发送提醒
// 关联关系
Column Column `json:"column,omitempty" gorm:"foreignKey:ColumnID"`
@@ -51,8 +52,9 @@ const (
type TaskStatus int
const (
- TaskStatusTodo TaskStatus = 1 // 待办
- TaskStatusInProgress TaskStatus = 2 // 进行中
- TaskStatusCompleted TaskStatus = 3 // 已完成
- TaskStatusCancelled TaskStatus = 4 // 已取消
+ TaskStatusTodo TaskStatus = 1 // 待办
+ TaskStatusInProgress TaskStatus = 2 // 进行中
+ TaskStatusCompleted TaskStatus = 3 // 已完成
+ TaskStatusCancelled TaskStatus = 4 // 已取消
+ TaskStatusAlreadyRemind TaskStatus = 5 // 已归档
)
diff --git a/backend/routes/routes.go b/backend/routes/routes.go
index d5a39c3..1ba7ce3 100644
--- a/backend/routes/routes.go
+++ b/backend/routes/routes.go
@@ -8,6 +8,7 @@ import (
"progress-wall-backend/handlers/auth"
"progress-wall-backend/handlers/board"
"progress-wall-backend/handlers/column"
+ "progress-wall-backend/handlers/notification"
"progress-wall-backend/handlers/project"
"progress-wall-backend/handlers/task"
"progress-wall-backend/handlers/user"
@@ -45,6 +46,8 @@ func SetupRoutes(db *gorm.DB, cfg *config.Config) *gin.Engine {
taskHandler := task.NewTaskHandler(db)
boardActivitiesHandler := activity.NewBoardActivitiesHandler(db)
taskActivitiesHandler := activity.NewTaskActivitiesHandler(db)
+ // 添加通知处理器初始化
+ notificationHandler := notification.NewNotificationHandler(db)
// 公开路由(不需要认证)
api := r.Group("/api")
@@ -54,6 +57,9 @@ func SetupRoutes(db *gorm.DB, cfg *config.Config) *gin.Engine {
authGroup.POST("/login", loginHandler.Login)
authGroup.POST("/register", registerHandler.Register)
}
+
+ // 通知相关
+ api.POST("/notifications", notificationHandler.ReceiveTaskNotification)
}
// 受保护的路由(需要认证)
diff --git a/backend/services/notification_service.go b/backend/services/notification_service.go
new file mode 100644
index 0000000..6f3514c
--- /dev/null
+++ b/backend/services/notification_service.go
@@ -0,0 +1,61 @@
+package services
+
+import (
+ "fmt"
+ "net/http"
+ "time"
+
+ "github.com/gin-gonic/gin"
+ "gorm.io/gorm"
+)
+
+// TaskNotificationService定时任务服务
+type TaskNotificationService struct {
+ UserID uint `json:"user_id"` // 对应定时任务的UserID
+ TaskID uint `json:"task_id"` // 对应定时任务的TaskID
+ TaskTitle string `json:"task_title"` // 对应定时任务的TaskTitle
+ NotificationType string `json:"notification_type"` // 通知类型
+ db *gorm.DB
+}
+
+func NewTaskNotificationService(db *gorm.DB) *TaskNotificationService {
+ return &TaskNotificationService{
+ db: db,
+ }
+}
+
+// 可直接绑定到 Gin 路由
+func HandleTaskNotification(c *gin.Context) {
+ var req TaskNotificationService
+ // 解析定时任务发送的 JSON 请求体
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "请求参数解析失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 核心逻辑:在终端打印定时任务筛选出的任务信息
+ printTaskNotification(req)
+
+ // 返回成功响应,让定时任务确认通知发送成功
+ c.JSON(http.StatusOK, gin.H{
+ "code": 0,
+ "message": "通知接收成功",
+ "data": req,
+ })
+}
+
+// printTaskNotification 封装终端打印逻辑(可复用)
+func printTaskNotification(req TaskNotificationService) {
+ fmt.Println("======================================")
+ fmt.Printf("【定时任务自动触发通知】\n")
+ fmt.Printf("接收时间:%s\n", time.Now().Format("2006-01-02 15:04:05"))
+ fmt.Printf("任务创建者ID:%d\n", req.UserID)
+ fmt.Printf("任务ID:%d\n", req.TaskID)
+ fmt.Printf("任务标题:%s\n", req.TaskTitle)
+ fmt.Printf("通知类型:%s\n", req.NotificationType)
+ fmt.Println("======================================\n")
+}
diff --git a/backend/services/scheduler_service.go b/backend/services/scheduler_service.go
new file mode 100644
index 0000000..fa8983f
--- /dev/null
+++ b/backend/services/scheduler_service.go
@@ -0,0 +1,144 @@
+package services
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+ "strings"
+ "time"
+
+ "progress-wall-backend/models"
+
+ "gorm.io/gorm"
+
+ "github.com/robfig/cron/v3"
+)
+
+// Scheduler 定时任务调度器
+type Scheduler struct {
+ db *gorm.DB // SQLite数据库连接
+ notificationBaseURL string // 通知服务(B8)基础URL
+}
+
+// NewScheduler 创建调度器实例
+func NewScheduler(db *gorm.DB, notificationBaseURL string) *Scheduler {
+ return &Scheduler{
+ db: db,
+ notificationBaseURL: notificationBaseURL,
+ }
+}
+
+// Start 启动定时任务(每小时执行一次)
+func (s *Scheduler) Start() *cron.Cron {
+ c := cron.New()
+
+ // 注册定时任务:每小时第0分钟执行(与需求中的"0 * * * *"一致)
+ _, err := c.AddFunc("* * * * *", s.Execute)
+ if err != nil {
+ log.Fatalf("注册定时任务失败: %v", err)
+ }
+
+ c.Start()
+ log.Println("定时任务调度器已启动,每小时执行一次")
+ return c
+}
+
+// Execute 执行任务扫描和通知逻辑(核心方法)
+func (s *Scheduler) Execute() {
+ log.Println("=== 开始执行任务扫描 ===")
+
+ // 1. 查询符合条件的任务
+ tasks, err := s.queryPendingTasks()
+ if err != nil {
+ log.Printf("查询任务失败: %v", err)
+ return
+ }
+
+ log.Printf("发现 %d 个符合条件的任务", len(tasks))
+ if len(tasks) == 0 {
+ log.Println("=== 任务扫描完成,无需要处理的任务 ===")
+ return
+ }
+
+ // 2. 处理每个任务:发送通知并更新状态
+ for _, task := range tasks {
+ log.Printf("处理任务: %s (ID: %d, 截止时间: %v)", task.Title, task.ID, task.DueDate)
+
+ // 发送通知
+ if err := s.sendNotification(task); err != nil {
+ log.Printf("任务 %d 通知发送失败: %v", task.ID, err)
+ continue
+ }
+
+ // 更新提醒状态(确保幂等性)
+ if err := s.updateAlertStatus(task.ID); err != nil {
+ log.Printf("任务 %d 状态更新失败: %v", task.ID, err)
+ }
+ }
+
+ log.Println("=== 任务扫描完成 ===")
+}
+
+// queryPendingTasks 查询符合条件的任务(未完成、24小时内截止、未发送提醒)
+func (s *Scheduler) queryPendingTasks() ([]models.Task, error) {
+ var tasks []models.Task
+ now := time.Now()
+ // 计算24小时后的时间点(SQLite的时间比较需要使用UTC或统一时区)
+ deadlineEnd := now.Add(24 * time.Hour)
+
+ // SQL条件:状态不是已完成/已归档,deadline在未来24小时内,且未发送提醒
+ err := s.db.Where(
+ "status NOT IN (?) AND due_date IS NOT NULL AND due_date > ? AND due_date < ? AND deadline_alert_sent != ?",
+ []int{3, 5}, now, deadlineEnd, 1,
+ ).Find(&tasks).Error
+
+ return tasks, err
+}
+
+// sendNotification 调用B8通知服务发送提醒
+func (s *Scheduler) sendNotification(task models.Task) error {
+ // 构建通知 payload(按需求包含必要字段)
+ payload := struct {
+ UserID uint `json:"user_id"`
+ TaskID uint `json:"task_id"`
+ TaskTitle string `json:"task_title"`
+ NotificationType string `json:"notification_type"`
+ }{
+ UserID: task.CreatorID,
+ TaskID: task.ID,
+ TaskTitle: task.Title,
+ NotificationType: "TASK_DEADLINE_APPROACHING", // 固定通知类型
+ }
+
+ // 序列化payload为JSON
+ jsonData, err := json.Marshal(payload)
+ if err != nil {
+ return fmt.Errorf("序列化通知数据失败: %v", err)
+ }
+
+ // 调用通知服务API
+ resp, err := http.Post(
+ fmt.Sprintf("%s/api/notifications", s.notificationBaseURL),
+ "application/json",
+ strings.NewReader(string(jsonData)),
+ )
+ if err != nil {
+ return fmt.Errorf("调用通知服务失败: %v", err)
+ }
+ defer resp.Body.Close()
+
+ // 检查响应状态
+ if resp.StatusCode < 200 || resp.StatusCode >= 300 {
+ return fmt.Errorf("通知服务返回错误状态码: %d", resp.StatusCode)
+ }
+
+ return nil
+}
+
+// updateAlertStatus 更新任务的提醒状态(避免重复发送)
+func (s *Scheduler) updateAlertStatus(taskID uint) error {
+ return s.db.Model(&models.Task{}).
+ Where("id = ?", taskID).
+ Update("deadline_alert_sent", 1).Error
+}
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index f709d39..f5f5b76 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -10,7 +10,7 @@ importers:
dependencies:
'@vueuse/core':
specifier: 14.0.0-alpha.0
- version: 14.0.0-alpha.0(vue@3.5.22(typescript@5.8.3))
+ version: 14.0.0-alpha.0(vue@3.5.24(typescript@5.8.3))
axios:
specifier: ^1.13.2
version: 1.13.2
@@ -22,50 +22,50 @@ importers:
version: 2.1.1
lucide-vue-next:
specifier: ^0.544.0
- version: 0.544.0(vue@3.5.22(typescript@5.8.3))
+ version: 0.544.0(vue@3.5.24(typescript@5.8.3))
pinia:
specifier: ^3.0.3
- version: 3.0.3(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))
+ version: 3.0.4(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3))
tailwind-merge:
specifier: ^3.3.1
- version: 3.3.1
+ version: 3.4.0
vue:
specifier: ^3.5.21
- version: 3.5.22(typescript@5.8.3)
+ version: 3.5.24(typescript@5.8.3)
vue-draggable-plus:
specifier: ^0.6.0
- version: 0.6.0(@types/sortablejs@1.15.8)
+ version: 0.6.0(@types/sortablejs@1.15.9)
vue-router:
specifier: ^4.5.1
- version: 4.5.1(vue@3.5.22(typescript@5.8.3))
+ version: 4.6.3(vue@3.5.24(typescript@5.8.3))
devDependencies:
'@types/node':
specifier: ^24.5.2
- version: 24.5.2
+ version: 24.10.1
'@vitejs/plugin-vue':
specifier: ^5.1.4
- version: 5.2.4(vite@5.4.20(@types/node@24.5.2))(vue@3.5.22(typescript@5.8.3))
+ version: 5.2.4(vite@5.4.21(@types/node@24.10.1))(vue@3.5.24(typescript@5.8.3))
'@vue/tsconfig':
specifier: ^0.8.1
- version: 0.8.1(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))
+ version: 0.8.1(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3))
autoprefixer:
specifier: ^10.4.21
- version: 10.4.21(postcss@8.5.6)
+ version: 10.4.22(postcss@8.5.6)
postcss:
specifier: ^8.5.6
version: 8.5.6
tailwindcss:
specifier: ^3.4.17
- version: 3.4.17
+ version: 3.4.18
typescript:
specifier: ~5.8.3
version: 5.8.3
vite:
specifier: ^5.4.10
- version: 5.4.20(@types/node@24.5.2)
+ version: 5.4.21(@types/node@24.10.1)
vue-tsc:
specifier: ^3.0.7
- version: 3.0.8(typescript@5.8.3)
+ version: 3.1.5(typescript@5.8.3)
packages:
@@ -77,17 +77,17 @@ packages:
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
'@esbuild/aix-ppc64@0.21.5':
@@ -228,10 +228,6 @@ packages:
cpu: [x64]
os: [win32]
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -257,128 +253,124 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
- '@rollup/rollup-android-arm-eabi@4.52.3':
- resolution: {integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==}
+ '@rollup/rollup-android-arm-eabi@4.53.3':
+ resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.52.3':
- resolution: {integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==}
+ '@rollup/rollup-android-arm64@4.53.3':
+ resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.52.3':
- resolution: {integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==}
+ '@rollup/rollup-darwin-arm64@4.53.3':
+ resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.52.3':
- resolution: {integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==}
+ '@rollup/rollup-darwin-x64@4.53.3':
+ resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.52.3':
- resolution: {integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==}
+ '@rollup/rollup-freebsd-arm64@4.53.3':
+ resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.52.3':
- resolution: {integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==}
+ '@rollup/rollup-freebsd-x64@4.53.3':
+ resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.52.3':
- resolution: {integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
+ resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.52.3':
- resolution: {integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==}
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
+ resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.52.3':
- resolution: {integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==}
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
+ resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.52.3':
- resolution: {integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==}
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
+ resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.52.3':
- resolution: {integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==}
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
+ resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.52.3':
- resolution: {integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==}
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
+ resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.52.3':
- resolution: {integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==}
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
+ resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.52.3':
- resolution: {integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==}
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
+ resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.52.3':
- resolution: {integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==}
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
+ resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.52.3':
- resolution: {integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==}
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.52.3':
- resolution: {integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==}
+ '@rollup/rollup-linux-x64-musl@4.53.3':
+ resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-openharmony-arm64@4.52.3':
- resolution: {integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==}
+ '@rollup/rollup-openharmony-arm64@4.53.3':
+ resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.52.3':
- resolution: {integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==}
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
+ resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.52.3':
- resolution: {integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==}
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
+ resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.52.3':
- resolution: {integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==}
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.52.3':
- resolution: {integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==}
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
+ resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==}
cpu: [x64]
os: [win32]
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- '@types/node@24.5.2':
- resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==}
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
- '@types/sortablejs@1.15.8':
- resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==}
+ '@types/sortablejs@1.15.9':
+ resolution: {integrity: sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==}
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
@@ -399,57 +391,54 @@ packages:
'@volar/typescript@2.4.23':
resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
- '@vue/compiler-core@3.5.22':
- resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
-
- '@vue/compiler-dom@3.5.22':
- resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
+ '@vue/compiler-core@3.5.24':
+ resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==}
- '@vue/compiler-sfc@3.5.22':
- resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==}
+ '@vue/compiler-dom@3.5.24':
+ resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==}
- '@vue/compiler-ssr@3.5.22':
- resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==}
+ '@vue/compiler-sfc@3.5.24':
+ resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==}
- '@vue/compiler-vue2@2.7.16':
- resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+ '@vue/compiler-ssr@3.5.24':
+ resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
- '@vue/devtools-api@7.7.7':
- resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==}
+ '@vue/devtools-api@7.7.9':
+ resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
- '@vue/devtools-kit@7.7.7':
- resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==}
+ '@vue/devtools-kit@7.7.9':
+ resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
- '@vue/devtools-shared@7.7.7':
- resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==}
+ '@vue/devtools-shared@7.7.9':
+ resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
- '@vue/language-core@3.0.8':
- resolution: {integrity: sha512-eYs6PF7bxoPYvek9qxceo1BCwFbJZYqJll+WaYC8o8ec60exqj+n+QRGGiJHSeUfYp0hDxARbMdxMq/fbPgU5g==}
+ '@vue/language-core@3.1.5':
+ resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@vue/reactivity@3.5.22':
- resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==}
+ '@vue/reactivity@3.5.24':
+ resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==}
- '@vue/runtime-core@3.5.22':
- resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==}
+ '@vue/runtime-core@3.5.24':
+ resolution: {integrity: sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==}
- '@vue/runtime-dom@3.5.22':
- resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==}
+ '@vue/runtime-dom@3.5.24':
+ resolution: {integrity: sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==}
- '@vue/server-renderer@3.5.22':
- resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==}
+ '@vue/server-renderer@3.5.24':
+ resolution: {integrity: sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==}
peerDependencies:
- vue: 3.5.22
+ vue: 3.5.24
- '@vue/shared@3.5.22':
- resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==}
+ '@vue/shared@3.5.24':
+ resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
'@vue/tsconfig@0.8.1':
resolution: {integrity: sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==}
@@ -475,24 +464,8 @@ packages:
peerDependencies:
vue: ^3.5.0
- alien-signals@2.0.8:
- resolution: {integrity: sha512-844G1VLkk0Pe2SJjY0J8vp8ADI73IM4KliNu2OGlYzWpO28NexEUvjHTcFjFX3VXoiUtwTbHxLNI9ImkcoBqzA==}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.2.2:
- resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
- engines: {node: '>=12'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.3:
- resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
- engines: {node: '>=12'}
+ alien-signals@3.1.0:
+ resolution: {integrity: sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==}
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
@@ -507,8 +480,8 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- autoprefixer@10.4.21:
- resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ autoprefixer@10.4.22:
+ resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
@@ -517,29 +490,23 @@ packages:
axios@1.13.2:
resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- baseline-browser-mapping@2.8.8:
- resolution: {integrity: sha512-be0PUaPsQX/gPWWgFsdD+GFzaoig5PXaUC1xLkQiYdDnANU8sMnHoQd8JhbJQuvTWrWLyeFN9Imb5Qtfvr4RrQ==}
+ baseline-browser-mapping@2.8.30:
+ resolution: {integrity: sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==}
hasBin: true
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
- birpc@2.6.1:
- resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==}
-
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ birpc@2.8.0:
+ resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.26.2:
- resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==}
+ browserslist@4.28.0:
+ resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -551,8 +518,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- caniuse-lite@1.0.30001745:
- resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==}
+ caniuse-lite@1.0.30001756:
+ resolution: {integrity: sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@@ -565,13 +532,6 @@ packages:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@@ -580,24 +540,17 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
- copy-anything@3.0.5:
- resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
- engines: {node: '>=12.13'}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
+ copy-anything@4.0.5:
+ resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
+ engines: {node: '>=18'}
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
- de-indent@1.0.2:
- resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
@@ -613,17 +566,8 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- electron-to-chromium@1.5.226:
- resolution: {integrity: sha512-0tS/r72Ze0WUBiDwnqw4X43TxA7gEuZg0kFwLthoCzkshIbNQFjkf6D8xEzBe6tY6Y65fUhZIuNedTugw+11Lw==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ electron-to-chromium@1.5.259:
+ resolution: {integrity: sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
@@ -664,6 +608,15 @@ packages:
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -677,16 +630,12 @@ packages:
debug:
optional: true
- foreground-child@3.3.1:
- resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
- engines: {node: '>=14'}
-
form-data@4.0.5:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
- fraction.js@4.3.7:
- resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+ fraction.js@5.3.4:
+ resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
@@ -712,10 +661,6 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
- hasBin: true
-
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -732,10 +677,6 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- he@1.2.0:
- resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
- hasBin: true
-
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
@@ -751,10 +692,6 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -763,15 +700,9 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-what@4.1.16:
- resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
- engines: {node: '>=12.13'}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+ is-what@5.5.0:
+ resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
+ engines: {node: '>=18'}
jiti@1.21.7:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
@@ -784,16 +715,13 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
lucide-vue-next@0.544.0:
resolution: {integrity: sha512-mDp/AdGOPIDkpFHnFiTWgQgCST9aBXHVaiobZfOMIvv7nrOukzF/TP+7KoOwrngdWRaH9TMiepMBIX1vsgKJ3g==}
peerDependencies:
vue: '>=3.0.1'
- magic-string@0.30.19:
- resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
@@ -815,14 +743,6 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
@@ -837,8 +757,8 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- node-releases@2.0.21:
- resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -856,23 +776,12 @@ packages:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
- package-json-from-dist@1.0.1:
- resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
@@ -891,11 +800,11 @@ packages:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
- pinia@3.0.3:
- resolution: {integrity: sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==}
+ pinia@3.0.4:
+ resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
peerDependencies:
- typescript: '>=4.4.4'
- vue: ^2.7.0 || ^3.5.11
+ typescript: '>=4.5.0'
+ vue: ^3.5.11
peerDependenciesMeta:
typescript:
optional: true
@@ -916,16 +825,22 @@ packages:
peerDependencies:
postcss: ^8.4.21
- postcss-load-config@4.0.2:
- resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
- engines: {node: '>= 14'}
+ postcss-load-config@6.0.1:
+ resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
+ engines: {node: '>= 18'}
peerDependencies:
+ jiti: '>=1.21.0'
postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
+ tsx: ^4.8.1
+ yaml: ^2.4.2
peerDependenciesMeta:
+ jiti:
+ optional: true
postcss:
optional: true
- ts-node:
+ tsx:
+ optional: true
+ yaml:
optional: true
postcss-nested@6.2.0:
@@ -958,8 +873,8 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines: {node: '>= 0.4'}
hasBin: true
@@ -970,26 +885,14 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rollup@4.52.3:
- resolution: {integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==}
+ rollup@4.53.3:
+ resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -998,40 +901,24 @@ packages:
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
engines: {node: '>=0.10.0'}
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.1.2:
- resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
- engines: {node: '>=12'}
-
- sucrase@3.35.0:
- resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ sucrase@3.35.1:
+ resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
- superjson@2.2.2:
- resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
+ superjson@2.2.5:
+ resolution: {integrity: sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==}
engines: {node: '>=16'}
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- tailwind-merge@3.3.1:
- resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
+ tailwind-merge@3.4.0:
+ resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
- tailwindcss@3.4.17:
- resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
+ tailwindcss@3.4.18:
+ resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -1042,6 +929,10 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -1054,11 +945,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- undici-types@7.12.0:
- resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ update-browserslist-db@1.1.4:
+ resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -1066,8 +957,8 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- vite@5.4.20:
- resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==}
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -1109,59 +1000,41 @@ packages:
'@vue/composition-api':
optional: true
- vue-router@4.5.1:
- resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==}
+ vue-router@4.6.3:
+ resolution: {integrity: sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==}
peerDependencies:
- vue: ^3.2.0
+ vue: ^3.5.0
- vue-tsc@3.0.8:
- resolution: {integrity: sha512-H9yg/m6ywykmWS+pIAEs65v2FrVm5uOA0a0dHkX6Sx8dNg1a1m4iudt/6eGa9fAenmNHGlLFN9XpWQb8i5sU1w==}
+ vue-tsc@3.1.5:
+ resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
- vue@3.5.22:
- resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==}
+ vue@3.5.24:
+ resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- yaml@2.8.1:
- resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
- engines: {node: '>= 14.6'}
- hasBin: true
-
snapshots:
'@alloc/quick-lru@5.2.0': {}
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.27.1': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.28.4':
+ '@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
- '@babel/types@7.28.4':
+ '@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@esbuild/aix-ppc64@0.21.5':
optional: true
@@ -1232,15 +1105,6 @@ snapshots:
'@esbuild/win32-x64@0.21.5':
optional: true
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -1267,89 +1131,86 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
- '@pkgjs/parseargs@0.11.0':
+ '@rollup/rollup-android-arm-eabi@4.53.3':
optional: true
- '@rollup/rollup-android-arm-eabi@4.52.3':
+ '@rollup/rollup-android-arm64@4.53.3':
optional: true
- '@rollup/rollup-android-arm64@4.52.3':
+ '@rollup/rollup-darwin-arm64@4.53.3':
optional: true
- '@rollup/rollup-darwin-arm64@4.52.3':
+ '@rollup/rollup-darwin-x64@4.53.3':
optional: true
- '@rollup/rollup-darwin-x64@4.52.3':
+ '@rollup/rollup-freebsd-arm64@4.53.3':
optional: true
- '@rollup/rollup-freebsd-arm64@4.52.3':
+ '@rollup/rollup-freebsd-x64@4.53.3':
optional: true
- '@rollup/rollup-freebsd-x64@4.52.3':
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.52.3':
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.52.3':
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.52.3':
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.52.3':
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.52.3':
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.52.3':
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.52.3':
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.52.3':
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.52.3':
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.52.3':
+ '@rollup/rollup-linux-x64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-x64-musl@4.52.3':
+ '@rollup/rollup-openharmony-arm64@4.53.3':
optional: true
- '@rollup/rollup-openharmony-arm64@4.52.3':
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.52.3':
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.52.3':
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.52.3':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.52.3':
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
optional: true
'@types/estree@1.0.8': {}
- '@types/node@24.5.2':
+ '@types/node@24.10.1':
dependencies:
- undici-types: 7.12.0
+ undici-types: 7.16.0
- '@types/sortablejs@1.15.8': {}
+ '@types/sortablejs@1.15.9': {}
'@types/web-bluetooth@0.0.21': {}
- '@vitejs/plugin-vue@5.2.4(vite@5.4.20(@types/node@24.5.2))(vue@3.5.22(typescript@5.8.3))':
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.10.1))(vue@3.5.24(typescript@5.8.3))':
dependencies:
- vite: 5.4.20(@types/node@24.5.2)
- vue: 3.5.22(typescript@5.8.3)
+ vite: 5.4.21(@types/node@24.10.1)
+ vue: 3.5.24(typescript@5.8.3)
'@volar/language-core@2.4.23':
dependencies:
@@ -1363,127 +1224,111 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue/compiler-core@3.5.22':
+ '@vue/compiler-core@3.5.24':
dependencies:
- '@babel/parser': 7.28.4
- '@vue/shared': 3.5.22
+ '@babel/parser': 7.28.5
+ '@vue/shared': 3.5.24
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.22':
+ '@vue/compiler-dom@3.5.24':
dependencies:
- '@vue/compiler-core': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-core': 3.5.24
+ '@vue/shared': 3.5.24
- '@vue/compiler-sfc@3.5.22':
+ '@vue/compiler-sfc@3.5.24':
dependencies:
- '@babel/parser': 7.28.4
- '@vue/compiler-core': 3.5.22
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
+ '@babel/parser': 7.28.5
+ '@vue/compiler-core': 3.5.24
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-ssr': 3.5.24
+ '@vue/shared': 3.5.24
estree-walker: 2.0.2
- magic-string: 0.30.19
+ magic-string: 0.30.21
postcss: 8.5.6
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.22':
- dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
-
- '@vue/compiler-vue2@2.7.16':
+ '@vue/compiler-ssr@3.5.24':
dependencies:
- de-indent: 1.0.2
- he: 1.2.0
+ '@vue/compiler-dom': 3.5.24
+ '@vue/shared': 3.5.24
'@vue/devtools-api@6.6.4': {}
- '@vue/devtools-api@7.7.7':
+ '@vue/devtools-api@7.7.9':
dependencies:
- '@vue/devtools-kit': 7.7.7
+ '@vue/devtools-kit': 7.7.9
- '@vue/devtools-kit@7.7.7':
+ '@vue/devtools-kit@7.7.9':
dependencies:
- '@vue/devtools-shared': 7.7.7
- birpc: 2.6.1
+ '@vue/devtools-shared': 7.7.9
+ birpc: 2.8.0
hookable: 5.5.3
mitt: 3.0.1
perfect-debounce: 1.0.0
speakingurl: 14.0.1
- superjson: 2.2.2
+ superjson: 2.2.5
- '@vue/devtools-shared@7.7.7':
+ '@vue/devtools-shared@7.7.9':
dependencies:
rfdc: 1.4.1
- '@vue/language-core@3.0.8(typescript@5.8.3)':
+ '@vue/language-core@3.1.5(typescript@5.8.3)':
dependencies:
'@volar/language-core': 2.4.23
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-vue2': 2.7.16
- '@vue/shared': 3.5.22
- alien-signals: 2.0.8
+ '@vue/compiler-dom': 3.5.24
+ '@vue/shared': 3.5.24
+ alien-signals: 3.1.0
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.3
optionalDependencies:
typescript: 5.8.3
- '@vue/reactivity@3.5.22':
+ '@vue/reactivity@3.5.24':
dependencies:
- '@vue/shared': 3.5.22
+ '@vue/shared': 3.5.24
- '@vue/runtime-core@3.5.22':
+ '@vue/runtime-core@3.5.24':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/reactivity': 3.5.24
+ '@vue/shared': 3.5.24
- '@vue/runtime-dom@3.5.22':
+ '@vue/runtime-dom@3.5.24':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/runtime-core': 3.5.22
- '@vue/shared': 3.5.22
- csstype: 3.1.3
+ '@vue/reactivity': 3.5.24
+ '@vue/runtime-core': 3.5.24
+ '@vue/shared': 3.5.24
+ csstype: 3.2.3
- '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.8.3))':
+ '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.8.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
- vue: 3.5.22(typescript@5.8.3)
+ '@vue/compiler-ssr': 3.5.24
+ '@vue/shared': 3.5.24
+ vue: 3.5.24(typescript@5.8.3)
- '@vue/shared@3.5.22': {}
+ '@vue/shared@3.5.24': {}
- '@vue/tsconfig@0.8.1(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))':
+ '@vue/tsconfig@0.8.1(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3))':
optionalDependencies:
typescript: 5.8.3
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.24(typescript@5.8.3)
- '@vueuse/core@14.0.0-alpha.0(vue@3.5.22(typescript@5.8.3))':
+ '@vueuse/core@14.0.0-alpha.0(vue@3.5.24(typescript@5.8.3))':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 14.0.0-alpha.0
- '@vueuse/shared': 14.0.0-alpha.0(vue@3.5.22(typescript@5.8.3))
- vue: 3.5.22(typescript@5.8.3)
+ '@vueuse/shared': 14.0.0-alpha.0(vue@3.5.24(typescript@5.8.3))
+ vue: 3.5.24(typescript@5.8.3)
'@vueuse/metadata@14.0.0-alpha.0': {}
- '@vueuse/shared@14.0.0-alpha.0(vue@3.5.22(typescript@5.8.3))':
+ '@vueuse/shared@14.0.0-alpha.0(vue@3.5.24(typescript@5.8.3))':
dependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.24(typescript@5.8.3)
- alien-signals@2.0.8: {}
-
- ansi-regex@5.0.1: {}
-
- ansi-regex@6.2.2: {}
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@6.2.3: {}
+ alien-signals@3.1.0: {}
any-promise@1.3.0: {}
@@ -1496,11 +1341,11 @@ snapshots:
asynckit@0.4.0: {}
- autoprefixer@10.4.21(postcss@8.5.6):
+ autoprefixer@10.4.22(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
- caniuse-lite: 1.0.30001745
- fraction.js: 4.3.7
+ browserslist: 4.28.0
+ caniuse-lite: 1.0.30001756
+ fraction.js: 5.3.4
normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 8.5.6
@@ -1514,29 +1359,23 @@ snapshots:
transitivePeerDependencies:
- debug
- balanced-match@1.0.2: {}
-
- baseline-browser-mapping@2.8.8: {}
+ baseline-browser-mapping@2.8.30: {}
binary-extensions@2.3.0: {}
- birpc@2.6.1: {}
-
- brace-expansion@2.0.2:
- dependencies:
- balanced-match: 1.0.2
+ birpc@2.8.0: {}
braces@3.0.3:
dependencies:
fill-range: 7.1.1
- browserslist@4.26.2:
+ browserslist@4.28.0:
dependencies:
- baseline-browser-mapping: 2.8.8
- caniuse-lite: 1.0.30001745
- electron-to-chromium: 1.5.226
- node-releases: 2.0.21
- update-browserslist-db: 1.1.3(browserslist@4.26.2)
+ baseline-browser-mapping: 2.8.30
+ caniuse-lite: 1.0.30001756
+ electron-to-chromium: 1.5.259
+ node-releases: 2.0.27
+ update-browserslist-db: 1.1.4(browserslist@4.28.0)
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -1545,7 +1384,7 @@ snapshots:
camelcase-css@2.0.1: {}
- caniuse-lite@1.0.30001745: {}
+ caniuse-lite@1.0.30001756: {}
chokidar@3.6.0:
dependencies:
@@ -1565,33 +1404,19 @@ snapshots:
clsx@2.1.1: {}
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
commander@4.1.1: {}
- copy-anything@3.0.5:
+ copy-anything@4.0.5:
dependencies:
- is-what: 4.1.16
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
+ is-what: 5.5.0
cssesc@3.0.0: {}
- csstype@3.1.3: {}
-
- de-indent@1.0.2: {}
+ csstype@3.2.3: {}
delayed-stream@1.0.0: {}
@@ -1605,13 +1430,7 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- eastasianwidth@0.2.0: {}
-
- electron-to-chromium@1.5.226: {}
-
- emoji-regex@8.0.0: {}
-
- emoji-regex@9.2.2: {}
+ electron-to-chromium@1.5.259: {}
entities@4.5.0: {}
@@ -1672,17 +1491,16 @@ snapshots:
dependencies:
reusify: 1.1.0
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
follow-redirects@1.15.11: {}
- foreground-child@3.3.1:
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
-
form-data@4.0.5:
dependencies:
asynckit: 0.4.0
@@ -1691,7 +1509,7 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
- fraction.js@4.3.7: {}
+ fraction.js@5.3.4: {}
fsevents@2.3.3:
optional: true
@@ -1724,15 +1542,6 @@ snapshots:
dependencies:
is-glob: 4.0.3
- glob@10.4.5:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
gopd@1.2.0: {}
has-symbols@1.1.0: {}
@@ -1745,8 +1554,6 @@ snapshots:
dependencies:
function-bind: 1.1.2
- he@1.2.0: {}
-
hookable@5.5.3: {}
is-binary-path@2.1.0:
@@ -1759,23 +1566,13 @@ snapshots:
is-extglob@2.1.1: {}
- is-fullwidth-code-point@3.0.0: {}
-
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-number@7.0.0: {}
- is-what@4.1.16: {}
-
- isexe@2.0.0: {}
-
- jackspeak@3.4.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
+ is-what@5.5.0: {}
jiti@1.21.7: {}
@@ -1783,13 +1580,11 @@ snapshots:
lines-and-columns@1.2.4: {}
- lru-cache@10.4.3: {}
-
- lucide-vue-next@0.544.0(vue@3.5.22(typescript@5.8.3)):
+ lucide-vue-next@0.544.0(vue@3.5.24(typescript@5.8.3)):
dependencies:
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.24(typescript@5.8.3)
- magic-string@0.30.19:
+ magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -1808,12 +1603,6 @@ snapshots:
dependencies:
mime-db: 1.52.0
- minimatch@9.0.5:
- dependencies:
- brace-expansion: 2.0.2
-
- minipass@7.1.2: {}
-
mitt@3.0.1: {}
muggle-string@0.4.1: {}
@@ -1826,7 +1615,7 @@ snapshots:
nanoid@3.3.11: {}
- node-releases@2.0.21: {}
+ node-releases@2.0.27: {}
normalize-path@3.0.0: {}
@@ -1836,19 +1625,10 @@ snapshots:
object-hash@3.0.0: {}
- package-json-from-dist@1.0.1: {}
-
path-browserify@1.0.1: {}
- path-key@3.1.1: {}
-
path-parse@1.0.7: {}
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
-
perfect-debounce@1.0.0: {}
picocolors@1.1.1: {}
@@ -1859,10 +1639,10 @@ snapshots:
pify@2.3.0: {}
- pinia@3.0.3(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)):
+ pinia@3.0.4(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3)):
dependencies:
- '@vue/devtools-api': 7.7.7
- vue: 3.5.22(typescript@5.8.3)
+ '@vue/devtools-api': 7.7.9
+ vue: 3.5.24(typescript@5.8.3)
optionalDependencies:
typescript: 5.8.3
@@ -1873,18 +1653,18 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
read-cache: 1.0.0
- resolve: 1.22.10
+ resolve: 1.22.11
postcss-js@4.1.0(postcss@8.5.6):
dependencies:
camelcase-css: 2.0.1
postcss: 8.5.6
- postcss-load-config@4.0.2(postcss@8.5.6):
+ postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6):
dependencies:
lilconfig: 3.1.3
- yaml: 2.8.1
optionalDependencies:
+ jiti: 1.21.7
postcss: 8.5.6
postcss-nested@6.2.0(postcss@8.5.6):
@@ -1917,7 +1697,7 @@ snapshots:
dependencies:
picomatch: 2.3.1
- resolve@1.22.10:
+ resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
@@ -1927,89 +1707,61 @@ snapshots:
rfdc@1.4.1: {}
- rollup@4.52.3:
+ rollup@4.53.3:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.52.3
- '@rollup/rollup-android-arm64': 4.52.3
- '@rollup/rollup-darwin-arm64': 4.52.3
- '@rollup/rollup-darwin-x64': 4.52.3
- '@rollup/rollup-freebsd-arm64': 4.52.3
- '@rollup/rollup-freebsd-x64': 4.52.3
- '@rollup/rollup-linux-arm-gnueabihf': 4.52.3
- '@rollup/rollup-linux-arm-musleabihf': 4.52.3
- '@rollup/rollup-linux-arm64-gnu': 4.52.3
- '@rollup/rollup-linux-arm64-musl': 4.52.3
- '@rollup/rollup-linux-loong64-gnu': 4.52.3
- '@rollup/rollup-linux-ppc64-gnu': 4.52.3
- '@rollup/rollup-linux-riscv64-gnu': 4.52.3
- '@rollup/rollup-linux-riscv64-musl': 4.52.3
- '@rollup/rollup-linux-s390x-gnu': 4.52.3
- '@rollup/rollup-linux-x64-gnu': 4.52.3
- '@rollup/rollup-linux-x64-musl': 4.52.3
- '@rollup/rollup-openharmony-arm64': 4.52.3
- '@rollup/rollup-win32-arm64-msvc': 4.52.3
- '@rollup/rollup-win32-ia32-msvc': 4.52.3
- '@rollup/rollup-win32-x64-gnu': 4.52.3
- '@rollup/rollup-win32-x64-msvc': 4.52.3
+ '@rollup/rollup-android-arm-eabi': 4.53.3
+ '@rollup/rollup-android-arm64': 4.53.3
+ '@rollup/rollup-darwin-arm64': 4.53.3
+ '@rollup/rollup-darwin-x64': 4.53.3
+ '@rollup/rollup-freebsd-arm64': 4.53.3
+ '@rollup/rollup-freebsd-x64': 4.53.3
+ '@rollup/rollup-linux-arm-gnueabihf': 4.53.3
+ '@rollup/rollup-linux-arm-musleabihf': 4.53.3
+ '@rollup/rollup-linux-arm64-gnu': 4.53.3
+ '@rollup/rollup-linux-arm64-musl': 4.53.3
+ '@rollup/rollup-linux-loong64-gnu': 4.53.3
+ '@rollup/rollup-linux-ppc64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-musl': 4.53.3
+ '@rollup/rollup-linux-s390x-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-musl': 4.53.3
+ '@rollup/rollup-openharmony-arm64': 4.53.3
+ '@rollup/rollup-win32-arm64-msvc': 4.53.3
+ '@rollup/rollup-win32-ia32-msvc': 4.53.3
+ '@rollup/rollup-win32-x64-gnu': 4.53.3
+ '@rollup/rollup-win32-x64-msvc': 4.53.3
fsevents: 2.3.3
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- signal-exit@4.1.0: {}
-
source-map-js@1.2.1: {}
speakingurl@14.0.1: {}
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.2
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.1.2:
- dependencies:
- ansi-regex: 6.2.2
-
- sucrase@3.35.0:
+ sucrase@3.35.1:
dependencies:
'@jridgewell/gen-mapping': 0.3.13
commander: 4.1.1
- glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.7
+ tinyglobby: 0.2.15
ts-interface-checker: 0.1.13
- superjson@2.2.2:
+ superjson@2.2.5:
dependencies:
- copy-anything: 3.0.5
+ copy-anything: 4.0.5
supports-preserve-symlinks-flag@1.0.0: {}
- tailwind-merge@3.3.1: {}
+ tailwind-merge@3.4.0: {}
- tailwindcss@3.4.17:
+ tailwindcss@3.4.18:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -2028,13 +1780,14 @@ snapshots:
postcss: 8.5.6
postcss-import: 15.1.0(postcss@8.5.6)
postcss-js: 4.1.0(postcss@8.5.6)
- postcss-load-config: 4.0.2(postcss@8.5.6)
+ postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)
postcss-nested: 6.2.0(postcss@8.5.6)
postcss-selector-parser: 6.1.2
- resolve: 1.22.10
- sucrase: 3.35.0
+ resolve: 1.22.11
+ sucrase: 3.35.1
transitivePeerDependencies:
- - ts-node
+ - tsx
+ - yaml
thenify-all@1.6.0:
dependencies:
@@ -2044,6 +1797,11 @@ snapshots:
dependencies:
any-promise: 1.3.0
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -2052,66 +1810,48 @@ snapshots:
typescript@5.8.3: {}
- undici-types@7.12.0: {}
+ undici-types@7.16.0: {}
- update-browserslist-db@1.1.3(browserslist@4.26.2):
+ update-browserslist-db@1.1.4(browserslist@4.28.0):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.28.0
escalade: 3.2.0
picocolors: 1.1.1
util-deprecate@1.0.2: {}
- vite@5.4.20(@types/node@24.5.2):
+ vite@5.4.21(@types/node@24.10.1):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
- rollup: 4.52.3
+ rollup: 4.53.3
optionalDependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.10.1
fsevents: 2.3.3
vscode-uri@3.1.0: {}
- vue-draggable-plus@0.6.0(@types/sortablejs@1.15.8):
+ vue-draggable-plus@0.6.0(@types/sortablejs@1.15.9):
dependencies:
- '@types/sortablejs': 1.15.8
+ '@types/sortablejs': 1.15.9
- vue-router@4.5.1(vue@3.5.22(typescript@5.8.3)):
+ vue-router@4.6.3(vue@3.5.24(typescript@5.8.3)):
dependencies:
'@vue/devtools-api': 6.6.4
- vue: 3.5.22(typescript@5.8.3)
+ vue: 3.5.24(typescript@5.8.3)
- vue-tsc@3.0.8(typescript@5.8.3):
+ vue-tsc@3.1.5(typescript@5.8.3):
dependencies:
'@volar/typescript': 2.4.23
- '@vue/language-core': 3.0.8(typescript@5.8.3)
+ '@vue/language-core': 3.1.5(typescript@5.8.3)
typescript: 5.8.3
- vue@3.5.22(typescript@5.8.3):
+ vue@3.5.24(typescript@5.8.3):
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-sfc': 3.5.22
- '@vue/runtime-dom': 3.5.22
- '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.8.3))
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-sfc': 3.5.24
+ '@vue/runtime-dom': 3.5.24
+ '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.8.3))
+ '@vue/shared': 3.5.24
optionalDependencies:
typescript: 5.8.3
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.2.3
- string-width: 5.1.2
- strip-ansi: 7.1.2
-
- yaml@2.8.1: {}
From a4f4e8ee0a69c5ec3cb7d049b2d8becd44faf466 Mon Sep 17 00:00:00 2001
From: MrJ200011 <1765683934@qq.com>
Date: Thu, 27 Nov 2025 17:15:51 +0800
Subject: [PATCH 2/3] feat: Modify the scheduled task to be executed once every
hour.
---
backend/services/scheduler_service.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/backend/services/scheduler_service.go b/backend/services/scheduler_service.go
index fa8983f..7c7af9f 100644
--- a/backend/services/scheduler_service.go
+++ b/backend/services/scheduler_service.go
@@ -34,7 +34,7 @@ func (s *Scheduler) Start() *cron.Cron {
c := cron.New()
// 注册定时任务:每小时第0分钟执行(与需求中的"0 * * * *"一致)
- _, err := c.AddFunc("* * * * *", s.Execute)
+ _, err := c.AddFunc("1 * * * *", s.Execute)
if err != nil {
log.Fatalf("注册定时任务失败: %v", err)
}
From f9edfedce4f0a3d7742c9469ea03f05127e3ce53 Mon Sep 17 00:00:00 2001
From: MrJ200011 <1765683934@qq.com>
Date: Thu, 27 Nov 2025 17:48:39 +0800
Subject: [PATCH 3/3] feat: Performance Optimization (Reliability and
Robustness)
---
backend/models/task.go | 10 ++---
backend/services/scheduler_service.go | 54 ++++++++++++++++++++++-----
2 files changed, 49 insertions(+), 15 deletions(-)
diff --git a/backend/models/task.go b/backend/models/task.go
index 57275b2..b6ba120 100644
--- a/backend/models/task.go
+++ b/backend/models/task.go
@@ -52,9 +52,9 @@ const (
type TaskStatus int
const (
- TaskStatusTodo TaskStatus = 1 // 待办
- TaskStatusInProgress TaskStatus = 2 // 进行中
- TaskStatusCompleted TaskStatus = 3 // 已完成
- TaskStatusCancelled TaskStatus = 4 // 已取消
- TaskStatusAlreadyRemind TaskStatus = 5 // 已归档
+ TaskStatusTodo TaskStatus = 1 // 待办
+ TaskStatusInProgress TaskStatus = 2 // 进行中
+ TaskStatusCompleted TaskStatus = 3 // 已完成
+ TaskStatusCancelled TaskStatus = 4 // 已取消
+ TaskStatusArchived TaskStatus = 5 // 已归档
)
diff --git a/backend/services/scheduler_service.go b/backend/services/scheduler_service.go
index 7c7af9f..c88aa04 100644
--- a/backend/services/scheduler_service.go
+++ b/backend/services/scheduler_service.go
@@ -1,11 +1,11 @@
package services
import (
+ "bytes"
"encoding/json"
"fmt"
"log"
"net/http"
- "strings"
"time"
"progress-wall-backend/models"
@@ -96,7 +96,7 @@ func (s *Scheduler) queryPendingTasks() ([]models.Task, error) {
return tasks, err
}
-// sendNotification 调用B8通知服务发送提醒
+// sendNotification 调用通知服务发送提醒(带重试和超时机制)
func (s *Scheduler) sendNotification(task models.Task) error {
// 构建通知 payload(按需求包含必要字段)
payload := struct {
@@ -111,24 +111,58 @@ func (s *Scheduler) sendNotification(task models.Task) error {
NotificationType: "TASK_DEADLINE_APPROACHING", // 固定通知类型
}
- // 序列化payload为JSON
+ // 序列化 payload 为 JSON
jsonData, err := json.Marshal(payload)
if err != nil {
return fmt.Errorf("序列化通知数据失败: %v", err)
}
- // 调用通知服务API
- resp, err := http.Post(
- fmt.Sprintf("%s/api/notifications", s.notificationBaseURL),
- "application/json",
- strings.NewReader(string(jsonData)),
- )
+ // 重试逻辑:最多重试 3 次,每次间隔递增(1s, 2s, 3s)
+ maxRetries := 3
+ for i := 0; i < maxRetries; i++ {
+ // 执行单次发送尝试
+ err := s.sendWithTimeout(jsonData)
+ if err == nil {
+ // 发送成功,直接返回
+ return nil
+ }
+
+ // 最后一次重试失败,返回错误
+ if i == maxRetries-1 {
+ return fmt.Errorf("通知发送失败,已重试 %d 次: %v", maxRetries, err)
+ }
+
+ // 非最后一次失败,等待后重试(间隔递增)
+ retryDelay := time.Duration(i+1) * time.Second
+ time.Sleep(retryDelay)
+ }
+
+ return nil
+}
+
+// sendWithTimeout 单次发送请求(带超时设置)
+func (s *Scheduler) sendWithTimeout(jsonData []byte) error {
+ // 创建带超时的 HTTP 客户端(超时时间 5 秒,可根据需求调整)
+ client := &http.Client{
+ Timeout: 5 * time.Second, // 关键:设置 HTTP 超时,避免请求无限阻塞
+ }
+
+ // 构建请求
+ url := fmt.Sprintf("%s/api/notifications", s.notificationBaseURL)
+ req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
+ if err != nil {
+ return fmt.Errorf("创建请求失败: %v", err)
+ }
+ req.Header.Set("Content-Type", "application/json")
+
+ // 发送请求
+ resp, err := client.Do(req)
if err != nil {
return fmt.Errorf("调用通知服务失败: %v", err)
}
defer resp.Body.Close()
- // 检查响应状态
+ // 检查响应状态码(200-299 为成功)
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
return fmt.Errorf("通知服务返回错误状态码: %d", resp.StatusCode)
}