From 4d70c5167d74406ab1edd5204c9e9ffd8454f3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Sun, 15 Jun 2025 15:27:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B8=AE=E5=8A=A9=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 1 + .../gitee/sop/admin/dao/entity/HelpDoc.java | 82 ++ .../sop/admin/dao/mapper/HelpDocMapper.java | 13 + .../admin/service/help/HelpDocService.java | 55 + .../admin/service/help/dto/HelpDocDTO.java | 66 ++ .../controller/doc/param/HelpDocAddParam.java | 45 + .../doc/param/HelpDocSearchParam.java | 82 ++ .../doc/param/HelpDocUpdateParam.java | 24 + .../controller/help/HelpDocController.java | 114 ++ .../admin/controller/help/vo/HelpDocVO.java | 75 ++ sop-admin/sop-admin-frontend/package.json | 6 + sop-admin/sop-admin-frontend/pnpm-lock.yaml | 991 +++++++++++++++++- sop-admin/sop-admin-frontend/src/api/help.ts | 59 ++ .../src/components/MarkdownEditor/index.ts | 9 + .../src/components/MarkdownEditor/index.vue | 93 ++ .../src/components/RecursiveMenu.vue | 91 ++ .../sop-admin-frontend/src/style/index.scss | 6 + .../src/views/help/index.ts | 86 ++ .../src/views/help/index.vue | 130 +++ sop-admin/sop-code-gen/gen.db | Bin 0 -> 98304 bytes .../java/com/gitee/gen/GenHelpDocTest.java | 16 + .../src/test/resources/help_doc.properties | 33 + .../gitee/sop/website/dao/entity/HelpDoc.java | 74 ++ .../sop/website/dao/mapper/HelpDocMapper.java | 12 + .../website/service/common/StatusEnum.java | 29 + .../website/service/help/HelpDocService.java | 30 + .../website/service/help/dto/HelpDocDTO.java | 66 ++ .../website/WebsiteHelpController.java | 55 + .../controller/website/vo/HelpDocVO.java | 66 ++ .../sop-website-frontend/mock/asyncRoutes.ts | 21 +- .../sop-website-frontend/src/api/help.ts | 41 + .../src/components/RecursiveMenu.vue | 69 ++ .../src/views/help/index.ts | 27 + .../src/views/help/index.vue | 51 + sop.sql | 18 + upgrade/sop-20250615.sql | 18 + 36 files changed, 2649 insertions(+), 5 deletions(-) create mode 100644 sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/entity/HelpDoc.java create mode 100644 sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/mapper/HelpDocMapper.java create mode 100644 sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/HelpDocService.java create mode 100644 sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/dto/HelpDocDTO.java create mode 100644 sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocAddParam.java create mode 100644 sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocSearchParam.java create mode 100644 sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocUpdateParam.java create mode 100644 sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/HelpDocController.java create mode 100644 sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/vo/HelpDocVO.java create mode 100644 sop-admin/sop-admin-frontend/src/api/help.ts create mode 100755 sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.ts create mode 100755 sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.vue create mode 100644 sop-admin/sop-admin-frontend/src/components/RecursiveMenu.vue create mode 100644 sop-admin/sop-admin-frontend/src/views/help/index.ts create mode 100644 sop-admin/sop-admin-frontend/src/views/help/index.vue create mode 100644 sop-admin/sop-code-gen/gen.db create mode 100644 sop-admin/sop-code-gen/src/test/java/com/gitee/gen/GenHelpDocTest.java create mode 100644 sop-admin/sop-code-gen/src/test/resources/help_doc.properties create mode 100644 sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/entity/HelpDoc.java create mode 100644 sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/mapper/HelpDocMapper.java create mode 100644 sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/common/StatusEnum.java create mode 100644 sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/HelpDocService.java create mode 100644 sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/dto/HelpDocDTO.java create mode 100644 sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/WebsiteHelpController.java create mode 100644 sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/vo/HelpDocVO.java create mode 100644 sop-website/sop-website-frontend/src/api/help.ts create mode 100644 sop-website/sop-website-frontend/src/components/RecursiveMenu.vue create mode 100644 sop-website/sop-website-frontend/src/views/help/index.ts create mode 100644 sop-website/sop-website-frontend/src/views/help/index.vue create mode 100644 upgrade/sop-20250615.sql diff --git a/changelog.md b/changelog.md index c27b9157..d29718aa 100755 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ ## 日常更新 +- 2025-06-15:新增帮助文档管理。有升级SQL,见:[sop-20250615.sql](./upgrade/sop-20250615.sql) - 2025-06-11:java-sdk添加文件下载示例 - 2025-06-01:OpenContext添加charset字段 - 2025-05-18:修复网关registerAddress配置 diff --git a/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/entity/HelpDoc.java b/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/entity/HelpDoc.java new file mode 100644 index 00000000..0ae75d18 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/entity/HelpDoc.java @@ -0,0 +1,82 @@ +package com.gitee.sop.admin.dao.entity; + +import java.time.LocalDateTime; + +import com.gitee.fastmybatis.annotation.Column; +import com.gitee.fastmybatis.annotation.Pk; +import com.gitee.fastmybatis.annotation.PkStrategy; +import com.gitee.fastmybatis.annotation.Table; + +import lombok.Data; + + +/** + * 表名:help_doc + * 备注:帮助内容表 + * + * @author thc + */ +@Table(name = "help_doc", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT)) +@Data +public class HelpDoc { + + /** + * id + */ + private Long id; + + /** + * 文档名称 + */ + private String label; + + /** + * 排序 + */ + private Integer sort; + + @Column(logicDelete = true) + private Integer isDeleted; + + /** + * 状态,1:启用,2:禁用 + */ + private Integer status; + + /** + * 内容 + */ + private String content; + + /** + * 内容类型,1-Markdown,2-富文本 + */ + private Integer contentType; + + /** + * 父级id + */ + private Long parentId; + + /** + * 添加时间 + */ + private LocalDateTime addTime; + + /** + * 修改时间 + */ + private LocalDateTime updateTime; + + /** + * 创建人id + */ + private Long addBy; + + /** + * 修改人id + */ + private Long updateBy; + + +} diff --git a/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/mapper/HelpDocMapper.java b/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/mapper/HelpDocMapper.java new file mode 100644 index 00000000..cbbb246e --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/mapper/HelpDocMapper.java @@ -0,0 +1,13 @@ +package com.gitee.sop.admin.dao.mapper; + +import com.gitee.fastmybatis.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import com.gitee.sop.admin.dao.entity.HelpDoc; + +/** + * @author thc + */ +@Mapper +public interface HelpDocMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/HelpDocService.java b/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/HelpDocService.java new file mode 100644 index 00000000..9211ea8a --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/HelpDocService.java @@ -0,0 +1,55 @@ +package com.gitee.sop.admin.service.help; + +import com.gitee.fastmybatis.core.PageInfo; +import com.gitee.fastmybatis.core.query.LambdaQuery; +import com.gitee.sop.admin.common.dto.StatusUpdateDTO; +import com.gitee.sop.admin.common.support.ServiceSupport; +import com.gitee.sop.admin.common.util.CopyUtil; +import com.gitee.sop.admin.dao.entity.HelpDoc; +import com.gitee.sop.admin.dao.mapper.HelpDocMapper; +import com.gitee.sop.admin.service.help.dto.HelpDocDTO; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * @author thc + */ +@Service +public class HelpDocService implements ServiceSupport { + + public List listTree() { + return this.query() + .select(HelpDoc::getId, HelpDoc::getLabel, HelpDoc::getParentId, + HelpDoc::getAddTime, + HelpDoc::getUpdateTime) + .orderByAsc(HelpDoc::getSort) + .list(data -> CopyUtil.copyBean(data, HelpDocDTO::new)); + } + + public PageInfo doPage(LambdaQuery query) { + query.orderByDesc(HelpDoc::getId); + PageInfo page = this.page(query); + + // 格式转换 + return page.convert(isvInfo -> { + + return isvInfo; + }); + } + + + /** + * 修改状态 + * + * @param statusUpdateDTO 修改值 + * @return 返回影响行数 + */ + public int updateStatus(StatusUpdateDTO statusUpdateDTO) { + return this.query() + .eq(HelpDoc::getId, statusUpdateDTO.getId()) + .set(HelpDoc::getStatus, statusUpdateDTO.getStatus()) + .update(); + } +} diff --git a/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/dto/HelpDocDTO.java b/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/dto/HelpDocDTO.java new file mode 100644 index 00000000..fe9013b7 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service/help/dto/HelpDocDTO.java @@ -0,0 +1,66 @@ +package com.gitee.sop.admin.service.help.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class HelpDocDTO { + /** + * 主键ID,唯一标识每条帮助文档记录 + */ + private Long id; + + /** + * 文档名称,显示用的标题或标签 + */ + private String label; + + /** + * 排序字段,用于控制文档在列表中的显示顺序 + */ + private Integer sort; + + /** + * 状态字段,表示文档是否启用 + * 1:启用,2:禁用 + */ + private Byte status; + + /** + * 内容字段,存储文档的具体内容 + */ + private String content; + + /** + * 内容类型,区分内容的格式 + * 1:Markdown,2:富文本 + */ + private Byte contentType; + + /** + * 父级ID,用于构建文档的层级结构 + */ + private Long parentId; + + /** + * 添加时间,记录文档首次创建的时间 + */ + private LocalDateTime addTime; + + /** + * 更新时间,记录文档最后一次修改的时间 + */ + private LocalDateTime updateTime; + + /** + * 创建人ID,记录创建该文档的用户ID + */ + private Long addBy; + + /** + * 修改人ID,记录最后一次修改该文档的用户ID + */ + private Long updateBy; + +} diff --git a/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocAddParam.java b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocAddParam.java new file mode 100644 index 00000000..010c17a5 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocAddParam.java @@ -0,0 +1,45 @@ +package com.gitee.sop.admin.controller.doc.param; + +import lombok.Data; + + +/** + * 新增表单 + * + * @author thc + */ +@Data +public class HelpDocAddParam { + + /** + * 文档名称 + */ + private String label; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态,1:启用,2:禁用 + */ + private Integer status; + + /** + * 内容 + */ + private String content; + + /** + * 内容类型,1-Markdown,2-富文本 + */ + private Integer contentType; + + /** + * 父级id + */ + private Long parentId; + + +} diff --git a/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocSearchParam.java b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocSearchParam.java new file mode 100644 index 00000000..e77d7c57 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocSearchParam.java @@ -0,0 +1,82 @@ +package com.gitee.sop.admin.controller.doc.param; + +import java.time.LocalDateTime; +import com.gitee.fastmybatis.core.query.Operator; +import com.gitee.fastmybatis.core.query.annotation.Condition; +import com.gitee.fastmybatis.core.query.param.PageParam; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 查询表单 + * + * @author thc + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class HelpDocSearchParam extends PageParam { + private static final long serialVersionUID = 1L; + + /** + * 文档名称 + */ + @Condition(operator = Operator.like) + private String label; + + /** + * 排序 + */ + @Condition + private Integer sort; + + /** + * 状态,1:启用,2:禁用 + */ + @Condition + private Integer status; + + /** + * 内容 + */ + @Condition(operator = Operator.like) + private String content; + + /** + * 内容类型,1-Markdown,2-富文本 + */ + @Condition + private Integer contentType; + + /** + * 父级id + */ + @Condition + private Long parentId; + + /** + * 添加时间 + */ + @Condition + private LocalDateTime addTime; + + /** + * 修改时间 + */ + @Condition + private LocalDateTime updateTime; + + /** + * 创建人id + */ + @Condition + private Long addBy; + + /** + * 修改人id + */ + @Condition + private Long updateBy; + + +} diff --git a/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocUpdateParam.java b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocUpdateParam.java new file mode 100644 index 00000000..e5031803 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/doc/param/HelpDocUpdateParam.java @@ -0,0 +1,24 @@ +package com.gitee.sop.admin.controller.doc.param; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + + +/** + * 修改表单 + * + * @author thc + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class HelpDocUpdateParam extends HelpDocAddParam { + + /** + * id + */ + @NotNull(message = "id必填") + private Long id; + +} \ No newline at end of file diff --git a/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/HelpDocController.java b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/HelpDocController.java new file mode 100644 index 00000000..fed8bdaa --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/HelpDocController.java @@ -0,0 +1,114 @@ +package com.gitee.sop.admin.controller.help; + +import com.gitee.fastmybatis.core.PageInfo; +import com.gitee.fastmybatis.core.query.LambdaQuery; +import com.gitee.sop.admin.common.req.IdParam; +import com.gitee.sop.admin.common.resp.Result; +import com.gitee.sop.admin.common.util.CopyUtil; +import com.gitee.sop.admin.controller.doc.param.HelpDocAddParam; +import com.gitee.sop.admin.controller.doc.param.HelpDocSearchParam; +import com.gitee.sop.admin.controller.doc.param.HelpDocUpdateParam; +import com.gitee.sop.admin.controller.help.vo.HelpDocVO; +import com.gitee.sop.admin.dao.entity.HelpDoc; +import com.gitee.sop.admin.service.help.HelpDocService; +import com.gitee.sop.admin.service.help.dto.HelpDocDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +/** + * HelpDoc + * + * @author thc + */ +@RestController +@RequestMapping("help/doc") +public class HelpDocController { + + @Autowired + private HelpDocService helpDocService; + + /** + * 查询帮助文档树状结构 + * + * @return + */ + @GetMapping("tree") + public Result> listTree() { + List list = helpDocService.listTree(); + List retList = CopyUtil.copyList(list, HelpDocVO::new); + return Result.ok(retList); + } + + /** + * 查询帮助文档 + * + * @return + */ + @GetMapping("detail") + public Result doc(Long id) { + HelpDoc helpDoc = helpDocService.getById(id); + HelpDocVO helpDocVO = CopyUtil.copyBean(helpDoc, HelpDocVO::new); + return Result.ok(helpDocVO); + } + + /** + * 分页查询 + * + * @param param 查询参数 + * @return 返回分页结果 + */ + @GetMapping("/page") + public Result> page(HelpDocSearchParam param) { + LambdaQuery query = param.toLambdaQuery(HelpDoc.class); + PageInfo pageInfo = helpDocService.doPage(query) + .convert(data -> CopyUtil.copyBean(data, HelpDocVO::new)); + return Result.ok(pageInfo); + } + + /** + * 新增记录 + * + * @param param 表单参数 + * @return 返回添加后的主键值 + */ + @PostMapping("/add") + public Result add(@Validated @RequestBody HelpDocAddParam param) { + HelpDoc helpDoc = CopyUtil.copyBean(param, HelpDoc::new); + helpDocService.save(helpDoc); + // 返回添加后的主键值 + return Result.ok(helpDoc.getId()); + } + + /** + * 修改记录 + * + * @param param 表单数据 + * @return 返回影响行数 + */ + @PostMapping("/update") + public Result update(@Validated @RequestBody HelpDocUpdateParam param) { + HelpDoc helpDoc = CopyUtil.copyBean(param, HelpDoc::new); + return Result.ok(helpDocService.update(helpDoc)); + } + + + /** + * 删除记录 + * + * @param param 参数 + * @return 返回影响行数 + */ + @PostMapping("/delete") + public Result delete(@Validated @RequestBody IdParam param) { + return Result.ok(helpDocService.deleteById(param.getId())); + } + +} diff --git a/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/vo/HelpDocVO.java b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/vo/HelpDocVO.java new file mode 100644 index 00000000..071f8642 --- /dev/null +++ b/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller/help/vo/HelpDocVO.java @@ -0,0 +1,75 @@ +package com.gitee.sop.admin.controller.help.vo; + +import java.time.LocalDateTime; + +import com.gitee.sop.admin.service.jackson.convert.annotation.UserFormat; +import lombok.Data; + + +/** + * 返回结果 + * + * @author thc + */ +@Data +public class HelpDocVO { + + /** + * id + */ + private Long id; + + /** + * 文档名称 + */ + private String label; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态,1:启用,2:禁用 + */ + private Integer status; + + /** + * 内容 + */ + private String content = ""; + + /** + * 内容类型,1-Markdown,2-富文本 + */ + private Integer contentType; + + /** + * 父级id + */ + private Long parentId; + + /** + * 添加时间 + */ + private LocalDateTime addTime; + + /** + * 修改时间 + */ + private LocalDateTime updateTime; + + /** + * 创建人id + */ + @UserFormat + private Long addBy; + + /** + * 修改人id + */ + @UserFormat + private Long updateBy; + + +} diff --git a/sop-admin/sop-admin-frontend/package.json b/sop-admin/sop-admin-frontend/package.json index e844482a..70545014 100755 --- a/sop-admin/sop-admin-frontend/package.json +++ b/sop-admin/sop-admin-frontend/package.json @@ -48,6 +48,10 @@ "url": "https://github.com/xiaoxian521" }, "dependencies": { + "@bytemd/plugin-gemoji": "1.21.0", + "@bytemd/plugin-gfm": "1.21.0", + "@bytemd/plugin-highlight": "1.21.0", + "@bytemd/vue-next": "1.21.0", "@element-plus/icons-vue": "^2.3.1", "@pureadmin/descriptions": "1.2.1", "@pureadmin/table": "3.2.0", @@ -60,6 +64,8 @@ "dayjs": "1.11.12", "echarts": "5.5.1", "element-plus": "2.8.0", + "github-markdown-css": "5.8.1", + "highlight.js": "11.10.0", "js-cookie": "3.0.5", "localforage": "1.10.0", "mitt": "3.0.1", diff --git a/sop-admin/sop-admin-frontend/pnpm-lock.yaml b/sop-admin/sop-admin-frontend/pnpm-lock.yaml index e37da681..7604039e 100755 --- a/sop-admin/sop-admin-frontend/pnpm-lock.yaml +++ b/sop-admin/sop-admin-frontend/pnpm-lock.yaml @@ -8,6 +8,18 @@ importers: .: dependencies: + '@bytemd/plugin-gemoji': + specifier: 1.21.0 + version: 1.21.0(bytemd@1.21.0) + '@bytemd/plugin-gfm': + specifier: 1.21.0 + version: 1.21.0(bytemd@1.21.0) + '@bytemd/plugin-highlight': + specifier: 1.21.0 + version: 1.21.0(bytemd@1.21.0) + '@bytemd/vue-next': + specifier: 1.21.0 + version: 1.21.0(vue@3.4.38(typescript@5.5.4)) '@element-plus/icons-vue': specifier: ^2.3.1 version: 2.3.1(vue@3.4.38(typescript@5.5.4)) @@ -50,6 +62,12 @@ importers: element-plus: specifier: 2.8.0 version: 2.8.0(vue@3.4.38(typescript@5.5.4)) + github-markdown-css: + specifier: 5.8.1 + version: 5.8.1 + highlight.js: + specifier: 11.10.0 + version: 11.10.0 js-cookie: specifier: 3.0.5 version: 3.0.5 @@ -436,6 +454,26 @@ packages: resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} + '@bytemd/plugin-gemoji@1.21.0': + resolution: {integrity: sha512-/u90E0xHM0SmK5nt+c82UYtgm+ECq16ofp+bi/KZnzoq2vzqscflxxMRz59u2t3UejFpCMaqdIcnfzn0/eYvsA==} + peerDependencies: + bytemd: ^1.5.0 + + '@bytemd/plugin-gfm@1.21.0': + resolution: {integrity: sha512-ZlrLa+Nl80gUDeC1hTnyRDfgJU3DGQVjQvX9rIIitUCler+KsAiagEnng6S/W2SZNpv+f8eWpVNL8KA8X3d7Tg==} + peerDependencies: + bytemd: ^1.5.0 + + '@bytemd/plugin-highlight@1.21.0': + resolution: {integrity: sha512-JM9rwzj9pFBXVwxmD9mgGIQPO4cTFVHvDhffS93IMK+tqvo0Vw76zDIqJWT3f421j8iNxffGsVQQs6389u3Z9A==} + peerDependencies: + bytemd: ^1.5.0 + + '@bytemd/vue-next@1.21.0': + resolution: {integrity: sha512-0T60Pr6gJDxX7B44zli7kelGvLXogmskJL8H7iSUH1cRf1EJOmx+WbR/kS8A2we+BoqlcLmzAuCdvE+eeffW5w==} + peerDependencies: + vue: ^3.0.0 + '@commitlint/cli@19.4.0': resolution: {integrity: sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg==} engines: {node: '>=v18'} @@ -1102,15 +1140,24 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@types/codemirror@5.60.16': + resolution: {integrity: sha512-V/yHdamffSS075jit+fDxaOAmdP2liok8NSNJnAZfDJErzOheuygHZEhAJrfmk5TEyM32MhkZjwo/idX791yxw==} + '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} '@types/gradient-string@1.1.6': resolution: {integrity: sha512-LkaYxluY4G5wR1M4AKQUal2q61Di1yVVCw42ImFTuaIoQVgmV0WP1xUaLB8zwb47mp82vWTpePI9JmrjEnJ7nQ==} + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/js-cookie@3.0.6': resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} @@ -1120,21 +1167,36 @@ packages: '@types/lodash@4.17.7': resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@20.16.1': resolution: {integrity: sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + '@types/qs@6.9.15': resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} '@types/sortablejs@1.15.8': resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} + '@types/tern@0.23.9': + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/web-bluetooth@0.0.16': resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} @@ -1406,6 +1468,9 @@ packages: axios@1.7.4: resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1441,6 +1506,9 @@ packages: bundle-import@0.0.1: resolution: {integrity: sha512-L0z0iPX7t7ff5eZsK7oMEH+Ly2lzJczFKPHwrta6X8SF64a20R3wOrAOYK1MzHZVaWWugg9qlSTVfVwqvQJ2dw==} + bytemd@1.21.0: + resolution: {integrity: sha512-6nc658omwzcLdc/lT24w8G2x5pptZXiMyrQPbFuHwhYbmrLnsmKLm+9klsOx2/Lg2cYHYb2WzVh7zKZ9MZCVdg==} + c12@1.11.1: resolution: {integrity: sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==} peerDependencies: @@ -1479,6 +1547,9 @@ packages: caniuse-lite@1.0.30001651: resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1491,6 +1562,15 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1518,6 +1598,11 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + codemirror-ssr@0.65.0: + resolution: {integrity: sha512-ofTAfPkQV56SYFfymNMYJ1ELo3+Jnkw3mOLgnIiQjhonwNmNzX1OFvnihAnYRXL0PWl2kT7s0gKrLc2ExshK4g==} + peerDependencies: + '@types/codemirror': ^5.0.0 + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1548,6 +1633,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -1741,6 +1829,9 @@ packages: supports-color: optional: true + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1759,12 +1850,20 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destr@2.0.3: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1987,6 +2086,9 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2087,6 +2189,9 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gemoji@7.1.0: + resolution: {integrity: sha512-wI0YWDIfQraQMDs0yXAVQiVBZeMm/rIYssf8LZlMDdssKF19YqJKOHkv4zvwtVQTBJ0LNmErv1S+DqlVUudz8g==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2119,6 +2224,10 @@ packages: engines: {node: '>=16'} hasBin: true + github-markdown-css@5.8.1: + resolution: {integrity: sha512-8G+PFvqigBQSWLQjyzgpa2ThD9bo7+kDsriUIidGcRhXgmcaAWUIpCZf8DavJgc+xifjbCG+GvMyWr0XMXmc7g==} + engines: {node: '>=10'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2205,6 +2314,30 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + + hast-util-sanitize@4.1.0: + resolution: {integrity: sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==} + + hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + + hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + + hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -2212,6 +2345,10 @@ packages: hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + highlight.js@11.10.0: + resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==} + engines: {node: '>=12.0.0'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -2219,6 +2356,9 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} @@ -2278,6 +2418,10 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + is-core-module@2.15.0: resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} @@ -2319,6 +2463,10 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -2405,6 +2553,10 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -2510,6 +2662,9 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2522,9 +2677,51 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + + mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + + mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + + mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + + mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + + mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + + mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + + mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + + mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -2552,6 +2749,90 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + + micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + + micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + + micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + + micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + + micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + + micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + + micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -2728,6 +3009,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3246,6 +3530,9 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -3270,6 +3557,27 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + rehype-raw@6.1.1: + resolution: {integrity: sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==} + + rehype-sanitize@5.0.1: + resolution: {integrity: sha512-da/jIOjq8eYt/1r9GN6GwxIR3gde7OZ+WV8pheu1tL8K0D9KxM2AyMh+UEfke+FfdM3PvGHeYJU0Td5OWa7L5A==} + + rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + + remark-gemoji@7.0.1: + resolution: {integrity: sha512-vhjuntkvYxRgM4Um6L5N7B3SrNu3eX6jNqpqAywpAvSYPbmDPNL3I5E6zWm+KPCyh3OpKRc5OPnz7SifggzePw==} + + remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + + remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + + remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3334,6 +3642,10 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + sass@1.77.8: resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} engines: {node: '>=14.0.0'} @@ -3342,6 +3654,9 @@ packages: scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + select-files@1.0.1: + resolution: {integrity: sha512-8h4DSpjfFa0hyMP3z3ye4SxyhdaE5RgaXeScRpH7xl4YblnZSHwexmLdLNdSKwTO8H9ccDKj7Votz0io+18+BQ==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3413,6 +3728,9 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -3443,6 +3761,9 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3639,6 +3960,12 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -3694,9 +4021,30 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unimport@3.10.0: resolution: {integrity: sha512-/UvKRfWx3mNDWwWQhR62HsoM3wxHwYdTq8ellZzMOHnnw4Dp8tovgthyW7DjTrbjDL+i4idOp06voz2VKlvrLw==} + unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -3728,6 +4076,20 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + + vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vite-plugin-cdn-import@1.0.1: resolution: {integrity: sha512-lgjLxgwFSKvJLbqjVBirUZ0rQo00GpUGJzRpgQu8RyBw9LA7jaqG6fUMQzBC9qWmTGabPC3iOzwCcoi7PseRAQ==} @@ -3906,6 +4268,9 @@ packages: typescript: optional: true + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -3926,6 +4291,9 @@ packages: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} + word-count@0.2.2: + resolution: {integrity: sha512-tPRTbQ+nTCPY3F0z1f/y0PX22ScE6l/4/8j9KqA3h77JhlZ/w6cbVS8LIO5Pq/aV96SWBOoiE2IEgzxF0Cn+kA==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -3992,6 +4360,9 @@ packages: zrender@5.6.0: resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@alloc/quick-lru@5.2.0': {} @@ -4211,6 +4582,30 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@bytemd/plugin-gemoji@1.21.0(bytemd@1.21.0)': + dependencies: + bytemd: 1.21.0 + remark-gemoji: 7.0.1 + + '@bytemd/plugin-gfm@1.21.0(bytemd@1.21.0)': + dependencies: + bytemd: 1.21.0 + remark-gfm: 3.0.1 + transitivePeerDependencies: + - supports-color + + '@bytemd/plugin-highlight@1.21.0(bytemd@1.21.0)': + dependencies: + bytemd: 1.21.0 + highlight.js: 11.10.0 + + '@bytemd/vue-next@1.21.0(vue@3.4.38(typescript@5.5.4))': + dependencies: + bytemd: 1.21.0 + vue: 3.4.38(typescript@5.5.4) + transitivePeerDependencies: + - supports-color + '@commitlint/cli@19.4.0(@types/node@20.16.1)(typescript@5.5.4)': dependencies: '@commitlint/format': 19.3.0 @@ -4777,16 +5172,28 @@ snapshots: '@trysound/sax@0.2.0': {} + '@types/codemirror@5.60.16': + dependencies: + '@types/tern': 0.23.9 + '@types/conventional-commits-parser@5.0.0': dependencies: '@types/node': 20.16.1 + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + '@types/estree@1.0.5': {} '@types/gradient-string@1.1.6': dependencies: '@types/tinycolor2': 1.4.6 + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + '@types/js-cookie@3.0.6': {} '@types/lodash-es@4.17.12': @@ -4795,18 +5202,32 @@ snapshots: '@types/lodash@4.17.7': {} + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.11 + + '@types/ms@2.1.0': {} + '@types/node@20.16.1': dependencies: undici-types: 6.19.8 '@types/nprogress@0.2.3': {} + '@types/parse5@6.0.3': {} + '@types/qs@6.9.15': {} '@types/sortablejs@1.15.8': {} + '@types/tern@0.23.9': + dependencies: + '@types/estree': 1.0.5 + '@types/tinycolor2@1.4.6': {} + '@types/unist@2.0.11': {} + '@types/web-bluetooth@0.0.16': {} '@types/web-bluetooth@0.0.20': {} @@ -5184,6 +5605,8 @@ snapshots: transitivePeerDependencies: - debug + bail@2.0.2: {} + balanced-match@1.0.2: {} balanced-match@2.0.0: {} @@ -5228,6 +5651,30 @@ snapshots: get-tsconfig: 4.7.6 import-from-string: 0.0.4 + bytemd@1.21.0: + dependencies: + '@popperjs/core': 2.11.8 + '@types/codemirror': 5.60.16 + '@types/hast': 2.3.10 + '@types/lodash-es': 4.17.12 + '@types/mdast': 3.0.15 + codemirror-ssr: 0.65.0(@types/codemirror@5.60.16) + hast-util-sanitize: 4.1.0 + lodash-es: 4.17.21 + rehype-raw: 6.1.1 + rehype-sanitize: 5.0.1 + rehype-stringify: 9.0.4 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + select-files: 1.0.1 + tippy.js: 6.3.7 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + word-count: 0.2.2 + transitivePeerDependencies: + - supports-color + c12@1.11.1: dependencies: chokidar: 3.6.0 @@ -5271,6 +5718,8 @@ snapshots: caniuse-lite@1.0.30001651: {} + ccount@2.0.1: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -5284,6 +5733,12 @@ snapshots: chalk@5.3.0: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -5321,6 +5776,10 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + codemirror-ssr@0.65.0(@types/codemirror@5.60.16): + dependencies: + '@types/codemirror': 5.60.16 + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -5351,6 +5810,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@12.1.0: {} commander@4.1.1: {} @@ -5580,6 +6041,10 @@ snapshots: dependencies: ms: 2.1.2 + decode-named-character-reference@1.1.0: + dependencies: + character-entities: 2.0.2 + deep-is@0.1.4: {} define-data-property@1.1.4: @@ -5595,11 +6060,15 @@ snapshots: delayed-stream@1.0.0: {} + dequal@2.0.3: {} + destr@2.0.3: optional: true didyoumean@1.2.2: {} + diff@5.2.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -5763,8 +6232,7 @@ snapshots: escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: - optional: true + escape-string-regexp@5.0.0: {} escodegen@2.1.0: dependencies: @@ -5904,6 +6372,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + extend@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -6004,6 +6474,8 @@ snapshots: function-bind@1.1.2: {} + gemoji@7.1.0: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -6042,6 +6514,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + github-markdown-css@5.8.1: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -6134,15 +6608,84 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-parse5@7.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + hastscript: 7.2.0 + property-information: 6.5.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + + hast-util-raw@7.2.3: + dependencies: + '@types/hast': 2.3.10 + '@types/parse5': 6.0.3 + hast-util-from-parse5: 7.1.2 + hast-util-to-parse5: 7.1.0 + html-void-elements: 2.0.1 + parse5: 6.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-sanitize@4.1.0: + dependencies: + '@types/hast': 2.3.10 + + hast-util-to-html@8.0.4: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 7.2.3 + hast-util-whitespace: 2.0.1 + html-void-elements: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-parse5@7.1.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-whitespace@2.0.1: {} + + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + he@1.2.0: {} hey-listen@1.0.8: {} + highlight.js@11.10.0: {} + hookable@5.5.3: optional: true html-tags@3.3.1: {} + html-void-elements@2.0.1: {} + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 @@ -6190,6 +6733,8 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-buffer@2.0.5: {} + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -6216,6 +6761,8 @@ snapshots: is-path-inside@3.0.3: {} + is-plain-obj@4.1.0: {} + is-plain-object@5.0.0: {} is-reference@3.0.2: @@ -6287,6 +6834,8 @@ snapshots: kind-of@6.0.3: {} + kleur@4.1.5: {} + klona@2.0.6: optional: true @@ -6394,6 +6943,8 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 + longest-streak@3.1.0: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -6408,8 +6959,115 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + markdown-table@3.0.4: {} + mathml-tag-names@2.1.3: {} + mdast-util-definitions@5.1.2: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + unist-util-visit: 4.1.2 + + mdast-util-find-and-replace@2.2.2: + dependencies: + '@types/mdast': 3.0.15 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + mdast-util-from-markdown@1.3.1: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + decode-named-character-reference: 1.1.0 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@1.0.3: + dependencies: + '@types/mdast': 3.0.15 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 + + mdast-util-gfm-footnote@1.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 + + mdast-util-gfm-strikethrough@1.0.3: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + + mdast-util-gfm-table@1.0.7: + dependencies: + '@types/mdast': 3.0.15 + markdown-table: 3.0.4 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@1.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + + mdast-util-gfm@2.0.2: + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + + mdast-util-to-hast@12.3.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + + mdast-util-to-markdown@1.5.0: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + mdn-data@2.0.14: {} mdn-data@2.0.28: {} @@ -6426,6 +7084,197 @@ snapshots: merge2@1.4.1: {} + micromark-core-commonmark@1.1.0: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-autolink-literal@1.0.5: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-extension-gfm-footnote@1.1.2: + dependencies: + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-strikethrough@1.0.7: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-table@1.0.7: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-tagfilter@1.0.2: + dependencies: + micromark-util-types: 1.1.0 + + micromark-extension-gfm-task-list-item@1.0.5: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm@2.0.3: + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-destination@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-label@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-factory-space@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + + micromark-factory-title@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-whitespace@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-chunked@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + + micromark-util-classify-character@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-combine-extensions@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-decode-numeric-character-reference@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + + micromark-util-decode-string@1.1.0: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + + micromark-util-encode@1.1.0: {} + + micromark-util-html-tag-name@1.2.0: {} + + micromark-util-normalize-identifier@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + + micromark-util-resolve-all@1.1.0: + dependencies: + micromark-util-types: 1.1.0 + + micromark-util-sanitize-uri@1.2.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + + micromark-util-subtokenize@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-util-symbol@1.1.0: {} + + micromark-util-types@1.1.0: {} + + micromark@3.2.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.6 + decode-named-character-reference: 1.1.0 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -6479,8 +7328,7 @@ snapshots: pkg-types: 1.1.3 ufo: 1.5.4 - mri@1.2.0: - optional: true + mri@1.2.0: {} ms@2.1.2: {} @@ -6594,6 +7442,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse5@6.0.1: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -7049,6 +7899,8 @@ snapshots: process@0.11.10: {} + property-information@6.5.0: {} + proxy-from-env@1.1.0: {} punycode@2.3.1: {} @@ -7073,6 +7925,55 @@ snapshots: dependencies: picomatch: 2.3.1 + rehype-raw@6.1.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-raw: 7.2.3 + unified: 10.1.2 + + rehype-sanitize@5.0.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-sanitize: 4.1.0 + unified: 10.1.2 + + rehype-stringify@9.0.4: + dependencies: + '@types/hast': 2.3.10 + hast-util-to-html: 8.0.4 + unified: 10.1.2 + + remark-gemoji@7.0.1: + dependencies: + '@types/mdast': 3.0.15 + gemoji: 7.1.0 + unified: 10.1.2 + unist-util-visit: 4.1.2 + + remark-gfm@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + + remark-parse@10.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + + remark-rehype@10.1.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -7147,6 +8048,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 + sade@1.8.1: + dependencies: + mri: 1.2.0 + sass@1.77.8: dependencies: chokidar: 3.6.0 @@ -7156,6 +8061,8 @@ snapshots: scule@1.3.0: optional: true + select-files@1.0.1: {} + semver@6.3.1: {} semver@7.6.3: {} @@ -7219,6 +8126,8 @@ snapshots: sourcemap-codec@1.4.8: {} + space-separated-tokens@2.0.2: {} + split2@4.2.0: {} stable@0.1.8: {} @@ -7248,6 +8157,11 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -7524,6 +8438,10 @@ snapshots: dependencies: is-number: 7.0.0 + trim-lines@3.0.1: {} + + trough@2.2.0: {} + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: typescript: 5.5.4 @@ -7565,6 +8483,16 @@ snapshots: unicorn-magic@0.1.0: {} + unified@10.1.2: + dependencies: + '@types/unist': 2.0.11 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + unimport@3.10.0(rollup@4.21.0): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) @@ -7584,6 +8512,31 @@ snapshots: - rollup optional: true + unist-util-generated@2.0.1: {} + + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.11 + + unist-util-position@4.0.4: + dependencies: + '@types/unist': 2.0.11 + + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.11 + + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + universalify@2.0.1: {} unplugin@1.12.2: @@ -7624,6 +8577,30 @@ snapshots: uuid@8.3.2: {} + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + + vfile-location@4.1.0: + dependencies: + '@types/unist': 2.0.11 + vfile: 5.3.7 + + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 3.0.3 + + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vite-plugin-cdn-import@1.0.1(rollup@4.21.0)(vite@5.4.1(@types/node@20.16.1)(sass@1.77.8)): dependencies: rollup-plugin-external-globals: 0.10.0(rollup@4.21.0) @@ -7795,6 +8772,8 @@ snapshots: optionalDependencies: typescript: 5.5.4 + web-namespaces@2.0.1: {} + webpack-sources@3.2.3: {} webpack-virtual-modules@0.6.2: {} @@ -7811,6 +8790,8 @@ snapshots: dependencies: string-width: 5.1.2 + word-count@0.2.2: {} + word-wrap@1.2.5: {} wrap-ansi@7.0.0: @@ -7874,3 +8855,5 @@ snapshots: zrender@5.6.0: dependencies: tslib: 2.3.0 + + zwitch@2.0.4: {} diff --git a/sop-admin/sop-admin-frontend/src/api/help.ts b/sop-admin/sop-admin-frontend/src/api/help.ts new file mode 100644 index 00000000..9e09c258 --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/api/help.ts @@ -0,0 +1,59 @@ +import { createUrl, http } from "@/utils/http"; +import type { Result } from "@/model"; + +// 后端请求接口 +const apiUrl: any = createUrl({ + listHelpTree: "/help/doc/tree", + getDoc: "/help/doc/detail", + save: "/help/doc/add", + update: "/help/doc/update", + del: "/help/doc/delete" +}); + +export interface HelpDoc { + id: number; + label: string; + parentId: number; + content: string; +} + +/** + * 接口管理 + */ +export const api: any = { + /** + * 查询帮助树 + * @param data + */ + listHelpTree(params: object) { + return http.get>, any>(apiUrl.listHelpTree, { + params + }); + }, + /** + * 文档详情 + * @param data + */ + getDoc(id: any) { + return http.get, any>(apiUrl.getDoc, { + params: { + id + } + }); + }, + save(data) { + return http.post(apiUrl.save, { + data + }); + }, + update(data) { + return http.post(apiUrl.update, { + data + }); + }, + del(data) { + return http.post(apiUrl.del, { + data + }); + } +}; diff --git a/sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.ts b/sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.ts new file mode 100755 index 00000000..68077a12 --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.ts @@ -0,0 +1,9 @@ +import { ref } from "vue"; +import mdView from "./index.vue"; +import { withInstall } from "@pureadmin/utils"; + +const MarkdownEditor = withInstall(mdView); + +export const updateValue = ref(""); + +export default MarkdownEditor; diff --git a/sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.vue b/sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.vue new file mode 100755 index 00000000..6ee94fcc --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/components/MarkdownEditor/index.vue @@ -0,0 +1,93 @@ + + + diff --git a/sop-admin/sop-admin-frontend/src/components/RecursiveMenu.vue b/sop-admin/sop-admin-frontend/src/components/RecursiveMenu.vue new file mode 100644 index 00000000..b0d5f951 --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/components/RecursiveMenu.vue @@ -0,0 +1,91 @@ + + + + diff --git a/sop-admin/sop-admin-frontend/src/style/index.scss b/sop-admin/sop-admin-frontend/src/style/index.scss index f111071d..5e16c193 100755 --- a/sop-admin/sop-admin-frontend/src/style/index.scss +++ b/sop-admin/sop-admin-frontend/src/style/index.scss @@ -35,3 +35,9 @@ margin: 0 !important; } } + +span.split { + margin-left: 10px; + margin-right: 10px; + color: gray; +} diff --git a/sop-admin/sop-admin-frontend/src/views/help/index.ts b/sop-admin/sop-admin-frontend/src/views/help/index.ts new file mode 100644 index 00000000..1015062e --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/views/help/index.ts @@ -0,0 +1,86 @@ +import { api, type HelpDoc } from "@/api/help"; +import { ElMessage } from "element-plus"; +import { onMounted, ref } from "vue"; + +export function useHelp() { + const menuItems = ref>([]); + const docInfo = ref({ + id: undefined, + label: "", + content: "", + status: 1, + sort: 1, + parentId: 0 + }); + + function initForm() { + docInfo.value = { + id: undefined, + label: "", + content: "", + status: 1, + parentId: 0, + sort: 1 + }; + } + + function resetForm(pid) { + docInfo.value = { + id: 0, + label: "", + content: "", + parentId: pid || 0, + status: 1, + sort: 1 + }; + } + + function save() { + if (docInfo.value.id === 0) { + api.save(docInfo.value).then(() => { + ElMessage.success("添加成功"); + getMenuItems(); + }); + } else { + api.update(docInfo.value).then(() => { + ElMessage.success("修改成功"); + getMenuItems(); + }); + } + } + + function del() { + api.del(docInfo.value).then(() => { + ElMessage.success("删除成功"); + initForm(); + getMenuItems(); + }); + } + + const getMenuItems = async () => { + const res = await api.listHelpTree({}); + // console.log(res); + menuItems.value = res.data; + }; + + const loadDocData = async (id: any) => { + const res = await api.getDoc(id); + // console.log(res); + const data = res.data; + docInfo.value = data; + return data; + }; + + onMounted(async () => { + await getMenuItems(); + }); + + return { + menuItems, + loadDocData, + docInfo, + save, + del, + resetForm + }; +} diff --git a/sop-admin/sop-admin-frontend/src/views/help/index.vue b/sop-admin/sop-admin-frontend/src/views/help/index.vue new file mode 100644 index 00000000..92b6d427 --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/views/help/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/sop-admin/sop-code-gen/gen.db b/sop-admin/sop-code-gen/gen.db new file mode 100644 index 0000000000000000000000000000000000000000..b3f5913343fdc6f8392e245cdb9f8702241a9402 GIT binary patch literal 98304 zcmeHwTWnm{kziAlM0Lv)oyfAHQ37AJoKaIDn|fHXhb9?HB$Y6hC0e8u1Rg`a?7k%1 zZ1!#Uy`;n_#6*5Ou_HUNlQ>T)u``~@M7AfBhhuv@`>`|F2li*Nz+!>HU>9ymnqBN* zvA_;6iv_mo)Op^%{oq5k9N&gbb)Qq`Rj1B5b*k!Ajox=O=R4MfTbi+bYk%zKSW{E1 z-?Cz{*t_umC*c2E;QuE0|C8|lTKHdlFsL+v9o1pD#M6Gj3rbH>rKS zY2d`rp|K%r?9kz(L)L>@&Vz|m!h%mOYvl^QGwGD9krTuB9y;+Q>z<)6S%*%J9Undh zrSBa&Hf9|=4*#D#dbEQTc`!SE8f$vcnzKupDZ7+9ct^X%0Ib2GBZp2NHK50B&sh?@ zd$u9)MEm2ZM9bE$uBNB|grOj7`?lxKmNEhn6$xt$bW~)wCQ_{eDTo{T2=w5ug6ms_ z*?gYBFr`?^&Df=RYucH&>{;K<6*47f#wqw61jBKKpnz<`bZYP3c3G8xE9K^#(&}ePHaPp^%C1)ac7U~iC`&9m9$(=2p1}eu7 zw8M*enJH(+=BO0Kv}$20r`!@Nq*Z(1fNXXgy6)bV_9qS!DmBeC)!8Wt>5~Y z&oq6B_1$|o4;=hy&v|&(DP)|$&$UMH1DPpAN(Yo|Z(WFeZR`2w^UY0G$12M*RauVDMOOVbK^FD{kJ(=E~d$iB5Lh|R~gF9Dl$63bOh z9kkfFv$S=M$BVJYD3ZafiCms>P!L5Mdy~K!kw^ z0}%!y416FMc(CbXv3T$1+tzH^65rX{)Vl36tr>SFJu?r2ymaQF^h4S4OnQ)ssy%-; z?`G^g3Yu^F$CB&%_&-9QJ$p6{xy`;^n4HQi{@^dlKX|?T_E*ano-hCITkBw48{7U3 zj_%gB|J(Mz+Wt@5|7g3?_TSq6zU@D^{l~WdKv^Hi;FsCxeakEtUhLVX=9bvz`(C

FsA0|MC)+V2M}$>~}bPUZN`z$6q~F zdfsQ{A@@)|pK6Cen0>kU=Hj!L-}~)b*Iu|x{R;M_XqW666xb6`cpqsPfj**^Np-MF z->gZ;KRiF2P2GO3IL+u`4D@n`-LngTRGxAq=j5}D8leAiv;W_Iz5J6OVZ#@`S$_N# zLTdRJ-≀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

O}sXtIT#QW%k$8e4hBnE~TDyN^P>T{vx zQeS$LVc8Hmn2oke#~2^|7!!C?^J--JY>7s?Sz;$JoHq0gi|KgjCZg>ew_&{JtZ=@) zLt`SX1z9nW6DL3@DpA3R0!f8FY*tQ@rK3)Nl#40I#iRGQZtMQNdpay&fUN`Y|K2@& z9#GZTd9c9iwstYR@8Y$~uHdX;fW?WtduGga^M0<#LF}vzrfhR$3<~}^RG&$KDlk7H z$3p2eNJ(&F2CSVv8v2QJB49!qQ&sdzYelO+gVu?nelP<__K}XhrwfRl%7}U(#;dj{ zpw=#=a5l%B2JrVFvr$7m79Sj^`R=)#mxFnQTLoDeiW!n?LTo3-%#+C*&N>@YH*QyC zv?lS|jmidna`_tS4%@?MMoVZErSjzlM!9SmeUYv@yI_WkXLqSNW|`offGx4AbB#-F z2o=6#xnggUY462&`(Xz{OGbfo+y^O-EhUC{+-+bJ(h$xqc~N`y)SaJ9#5SM1a2mv_ zn?c=E2wINj3@TKIQl{j~&$HQc^Jm**T{9C$|k9 z7X7Q0V`~rQ<9w#hzjFD~mFJ#-M|NF8<0eNSx{saa z&tZ03LH{}M5|x?p!m!Yow?gaBeB$8Xq&+M6fB{VcSXGRG4m0OD%n=TuSs1Hwr8!Ox zdiu~HIuNCODZ($))^~teEpMBfnBXFi{iSUJ*SPE{?%u)?j4-Yv-#vh4ru^@=cqf@w zQ7Z9Sf6%a|hq}wG8_ga;4cH;pL|Au}Id=oyp;=vFkEoKGol>^Z4Ri`Ejd6I(#}U*J z>`nqq0QlAcQ;Xar<{R~QF^*o{EkV+4!<{){MGDfM8_fs`0S#?Yo zpc9monDd|bA_aOFwExHZf8?;8oAr|_sE$9rYF^k+9hc7oMA!w*jl0k>8Gfa;0^Eh2 zRziF3P_4;Picuh|i5$PXrRj8-zxl}VJK9Pu3`lpAAZ=y))koa%`>Er<7p~u77);lJ zX9p-jO#je^^LIAsc;Z=>aFfYI%vNV#h{tjiK38>Ee(E^6EN9R6sLBdg$Ec0KPH`A= zWx@KuwFamw;GWkmzg~U^yb$7NH~+^_cnCehg-5``QUdTMuQIotkwf`8TLwUn9Lh7A zXw(Hb3G=v^ibv7lx+m!ZoM5WD09U3Y#xZ|V#fBmEneN=DN*U%TBVd-YYM})xmZ`a6 z@KLIs$tQr+1I;rz3vmgG?ZL>QJQx6om^KiefW&#Vsfl2!Qq%8;L;2M0Kpx~Otnrut z1P=!O77rt!off3lz4EnRFMjoW{nKLgLQPPgYR@RG9D=MmuasSLQ_w*M$BtVb^V3g7 z@OO>qB7vg8L!hChPj#dMt!m4je6B%g7~wV-uQzmWl6*+uy#rHSN%cNxo}>5wy6qg@ U(gnLjztlzF5KE}!Rk;8Ee`+g<>Hq)$ literal 0 HcmV?d00001 diff --git a/sop-admin/sop-code-gen/src/test/java/com/gitee/gen/GenHelpDocTest.java b/sop-admin/sop-code-gen/src/test/java/com/gitee/gen/GenHelpDocTest.java new file mode 100644 index 00000000..8e2d97b1 --- /dev/null +++ b/sop-admin/sop-code-gen/src/test/java/com/gitee/gen/GenHelpDocTest.java @@ -0,0 +1,16 @@ +package com.gitee.gen; + +import org.junit.Test; + +/** + * 文件生成到本地项目中 + * + * @author 六如 + */ +public class GenHelpDocTest extends GenTest { + + @Test + public void run() { + this.gen("help_doc.properties"); + } +} diff --git a/sop-admin/sop-code-gen/src/test/resources/help_doc.properties b/sop-admin/sop-code-gen/src/test/resources/help_doc.properties new file mode 100644 index 00000000..2d844279 --- /dev/null +++ b/sop-admin/sop-code-gen/src/test/resources/help_doc.properties @@ -0,0 +1,33 @@ +db.name=sop +db.driverClass=com.mysql.cj.jdbc.Driver +db.host=localhost +db.port=3306 +db.username=root +db.password=root + +# \u4F5C\u8005 +author=thc + +# \u8868\u540D\uFF0C\u591A\u4E2A\u7528,\u9694\u5F00 +tables=help_doc + +# \u6A21\u5757\u540D\u79F0 +moduleName=doc + +# \u5305\u540D +entityPackage=com.gitee.sop.admin.dao.entity +mapperPackage=com.gitee.sop.admin.dao.mapper +servicePackage=com.gitee.sop.admin.service +controllerPackage=com.gitee.sop.admin.controller + +# \u4FDD\u5B58\u76EE\u5F55\uFF0C\u586B\u7EDD\u5BF9\u5730\u5740 +entityDir=/Users/thc/dev/projects/SOP/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/entity +mapperDir=/Users/thc/dev/projects/SOP/sop-admin/sop-admin-backend/admin-dao/src/main/java/com/gitee/sop/admin/dao/mapper +serviceDir=/Users/thc/dev/projects/SOP/sop-admin/sop-admin-backend/admin-service/src/main/java/com/gitee/sop/admin/service +controllerDir=/Users/thc/dev/projects/SOP/sop-admin/sop-admin-backend/admin-web/src/main/java/com/gitee/sop/admin/controller + +# \u524D\u7AEF\u9879\u76EE\u6839\u76EE\u5F55 +frontendRootDir=/Users/thc/dev/projects/SOP/sop-admin/sop-admin-frontend + +# \u6307\u5B9A\u6A21\u677F\u5206\u7EC4\u540D\u79F0\uFF0C\u4E00\u822C\u60C5\u51B5\u4E0B\u4E0D\u7528\u6539 +groupName=default diff --git a/sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/entity/HelpDoc.java b/sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/entity/HelpDoc.java new file mode 100644 index 00000000..97af17a3 --- /dev/null +++ b/sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/entity/HelpDoc.java @@ -0,0 +1,74 @@ +package com.gitee.sop.website.dao.entity; + +import com.gitee.fastmybatis.annotation.Column; +import com.gitee.fastmybatis.annotation.Pk; +import com.gitee.fastmybatis.annotation.PkStrategy; +import com.gitee.fastmybatis.annotation.Table; +import lombok.Data; + +import java.time.LocalDateTime; + +@Table(name = "help_doc", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT)) +@Data +public class HelpDoc { + /** + * 主键ID,唯一标识每条帮助文档记录 + */ + private Long id; + + /** + * 文档名称,显示用的标题或标签 + */ + private String label; + + /** + * 排序字段,用于控制文档在列表中的显示顺序 + */ + private Integer sort; + + @Column(logicDelete = true) + private Integer isDeleted; + + /** + * 状态字段,表示文档是否启用 + * 1:启用,2:禁用 + */ + private Byte status; + + /** + * 内容字段,存储文档的具体内容 + */ + private String content; + + /** + * 内容类型,区分内容的格式 + * 1:Markdown,2:富文本 + */ + private Byte contentType; + + /** + * 父级ID,用于构建文档的层级结构 + */ + private Long parentId; + + /** + * 添加时间,记录文档首次创建的时间 + */ + private LocalDateTime addTime; + + /** + * 更新时间,记录文档最后一次修改的时间 + */ + private LocalDateTime updateTime; + + /** + * 创建人ID,记录创建该文档的用户ID + */ + private Long addBy; + + /** + * 修改人ID,记录最后一次修改该文档的用户ID + */ + private Long updateBy; + +} diff --git a/sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/mapper/HelpDocMapper.java b/sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/mapper/HelpDocMapper.java new file mode 100644 index 00000000..8132e39f --- /dev/null +++ b/sop-website/sop-website-backend/website-dao/src/main/java/com/gitee/sop/website/dao/mapper/HelpDocMapper.java @@ -0,0 +1,12 @@ +package com.gitee.sop.website.dao.mapper; + +import com.gitee.fastmybatis.core.mapper.BaseMapper; +import com.gitee.sop.website.dao.entity.HelpDoc; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author 六如 + */ +@Mapper +public interface HelpDocMapper extends BaseMapper { +} diff --git a/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/common/StatusEnum.java b/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/common/StatusEnum.java new file mode 100644 index 00000000..220e3432 --- /dev/null +++ b/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/common/StatusEnum.java @@ -0,0 +1,29 @@ +package com.gitee.sop.website.service.common; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 六如 + */ +@AllArgsConstructor +@Getter +public enum StatusEnum { + NONE(0), + ENABLE(1), + DISABLE(2); + + private final int value; + + public static StatusEnum of(Number number) { + if (number == null) { + return NONE; + } + for (StatusEnum value : StatusEnum.values()) { + if (value.value == number.intValue()) { + return value; + } + } + return NONE; + } +} diff --git a/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/HelpDocService.java b/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/HelpDocService.java new file mode 100644 index 00000000..5c988bf7 --- /dev/null +++ b/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/HelpDocService.java @@ -0,0 +1,30 @@ +package com.gitee.sop.website.service.help; + +import com.gitee.fastmybatis.core.support.LambdaService; +import com.gitee.sop.website.common.util.CopyUtil; +import com.gitee.sop.website.dao.entity.HelpDoc; +import com.gitee.sop.website.dao.mapper.HelpDocMapper; +import com.gitee.sop.website.service.common.StatusEnum; +import com.gitee.sop.website.service.help.dto.HelpDocDTO; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 六如 + */ +@Service +public class HelpDocService implements LambdaService { + + public List listTree() { + + return this.query() + .select(HelpDoc::getId, HelpDoc::getLabel, HelpDoc::getParentId, + HelpDoc::getAddTime, + HelpDoc::getUpdateTime) + .eq(HelpDoc::getStatus, StatusEnum.ENABLE.getValue()) + .orderByAsc(HelpDoc::getSort) + .list(data -> CopyUtil.copyBean(data, HelpDocDTO::new)); + } + +} diff --git a/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/dto/HelpDocDTO.java b/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/dto/HelpDocDTO.java new file mode 100644 index 00000000..2bffe92b --- /dev/null +++ b/sop-website/sop-website-backend/website-service/src/main/java/com/gitee/sop/website/service/help/dto/HelpDocDTO.java @@ -0,0 +1,66 @@ +package com.gitee.sop.website.service.help.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class HelpDocDTO { + /** + * 主键ID,唯一标识每条帮助文档记录 + */ + private Long id; + + /** + * 文档名称,显示用的标题或标签 + */ + private String label; + + /** + * 排序字段,用于控制文档在列表中的显示顺序 + */ + private Integer sort; + + /** + * 状态字段,表示文档是否启用 + * 1:启用,2:禁用 + */ + private Byte status; + + /** + * 内容字段,存储文档的具体内容 + */ + private String content; + + /** + * 内容类型,区分内容的格式 + * 1:Markdown,2:富文本 + */ + private Byte contentType; + + /** + * 父级ID,用于构建文档的层级结构 + */ + private Long parentId; + + /** + * 添加时间,记录文档首次创建的时间 + */ + private LocalDateTime addTime; + + /** + * 更新时间,记录文档最后一次修改的时间 + */ + private LocalDateTime updateTime; + + /** + * 创建人ID,记录创建该文档的用户ID + */ + private Long addBy; + + /** + * 修改人ID,记录最后一次修改该文档的用户ID + */ + private Long updateBy; + +} diff --git a/sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/WebsiteHelpController.java b/sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/WebsiteHelpController.java new file mode 100644 index 00000000..c0e5e577 --- /dev/null +++ b/sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/WebsiteHelpController.java @@ -0,0 +1,55 @@ +package com.gitee.sop.website.controller.website; + +import com.gitee.sop.website.common.resp.Result; +import com.gitee.sop.website.common.util.CopyUtil; +import com.gitee.sop.website.controller.website.vo.HelpDocVO; +import com.gitee.sop.website.dao.entity.HelpDoc; +import com.gitee.sop.website.service.common.StatusEnum; +import com.gitee.sop.website.service.help.HelpDocService; +import com.gitee.sop.website.service.help.dto.HelpDocDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Objects; + +/** + * @author 六如 + */ +@RestController +@RequestMapping("website/help/doc") +public class WebsiteHelpController { + + @Autowired + private HelpDocService helpDocService; + + /** + * 查询帮助文档树状结构 + * + * @return + */ + @GetMapping("tree") + public Result> listTree() { + List list = helpDocService.listTree(); + List retList = CopyUtil.copyList(list, HelpDocVO::new); + return Result.ok(retList); + } + + /** + * 查询帮助文档 + * + * @return + */ + @GetMapping("detail") + public Result doc(Long id) { + HelpDoc helpDoc = helpDocService.getById(id); + if (Objects.equals(helpDoc.getStatus(), StatusEnum.DISABLE.getValue())) { + throw new RuntimeException("文档不存在"); + } + HelpDocVO helpDocVO = CopyUtil.copyBean(helpDoc, HelpDocVO::new); + return Result.ok(helpDocVO); + } + +} diff --git a/sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/vo/HelpDocVO.java b/sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/vo/HelpDocVO.java new file mode 100644 index 00000000..8a6c4642 --- /dev/null +++ b/sop-website/sop-website-backend/website-web/src/main/java/com/gitee/sop/website/controller/website/vo/HelpDocVO.java @@ -0,0 +1,66 @@ +package com.gitee.sop.website.controller.website.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class HelpDocVO { + /** + * 主键ID,唯一标识每条帮助文档记录 + */ + private Long id; + + /** + * 文档名称,显示用的标题或标签 + */ + private String label; + + /** + * 排序字段,用于控制文档在列表中的显示顺序 + */ + private Integer sort; + + /** + * 状态字段,表示文档是否启用 + * 1:启用,2:禁用 + */ + private Byte status; + + /** + * 内容字段,存储文档的具体内容 + */ + private String content; + + /** + * 内容类型,区分内容的格式 + * 1:Markdown,2:富文本 + */ + private Byte contentType; + + /** + * 父级ID,用于构建文档的层级结构 + */ + private Long parentId; + + /** + * 添加时间,记录文档首次创建的时间 + */ + private LocalDateTime addTime; + + /** + * 更新时间,记录文档最后一次修改的时间 + */ + private LocalDateTime updateTime; + + /** + * 创建人ID,记录创建该文档的用户ID + */ + private Long addBy; + + /** + * 修改人ID,记录最后一次修改该文档的用户ID + */ + private Long updateBy; + +} diff --git a/sop-website/sop-website-frontend/mock/asyncRoutes.ts b/sop-website/sop-website-frontend/mock/asyncRoutes.ts index 5305f416..e06b63ff 100755 --- a/sop-website/sop-website-frontend/mock/asyncRoutes.ts +++ b/sop-website/sop-website-frontend/mock/asyncRoutes.ts @@ -40,6 +40,25 @@ const permissionRouter = { ] }; +const helpRouter = { + path: "/help", + name: "Help", + meta: { + title: "帮助", + icon: "ep:question", + rank: 10 + }, + children: [ + { + path: "/help", + name: "Help", + meta: { + title: "帮助" + } + } + ] +}; + export default defineFakeRoute([ { url: "/get-async-routes", @@ -47,7 +66,7 @@ export default defineFakeRoute([ response: () => { return { success: true, - data: [permissionRouter] + data: [permissionRouter, helpRouter] }; } } diff --git a/sop-website/sop-website-frontend/src/api/help.ts b/sop-website/sop-website-frontend/src/api/help.ts new file mode 100644 index 00000000..92a91172 --- /dev/null +++ b/sop-website/sop-website-frontend/src/api/help.ts @@ -0,0 +1,41 @@ +import { createUrl, http } from "@/utils/http"; +import type { Result } from "@/model"; + +// 后端请求接口 +const apiUrl: any = createUrl({ + listHelpTree: "/website/help/doc/tree", + getDoc: "/website/help/doc/detail" +}); + +export interface HelpDoc { + id: number; + label: string; + parentId: number; + content: string; +} + +/** + * 接口管理 + */ +export const api: any = { + /** + * 查询帮助树 + * @param data + */ + listHelpTree(params: object) { + return http.get>, any>(apiUrl.listHelpTree, { + params + }); + }, + /** + * 文档详情 + * @param data + */ + getDoc(id: any) { + return http.get, any>(apiUrl.getDoc, { + params: { + id + } + }); + } +}; diff --git a/sop-website/sop-website-frontend/src/components/RecursiveMenu.vue b/sop-website/sop-website-frontend/src/components/RecursiveMenu.vue new file mode 100644 index 00000000..6c065fde --- /dev/null +++ b/sop-website/sop-website-frontend/src/components/RecursiveMenu.vue @@ -0,0 +1,69 @@ + + + diff --git a/sop-website/sop-website-frontend/src/views/help/index.ts b/sop-website/sop-website-frontend/src/views/help/index.ts new file mode 100644 index 00000000..45b015c5 --- /dev/null +++ b/sop-website/sop-website-frontend/src/views/help/index.ts @@ -0,0 +1,27 @@ +import { api, type HelpDoc } from "@/api/help"; +import { onMounted, ref } from "vue"; + +export function useHelp() { + const menuItems = ref>([]); + + const getMenuItems = async () => { + const res = await api.listHelpTree({}); + // console.log(res); + menuItems.value = res.data; + }; + + const getDoc = async (id: any) => { + const res = await api.getDoc(id); + // console.log(res); + return res.data; + }; + + onMounted(async () => { + await getMenuItems(); + }); + + return { + menuItems, + getDoc + }; +} diff --git a/sop-website/sop-website-frontend/src/views/help/index.vue b/sop-website/sop-website-frontend/src/views/help/index.vue new file mode 100644 index 00000000..60f12acc --- /dev/null +++ b/sop-website/sop-website-frontend/src/views/help/index.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/sop.sql b/sop.sql index 66745d85..3d113588 100755 --- a/sop.sql +++ b/sop.sql @@ -474,3 +474,21 @@ INSERT INTO `sys_user_role` (`id`, `role_id`, `user_id`, `add_time`, `update_tim -- ALTER ALTER TABLE `api_info` ADD COLUMN `api_mode` tinyint(4) NULL DEFAULT '1' COMMENT '接口模式,1-open接口,2-Restful模式' AFTER `reg_source`; + + +-- 2025-06-15 +CREATE TABLE `help_doc` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `label` varchar(64) NOT NULL DEFAULT '' COMMENT '文档名称', + `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', + `is_deleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除', + `status` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '状态,1:启用,2:禁用', + `content` longtext COMMENT '内容', + `content_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '内容类型,1-Markdown,2-富文本', + `parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父级id', + `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + `add_by` bigint(20) DEFAULT '0' COMMENT '创建人id', + `update_by` bigint(20) DEFAULT '0' COMMENT '修改人id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB COMMENT='帮助内容表'; diff --git a/upgrade/sop-20250615.sql b/upgrade/sop-20250615.sql new file mode 100644 index 00000000..351a1905 --- /dev/null +++ b/upgrade/sop-20250615.sql @@ -0,0 +1,18 @@ +CREATE TABLE `help_doc` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `label` varchar(64) NOT NULL DEFAULT '' COMMENT '文档名称', + `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', + `is_deleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除', + `status` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '状态,1:启用,2:禁用', + `content` longtext COMMENT '内容', + `content_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '内容类型,1-Markdown,2-富文本', + `parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父级id', + `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + `add_by` bigint(20) DEFAULT '0' COMMENT '创建人id', + `update_by` bigint(20) DEFAULT '0' COMMENT '修改人id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB COMMENT='帮助内容表'; + +INSERT INTO `sys_resource` ( `menu_type`, `title`, `name`, `path`, `component`, `rank`, `redirect`, `icon`, `extra_icon`, `enter_transition`, `leave_transition`, `active_path`, `auths`, `frame_src`, `frame_loading`, `keep_alive`, `hidden_tag`, `fixed_tag`, `show_link`, `show_parent`, `parent_id`, `is_deleted`, `add_time`, `update_time`, `add_by`, `update_by`) VALUES +( 0, '帮助文档', '/help', '/help', '', 99, '', 'ep:document', '', '', '', '', '', '', 0, 0, 0, 0, 1, 0, 3, 0, '2025-06-14 21:14:53', '2025-06-14 21:16:12', 1, 1);