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 00000000..b3f59133 Binary files /dev/null and b/sop-admin/sop-code-gen/gen.db differ 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);