mirror of
https://hub.gitmirror.com/https://github.com/ExamAware/ExamShowboard-Legacy.git
synced 2025-04-29 03:16:33 +00:00
commit
0595a1c7ce
BIN
.Screenshots/HomePage.png
Normal file
BIN
.Screenshots/HomePage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 314 KiB |
BIN
.Screenshots/InfoPage.png
Normal file
BIN
.Screenshots/InfoPage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 551 KiB |
70
.all-contributorsrc
Normal file
70
.all-contributorsrc
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"projectName": "exam-showboard-next",
|
||||
"projectOwner": "ProjectCampus-CH",
|
||||
"files": [
|
||||
"README.md"
|
||||
],
|
||||
"commitType": "docs",
|
||||
"commitConvention": "angular",
|
||||
"contributorsPerLine": 7,
|
||||
"contributors": [
|
||||
{
|
||||
"login": "MKStoler4096",
|
||||
"name": "MKStoler",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/178344462?v=4",
|
||||
"profile": "http://qsgz.edicdn.eu.org",
|
||||
"contributions": [
|
||||
"code",
|
||||
"bug"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Jursin",
|
||||
"name": "Jursin",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/127487914?v=4",
|
||||
"profile": "https://github.com/Jursin",
|
||||
"contributions": [
|
||||
"content",
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "hello8693DSZ",
|
||||
"name": "Hello8693",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/88492699?v=4",
|
||||
"profile": "https://github.com/hello8693DSZ",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "fhzit",
|
||||
"name": "fhzit",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/152045732?v=4",
|
||||
"profile": "https://github.com/fhzit",
|
||||
"contributions": [
|
||||
"code",
|
||||
"bug",
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "wjj-8283",
|
||||
"name": "wjj-8283",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/82750345?v=4",
|
||||
"profile": "https://github.com/wjj-8283",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "dependabot",
|
||||
"name": "Dependabot",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/27347476?v=4",
|
||||
"profile": "https://github.com/features/security",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
90
.github/ISSUE_TEMPLATE/BugReport.yml
vendored
Normal file
90
.github/ISSUE_TEMPLATE/BugReport.yml
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
name: Bug 反馈
|
||||
description: 在使用考试看板 Next 的过程中遇到了 Bug 。
|
||||
title: (在这里输入你的标题)
|
||||
labels: ['Bug', '未阅读']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
感谢您进行 Bug 反馈。请在上面的文本框⬆️起一个能够清晰描述您的问题的标题,便于开发者解决您的问题。
|
||||
|
||||
> [!important]
|
||||
>
|
||||
> 如果要提出**多个 Bug **,请为每一个 Bug 开一个单独的 issue。
|
||||
>
|
||||
> 如果您不知道如何有效、精准地表述,建议先阅读[《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)。
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: 检查清单
|
||||
description: 在开始反馈这个问题之前,请先检查:
|
||||
options:
|
||||
- label: 我已更新到最新版  ,并看过[最新提交](https://github.com/ProjectCampus-CH/dsz-exam-showboard-next/commits/dev/),确认这一 Bug 还没有修复。
|
||||
required: true
|
||||
- label: 我已在 [Issues](https://github.com/ProjectCampus-CH/dsz-exam-showboard-next/issues?q=label%3ABug) 中检索,确认这一 Bug 未被提交过。
|
||||
required: true
|
||||
- label: 我已知晓并同意,此处仅用于汇报程序中存在的问题(关于其他非程序本身的问题应当在 Discussion 板块提出)。
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### Bug 信息
|
||||
|
||||
描述您遇到的 Bug。您可以附上截图、录屏、堆栈跟踪、日志等材料,便于开发者追踪问题。
|
||||
- type: textarea
|
||||
id: excepted
|
||||
attributes:
|
||||
label: 期望的行为
|
||||
description: 详细的描述你期望发生的行为,突出与目前(可能不正确的)行为的不同。
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: 实际结果
|
||||
description: 实际发生的行为。
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduce-steps
|
||||
attributes:
|
||||
label: 重现步骤
|
||||
description: |
|
||||
详细描述怎么操作能再次触发这个 Bug 。
|
||||
placeholder: |
|
||||
1. 首先……
|
||||
2. 然后……
|
||||
3. ……
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: stacktrace
|
||||
attributes:
|
||||
label: 堆栈跟踪(可选)
|
||||
description: 如果在遇到这个 Bug 时发生了崩溃(弹出崩溃提示),或者产生了错误日志,请将产生的堆栈跟踪信息粘贴到此处,便于开发者定位 Bug 。
|
||||
render: shell
|
||||
- type: input
|
||||
id: app_version
|
||||
attributes:
|
||||
label: 应用版本
|
||||
description: 您当前使用的考试看板 Next 版本号,可以在【关于】中查看。
|
||||
placeholder: 如:1.2.0
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: os_version
|
||||
attributes:
|
||||
label: 操作系统版本
|
||||
description: |
|
||||
您当前使用的 Windows 操作系统版本,可以运行 `winver.exe` 查看。
|
||||
如果您不能肯定此 Bug 与操作系统无关,请填写此项。
|
||||
placeholder: 如:10.0.22000.0
|
||||
- type: checkboxes
|
||||
id: revision
|
||||
attributes:
|
||||
label: 最后一步
|
||||
description: 回顾您的回答
|
||||
options:
|
||||
- label: 我认为上述的描述已经足以详细,以允许开发人员能复现该问题。如果我的 issue 没有按照上述的要求填写,可能会被无条件关闭。
|
||||
required: true
|
48
.github/ISSUE_TEMPLATE/FeatureRequest.yml
vendored
Normal file
48
.github/ISSUE_TEMPLATE/FeatureRequest.yml
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
name: 功能请求
|
||||
description: 提出一项新的功能。
|
||||
title: (在这里输入你的标题)
|
||||
labels: ['新功能', '未阅读']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
感谢您贡献您的想法。请在上面的文本框⬆️起一个能够清晰概括此功能的标题,便于开发者了解您的想法。
|
||||
|
||||
> [!important]
|
||||
> 重要:如果您想要提出 **多项功能**,请为每一个功能开一个单独的 issue。
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: 检查清单
|
||||
description: 在开始反馈这个问题之前,请先检查:
|
||||
options:
|
||||
- label: 我已将本应用更新到最新测试版 ,并看过[最新提交](https://github.com/ClassIsland/ClassIsland/commits/dev/),确认我想要的功能还没有实现。
|
||||
required: true
|
||||
- label: 我已在 [Issues](https://github.com/ProjectCampus-CH/dsz-exam-showboard-next/issues?q=label%3A新功能) 确认我想要的功能未被提交过。
|
||||
required: true
|
||||
- label: 我认为我想要的功能是用户广泛需要的,且没有超出考试看板 Next 的开发目标,而非添加与之无关的内容。
|
||||
required: true
|
||||
- label: 我已知晓由于开发者时间精力有限,加上已经积压了大量的功能请求,我提交的功能请求可能需要比较久的时间才能实现。
|
||||
required: true
|
||||
- type: textarea
|
||||
id: back
|
||||
attributes:
|
||||
label: 背景与动机
|
||||
description: 添加此功能的理由。
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: req
|
||||
attributes:
|
||||
label: 想要实现或优化的功能
|
||||
description: 详细地描述一下你想要的功能,描述的越具体,采纳的可能性越高。
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: revision
|
||||
attributes:
|
||||
label: 最后一步
|
||||
description: 回顾您的回答
|
||||
options:
|
||||
- label: 我认为上述的描述已经足以详细,以便开发人员理解您想要的功能。如果我的 issue 没有按照上述的要求填写,可能会被无条件关闭。
|
||||
required: true
|
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 讨论区
|
||||
url: https://github.com/ProjectCampus-CH/dsz-exam-showboard-next/discussions
|
||||
about: 使用中若遇到问题或有新点子新需求,请先在这里求助和征求意见。
|
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "daily"
|
3
.github/workflows/build.yaml
vendored
3
.github/workflows/build.yaml
vendored
@ -1,9 +1,10 @@
|
||||
name: Build and Package Electron App
|
||||
name: 推送时构建
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
26
.github/workflows/inactive.yaml
vendored
Normal file
26
.github/workflows/inactive.yaml
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
name: 关闭不活跃 Issue 和 Pull Request
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
any-of-labels: 进一步提供信息, 不正确
|
||||
days-before-issue-stale: 14
|
||||
days-before-issue-close: 7
|
||||
days-before-pr-stale: 14
|
||||
days-before-pr-close: 7
|
||||
stale-issue-label: "陈旧"
|
||||
stale-pr-label: "陈旧"
|
||||
stale-issue-message: "由于此 Issue 在 14 天内没有动态,已被标记为陈旧。如果此 Issue 没有更多动态(评论等),将在 7 天后被关闭。"
|
||||
stale-pr-message: "由于此 Pull Request 在 14 天内没有动态,已被标记为陈旧。如果此 Pull Request 没有更多动态(评论等),将在 7 天后被关闭。"
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
@ -1,14 +1,17 @@
|
||||
name: Release Build and Package
|
||||
name: 打包并生成应用
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-latest, macos-latest, ubuntu-latest]
|
||||
node-version: [20.x]
|
||||
@ -16,28 +19,25 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4.1.7
|
||||
if: github.event.release.prerelease == false || matrix.os == 'windows-latest'
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
if: github.event.release.prerelease == false || matrix.os == 'windows-latest'
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install
|
||||
if: github.event.release.prerelease == false || matrix.os == 'windows-latest'
|
||||
|
||||
- name: Build and package for Windows
|
||||
if: github.event.release.prerelease == false && matrix.os == 'windows-latest'
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: yarn build:win
|
||||
|
||||
- name: Build and package for macOS
|
||||
if: github.event.release.prerelease == true && matrix.os == 'macos-latest'
|
||||
if: matrix.os == 'macos-latest'
|
||||
run: yarn build:mac
|
||||
|
||||
- name: Build and package for Linux
|
||||
if: github.event.release.prerelease == true && matrix.os == 'ubuntu-latest'
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: yarn build:linux
|
||||
|
||||
- name: Upload artifact for Windows
|
||||
@ -48,15 +48,26 @@ jobs:
|
||||
path: dist/*.exe
|
||||
|
||||
- name: Upload artifact for macOS
|
||||
if: github.event.release.prerelease == true && matrix.os == 'macos-latest'
|
||||
if: matrix.os == 'macos-latest'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ExamShowboard-macOS
|
||||
path: dist/*.dmg
|
||||
|
||||
- name: Upload artifact for Linux
|
||||
if: github.event.release.prerelease == true && matrix.os == 'ubuntu-latest'
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ExamShowboard-Linux
|
||||
path: dist/*.AppImage
|
||||
|
||||
- name: Upload assets to GitHub Release
|
||||
if: github.event_name == 'release' && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
dist/*.exe
|
||||
dist/*.dmg
|
||||
dist/*.AppImage
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
21
.github/workflows/similarity.yaml
vendored
Normal file
21
.github/workflows/similarity.yaml
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
name: 相似 Issues 分析
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
|
||||
jobs:
|
||||
similarity-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: analysis
|
||||
uses: actions-cool/issues-similarity-analysis@v1
|
||||
with:
|
||||
filter-threshold: 0.5
|
||||
comment-title: |
|
||||
### 相似 Issues
|
||||
comment-body: '${index}. ${similarity} #${number}'
|
||||
title-excludes: "(在这里输入你的标题),bug"
|
||||
since-days: 365
|
||||
show-footer: false
|
||||
show-mentioned: true
|
@ -4,3 +4,5 @@ pnpm-lock.yaml
|
||||
LICENSE.md
|
||||
tsconfig.json
|
||||
tsconfig.*.json
|
||||
.all-contributorsrc
|
||||
.github/dependabot.yml
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -25,5 +25,6 @@
|
||||
"command": "extension.execute",
|
||||
"priority": 4
|
||||
}
|
||||
]
|
||||
],
|
||||
"Codegeex.RepoIndex": true
|
||||
}
|
||||
|
180
README.md
180
README.md
@ -1,101 +1,120 @@
|
||||
# DSZ考试展板
|
||||
<div align="center">
|
||||
|
||||

|
||||
# <image src="resources/icon.png" height="36"/> ExamShowboard-Next
|
||||
|
||||
[](https://github.com/hello8693DSZ/dsz-exam-showboard)
|
||||
[](https://github.com/hello8693DSZ/dsz-exam-showboard/releases/latest)
|
||||
[](https://github.com/hello8693DSZ/dsz-exam-showboard/releases/)
|
||||
<!-- 测试-->
|
||||
|
||||
## 软件介绍
|
||||
> 下一代考试看板
|
||||
|
||||
- 您可以查看下方的详细介绍
|
||||
- 使用Vue + TypeScript + JavaScript制作,使用Node.js+Electron完善系统级功能并打包。
|
||||
- 欢迎给作者点个右上角的Star或者给作者宣传一波
|
||||
- [【点我加群】DSZ考试看板QQ交流群: 901670561](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=TIGkmk-8lHUtUj_D4BVZ95tY-MMA1IwF&authKey=2TIKZ838Aq7vWGyiMKx9vwi%2B1MfHqpCv7NZ4XpTl4QhpAW03ac7x8Gc%2FnnOougVi&noverify=0&group_code=901670561)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/stargazers)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/forks)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/watchers)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/releases)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/issues)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/discussions)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/commits/master)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next)
|
||||
|
||||
[](LICENSE)
|
||||
[](https://qm.qq.com/q/zDiEipHsaI)
|
||||
[](#贡献者)
|
||||
[](https://github.com/ProjectCampus-CH/exam-showboard-next/actions/workflows/build.yaml)
|
||||
|
||||

|
||||

|
||||
|
||||
一款显示当前时间与考试详细信息的看板类软件
|
||||
|
||||
| 下载 | [Releases](https://github.com/ProjectCampus-CH/exam-showboard-next/releases) | [Actions](https://github.com/ProjectCampus-CH/exam-showboard-next/actions) |
|
||||
| ---- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
|
||||
|
||||
</div>
|
||||
|
||||
> [!tip]
|
||||
>
|
||||
> **本软件使用 `Vue` + `TypeScript` + `JavaScript` 制作,使用 `Node.js` + `Electron` 完善系统级功能并打包。**
|
||||
|
||||
## 功能
|
||||
|
||||
### 展示考试信息
|
||||
|
||||
- [x] 展示考试名称
|
||||
- [x] 展示当前时间
|
||||
- [x] 展示当前考试科目名称
|
||||
- [x] 展示考试开始,结束时间
|
||||
- [x] 展示考试状态
|
||||
|
||||
### 其他功能
|
||||
|
||||
- [x] 考试结束十五分钟前预警
|
||||
- [ ] 集控管理(正在开发中)
|
||||
|
||||
## 软件截图
|
||||
|
||||
### 主界面截图
|
||||
|
||||

|
||||
|
||||
### 考试界面截图
|
||||
|
||||

|
||||
- 起始页展示 `打开配置` 、 `直接进入看板` 按钮
|
||||
- 看板页面
|
||||
- 上方展示 `考试标题` 、 `信息`
|
||||
- 左侧展示 `当前时间` 、 `当前科目` 、 `考试时间` 、 `考试状态`
|
||||
- 右侧展示考试科目列表,包括 `科目` 、 `开始` 、 `结束` 、 `状态`
|
||||
- 考试结束前15分钟黄字提醒
|
||||
- 集控功能(早期测试)
|
||||
- 设置页面(正在开发)
|
||||
|
||||
## 开始使用
|
||||
|
||||
### 下载
|
||||
- 下载安装程序并运行
|
||||
|
||||
对于普通用户,可以在以下渠道下载到本软件
|
||||
默认安装路径 `AppData\Local\Programs\exam-showboard`
|
||||
|
||||
下载 [Realeases](https://github.com/hello8693DSZ/dsz-exam-showboard/releases) | [Actions](https://github.com/hello8693DSZ/dsz-exam-showboard/actions)
|
||||
- 编写 `json` 配置文件<br>
|
||||
- 您可以前往[ `ExamShowBoardEditor`](https://github.com/ProjectCampus-CH/DSZExamShowBoardEditor/releases)获取生成软件<br>
|
||||
- 您可以按照[手动编写 `json` 配置文件](https://github.com/ProjectCampus-CH/exam-showboard-next/tree/master/doc/Manually-write-JSON-configuration-file.md)教程编写配置文件
|
||||
|
||||
### 准备配置文件
|
||||
|
||||
#### 新建格式为`json`的配置文件,模板如下
|
||||
- 打开软件,进入起始页面,点击 `打开配置` 按钮,选择配置文件
|
||||
- 或使用集控(仿照 [`ClassIsland` 集控使用方法](https://docs.classisland.tech/management/tutorial-create-management-config.html))
|
||||
- 新建 GitHub 公开存储仓库
|
||||
- 上传上面提到的 `exam_config.json` 文件
|
||||
- 复制 `Raw` 直链粘贴到应用`请求地址`文本框并保存
|
||||
|
||||
```json
|
||||
{
|
||||
"examName": "",
|
||||
"message": "",
|
||||
"examInfos": [
|
||||
{
|
||||
"name": "",
|
||||
"start": "XXXX-XX-XXTXX:XX:XX",
|
||||
"end": "XXXX-XX-XXTXX:XX:XX"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
> [!tip]
|
||||
>
|
||||
> 可以在 `Raw 文件` 前加上镜像源,如
|
||||
>
|
||||
> ```txt
|
||||
> https://github.moeyy.xyz/https://raw.githubusercontent.com/{owner}/{repo}/refs/heads/main/exam_config.json
|
||||
> ```
|
||||
|
||||
### 运行
|
||||
- 点击`请求配置`加载配置文件并进入看板(下次可直接点击`直接进入看板`加载上次配置文件)
|
||||
|
||||
下载完成后,将软件双击运行,等待进度条走完,双击运行桌面上的名为ExamShowboard的快捷方式
|
||||
## 遇到问题
|
||||
|
||||
### 导入配置
|
||||
💡 如果您遇到 `Bug` ,或需要提出`优化`建议或新的`功能`,请提交 [`Issues`](https://github.com/ProjectCampus-CH/exam-showboard-next/issues) 或在 [`Discussions`](https://github.com/ProjectCampus-CH/exam-showboard-next/discussions) 中讨论。
|
||||
|
||||
进入主界面后,点击打开配置按钮,选择您已配置好的配置文件,下次进入时可点击直接进入看板按钮进入考试看板,继续使用上次加载的配置文件。
|
||||
👥 您也可以加入 [`QQ群|901670561`](https://qm.qq.com/q/zDiEipHsaI)获取帮助或交流讨论。
|
||||
|
||||
🛠️ 欢迎为本软件进行改进或编写新功能提交 [`Pull Request`](https://github.com/ProjectCampus-CH/exam-showboard-next/pulls)
|
||||
|
||||
## 开发
|
||||
|
||||
要在本地编译应用您需要安装以下负载和工具
|
||||
### 推荐开发环境
|
||||
|
||||
- [VSCode](https://code.visualstudio.com/) + [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin)
|
||||
- [VSCode](https://code.visualstudio.com/)
|
||||
- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
|
||||
- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
||||
- [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)
|
||||
|
||||
### 注意事项
|
||||
> [!Caution]
|
||||
>
|
||||
> **必须使用 Yarn 包管理。Node 版本要求为20。**
|
||||
|
||||
必须使用Yarn包管理。Node版本要求为20。
|
||||
### 工程构建
|
||||
|
||||
### Project Setup
|
||||
|
||||
#### 安装
|
||||
#### 配置
|
||||
|
||||
```bash
|
||||
$ yarn
|
||||
```
|
||||
|
||||
#### Development
|
||||
#### 开发
|
||||
|
||||
```bash
|
||||
$ yarn dev
|
||||
# 如果无法显示,可以尝试使用下面的命令(不支持热重载):
|
||||
$ yarn start
|
||||
```
|
||||
|
||||
> [!important]
|
||||
>
|
||||
> **如果 dev 模式页面不显示或按钮点击无效等问题,请连续刷新至少3次后再进行操作。 build 后没有此问题。**
|
||||
|
||||
#### 构建
|
||||
|
||||
```bash
|
||||
@ -109,14 +128,41 @@ $ yarn build:mac
|
||||
$ yarn build:linux
|
||||
```
|
||||
|
||||
### 说明
|
||||
### 开发进度
|
||||
|
||||
如果dev模式页面不显示或按钮点击无效等问题,请连续刷新至少3次后再进行操作。build后没有此问题。
|
||||
- 正在 [`master`](https://github.com/ProjectCampus-CH/exam-showboard-next/commits/master) 分支上维护`1.2-Yesod`版本。
|
||||
|
||||
我们欢迎想要为本应用实现新功能或进行改进的同学提交 [Pull Request](https://github.com/hello8693DSZ/dsz-exam-showboard/pulls)
|
||||
- 正在 [`dev`](https://github.com/ProjectCampus-CH/exam-showboard-next/commits/dev) 分支上开发`1.3-HOD`版本。
|
||||
|
||||
## 贡献者
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://qsgz.edicdn.eu.org"><img src="https://avatars.githubusercontent.com/u/178344462?v=4?s=100" width="100px;" alt="MKStoler"/><br /><sub><b>MKStoler</b></sub></a><br /><a href="#code-MKStoler4096" title="Code">💻</a> <a href="#bug-MKStoler4096" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Jursin"><img src="https://avatars.githubusercontent.com/u/127487914?v=4?s=100" width="100px;" alt="Jursin"/><br /><sub><b>Jursin</b></sub></a><br /><a href="#content-Jursin" title="Content">🖋</a> <a href="#design-Jursin" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hello8693DSZ"><img src="https://avatars.githubusercontent.com/u/88492699?v=4?s=100" width="100px;" alt="Hello8693"/><br /><sub><b>Hello8693</b></sub></a><br /><a href="#code-hello8693DSZ" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fhzit"><img src="https://avatars.githubusercontent.com/u/152045732?v=4?s=100" width="100px;" alt="fhzit"/><br /><sub><b>fhzit</b></sub></a><br /><a href="#code-fhzit" title="Code">💻</a> <a href="#bug-fhzit" title="Bug reports">🐛</a> <a href="#doc-fhzit" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wjj-8283"><img src="https://avatars.githubusercontent.com/u/82750345?v=4?s=100" width="100px;" alt="wjj-8283"/><br /><sub><b>wjj-8283</b></sub></a><br /><a href="#code-wjj-8283" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/features/security"><img src="https://avatars.githubusercontent.com/u/27347476?v=4?s=100" width="100px;" alt="Dependabot"/><br /><sub><b>Dependabot</b></sub></a><br /><a href="#code-dependabot" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
## Stars 历史
|
||||
|
||||
[](https://starchart.cc/hello8693DSZ/dsz-exam-showboard)
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](https://starchart.cc/ProjectCampus-CH/exam-showboard-next/stargazers)
|
||||
|
||||
如果这个项目对您有帮助,请点亮 Star [⭐](#exam-showboard-next)
|
||||
|
||||
</div>
|
||||
|
34
doc/Manually-write-JSON-configuration-file.md
Normal file
34
doc/Manually-write-JSON-configuration-file.md
Normal file
@ -0,0 +1,34 @@
|
||||
# 手动编写json配置文件教程<br>
|
||||
## 新建文件 `exam_config.json` ,模板如下
|
||||
|
||||
> [!warning]
|
||||
>
|
||||
> 请确保 `exam_config.json` 文件编码为 `UTF-8`,换行符为 `LF`,按照`json`文件格式填写。不然可能会出一些神奇的 Bug。
|
||||
>
|
||||
> 不确定?可以使用 [VSCode](https://code.visualstudio.com/) 打开、编辑文件,右下角显示编码格式和换行方式,点击即可更改。
|
||||
|
||||
```json
|
||||
{
|
||||
"examName": "考试名称",
|
||||
"message": "信息",
|
||||
"room": "考场号",
|
||||
"examInfos": [
|
||||
{
|
||||
"name": "科目",
|
||||
"start": "2024-12-01T07:00:00",
|
||||
"end": "2024-12-01T08:00:00"
|
||||
},
|
||||
{
|
||||
"name": "科目/科目",
|
||||
"start": "2024-12-01T09:00:00",
|
||||
"end": "2024-12-01T10:00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
> [!tip]
|
||||
>
|
||||
> `message` 与 `room` 内容必填(可填空格隐藏),`examInfos` 至少需要一条数据。
|
||||
>
|
||||
> 如果有两个以"/"分隔的科目可以自动转化为双行显示
|
Binary file not shown.
Before Width: | Height: | Size: 26 KiB |
Binary file not shown.
Before Width: | Height: | Size: 63 KiB |
22
package.json
22
package.json
@ -1,10 +1,10 @@
|
||||
{
|
||||
"name": "dsz-exam-showboard",
|
||||
"version": "0.1.0",
|
||||
"description": "An Electron application with Vue",
|
||||
"name": "examshowboard",
|
||||
"version": "1.2.5",
|
||||
"description": "电子考试展示板",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "Hello8693 <hello8693@hello8693.xyz>",
|
||||
"homepage": "https://dsz.hello8693.xyz/",
|
||||
"author": "Hello8693&MKStoler <hello8693@hello8693.xyz>",
|
||||
"homepage": "https://edicdn.eu.org/",
|
||||
"scripts": {
|
||||
"preinstall": "node -e \"if (process.env.npm_execpath.indexOf('yarn') === -1) throw new Error('Use yarn for installing: https://yarnpkg.com/en/docs/install')\"",
|
||||
"format": "prettier --write .",
|
||||
@ -46,7 +46,7 @@
|
||||
"devDependencies": {
|
||||
"@commitlint/config-conventional": "^19.2.2",
|
||||
"@electron-toolkit/eslint-config": "^1.0.1",
|
||||
"@electron-toolkit/eslint-config-ts": "^1.0.1",
|
||||
"@electron-toolkit/eslint-config-ts": "^2.0.0",
|
||||
"@electron-toolkit/tsconfig": "^1.0.1",
|
||||
"@rushstack/eslint-patch": "^1.6.1",
|
||||
"@types/vue": "^2.0.0",
|
||||
@ -60,11 +60,11 @@
|
||||
"electron-icon-builder": "^2.0.1",
|
||||
"electron-vite": "^2.0.0",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-plugin-vue": "^9.20.1",
|
||||
"husky": "^9.1.5",
|
||||
"eslint-plugin-vue": "^9.32.0",
|
||||
"husky": "^9.1.7",
|
||||
"lint-staged": "^15.2.9",
|
||||
"pinia": "^2.1.7",
|
||||
"prettier": "^3.2.4",
|
||||
"prettier": "^3.4.2",
|
||||
"raw-loader": "^4.0.2",
|
||||
"roboto-fontface": "*",
|
||||
"sass": "^1.71.1",
|
||||
@ -72,11 +72,11 @@
|
||||
"unplugin-fonts": "^1.1.1",
|
||||
"unplugin-vue-components": "^0.27.3",
|
||||
"unplugin-vue-router": "^0.8.4",
|
||||
"vite": "^5.0.12",
|
||||
"vite": "^5.3.6",
|
||||
"vite-plugin-optimizer": "^1.4.3",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vite-plugin-vue-layouts": "^0.11.0",
|
||||
"vite-plugin-vuetify": "^2.0.3",
|
||||
"vite-plugin-vuetify": "^2.0.4",
|
||||
"vue-router": "^4.3.0",
|
||||
"vue-tsc": "^1.8.27"
|
||||
},
|
||||
|
@ -5,10 +5,20 @@
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>DSZ Exam Showboard</title>
|
||||
<style>
|
||||
/* 隐藏滚动条 */
|
||||
body {
|
||||
overflow: hidden;
|
||||
}
|
||||
/* 适用于所有滚动容器 */
|
||||
.no-scrollbar {
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<div id="app" class="no-scrollbar"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,46 +1,27 @@
|
||||
<template>
|
||||
<v-system-bar class="position-fixed">
|
||||
<v-icon icon="mdi-window-close" @click="ipcHandleExit"></v-icon>
|
||||
<span class="ms-2">{{ currentTime }}</span>
|
||||
</v-system-bar>
|
||||
<v-app-bar :elevation="2" class="position-fixed">
|
||||
<v-app-bar-title>{{ profileStore.appHeader }}</v-app-bar-title>
|
||||
|
||||
<template #append>
|
||||
<div class="ga-4">
|
||||
<v-btn @click="router.push('/mainWindow')">回到主页</v-btn>
|
||||
<v-btn @click="gotoHome">回到主页</v-btn>
|
||||
<v-btn @click="router.push('/about')">关于</v-btn>
|
||||
<v-icon icon="mdi-window-close" @click="ipcHandleExit"></v-icon>
|
||||
</div>
|
||||
</template>
|
||||
</v-app-bar>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, onUnmounted } from 'vue';
|
||||
import { useRouter } from 'vue-router';
|
||||
import { useProfileStore } from '../stores/app';
|
||||
|
||||
const profileStore = useProfileStore();
|
||||
const router = useRouter();
|
||||
const currentTime = ref(
|
||||
new Date().toLocaleTimeString('en-US', {
|
||||
hour: 'numeric',
|
||||
minute: 'numeric',
|
||||
hour12: false
|
||||
})
|
||||
);
|
||||
|
||||
const updateTime = () => {
|
||||
currentTime.value = new Date().toLocaleTimeString('en-US', {
|
||||
hour: 'numeric',
|
||||
minute: 'numeric',
|
||||
hour12: false
|
||||
});
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
const interval = setInterval(updateTime, 1000);
|
||||
onUnmounted(() => clearInterval(interval));
|
||||
});
|
||||
|
||||
const ipcHandleExit = () => window.electron.ipcRenderer.send('prog:exit');
|
||||
|
||||
function gotoHome() {
|
||||
router.push({ path: '/mainWindow', query: { skipAutoEnter: true } });
|
||||
}
|
||||
</script>
|
@ -1,42 +1,51 @@
|
||||
<template>
|
||||
<v-card class="mx-auto" max-width="600">
|
||||
<v-container fluid>
|
||||
<v-row justify="center">
|
||||
<v-col cols="12">
|
||||
<v-card class="mx-auto" max-width="600" flat>
|
||||
<v-container fluid class="pa-0">
|
||||
<v-row justify="center" class="ma-0">
|
||||
<v-col cols="12" class="pa-0">
|
||||
<v-data-table
|
||||
:items="sortedExams"
|
||||
:items="groupedExams"
|
||||
:headers="headers"
|
||||
item-key="name"
|
||||
hide-default-footer
|
||||
dense
|
||||
class="text-h5"
|
||||
>
|
||||
<template #header.name>
|
||||
<span class="text-h5">科目</span>
|
||||
</template>
|
||||
<template #header.start>
|
||||
<span class="text-h5">开始</span>
|
||||
</template>
|
||||
<template #header.end>
|
||||
<span class="text-h5">结束</span>
|
||||
</template>
|
||||
<template #header.status>
|
||||
<span class="text-h5">状态</span>
|
||||
</template>
|
||||
|
||||
<template #item.name="{ item }">
|
||||
<div class="text-h5">{{ item.name }}</div>
|
||||
</template>
|
||||
<template #item.start="{ item }">
|
||||
<div class="text-h5">{{ formatTime(item.start) }}</div>
|
||||
</template>
|
||||
<template #item.end="{ item }">
|
||||
<div class="text-h5">{{ formatTime(item.end) }}</div>
|
||||
</template>
|
||||
<template #item.status="{ item }">
|
||||
<template #item="{ item }">
|
||||
<tr :style="{ lineHeight: item.name.includes('/') ? '2.5rem' : '2.0rem' }">
|
||||
<td v-if="item.showDate" class="text-h5 date-column" :rowspan="item.rowspan">
|
||||
{{ item.date }}<br />{{ item.period }}
|
||||
</td>
|
||||
<td class="text-h5 subject-column">
|
||||
<div v-if="item.name.includes('/')">
|
||||
<div>{{ item.name.split('/')[0] }}</div>
|
||||
<div>{{ item.name.split('/')[1] }}</div>
|
||||
</div>
|
||||
<div v-else>{{ item.name }}</div>
|
||||
</td>
|
||||
<td class="text-h5 time-column">{{ formatTime(item.start) }}</td>
|
||||
<td class="text-h5 time-column">{{ formatTime(item.end) }}</td>
|
||||
<td class="status-column">
|
||||
<v-chip :color="getStatusColor(item)" dark class="exam-status-chip">
|
||||
{{ getStatusText(item) }}
|
||||
</v-chip>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template #header.date>
|
||||
<span class="text-h5 font-weight-bold no-wrap">日期</span>
|
||||
</template>
|
||||
<template #header.name>
|
||||
<span class="text-h5 font-weight-bold no-wrap">科目</span>
|
||||
</template>
|
||||
<template #header.start>
|
||||
<span class="text-h5 font-weight-bold no-wrap">开始</span>
|
||||
</template>
|
||||
<template #header.end>
|
||||
<span class="text-h5 font-weight-bold no-wrap">结束</span>
|
||||
</template>
|
||||
<template #header.status>
|
||||
<span class="text-h5 font-weight-bold no-wrap">状态</span>
|
||||
</template>
|
||||
</v-data-table>
|
||||
</v-col>
|
||||
@ -59,16 +68,49 @@ const state = reactive({
|
||||
exams: props.exam
|
||||
});
|
||||
|
||||
// Computed properties and methods
|
||||
const sortedExams = computed(() => {
|
||||
return state.exams.sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime());
|
||||
function formatPeriod(isoString: string): string {
|
||||
const hour = new Date(isoString).getHours();
|
||||
if (hour < 12) return '上午';
|
||||
else if (hour < 18) return '下午';
|
||||
else return '晚上';
|
||||
}
|
||||
|
||||
const groupedExams = computed(() => {
|
||||
const grouped = [];
|
||||
let currentDate = '';
|
||||
let currentPeriod = '';
|
||||
sortedExams.value.forEach((exam, index) => {
|
||||
const examDate =
|
||||
new Date(exam.start)
|
||||
.toLocaleDateString('zh-CN', { month: 'numeric', day: 'numeric' })
|
||||
.replace('/', '月') + '日';
|
||||
const period = formatPeriod(exam.start);
|
||||
const showDate = examDate !== currentDate || period !== currentPeriod;
|
||||
if (showDate) {
|
||||
currentDate = examDate;
|
||||
currentPeriod = period;
|
||||
const rowspan = sortedExams.value.filter(
|
||||
(e) =>
|
||||
new Date(e.start)
|
||||
.toLocaleDateString('zh-CN', { month: 'numeric', day: 'numeric' })
|
||||
.replace('/', '月') +
|
||||
'日' ===
|
||||
currentDate && formatPeriod(e.start) === currentPeriod
|
||||
).length;
|
||||
grouped.push({ ...exam, date: examDate, period, showDate, rowspan });
|
||||
} else {
|
||||
grouped.push({ ...exam, date: examDate, period, showDate: false });
|
||||
}
|
||||
});
|
||||
return grouped;
|
||||
});
|
||||
|
||||
const headers = [
|
||||
{ text: '科目', value: 'name' },
|
||||
{ text: '开始', value: 'start', sortable: false },
|
||||
{ text: '结束', value: 'end', sortable: false },
|
||||
{ text: '状态', value: 'status', sortable: false }
|
||||
{ text: '日期', value: 'date', sortable: false, align: 'center' },
|
||||
{ text: '科目', value: 'name', align: 'center' },
|
||||
{ text: '开始', value: 'start', sortable: false, align: 'center' },
|
||||
{ text: '结束', value: 'end', sortable: false, align: 'center' },
|
||||
{ text: '状态', value: 'status', sortable: false, align: 'center' }
|
||||
];
|
||||
|
||||
const formatTime = (isoString: string) => {
|
||||
@ -80,7 +122,6 @@ function getStatusColor(item: any): string {
|
||||
const now = new Date();
|
||||
const startTime = new Date(item.start);
|
||||
const endTime = new Date(item.end);
|
||||
|
||||
if (now < startTime) return 'orange';
|
||||
else if (now >= startTime && now <= endTime) return 'green';
|
||||
else return 'red';
|
||||
@ -90,7 +131,6 @@ function getStatusText(item: any): string {
|
||||
const now = new Date();
|
||||
const startTime = new Date(item.start);
|
||||
const endTime = new Date(item.end);
|
||||
|
||||
if (now < startTime) {
|
||||
return '未开始';
|
||||
} else if (now >= startTime && now <= endTime) {
|
||||
@ -100,14 +140,17 @@ function getStatusText(item: any): string {
|
||||
}
|
||||
}
|
||||
|
||||
// Update exams every minute
|
||||
const sortedExams = computed(() => {
|
||||
return state.exams.sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime());
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
const interval = setInterval(() => {
|
||||
state.exams = state.exams.map((exam) => ({
|
||||
...exam,
|
||||
status: getStatusText(exam)
|
||||
}));
|
||||
}, 1000); // 1000 ms = 1 second
|
||||
}, 1000);
|
||||
|
||||
onUnmounted(() => {
|
||||
clearInterval(interval);
|
||||
@ -118,9 +161,46 @@ onMounted(() => {
|
||||
<style scoped>
|
||||
.text-h5 {
|
||||
font-size: 1.8rem !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.font-weight-bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.exam-status-chip {
|
||||
font-size: 1.5rem !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* 强制标题行文字不换行 */
|
||||
.no-wrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* 列样式 */
|
||||
.date-column,
|
||||
.subject-column,
|
||||
.time-column,
|
||||
.status-column {
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
padding: 5px 2px;
|
||||
}
|
||||
|
||||
.date-column {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.subject-column {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.time-column {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.status-column {
|
||||
width: 60px;
|
||||
}
|
||||
</style>
|
||||
|
@ -1,21 +1,26 @@
|
||||
<template>
|
||||
<v-card v-if="exam" class="mx-auto pa-4 subject-info-card" max-width="600" elevation="12">
|
||||
<v-card-text>
|
||||
<div class="text-h5">
|
||||
<div class="text-h5 line-item">
|
||||
当前科目:<span class="text-h5 ml-2">{{ exam.name }}</span>
|
||||
</div>
|
||||
<div class="text-h5">
|
||||
考试时间: {{ formatDateTime(exam.start) }} ~ {{ formatDateTime(exam.end) }}
|
||||
<div class="text-h5 line-item">
|
||||
考试时间: {{ formatDateTime(exam.start) }} ~ {{ formatDateTime(exam.end) }}
|
||||
</div>
|
||||
<div class="text-h5 mt-4">
|
||||
<div class="text-h5 line-item">
|
||||
考试状态: <span :class="statusColor">{{ statusText }}</span>
|
||||
</div>
|
||||
<div v-if="isWarning" class="text-h5 text--warning">考试即将结束</div>
|
||||
<div v-if="showCountdown" class="text-h5 text--info line-item">
|
||||
开考倒计时: {{ countdown }}
|
||||
</div>
|
||||
<div v-if="showRemainingTime" :class="['text-h5', remainingTimeColorClass, 'line-item']">
|
||||
剩余时间: {{ remainingTime }}
|
||||
</div>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
|
||||
<v-card v-else class="mx-auto pa-4 subject-info-card" max-width="600" elevation="12">
|
||||
<v-card-title class="headline grey lighten-2"> 考试已结束 </v-card-title>
|
||||
<v-card-title class="headline grey lighten-2 text-center text--ended">考试已结束</v-card-title>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
@ -50,7 +55,7 @@ const statusColor = computed(() => {
|
||||
});
|
||||
|
||||
const statusText = computed(() => {
|
||||
if (!props.exam) return '考试已结束';
|
||||
if (!props.exam) return '全部考试均已结束';
|
||||
|
||||
const start = new Date(props.exam.start);
|
||||
const end = new Date(props.exam.end);
|
||||
@ -60,13 +65,56 @@ const statusText = computed(() => {
|
||||
if (now.value >= end) return '已结束';
|
||||
});
|
||||
|
||||
const isWarning = computed(() => {
|
||||
const showRemainingTime = computed(() => {
|
||||
if (!props.exam) return false;
|
||||
|
||||
const start = new Date(props.exam.start);
|
||||
const end = new Date(props.exam.end);
|
||||
|
||||
return now.value >= start && now.value < end;
|
||||
});
|
||||
|
||||
const showCountdown = computed(() => {
|
||||
if (!props.exam) return false;
|
||||
|
||||
const start = new Date(props.exam.start);
|
||||
const fifteenMinutesBeforeStart = new Date(start.getTime() - 15 * 60 * 1000);
|
||||
|
||||
return now.value >= fifteenMinutesBeforeStart && now.value < start;
|
||||
});
|
||||
|
||||
const remainingTime = computed(() => {
|
||||
if (!props.exam) return '';
|
||||
|
||||
const end = new Date(props.exam.end);
|
||||
const timeDiff = end.getTime() - now.value.getTime();
|
||||
const minutes = Math.floor(timeDiff / (1000 * 60));
|
||||
const seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
|
||||
|
||||
return `${minutes}分${seconds}秒`;
|
||||
});
|
||||
|
||||
const countdown = computed(() => {
|
||||
if (!props.exam) return '';
|
||||
|
||||
const start = new Date(props.exam.start);
|
||||
const timeDiff = start.getTime() - now.value.getTime();
|
||||
const minutes = Math.floor(timeDiff / (1000 * 60));
|
||||
const seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
|
||||
|
||||
return `${minutes}分${seconds}秒`;
|
||||
});
|
||||
|
||||
// 动态颜色样式
|
||||
const remainingTimeColorClass = computed(() => {
|
||||
if (!props.exam) return 'text--default';
|
||||
|
||||
const end = new Date(props.exam.end);
|
||||
const fifteenMinutesBeforeEnd = new Date(end.getTime() - 15 * 60 * 1000);
|
||||
|
||||
return now.value >= fifteenMinutesBeforeEnd && now.value < end;
|
||||
return now.value >= fifteenMinutesBeforeEnd && now.value < end
|
||||
? 'text--warning'
|
||||
: 'text--default';
|
||||
});
|
||||
|
||||
// Update the current time every second
|
||||
@ -82,8 +130,25 @@ updateNow();
|
||||
font-size: 2.5rem !important;
|
||||
}
|
||||
|
||||
.line-item {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.text--default {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.text--warning {
|
||||
color: #ffc107 !important; /* Vuetify's default warning color */
|
||||
color: #ff0000 !important;
|
||||
}
|
||||
|
||||
.text--info {
|
||||
color: #ffff00 !important;
|
||||
}
|
||||
|
||||
.text--ended {
|
||||
font-size: 2.5rem !important;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.status-before {
|
||||
@ -91,7 +156,7 @@ updateNow();
|
||||
}
|
||||
|
||||
.status-middle {
|
||||
color: green;
|
||||
color: rgb(0, 255, 0);
|
||||
}
|
||||
|
||||
.status-after {
|
||||
@ -101,4 +166,8 @@ updateNow();
|
||||
.subject-info-card {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
|
@ -7,5 +7,6 @@ export interface TimeSlot {
|
||||
export interface ExamSchedule {
|
||||
examName: string;
|
||||
message: string;
|
||||
room: string;
|
||||
examInfos: TimeSlot[];
|
||||
}
|
||||
|
@ -1,12 +1,54 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<AppTopBar />
|
||||
<v-main>
|
||||
<v-main class="no-scrollbar">
|
||||
<router-view />
|
||||
</v-main>
|
||||
<div class="scale-control">
|
||||
<v-select
|
||||
v-model="fontSize"
|
||||
:items="fontSizeOptions"
|
||||
label="选择字体大小"
|
||||
class="scale-select"
|
||||
></v-select>
|
||||
<div class="scale-label">调整字体大小</div>
|
||||
</div>
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
//
|
||||
import { ref, watch } from 'vue';
|
||||
|
||||
const fontSizeOptions = ['75%', '100%', '125%', '150%', '175%', '200%']; // 字体大小选项
|
||||
|
||||
const fontSize = ref('100%'); // 默认值为100%
|
||||
|
||||
watch(fontSize, (newFontSize) => {
|
||||
document.documentElement.style.fontSize = newFontSize; // 动态调整根元素的字体大小
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.no-scrollbar {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.scale-control {
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.scale-select {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.scale-label {
|
||||
margin-left: 10px;
|
||||
}
|
||||
</style>
|
||||
|
@ -25,4 +25,16 @@ app.use(VueShowdownPlugin, {
|
||||
|
||||
registerPlugins(app);
|
||||
|
||||
// 添加全局样式来隐藏滚动条
|
||||
const style = document.createElement('style');
|
||||
style.innerHTML = `
|
||||
body {
|
||||
overflow: hidden;
|
||||
}
|
||||
.no-scrollbar {
|
||||
overflow: hidden;
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
|
||||
app.mount('#app');
|
||||
|
89
src/renderer/src/pages/about.vue
Normal file
89
src/renderer/src/pages/about.vue
Normal file
@ -0,0 +1,89 @@
|
||||
<template>
|
||||
<v-container class="main-container" fill-height>
|
||||
<v-row justify="center" align="center">
|
||||
<v-col cols="12" md="10">
|
||||
<v-card class="pa-4" outlined>
|
||||
<v-card-title class="text-h3">关于考试看板</v-card-title>
|
||||
<v-card-text>
|
||||
<p class="text-lg">
|
||||
欢迎使用考试看板,这是一款用于展示考试信息的工具,帮助考生更好地了解考试信息与状态。
|
||||
</p>
|
||||
<p class="text-lg">本软件旨在为考生提供便捷的考试信息查看体验。</p>
|
||||
<p class="text-lg developer">
|
||||
开发者:
|
||||
<a href="https://github.com/hello8693DSZ" target="_blank" class="developer-name"
|
||||
>Hello8963</a
|
||||
>
|
||||
<span> </span>
|
||||
<a href="https://github.com/MKStoler4096" target="_blank" class="developer-name"
|
||||
>Mkstoler4096</a
|
||||
>
|
||||
</p>
|
||||
<v-btn
|
||||
href="https://github.com/ProjectCampus-CH/dsz-exam-showboard-next"
|
||||
target="_blank"
|
||||
color="primary"
|
||||
class="mt-4 normal-case"
|
||||
>
|
||||
在 GitHub 上查看源代码
|
||||
</v-btn>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.main-container {
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.v-card {
|
||||
width: 100%;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
transition: transform 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.v-card:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
/* 调整字体大小 */
|
||||
.text-h3 {
|
||||
font-size: 2.5em !important;
|
||||
}
|
||||
|
||||
.text-lg {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.v-btn {
|
||||
height: 48px;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.normal-case {
|
||||
text-transform: none !important;
|
||||
}
|
||||
|
||||
/* 开发者名字背景框 */
|
||||
.developer-name {
|
||||
background-color: #f0f0f0;
|
||||
color: black;
|
||||
padding: 0 6px;
|
||||
border-radius: 4px;
|
||||
display: inline-block;
|
||||
line-height: 1.4em;
|
||||
font-size: 1.2em;
|
||||
margin: 0 5px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.developer-name:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
@ -1,9 +1,13 @@
|
||||
<!-- eslint-disable @typescript-eslint/no-unused-vars -->
|
||||
<template>
|
||||
<v-container class="main-area">
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-col cols="12" class="d-flex justify-space-between align-center">
|
||||
<h1 class="large-title">{{ globalStore.examName }}</h1>
|
||||
<h2 class="medium-title">{{ globalStore.message }}</h2>
|
||||
<h2 class="room">{{ globalStore.room }}</h2>
|
||||
</v-col>
|
||||
<v-col v-if="globalStore.message" cols="12">
|
||||
<h3 class="medium-title text-left">{{ globalStore.message }}</h3>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@ -21,19 +25,45 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, onMounted, onUnmounted } from 'vue';
|
||||
import { useProfileStore } from '@renderer/stores/app';
|
||||
import { getCurrentTimeSlot, getNextExamTimeSlot } from '@renderer/utils/subjectUtils';
|
||||
|
||||
const globalStore = useProfileStore();
|
||||
const currentExam = ref(null);
|
||||
let timeout = null;
|
||||
|
||||
getCurrentTimeSlot(globalStore.examInfos);
|
||||
|
||||
const currentExam = computed(() => {
|
||||
const updateCurrentExam = () => {
|
||||
const current = getCurrentTimeSlot(globalStore.examInfos);
|
||||
if (current == null) {
|
||||
return getNextExamTimeSlot(globalStore.examInfos);
|
||||
} else {
|
||||
return current;
|
||||
currentExam.value = current ? current : getNextExamTimeSlot(globalStore.examInfos);
|
||||
};
|
||||
|
||||
const scheduleNextUpdate = () => {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
|
||||
const nextExam = getNextExamTimeSlot(globalStore.examInfos);
|
||||
if (nextExam) {
|
||||
const nextEndTime = new Date(nextExam.end).getTime();
|
||||
const now = Date.now();
|
||||
const delay = nextEndTime - now + 60000; // Next exam end time + 1 minute
|
||||
|
||||
timeout = setTimeout(() => {
|
||||
updateCurrentExam();
|
||||
scheduleNextUpdate();
|
||||
}, delay);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
updateCurrentExam();
|
||||
scheduleNextUpdate();
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@ -45,10 +75,17 @@ const currentExam = computed(() => {
|
||||
}
|
||||
|
||||
.large-title {
|
||||
font-size: 3em; /* 放大h1文字 */
|
||||
font-size: 3em;
|
||||
}
|
||||
|
||||
.medium-title {
|
||||
font-size: 1em; /* 略小一点的h2文字 */
|
||||
font-size: 2em;
|
||||
color: gray;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.room {
|
||||
font-size: 3em;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
@ -1,28 +1,82 @@
|
||||
<template>
|
||||
<v-container class="main-container" fill-height>
|
||||
<v-row justify="center" align="center">
|
||||
<v-col cols="12" md="4">
|
||||
<v-col cols="12" md="4" class="d-flex flex-column">
|
||||
<v-card class="pa-4 fade-in slide-in" outlined>
|
||||
<v-btn block color="deep-purple accent-4" dark @click="openDialog">打开配置</v-btn>
|
||||
<p class="mt-2 text-center">打开 JSON 配置文件</p>
|
||||
<v-text-field v-model="remoteUrl" label="请求地址" clearable></v-text-field>
|
||||
<v-btn block color="deep-purple accent-4" dark @click="saveUrl">保存地址</v-btn>
|
||||
<p class="mt-2 text-center">输入并保存请求地址</p>
|
||||
<v-btn block color="deep-purple accent-4" dark class="mt-2" @click="openDialog"
|
||||
>打开配置</v-btn
|
||||
>
|
||||
<p class="mt-2 text-center">打开 Json 配置文件</p>
|
||||
</v-card>
|
||||
</v-col>
|
||||
<v-col cols="12" md="4" class="mt-4 mt-md-0">
|
||||
<v-col cols="12" md="4" class="d-flex flex-column">
|
||||
<v-card class="pa-4 fade-in slide-in" outlined>
|
||||
<v-btn block color="teal accent-4" dark @click="gotoInfoPage">直接进入看板</v-btn>
|
||||
<v-btn block color="teal accent-4" dark @click="fetchConfig">请求配置</v-btn>
|
||||
<p class="mt-2 text-center">请求并加载配置</p>
|
||||
<v-btn block color="teal accent-4" dark class="mt-2" @click="gotoInfoPage"
|
||||
>直接进入看板</v-btn
|
||||
>
|
||||
<p class="mt-2 text-center">直接进入看板,将继续使用上次加载的配置</p>
|
||||
<v-switch
|
||||
v-model="autoEnter"
|
||||
label="下次自动进入看板"
|
||||
class="mt-2 auto-enter-switch"
|
||||
></v-switch>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<v-dialog v-model="errorDialog" max-width="500">
|
||||
<v-card>
|
||||
<v-card-title class="headline">错误</v-card-title>
|
||||
<v-card-text>{{ errorMessage }}</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-btn color="red darken-1" text @click="errorDialog = false">关闭</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useRouter } from 'vue-router';
|
||||
import { ref, onMounted, watch } from 'vue';
|
||||
import { useRouter, useRoute } from 'vue-router';
|
||||
import { useProfileStore } from '@renderer/stores/app';
|
||||
|
||||
const globalStore = useProfileStore();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const remoteUrl = ref(localStorage.getItem('remoteUrl') || '');
|
||||
const autoEnter = ref(JSON.parse(localStorage.getItem('autoEnter') || 'false'));
|
||||
const errorDialog = ref(false);
|
||||
const errorMessage = ref('');
|
||||
|
||||
function saveUrl() {
|
||||
localStorage.setItem('remoteUrl', remoteUrl.value);
|
||||
alert('地址已保存');
|
||||
}
|
||||
|
||||
async function fetchConfig() {
|
||||
if (remoteUrl.value) {
|
||||
try {
|
||||
const configResponse = await fetch(remoteUrl.value, { cache: 'no-store' });
|
||||
if (!configResponse.ok) {
|
||||
throw new Error('无法获取配置文件');
|
||||
}
|
||||
const config = await configResponse.json();
|
||||
globalStore.$patch(config);
|
||||
router.push('/infoPage');
|
||||
} catch (error) {
|
||||
errorMessage.value = error.message;
|
||||
errorDialog.value = true;
|
||||
}
|
||||
} else {
|
||||
errorMessage.value = '请输入有效的请求地址';
|
||||
errorDialog.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
function openDialog() {
|
||||
window.electron.ipcRenderer.send('prog:loadjson');
|
||||
@ -38,6 +92,23 @@ window.electron.ipcRenderer.on('common:openFile', (event, message) => {
|
||||
globalStore.$patch(examData);
|
||||
router.push('/infoPage');
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
const savedUrl = localStorage.getItem('remoteUrl');
|
||||
if (savedUrl) {
|
||||
remoteUrl.value = savedUrl;
|
||||
}
|
||||
|
||||
// 检查路由参数是否跳过自动跳转
|
||||
const skipAutoEnter = route.query.skipAutoEnter === 'true';
|
||||
if (!skipAutoEnter && autoEnter.value) {
|
||||
router.push('/infoPage');
|
||||
}
|
||||
});
|
||||
|
||||
watch(autoEnter, (newVal) => {
|
||||
localStorage.setItem('autoEnter', JSON.stringify(newVal));
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@ -61,6 +132,11 @@ window.electron.ipcRenderer.on('common:openFile', (event, message) => {
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
.auto-enter-switch {
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.fade-in {
|
||||
animation: fadeIn 1s ease-in-out;
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<h1>测试页面</h1>
|
||||
<ExamStatus
|
||||
:exam="{
|
||||
name: '语文',
|
||||
start: '2024-07-25T08:54:52.717Z',
|
||||
end: '2024-07-25T08:55:40.428Z'
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
const router = useRouter();
|
||||
//
|
||||
</script>
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* plugins/vuetify.js
|
||||
*
|
||||
* Framework documentation: https://vuetifyjs.com`
|
||||
* Framework documentation: https://vuetifyjs.com
|
||||
*/
|
||||
|
||||
// Styles
|
||||
@ -13,6 +13,25 @@ import { createVuetify } from 'vuetify';
|
||||
|
||||
import { md3 } from 'vuetify/blueprints';
|
||||
|
||||
// 添加全局样式来隐藏滚动条
|
||||
const style = document.createElement('style');
|
||||
style.innerHTML = `
|
||||
body {
|
||||
overflow: hidden;
|
||||
}
|
||||
.no-scrollbar {
|
||||
overflow: hidden;
|
||||
}
|
||||
* {
|
||||
scrollbar-width: none; /* Firefox */
|
||||
-ms-overflow-style: none; /* Internet Explorer 10+ */
|
||||
}
|
||||
*::-webkit-scrollbar {
|
||||
display: none; /* Safari and Chrome */
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
|
||||
// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides
|
||||
export default createVuetify({
|
||||
theme: {
|
||||
|
@ -4,8 +4,9 @@ import { defineStore } from 'pinia';
|
||||
export const useProfileStore = defineStore('app', {
|
||||
state: () => ({
|
||||
examName: '考试名称',
|
||||
appHeader: 'DSZ考试看板',
|
||||
appHeader: '考试看板',
|
||||
message: '考试提醒信息',
|
||||
room: ' ',
|
||||
examInfos: []
|
||||
}),
|
||||
persist: true
|
||||
|
2
src/renderer/src/typed-router.d.ts
vendored
2
src/renderer/src/typed-router.d.ts
vendored
@ -19,8 +19,8 @@ declare module 'vue-router/auto-routes' {
|
||||
*/
|
||||
export interface RouteNamedMap {
|
||||
'/': RouteRecordInfo<'/', '/', Record<never, never>, Record<never, never>>,
|
||||
'/about': RouteRecordInfo<'/about', '/about', Record<never, never>, Record<never, never>>,
|
||||
'/infoPage': RouteRecordInfo<'/infoPage', '/infoPage', Record<never, never>, Record<never, never>>,
|
||||
'/mainWindow': RouteRecordInfo<'/mainWindow', '/mainWindow', Record<never, never>, Record<never, never>>,
|
||||
'/testComponents': RouteRecordInfo<'/testComponents', '/testComponents', Record<never, never>, Record<never, never>>,
|
||||
}
|
||||
}
|
||||
|
390
yarn.lock
390
yarn.lock
@ -355,13 +355,13 @@
|
||||
ajv "^6.12.0"
|
||||
ajv-keywords "^3.4.1"
|
||||
|
||||
"@electron-toolkit/eslint-config-ts@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@electron-toolkit/eslint-config-ts/-/eslint-config-ts-1.0.1.tgz#ee5d5e754871568fe2698b0f18d063ab04ef6092"
|
||||
integrity sha512-6RkoGE/W/WVlDozy/u6/lo5THNP5CCAPxdKpdQuYaopUfObs3o+JyxdlSb45imh+nL8nv875970EoyplntXaug==
|
||||
"@electron-toolkit/eslint-config-ts@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@electron-toolkit/eslint-config-ts/-/eslint-config-ts-2.0.0.tgz#d142cde642f05c7b9552cc8f21460d62113f7842"
|
||||
integrity sha512-NGXadMyWH9+ZsgYe/u5E0mqK2qTDq01kKKnyo7oiq/7v/dWoMoPhqSkn69NZvt7WmnFNOm57l71fv6128mAx3Q==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "^6.14.0"
|
||||
"@typescript-eslint/parser" "^6.14.0"
|
||||
"@typescript-eslint/eslint-plugin" "^7.5.0"
|
||||
"@typescript-eslint/parser" "^7.5.0"
|
||||
|
||||
"@electron-toolkit/eslint-config@^1.0.1":
|
||||
version "1.0.2"
|
||||
@ -563,7 +563,7 @@
|
||||
dependencies:
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
|
||||
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
|
||||
version "4.11.0"
|
||||
resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
|
||||
integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==
|
||||
@ -1003,85 +1003,95 @@
|
||||
estree-walker "^2.0.2"
|
||||
picomatch "^2.3.1"
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz#c3f5660f67030c493a981ac1d34ee9dfe1d8ec0f"
|
||||
integrity sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==
|
||||
"@rollup/rollup-android-arm-eabi@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz#462e7ecdd60968bc9eb95a20d185e74f8243ec1b"
|
||||
integrity sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz#64161f0b67050023a3859e723570af54a82cff5c"
|
||||
integrity sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==
|
||||
"@rollup/rollup-android-arm64@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz#78a2b8a8a55f71a295eb860a654ae90a2b168f40"
|
||||
integrity sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz#25f3d57b1da433097cfebc89341b355901615763"
|
||||
integrity sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==
|
||||
"@rollup/rollup-darwin-arm64@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz#5b783af714f434f1e66e3cdfa3817e0b99216d84"
|
||||
integrity sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz#d8ddaffb636cc2f59222c50316e27771e48966df"
|
||||
integrity sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==
|
||||
"@rollup/rollup-darwin-x64@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz#f72484e842521a5261978034e18e20f778a2850d"
|
||||
integrity sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz#41bd4fcffa20fb84f3dbac6c5071638f46151885"
|
||||
integrity sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==
|
||||
"@rollup/rollup-freebsd-arm64@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz#3c919dff72b2fe344811a609c674a8347b033f62"
|
||||
integrity sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz#842077c5113a747eb5686f19f2f18c33ecc0acc8"
|
||||
integrity sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==
|
||||
"@rollup/rollup-freebsd-x64@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz#b62a3a8365b363b3fdfa6da11a9188b6ab4dca7c"
|
||||
integrity sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz#65d1d5b6778848f55b7823958044bf3e8737e5b7"
|
||||
integrity sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz#0d02cc55bd229bd8ca5c54f65f916ba5e0591c94"
|
||||
integrity sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz#50eef7d6e24d0fe3332200bb666cad2be8afcf86"
|
||||
integrity sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz#c51d379263201e88a60e92bd8e90878f0c044425"
|
||||
integrity sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==
|
||||
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz#8837e858f53c84607f05ad0602943e96d104c6b4"
|
||||
integrity sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==
|
||||
"@rollup/rollup-linux-arm64-gnu@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz#93ce2addc337b5cfa52b84f8e730d2e36eb4339b"
|
||||
integrity sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz#c894ade2300caa447757ddf45787cca246e816a4"
|
||||
integrity sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==
|
||||
"@rollup/rollup-linux-arm64-musl@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz#730af6ddc091a5ba5baac28a3510691725dc808b"
|
||||
integrity sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz#5841e5390d4c82dd5cdf7b2c95a830e3c2f47dd3"
|
||||
integrity sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz#b5565aac20b4de60ca1e557f525e76478b5436af"
|
||||
integrity sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz#cc1f26398bf777807a99226dc13f47eb0f6c720d"
|
||||
integrity sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz#d488290bf9338bad4ae9409c4aa8a1728835a20b"
|
||||
integrity sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz#1507465d9056e0502a590d4c1a00b4d7b1fda370"
|
||||
integrity sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==
|
||||
"@rollup/rollup-linux-s390x-gnu@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz#eb2e3f3a06acf448115045c11a5a96868c95a556"
|
||||
integrity sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz#86a221f01a2c248104dd0defb4da119f2a73642e"
|
||||
integrity sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==
|
||||
"@rollup/rollup-linux-x64-gnu@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz#065952ef2aea7e837dc7e02aa500feeaff4fc507"
|
||||
integrity sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz#8bc8f77e02760aa664694b4286d6fbea7f1331c5"
|
||||
integrity sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==
|
||||
"@rollup/rollup-linux-x64-musl@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz#3435d484d05f5c4d1ffd54541b4facce2887103a"
|
||||
integrity sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.20.0":
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz#601fffee719a1e8447f908aca97864eec23b2784"
|
||||
integrity sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==
|
||||
"@rollup/rollup-win32-arm64-msvc@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz#69682a2a10d9fedc334f87583cfca83c39c08077"
|
||||
integrity sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz#b64470f9ac79abb386829c56750b9a4711be3332"
|
||||
integrity sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.28.0":
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz#cb313feef9ac6e3737067fdf34f42804ac65a6f2"
|
||||
integrity sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==
|
||||
|
||||
"@rushstack/eslint-patch@^1.6.1":
|
||||
version "1.10.4"
|
||||
@ -1220,7 +1230,12 @@
|
||||
dependencies:
|
||||
"@types/ms" "*"
|
||||
|
||||
"@types/estree@1.0.5", "@types/estree@^1.0.0":
|
||||
"@types/estree@1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
|
||||
integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
|
||||
|
||||
"@types/estree@^1.0.0":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
|
||||
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
|
||||
@ -1237,7 +1252,7 @@
|
||||
resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
|
||||
integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
|
||||
|
||||
"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8":
|
||||
"@types/json-schema@^7.0.8":
|
||||
version "7.0.15"
|
||||
resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
|
||||
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
|
||||
@ -1288,11 +1303,6 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/semver@^7.5.0":
|
||||
version "7.5.8"
|
||||
resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
|
||||
integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
|
||||
|
||||
"@types/showdown@^2.0.1":
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmmirror.com/@types/showdown/-/showdown-2.0.6.tgz#3d7affd5f971b4a17783ec2b23b4ad3b97477b7e"
|
||||
@ -1329,24 +1339,7 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^6.14.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3"
|
||||
integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.5.1"
|
||||
"@typescript-eslint/scope-manager" "6.21.0"
|
||||
"@typescript-eslint/type-utils" "6.21.0"
|
||||
"@typescript-eslint/utils" "6.21.0"
|
||||
"@typescript-eslint/visitor-keys" "6.21.0"
|
||||
debug "^4.3.4"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.2.4"
|
||||
natural-compare "^1.4.0"
|
||||
semver "^7.5.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^7.1.1":
|
||||
"@typescript-eslint/eslint-plugin@^7.1.1", "@typescript-eslint/eslint-plugin@^7.5.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3"
|
||||
integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==
|
||||
@ -1361,18 +1354,7 @@
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/parser@^6.14.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
|
||||
integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "6.21.0"
|
||||
"@typescript-eslint/types" "6.21.0"
|
||||
"@typescript-eslint/typescript-estree" "6.21.0"
|
||||
"@typescript-eslint/visitor-keys" "6.21.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/parser@^7.1.1":
|
||||
"@typescript-eslint/parser@^7.1.1", "@typescript-eslint/parser@^7.5.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0"
|
||||
integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==
|
||||
@ -1383,14 +1365,6 @@
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@6.21.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
|
||||
integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "6.21.0"
|
||||
"@typescript-eslint/visitor-keys" "6.21.0"
|
||||
|
||||
"@typescript-eslint/scope-manager@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83"
|
||||
@ -1399,16 +1373,6 @@
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
|
||||
"@typescript-eslint/type-utils@6.21.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e"
|
||||
integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "6.21.0"
|
||||
"@typescript-eslint/utils" "6.21.0"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/type-utils@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b"
|
||||
@ -1419,30 +1383,11 @@
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/types@6.21.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
|
||||
integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
|
||||
|
||||
"@typescript-eslint/types@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9"
|
||||
integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
|
||||
|
||||
"@typescript-eslint/typescript-estree@6.21.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
|
||||
integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "6.21.0"
|
||||
"@typescript-eslint/visitor-keys" "6.21.0"
|
||||
debug "^4.3.4"
|
||||
globby "^11.1.0"
|
||||
is-glob "^4.0.3"
|
||||
minimatch "9.0.3"
|
||||
semver "^7.5.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/typescript-estree@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931"
|
||||
@ -1457,19 +1402,6 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/utils@6.21.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134"
|
||||
integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
"@types/json-schema" "^7.0.12"
|
||||
"@types/semver" "^7.5.0"
|
||||
"@typescript-eslint/scope-manager" "6.21.0"
|
||||
"@typescript-eslint/types" "6.21.0"
|
||||
"@typescript-eslint/typescript-estree" "6.21.0"
|
||||
semver "^7.5.4"
|
||||
|
||||
"@typescript-eslint/utils@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f"
|
||||
@ -1480,14 +1412,6 @@
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/typescript-estree" "7.18.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@6.21.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
|
||||
integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "6.21.0"
|
||||
eslint-visitor-keys "^3.4.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7"
|
||||
@ -2601,9 +2525,9 @@ crc@^3.8.0:
|
||||
buffer "^5.1.0"
|
||||
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
|
||||
dependencies:
|
||||
path-key "^3.1.0"
|
||||
shebang-command "^2.0.0"
|
||||
@ -3244,17 +3168,17 @@ eslint-plugin-prettier@^5.0.0:
|
||||
prettier-linter-helpers "^1.0.0"
|
||||
synckit "^0.9.1"
|
||||
|
||||
eslint-plugin-vue@^9.20.1:
|
||||
version "9.27.0"
|
||||
resolved "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz#c22dae704a03d9ecefa81364ff89f60ce0481f94"
|
||||
integrity sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==
|
||||
eslint-plugin-vue@^9.32.0:
|
||||
version "9.32.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz#2b558e827886b567dfaa156cc1cad0f596461fab"
|
||||
integrity sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
globals "^13.24.0"
|
||||
natural-compare "^1.4.0"
|
||||
nth-check "^2.1.1"
|
||||
postcss-selector-parser "^6.0.15"
|
||||
semver "^7.6.0"
|
||||
semver "^7.6.3"
|
||||
vue-eslint-parser "^9.4.3"
|
||||
xml-name-validator "^4.0.0"
|
||||
|
||||
@ -4131,10 +4055,10 @@ human-signals@^5.0.0:
|
||||
resolved "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
|
||||
integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
|
||||
|
||||
husky@^9.1.5:
|
||||
version "9.1.5"
|
||||
resolved "https://registry.npmmirror.com/husky/-/husky-9.1.5.tgz#2b6edede53ee1adbbd3a3da490628a23f5243b83"
|
||||
integrity sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==
|
||||
husky@^9.1.7:
|
||||
version "9.1.7"
|
||||
resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d"
|
||||
integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==
|
||||
|
||||
icon-gen@^2.0.0:
|
||||
version "2.1.0"
|
||||
@ -4168,7 +4092,7 @@ ieee754@^1.1.13, ieee754@^1.2.1:
|
||||
resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||
|
||||
ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1:
|
||||
ignore@^5.2.0, ignore@^5.3.1:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
|
||||
integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
|
||||
@ -5126,13 +5050,6 @@ min-document@^2.19.0:
|
||||
dependencies:
|
||||
dom-walk "^0.1.0"
|
||||
|
||||
minimatch@9.0.3:
|
||||
version "9.0.3"
|
||||
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
|
||||
integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
|
||||
dependencies:
|
||||
brace-expansion "^2.0.1"
|
||||
|
||||
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
@ -5808,10 +5725,10 @@ prettier-linter-helpers@^1.0.0:
|
||||
dependencies:
|
||||
fast-diff "^1.1.2"
|
||||
|
||||
prettier@^3.2.4:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.npmmirror.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
|
||||
integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
|
||||
prettier@^3.4.2:
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f"
|
||||
integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
@ -6130,28 +6047,30 @@ roboto-fontface@*:
|
||||
integrity sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==
|
||||
|
||||
rollup@^4.13.0:
|
||||
version "4.20.0"
|
||||
resolved "https://registry.npmmirror.com/rollup/-/rollup-4.20.0.tgz#f9d602161d29e178f0bf1d9f35f0a26f83939492"
|
||||
integrity sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==
|
||||
version "4.28.0"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.0.tgz#eb8d28ed43ef60a18f21d0734d230ee79dd0de77"
|
||||
integrity sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==
|
||||
dependencies:
|
||||
"@types/estree" "1.0.5"
|
||||
"@types/estree" "1.0.6"
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-android-arm-eabi" "4.20.0"
|
||||
"@rollup/rollup-android-arm64" "4.20.0"
|
||||
"@rollup/rollup-darwin-arm64" "4.20.0"
|
||||
"@rollup/rollup-darwin-x64" "4.20.0"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.20.0"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.20.0"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.20.0"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.20.0"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.20.0"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.20.0"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.20.0"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.20.0"
|
||||
"@rollup/rollup-linux-x64-musl" "4.20.0"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.20.0"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.20.0"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.20.0"
|
||||
"@rollup/rollup-android-arm-eabi" "4.28.0"
|
||||
"@rollup/rollup-android-arm64" "4.28.0"
|
||||
"@rollup/rollup-darwin-arm64" "4.28.0"
|
||||
"@rollup/rollup-darwin-x64" "4.28.0"
|
||||
"@rollup/rollup-freebsd-arm64" "4.28.0"
|
||||
"@rollup/rollup-freebsd-x64" "4.28.0"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.28.0"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.28.0"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.28.0"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.28.0"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.28.0"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.28.0"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.28.0"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.28.0"
|
||||
"@rollup/rollup-linux-x64-musl" "4.28.0"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.28.0"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.28.0"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.28.0"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
run-parallel@^1.1.9:
|
||||
@ -6252,7 +6171,7 @@ semver@^6.2.0, semver@^6.3.1:
|
||||
resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
semver@^7.3.2, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
|
||||
semver@^7.3.2, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3:
|
||||
version "7.6.3"
|
||||
resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||
@ -6532,7 +6451,7 @@ string-argv@~0.3.2:
|
||||
resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
|
||||
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
@ -6550,6 +6469,15 @@ string-width@^1.0.1, string-width@^1.0.2:
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^5.0.1, string-width@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||
@ -6610,7 +6538,7 @@ string_decoder@~1.1.1:
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
@ -6624,6 +6552,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^7.0.1, strip-ansi@^7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||
@ -6882,7 +6817,7 @@ truncate-utf8-bytes@^1.0.0:
|
||||
dependencies:
|
||||
utf8-byte-length "^1.0.1"
|
||||
|
||||
ts-api-utils@^1.0.1, ts-api-utils@^1.3.0:
|
||||
ts-api-utils@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
|
||||
integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
|
||||
@ -7251,19 +7186,19 @@ vite-plugin-vue-layouts@^0.11.0:
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
|
||||
vite-plugin-vuetify@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmmirror.com/vite-plugin-vuetify/-/vite-plugin-vuetify-2.0.3.tgz#b65ee4e05cfc6bf2b478a32b6d58b42398519f1e"
|
||||
integrity sha512-HbYajgGgb/noaVKNRhnnXIiQZrNXfNIeanUGAwXgOxL6h/KULS40Uf51Kyz8hNmdegF+DwjgXXI/8J1PNS83xw==
|
||||
vite-plugin-vuetify@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/vite-plugin-vuetify/-/vite-plugin-vuetify-2.0.4.tgz#9beb700ee50da58d83399721d6cf4b0af83202d5"
|
||||
integrity sha512-A4cliYUoP/u4AWSRVRvAPKgpgR987Pss7LpFa7s1GvOe8WjgDq92Rt3eVXrvgxGCWvZsPKziVqfHHdCMqeDhfw==
|
||||
dependencies:
|
||||
"@vuetify/loader-shared" "^2.0.3"
|
||||
debug "^4.3.3"
|
||||
upath "^2.0.1"
|
||||
|
||||
vite@^5.0.12:
|
||||
version "5.3.5"
|
||||
resolved "https://registry.npmmirror.com/vite/-/vite-5.3.5.tgz#b847f846fb2b6cb6f6f4ed50a830186138cb83d8"
|
||||
integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==
|
||||
vite@^5.3.6:
|
||||
version "5.3.6"
|
||||
resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.6.tgz#e097c0a7b79adb2e60bec9ef7907354f09d027bd"
|
||||
integrity sha512-es78AlrylO8mTVBygC0gTC0FENv0C6T496vvd33ydbjF/mIi9q3XQ9A3NWo5qLGFKywvz10J26813OkLvcQleA==
|
||||
dependencies:
|
||||
esbuild "^0.21.3"
|
||||
postcss "^8.4.39"
|
||||
@ -7394,7 +7329,7 @@ word-wrap@^1.2.5:
|
||||
resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
@ -7411,6 +7346,15 @@ wrap-ansi@^2.0.0:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||
|
Loading…
x
Reference in New Issue
Block a user