diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index aa08011..2d4643f 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -68,9 +68,13 @@ declare global {
const useAttrs: typeof import('vue')['useAttrs']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVars: typeof import('vue')['useCssVars']
+ const useDialog: typeof import('naive-ui')['useDialog']
const useId: typeof import('vue')['useId']
const useLink: typeof import('vue-router')['useLink']
+ const useLoadingBar: typeof import('naive-ui')['useLoadingBar']
+ const useMessage: typeof import('naive-ui')['useMessage']
const useModel: typeof import('vue')['useModel']
+ const useNotification: typeof import('naive-ui')['useNotification']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useSlots: typeof import('vue')['useSlots']
diff --git a/components.d.ts b/components.d.ts
index 0c30d54..eec9aee 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -10,35 +10,36 @@ declare module 'vue' {
export interface GlobalComponents {
Aplayer: typeof import('./src/components/aplayer.vue')['default']
ContextMenu: typeof import('./src/components/contextMenu.vue')['default']
- DAside: typeof import('vue-devui/layout/index.es.js')['Aside']
- DAvatar: typeof import('vue-devui/avatar/index.es.js')['Avatar']
- DButton: typeof import('vue-devui/button/index.es.js')['Button']
- DCard: typeof import('vue-devui/card/index.es.js')['Card']
- DContent: typeof import('vue-devui/layout/index.es.js')['Content']
- DDropdown: typeof import('vue-devui/dropdown/index.es.js')['Dropdown']
- DFooter: typeof import('vue-devui/layout/index.es.js')['Footer']
- DForm: typeof import('vue-devui/form/index.es.js')['Form']
- DFormItem: typeof import('vue-devui/form/index.es.js')['FormItem']
- DHeader: typeof import('vue-devui/layout/index.es.js')['Header']
- DIcon: typeof import('vue-devui/icon/index.es.js')['Icon']
- DInput: typeof import('vue-devui/input/index.es.js')['Input']
- DLayout: typeof import('vue-devui/layout/index.es.js')['Layout']
- DMenu: typeof import('vue-devui/menu/index.es.js')['Menu']
- DMenuItem: typeof import('vue-devui/menu/index.es.js')['MenuItem']
- DModal: typeof import('vue-devui/modal/index.es.js')['Modal']
- DPopover: typeof import('vue-devui/popover/index.es.js')['Popover']
- DSearch: typeof import('vue-devui/search/index.es.js')['Search']
- DSelect: typeof import('vue-devui/select/index.es.js')['Select']
- DTab: typeof import('vue-devui/tabs/index.es.js')['Tab']
- DTabs: typeof import('vue-devui/tabs/index.es.js')['Tabs']
- DTag: typeof import('vue-devui/tag/index.es.js')['Tag']
+ Gallery: typeof import('./src/components/Gallery.vue')['default']
HomeSide: typeof import('./src/components/homeSide.vue')['default']
Login: typeof import('./src/components/Login.vue')['default']
+ Mask: typeof import('./src/components/mask.vue')['default']
MenuH: typeof import('./src/components/menuH.vue')['default']
+ NAvatar: typeof import('naive-ui')['NAvatar']
+ NButton: typeof import('naive-ui')['NButton']
+ NCard: typeof import('naive-ui')['NCard']
+ NConfigProvider: typeof import('naive-ui')['NConfigProvider']
+ NDialogProvider: typeof import('naive-ui')['NDialogProvider']
+ NDropdown: typeof import('naive-ui')['NDropdown']
+ NForm: typeof import('naive-ui')['NForm']
+ NFormItem: typeof import('naive-ui')['NFormItem']
+ NIcon: typeof import('naive-ui')['NIcon']
+ NInput: typeof import('naive-ui')['NInput']
+ NInputGroup: typeof import('naive-ui')['NInputGroup']
+ NLayout: typeof import('naive-ui')['NLayout']
+ NLayoutContent: typeof import('naive-ui')['NLayoutContent']
+ NLayoutFooter: typeof import('naive-ui')['NLayoutFooter']
+ NLayoutHeader: typeof import('naive-ui')['NLayoutHeader']
+ NLayoutSider: typeof import('naive-ui')['NLayoutSider']
+ NMenu: typeof import('naive-ui')['NMenu']
+ NMessageProvider: typeof import('naive-ui')['NMessageProvider']
+ NModal: typeof import('naive-ui')['NModal']
+ NModalProvider: typeof import('naive-ui')['NModalProvider']
+ NScrollbar: typeof import('naive-ui')['NScrollbar']
+ NSelect: typeof import('naive-ui')['NSelect']
+ NTabPane: typeof import('naive-ui')['NTabPane']
+ NTabs: typeof import('naive-ui')['NTabs']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
}
- export interface GlobalDirectives {
- vImagePreview: typeof import('vue-devui/image-preview/index.es.js')['ImagePreviewDirective']
- }
}
diff --git a/dist/assets/Article-Cll2DzoB.css b/dist/assets/Article-Cll2DzoB.css
deleted file mode 100644
index e2d0b6f..0000000
--- a/dist/assets/Article-Cll2DzoB.css
+++ /dev/null
@@ -1,26 +0,0 @@
-/*!
- * Vditor v3.11.2 - A markdown editor written in TypeScript.
- *
- * MIT License
- *
- * Copyright (c) 2018-present B3log 开源, b3log.org
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */.vditor{--border-color: #d1d5da;--second-color: rgba(88, 96, 105, .36);--panel-background-color: #fff;--panel-shadow: 0 1px 2px rgba(0, 0, 0, .2);--toolbar-background-color: #f6f8fa;--toolbar-icon-color: #586069;--toolbar-icon-hover-color: #4285f4;--toolbar-height: 35px;--toolbar-divider-margin-top: 8px;--textarea-background-color: #fafbfc;--textarea-text-color: #24292e;--resize-icon-color: var(--toolbar-icon-color);--resize-background-color: var(--toolbar-background-color);--resize-hover-icon-color: var(--panel-background-color);--resize-hover-background-color: var(--toolbar-icon-hover-color);--count-background-color: rgba(27, 31, 35, .05);--heading-border-color: #eaecef;--blockquote-color: #6a737d;--ir-heading-color: #660e7a;--ir-title-color: #808080;--ir-bi-color: #0033b3;--ir-link-color: #008000;--ir-bracket-color: #0000ff;--ir-paren-color: #008000}.vditor--dark{--border-color: #141414;--second-color: rgba(185, 185, 185, .36);--panel-background-color: #24292e;--panel-shadow: 0 1px 2px rgba(255, 255, 255, .2);--toolbar-background-color: #1d2125;--toolbar-icon-color: #b9b9b9;--toolbar-icon-hover-color: #fff;--textarea-background-color: #2f363d;--textarea-text-color: #d1d5da;--resize-icon-color: var(--border-color);--resize-background-color: var(--second-color);--resize-hover-icon-color: var(--toolbar-icon-hover-color);--resize-hover-background-color: rgba(185, 185, 185, .86);--count-background-color: rgba(66, 133, 244, .36);--heading-border-color: var(--textarea-text-color);--blockquote-color: var(--toolbar-icon-color);--ir-heading-color: #9876aa;--ir-title-color: #808080;--ir-bi-color: #cc7832;--ir-link-color: #ffc66d;--ir-bracket-color: #287bde;--ir-paren-color: #6a8759}@keyframes tooltip-appear{0%{opacity:0}to{opacity:1}}.vditor-tooltipped{position:relative;cursor:pointer}.vditor-tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font-size:11px;font-weight:400;-webkit-font-smoothing:subpixel-antialiased;color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:#3b3e43;border-radius:3px;line-height:16px;opacity:0}.vditor-tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:#3b3e43;pointer-events:none;content:"";border:5px solid transparent;opacity:0}.vditor-tooltipped--hover:before,.vditor-tooltipped--hover:after,.vditor-tooltipped:hover:before,.vditor-tooltipped:hover:after,.vditor-tooltipped:active:before,.vditor-tooltipped:active:after,.vditor-tooltipped:focus:before,.vditor-tooltipped:focus:after{display:inline-block;text-decoration:none;animation-name:tooltip-appear;animation-duration:.15s;animation-fill-mode:forwards;animation-timing-function:ease-in}.vditor-tooltipped__s:after,.vditor-tooltipped__se:after,.vditor-tooltipped__sw:after{top:100%;right:50%;margin-top:5px}.vditor-tooltipped__s:before,.vditor-tooltipped__se:before,.vditor-tooltipped__sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:#3b3e43}.vditor-tooltipped__se:after{right:auto;left:50%;margin-left:-15px}.vditor-tooltipped__sw:after{margin-right:-15px}.vditor-tooltipped__n:after,.vditor-tooltipped__ne:after,.vditor-tooltipped__nw:after{right:50%;bottom:100%;margin-bottom:5px}.vditor-tooltipped__n:before,.vditor-tooltipped__ne:before,.vditor-tooltipped__nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:#3b3e43}.vditor-tooltipped__ne:after{right:auto;left:50%;margin-left:-15px}.vditor-tooltipped__nw:after{margin-right:-15px}.vditor-tooltipped__s:after,.vditor-tooltipped__n:after{transform:translate(50%)}.vditor-tooltipped__w:after{right:100%;bottom:50%;margin-right:5px;transform:translateY(50%)}.vditor-tooltipped__w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:#3b3e43}.vditor-tooltipped__e:after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%)}.vditor-tooltipped__e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:#3b3e43}@media screen and (max-width: 520px){.vditor-tooltipped:before,.vditor-tooltipped:after{content:none}}@keyframes scale-in{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.vditor-panel{background-color:var(--panel-background-color);position:absolute;box-shadow:var(--panel-shadow);border-radius:3px;padding:5px;z-index:3;font-size:14px;display:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;max-width:320px;min-width:80px;animation-duration:.15s;animation-name:scale-in;animation-timing-function:cubic-bezier(.2,0,.13,1.5);color:var(--toolbar-icon-color)}.vditor-panel--none{padding:0;animation:none;min-width:auto;max-width:none;white-space:nowrap;opacity:.86}.vditor-panel--arrow:before{position:absolute;width:0;height:0;pointer-events:none;content:" ";border:7px solid transparent;top:-14px;left:5px;border-bottom-color:var(--panel-background-color)}.vditor-panel--left{right:0}.vditor-panel--left.vditor-panel--arrow:before{right:5px;left:auto}.vditor-input{border:0;padding:3px 5px;background-color:var(--panel-background-color);font-size:12px;color:var(--textarea-text-color)}.vditor-input:focus{background-color:var(--toolbar-background-color);outline:none}.vditor-icon{color:var(--toolbar-icon-color);cursor:pointer;float:left;padding:4px 5px;height:21px;width:23px;background-color:transparent;border:0;box-sizing:border-box}.vditor-icon:hover,.vditor-icon--current{color:var(--toolbar-icon-hover-color);background-color:transparent}.vditor-icon:focus{outline:none}.vditor-icon svg{height:13px!important;width:13px!important;float:left;fill:currentColor;pointer-events:none}.vditor-toolbar{background-color:var(--toolbar-background-color);border-bottom:1px solid var(--border-color);padding:0 5px;line-height:1}.vditor-toolbar--pin{position:sticky;top:0;z-index:1}.vditor-toolbar--hide{transition:all .15s ease-in-out;height:5px;overflow:hidden}.vditor-toolbar--hide:hover{background-color:var(--toolbar-background-color);height:auto;overflow:visible}.vditor-toolbar__item{float:left;position:relative}.vditor-toolbar__item .vditor-tooltipped{color:var(--toolbar-icon-color);border:0;padding:10px 5px;background-color:transparent;height:var(--toolbar-height);width:25px;box-sizing:border-box;font-size:0}.vditor-toolbar__item .vditor-tooltipped:focus{outline:none}.vditor-toolbar__item .vditor-tooltipped:focus{cursor:pointer;color:var(--toolbar-icon-hover-color)}.vditor-toolbar__item svg{fill:currentColor;display:inline-block;stroke-width:0;stroke:currentColor;width:15px;height:15px}.vditor-toolbar__item input{position:absolute;width:25px;height:var(--toolbar-height);top:0;left:0;cursor:pointer;opacity:.001;overflow:hidden}.vditor-toolbar__divider{float:left;height:calc(var(--toolbar-height) - (var(--toolbar-divider-margin-top) * 2));border-left:1px solid var(--second-color);margin:var(--toolbar-divider-margin-top) 8px}.vditor-toolbar__br{width:100%;padding:0!important;height:0!important}.vditor-menu--current{color:var(--toolbar-icon-hover-color)!important}.vditor-menu--disabled{color:var(--second-color)!important;cursor:not-allowed!important}.vditor-emojis{display:inline-block;overflow:auto}.vditor-emojis::-webkit-scrollbar{display:none}.vditor-emojis__tip{flex:1;min-width:1px;width:200px;margin-right:10px;color:var(--toolbar-icon-color);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.vditor-emojis__tail{margin-top:5px;font-size:12px;color:var(--toolbar-icon-color);display:flex}.vditor-emojis__tail a{text-decoration:none;color:var(--toolbar-icon-color)}.vditor-emojis__tail a:hover{color:var(--toolbar-icon-hover-color)}.vditor-emojis button{cursor:pointer;border-radius:3px;float:left;height:30px;width:30px;text-align:center;line-height:26px;padding:3px;box-sizing:border-box;font-size:16px;transition:all .15s ease-in-out;border:0;margin:0;background-color:transparent;overflow:hidden}.vditor-emojis button:focus{outline:none}.vditor-emojis button:hover .vditor-emojis__icon{display:inline-block;transform:scale(1.2)}.vditor-emojis img{height:20px;width:20px;float:left;margin:3px 0 0 3px}@media screen and (max-width: 520px){.vditor-toolbar__item{padding:0 12px}.vditor-panel--left.vditor-panel--arrow:before{right:17px}}@media (hover: hover) and (pointer: fine){.vditor-toolbar__item .vditor-tooltipped:hover{color:var(--toolbar-icon-hover-color)}}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.vditor{display:flex;flex-direction:column;border:1px solid var(--border-color);border-radius:3px;box-sizing:border-box;font-family:Helvetica Neue,Luxi Sans,DejaVu Sans,Hiragino Sans GB,Microsoft Yahei,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",Segoe UI Symbol,"Android Emoji",EmojiSymbols}.vditor--fullscreen{position:fixed;top:0;width:100%!important;left:0;height:100vh!important;z-index:90;border-radius:0}.vditor-content{display:flex;min-height:60px;flex:1;min-width:1px;position:relative}.vditor-preview{flex:1;min-width:1px;overflow:auto;margin-left:-1px;border-left:1px solid var(--border-color);box-sizing:border-box;border-radius:0 0 3px;background-color:var(--textarea-background-color)}.vditor-preview::-webkit-scrollbar{display:none}.vditor-preview__action{text-align:center;padding:10px;background-color:var(--toolbar-background-color)}.vditor-preview__action button{background-color:var(--toolbar-background-color);color:var(--toolbar-icon-color);line-height:20px;border:0;margin:0 10px;cursor:pointer;padding:0 7px;font-size:12px}.vditor-preview__action button.vditor-preview__action--current,.vditor-preview__action button:hover{color:var(--toolbar-icon-hover-color);background-color:var(--toolbar-background-color)}.vditor-preview__action button:focus{outline:none}.vditor-preview__action button svg{fill:currentColor;height:15px;width:15px;vertical-align:middle}.vditor-preview>.vditor-reset{padding:10px;margin:0 auto}.vditor-preview img:not(.emoji){cursor:pointer}.vditor-devtools{display:none;background-color:var(--textarea-background-color);overflow:auto;flex:1;min-width:1px;box-shadow:inset 1px 0 var(--border-color);box-sizing:border-box;border-radius:0 0 3px;padding:10px}.vditor-counter{padding:3px;color:var(--toolbar-icon-color);background-color:var(--count-background-color);border-radius:3px;font-size:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none;float:right;margin:8px 3px 0 0}.vditor-counter--error{color:#d23f31;background-color:#d23f311a}.vditor-resize{padding:3px 0;cursor:row-resize;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:absolute;width:100%}.vditor-resize--top{top:-3px}.vditor-resize--bottom{bottom:-3px}.vditor-resize>div{height:3px;background-color:var(--resize-background-color);transition:all .15s ease-in-out}.vditor-resize:hover>div,.vditor-resize--selected>div{background-color:var(--resize-hover-background-color)}.vditor-resize:hover svg,.vditor-resize--selected svg{color:var(--resize-hover-icon-color)}.vditor-resize svg{fill:currentColor;stroke-width:0;stroke:currentColor;width:13px;height:3px;display:block;margin:0 auto;color:var(--resize-icon-color)}.vditor-upload{position:absolute;height:3px;left:0;top:-2px;transition:all .15s ease-in-out;background-color:#4285f4}.vditor-tip{position:absolute;font-size:12px;top:10px;animation-duration:.15s;animation-fill-mode:both;left:50%;z-index:5}.vditor-tip--show{display:block;animation-name:slideInDown}.vditor-tip__content{text-align:left;display:inline-block;line-height:16px;padding:3px 10px;border-radius:3px;background:var(--toolbar-background-color);position:relative;margin-left:-50%;color:var(--toolbar-icon-color);max-width:100%;box-shadow:var(--panel-shadow)}.vditor-tip__content ul{margin:2px 0;padding:0 0 0 18px}.vditor-tip__content a{color:#4285f4}.vditor-tip__close{position:absolute;color:var(--toolbar-icon-color);top:-7px;right:-15px;font-weight:700;cursor:pointer}.vditor-tip__close:hover{color:var(--toolbar-icon-hover-color)}.vditor-img{position:fixed;inset:0;display:flex;flex-direction:column;z-index:100}.vditor-img__bar{border-bottom:1px solid var(--border-color);background-color:var(--toolbar-background-color);text-align:center;height:36px;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.vditor-img__btn{display:flex;align-items:center;cursor:pointer;margin-left:24px;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--toolbar-icon-color)}.vditor-img__btn:hover{color:var(--toolbar-icon-hover-color)}.vditor-img__btn svg{height:14px;width:14px;margin-right:8px;fill:currentColor}.vditor-img__img{flex:1;background-color:var(--textarea-background-color);overflow:auto;cursor:zoom-out}.vditor-img__img img{max-width:none}.vditor-hint{background-color:var(--panel-background-color);position:absolute;box-shadow:var(--panel-shadow);border-radius:3px;padding:5px 0;z-index:4;line-height:20px;list-style:none;font-size:12px;margin:0;max-width:250px;min-width:80px;display:none}.vditor-hint .vditor-hint{margin-top:-31px;left:100%;right:auto}.vditor-hint .vditor-hint.vditor-panel--left{right:100%;left:auto}.vditor-hint button{color:var(--toolbar-icon-color);display:block;padding:3px 10px;border:0;border-radius:0;line-height:20px;width:100%;box-sizing:border-box;text-align:left;margin:0;background-color:transparent;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.vditor-hint button:focus{outline:none}.vditor-hint--current,.vditor-hint button:not(.vditor-menu--disabled):hover{background-color:var(--toolbar-background-color)!important;color:var(--toolbar-icon-hover-color)!important}.vditor-hint__emoji{font-size:16px;float:left;margin-right:3px}.vditor-hint img{height:20px;width:20px;float:left;margin-right:3px}.vditor-reset{color:#24292e;font-variant-ligatures:no-common-ligatures;font-family:Helvetica Neue,Luxi Sans,DejaVu Sans,Hiragino Sans GB,Microsoft Yahei,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",Segoe UI Symbol,"Android Emoji",EmojiSymbols;word-wrap:break-word;overflow:auto;line-height:1.5;font-size:16px;word-break:break-word}.vditor-reset--anchor{padding-left:20px}.vditor-reset--error{color:#d23f31;font-size:12px;display:block;line-height:16px}.vditor-reset ul ul ul{list-style-type:square}.vditor-reset ul ul{list-style-type:circle}.vditor-reset ul{list-style-type:disc}.vditor-reset ul,.vditor-reset ol{padding-left:2em;margin-top:0;margin-bottom:16px}.vditor-reset li+li{margin-top:.25em}.vditor-reset li p{margin-top:16px}.vditor-reset audio{max-width:100%}.vditor-reset audio:focus{outline:none}.vditor-reset video{max-height:90vh;max-width:100%}.vditor-reset img{max-width:100%}.vditor-reset img.emoji{cursor:auto;max-width:20px;vertical-align:sub}.vditor-reset h1,.vditor-reset h2,.vditor-reset h3,.vditor-reset h4,.vditor-reset h5,.vditor-reset h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.vditor-reset h1:hover .vditor-anchor svg,.vditor-reset h2:hover .vditor-anchor svg,.vditor-reset h3:hover .vditor-anchor svg,.vditor-reset h4:hover .vditor-anchor svg,.vditor-reset h5:hover .vditor-anchor svg,.vditor-reset h6:hover .vditor-anchor svg{visibility:visible}.vditor-reset h1{font-size:1.75em}.vditor-reset h2{font-size:1.55em}.vditor-reset h3{font-size:1.38em}.vditor-reset h4{font-size:1.25em}.vditor-reset h5{font-size:1.13em}.vditor-reset h6{font-size:1em}.vditor-reset hr{height:2px;padding:0;margin:24px 0;background-color:#eaecef;border:0}.vditor-reset p{margin-top:0;margin-bottom:16px}.vditor-reset blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #eaecef;margin:0 0 16px}.vditor-reset blockquote>:first-child{margin-top:0}.vditor-reset blockquote>:last-child{margin-bottom:0}.vditor-reset ins>iframe{border:0}.vditor-reset iframe{border:1px solid #d1d5da;max-width:100%;box-sizing:border-box}.vditor-reset iframe.iframe__video{min-width:80%;min-height:36vh}.vditor-reset table{border-collapse:collapse;empty-cells:show;margin-bottom:16px;overflow:auto;border-spacing:0;display:block;word-break:keep-all;width:100%}.vditor-reset table tr{background-color:#fafbfc;border-top:1px solid #c6cbd1}.vditor-reset table td,.vditor-reset table th{padding:6px 13px;border:1px solid #dfe2e5;word-break:normal;white-space:nowrap}.vditor-reset table td:first-child:after,.vditor-reset table th:first-child:after{content:"";display:inline-block;vertical-align:top;min-height:24px}.vditor-reset table th{font-weight:600}.vditor-reset table tbody tr:nth-child(2n){background-color:#fff}.vditor-reset code:not(.hljs):not(.highlight-chroma){padding:.2em .4em;margin:0;font-size:85%;border-radius:3px;font-family:mononoki,Consolas,Liberation Mono,Menlo,Courier,monospace,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",Segoe UI Symbol,"Android Emoji",EmojiSymbols;word-break:break-word;background-size:20px 20px;white-space:pre-wrap}.vditor-reset pre{margin:1em 0}.vditor-reset pre>code{margin:0;font-size:85%;padding:.5em;border-radius:5px;display:block;overflow:auto;white-space:pre;font-family:mononoki,Consolas,Liberation Mono,Menlo,Courier,monospace,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",Segoe UI Symbol,"Android Emoji",EmojiSymbols;background-size:20px 20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8AgMAAABHkjHhAAAACVBMVEWAgIBaWlo+Pj7rTFvWAAAAA3RSTlMHCAw+VhR4AAAA+klEQVQoz4WSMW7EQAhFPxKWNh2FCx+HkaZI6RRb5DYbyVfIJXLKDCFoMbaTKSw/8ZnPAPjaH2xgZcUNUDADD7D9LtDBCLZ45fbkvo/30K8yeI64pPwl6znd/3n/Oe93P3ho9qeh72btTFzqkz0rsJle8Zr81OLEwZ1dv/713uWqvu2pl+k0fy7MWtj9r/tN5q/02z89qa/L4Dc2LvM93kezPfXlME/O86EbY/V9GB9ePX8G1/6W+/9h1dq/HGfTfzT3j/xNo7522Bfnqe5jO/fvhVthlfk434v3iO9zG/UOphyPeinPl1J8Gtaa7xPTa/Dk+RIs4deMvwGvcGsmsCvJ0AAAAABJRU5ErkJggg==);word-break:initial;word-wrap:normal}.vditor-reset pre:hover div.vditor-copy{display:block}.vditor-reset .language-math,.vditor-reset .language-echarts,.vditor-reset .language-mindmap,.vditor-reset .language-plantuml,.vditor-reset .language-mermaid,.vditor-reset .language-smiles,.vditor-reset .language-markmap,.vditor-reset .language-abc,.vditor-reset .language-flowchart,.vditor-reset .language-graphviz{margin-bottom:16px}.vditor-reset .language-math mjx-container:focus{outline:none;cursor:context-menu}.vditor-reset .language-math .katex-display>.katex>.katex-html>.tag{display:inline-block;font-size:1.21rem;right:2px}.vditor-reset .language-echarts,.vditor-reset .language-mindmap{overflow:hidden;height:420px}.vditor-reset .language-mermaid,.vditor-reset .language-markmap,.vditor-reset .language-flowchart,.vditor-reset .language-graphviz{text-align:center}.vditor-reset .language-graphviz parsererror{overflow:auto}.vditor-reset kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#24292e;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-radius:3px;box-shadow:inset 0 -1px #d1d5da}.vditor-reset summary{cursor:pointer}.vditor-reset summary:focus{outline:none}.vditor-reset svg{height:auto;width:auto;stroke-width:initial}.vditor-reset p:last-child,.vditor-reset blockquote:last-child,.vditor-reset pre:last-child,.vditor-reset ul:last-child,.vditor-reset ol:last-child,.vditor-reset hr:last-child{margin-bottom:0}.vditor-comment{border-bottom:2px solid #f8e6ab}.vditor-comment--focus,.vditor-comment--hover{background-color:#faf1d1;border-bottom:2px solid #ffc60a}.vditor-comment--focus .vditor-comment,.vditor-comment--hover .vditor-comment{border-bottom:2px solid #ffc60a}.vditor-task{list-style:none!important;word-break:break-all}.vditor-task input{margin:0 .2em .25em -1.6em;font-size:12px;vertical-align:middle}.vditor-copy{position:relative;display:none;z-index:1}.vditor-copy textarea{position:absolute;left:-100000px;height:10px}.vditor-copy span{cursor:pointer;position:absolute;right:15px;top:.5em}.vditor-copy svg{color:#586069;height:14px;width:14px!important;display:block;fill:currentColor}.vditor-linenumber{padding-left:4em!important;position:relative}.vditor-linenumber__rows{position:absolute;pointer-events:none;top:1em;left:0;width:3em;-webkit-user-select:none;-moz-user-select:none;user-select:none;counter-reset:linenumber}.vditor-linenumber__rows>span{pointer-events:none;display:block}.vditor-linenumber__rows>span:before{counter-increment:linenumber;content:counter(linenumber);color:#9e969661;display:block;padding-right:1em;text-align:right}.vditor-speech{position:absolute;display:none;background-color:#f6f8fa;border:1px solid #d1d5da;border-radius:3px;padding:3px;cursor:pointer;color:#586069}.vditor-speech:hover,.vditor-speech--current{color:#4285f4}.vditor-speech svg{height:14px;width:14px;fill:currentColor;display:block;stroke-width:0;stroke:currentColor}.vditor-anchor{margin-left:5px}.vditor-anchor--left{float:left;padding-right:4px;margin-left:-20px}.vditor-anchor svg{visibility:hidden}.vditor-anchor:hover svg{visibility:visible}.vditor-anchor:focus{outline:none}.vditor-linkcard{margin:31px auto 16px;transition:all .15s ease-in-out;cursor:pointer;max-width:768px;padding:0 10px}.vditor-linkcard a{border-radius:3px;background-color:#f6f8fa;overflow:hidden;max-height:250px;display:flex;text-decoration:none;flex-wrap:wrap-reverse;box-shadow:0 1px 2px #0003}.vditor-linkcard a:hover{box-shadow:0 0 3px #00000021,0 3px 6px #00000042;text-decoration:none}.vditor-linkcard a:visited .vditor-linkcard__abstract{color:#5860695c}.vditor-linkcard__info{padding:10px;min-width:200px;box-sizing:border-box;flex:1}.vditor-linkcard__title{font-size:14px;font-weight:400;color:#24292e;display:flex;align-items:center}.vditor-linkcard__title img{cursor:pointer;height:20px;width:20px;border-radius:3px;flex-shrink:0;margin-right:5px}.vditor-linkcard__abstract{word-wrap:break-word;word-break:break-all;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;font-size:13px;color:#586069;margin:5px 0}.vditor-linkcard__site{font-size:12px;color:#4285f4}.vditor-linkcard__image{background-size:cover;background-repeat:no-repeat;background-position:center center;max-width:250px;min-width:126px;cursor:pointer;background-color:#5860695c}.vditor-footnotes__goto-ref{text-decoration:none}.vditor-toc{margin-bottom:16px;-webkit-user-select:text;-moz-user-select:text;user-select:text;color:#4285f4}.vditor-toc .vditor-outline__action{display:none}.vditor-toc ul{list-style:none!important;padding-left:1em}.vditor-toc>ul{padding-left:0}.vditor-toc span{cursor:pointer}.vditor-toc li>span>svg{width:0;height:0}.vditor-outline{width:250px;border-right:1px solid var(--border-color);background-color:var(--panel-background-color);display:none;overflow:auto}.vditor-outline--right{border-right:0;border-left:1px solid var(--border-color)}.vditor-outline::-webkit-scrollbar{display:none}.vditor-outline ul{list-style:none!important;padding-left:1em;margin:0}.vditor-outline__content>ul{padding-left:0}.vditor-outline li>span{display:flex;align-items:center;padding:5px 10px;cursor:pointer;color:var(--textarea-text-color)}.vditor-outline li>span>svg{height:10px;width:10px;flex-shrink:0}.vditor-outline li>span:hover{color:var(--toolbar-icon-hover-color)}.vditor-outline li>span>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vditor-outline__title{border-bottom:1px dashed var(--border-color);padding:5px 10px;color:var(--toolbar-icon-color);font-size:12px}.vditor-outline__action{transition:all .15s ease-in-out;fill:currentColor;margin-right:5px;flex-shrink:0}.vditor-outline__action--close{transform:rotate(-90deg)}.vditor-wysiwyg{box-sizing:border-box;flex:1;position:relative;width:100%;min-width:1px}.vditor-wysiwyg pre.vditor-reset{background-color:var(--panel-background-color);margin:0;white-space:pre-wrap;height:100%;box-sizing:border-box}.vditor-wysiwyg pre.vditor-reset[contenteditable=false]{opacity:.3;cursor:not-allowed}.vditor-wysiwyg pre.vditor-reset:empty:before{content:attr(placeholder);color:var(--second-color)}.vditor-wysiwyg pre.vditor-reset:focus{outline:none;background-color:var(--textarea-background-color)}.vditor-wysiwyg pre.vditor-reset:after{content:"";height:var(--editor-bottom);display:block}.vditor-wysiwyg blockquote:empty:before,.vditor-wysiwyg pre>code:empty:before,.vditor-wysiwyg p:empty:before,.vditor-wysiwyg h1:empty:after,.vditor-wysiwyg h2:empty:after,.vditor-wysiwyg h3:empty:after,.vditor-wysiwyg h4:empty:after,.vditor-wysiwyg h5:empty:after,.vditor-wysiwyg h6:empty:after{content:" "}.vditor-wysiwyg code[data-marker="`"]{padding-left:0!important;padding-right:0!important}.vditor-wysiwyg__block pre:first-child{margin-bottom:-1em}.vditor-wysiwyg__block pre:first-child code{color:var(--textarea-text-color);height:auto;text-align:left}.vditor-wysiwyg__block pre:last-child{margin-bottom:1em}.vditor-wysiwyg__preview{cursor:pointer;white-space:initial;min-height:27px}.vditor-wysiwyg>.vditor-reset>h1:before,.vditor-wysiwyg>.vditor-reset>h2:before,.vditor-wysiwyg>.vditor-reset>h3:before,.vditor-wysiwyg>.vditor-reset>h4:before,.vditor-wysiwyg>.vditor-reset>h5:before,.vditor-wysiwyg>.vditor-reset>h6:before,.vditor-wysiwyg div.vditor-wysiwyg__block:before,.vditor-wysiwyg div[data-type=link-ref-defs-block]:before,.vditor-wysiwyg div[data-type=footnotes-block]:before,.vditor-wysiwyg .vditor-toc:before{float:left;padding-right:4px;margin-left:-29px;content:"H1";font-size:.85rem;font-weight:400;color:var(--second-color)}.vditor-wysiwyg>.vditor-reset>h2:before{content:"H2"}.vditor-wysiwyg>.vditor-reset>h3:before{content:"H3"}.vditor-wysiwyg>.vditor-reset>h4:before{content:"H4"}.vditor-wysiwyg>.vditor-reset>h5:before{content:"H5"}.vditor-wysiwyg>.vditor-reset>h6:before{content:"H6"}.vditor-wysiwyg div[data-type=link-ref-defs-block]:before{content:'"A"'}.vditor-wysiwyg div[data-type=footnotes-block]:before{content:"^F"}.vditor-wysiwyg div.vditor-wysiwyg__block:before{content:">"}.vditor-wysiwyg div.vditor-wysiwyg__block[data-type=yaml-front-matter]:before{content:"F"}.vditor-wysiwyg div.vditor-wysiwyg__block[data-type=math-block]:before{content:"$$"}.vditor-wysiwyg .vditor-toc:before{content:"ToC"}.vditor-wysiwyg hr{display:inline-block;margin:12px 0;width:100%}.vditor-wysiwyg details{white-space:initial}.vditor-wysiwyg a{cursor:pointer}.vditor-wysiwyg span[data-type=backslash]>span{display:none;color:var(--second-color)}.vditor-wysiwyg span[data-type=link-ref],.vditor-wysiwyg sup[data-type=footnotes-ref]{color:#4285f4}.vditor-wysiwyg span[data-type=toc-h]{color:#4285f4;text-decoration:underline}.vditor-wysiwyg div[data-type=footnotes-block]{border-top:2px solid var(--heading-border-color);padding-top:24px;margin-top:24px}.vditor-wysiwyg div[data-type=link-ref-defs-block]{color:var(--blockquote-color)}@media screen and (max-width: 520px){.vditor-wysiwyg h1:before,.vditor-wysiwyg h2:before,.vditor-wysiwyg h3:before,.vditor-wysiwyg h4:before,.vditor-wysiwyg h5:before,.vditor-wysiwyg h6:before,.vditor-wysiwyg div.vditor-wysiwyg__block:before,.vditor-wysiwyg div[data-type=link-ref-defs-block]:before,.vditor-wysiwyg div[data-type=footnotes-block]:before,.vditor-wysiwyg .vditor-toc:before{content:none}}.vditor-ir{box-sizing:border-box;flex:1;min-width:1px;position:relative;width:100%}.vditor-ir__node[data-type=code-block]:before,.vditor-ir__node[data-type=code-block]:after,.vditor-ir__node[data-type=yaml-front-matter]:before,.vditor-ir__node[data-type=yaml-front-matter]:after,.vditor-ir__node[data-type=math-block]:before,.vditor-ir__node[data-type=math-block]:after{content:" ";color:var(--second-color)}.vditor-ir__node:not(.vditor-ir__node--expand) .vditor-ir__marker{padding:0!important}.vditor-ir__node:not(.vditor-ir__node--expand)[data-type=a]{cursor:pointer}.vditor-ir__node[data-type=link-ref],.vditor-ir__node[data-type=footnotes-ref]{color:#4285f4}.vditor-ir__node[data-type=html-block]{margin-bottom:1em}.vditor-ir__node .vditor-ir__marker{width:0;overflow:hidden;display:inline-block;height:0;transition:all .15s ease-in-out}.vditor-ir__node--hidden .vditor-ir__marker{visibility:hidden}.vditor-ir__node--expand .vditor-ir__marker{color:var(--second-color);display:inline;height:auto;width:auto}.vditor-ir__node--expand .vditor-ir__marker--hide{display:none}.vditor-ir__node--expand .vditor-ir__marker--heading{color:var(--ir-heading-color)}.vditor-ir__node--expand .vditor-ir__marker--bi{color:var(--ir-bi-color)}.vditor-ir__node--expand .vditor-ir__marker--link{color:var(--ir-link-color)}.vditor-ir__node--expand .vditor-ir__marker--title{color:var(--ir-title-color)}.vditor-ir__node--expand .vditor-ir__marker--bracket{color:var(--ir-bracket-color);text-decoration:underline}.vditor-ir__node--expand .vditor-ir__marker--paren{color:var(--ir-paren-color)}.vditor-ir__node--expand .vditor-ir__marker--info{color:var(--ir-heading-color)}.vditor-ir__node--expand .vditor-ir__marker--pre code{color:var(--textarea-text-color);height:auto;text-align:left}.vditor-ir__node--expand[data-type=code-block]:before,.vditor-ir__node--expand[data-type=code-block]:after{content:"```"}.vditor-ir__node--expand[data-type=yaml-front-matter]:before,.vditor-ir__node--expand[data-type=yaml-front-matter]:after{content:"---"}.vditor-ir__node--expand[data-type=math-block]:before,.vditor-ir__node--expand[data-type=math-block]:after{content:"$$"}.vditor-ir__node span[data-type=code-block-open-marker],.vditor-ir__node span[data-type=code-block-close-marker],.vditor-ir__node span[data-type=yaml-front-matter-open-marker],.vditor-ir__node span[data-type=yaml-front-matter-close-marker],.vditor-ir__node span[data-type=math-block-open-marker],.vditor-ir__node span[data-type=math-block-close-marker]{display:none}.vditor-ir__preview{cursor:pointer;white-space:initial;min-height:27px}.vditor-ir__link{color:var(--ir-bracket-color);text-decoration:underline}.vditor-ir pre.vditor-reset{background-color:var(--panel-background-color);margin:0;white-space:pre-wrap;height:100%;box-sizing:border-box}.vditor-ir pre.vditor-reset[contenteditable=false]{opacity:.3;cursor:not-allowed}.vditor-ir pre.vditor-reset:empty:before{content:attr(placeholder);color:var(--second-color)}.vditor-ir pre.vditor-reset:focus{outline:none;background-color:var(--textarea-background-color)}.vditor-ir pre.vditor-reset:after{content:"";height:var(--editor-bottom);display:block}.vditor-ir pre.vditor-reset pre{margin:0}.vditor-ir hr{display:inline-block;margin:12px 0;width:100%}.vditor-ir blockquote:empty:before,.vditor-ir pre>code:empty:before,.vditor-ir p:empty:before,.vditor-ir h1:empty:after,.vditor-ir h2:empty:after,.vditor-ir h3:empty:after,.vditor-ir h4:empty:after,.vditor-ir h5:empty:after,.vditor-ir h6:empty:after{content:" "}.vditor-ir .vditor-reset>h1:before,.vditor-ir .vditor-reset>h2:before,.vditor-ir .vditor-reset>h3:before,.vditor-ir .vditor-reset>h4:before,.vditor-ir .vditor-reset>h5:before,.vditor-ir .vditor-reset>h6:before,.vditor-ir div[data-type=link-ref-defs-block]:before,.vditor-ir div[data-type=footnotes-block]:before,.vditor-ir .vditor-toc:before{float:left;padding-right:4px;margin-left:-29px;content:"H1";font-size:.85rem;font-weight:400;color:var(--second-color)}.vditor-ir .vditor-reset>h2:before{content:"H2"}.vditor-ir .vditor-reset>h3:before{content:"H3"}.vditor-ir .vditor-reset>h4:before{content:"H4"}.vditor-ir .vditor-reset>h5:before{content:"H5"}.vditor-ir .vditor-reset>h6:before{content:"H6"}.vditor-ir div[data-type=link-ref-defs-block]{color:var(--blockquote-color)}.vditor-ir div[data-type=link-ref-defs-block]:before{content:'"A"'}.vditor-ir div[data-type=footnotes-block]{border-top:2px solid var(--heading-border-color);padding-top:24px;margin-top:24px}.vditor-ir div[data-type=footnotes-block]:before{content:"^F"}.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>ul,.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>ol,.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>p,.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>blockquote,.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>pre,.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>table,.vditor-ir div[data-type=footnotes-block]>div[data-type=footnotes-def]>hr{margin-left:8px}.vditor-ir .vditor-toc:before{content:"ToC"}.vditor-ir .vditor-toc span[data-type=toc-h]{color:#4285f4;text-decoration:underline}@media screen and (max-width: 520px){.vditor-ir h1:before,.vditor-ir h2:before,.vditor-ir h3:before,.vditor-ir h4:before,.vditor-ir h5:before,.vditor-ir h6:before,.vditor-ir div[data-type=link-ref-defs-block]:before,.vditor-ir div[data-type=footnotes-block]:before,.vditor-ir .vditor-toc:before{content:none}}.vditor-sv{font-family:Helvetica Neue,Luxi Sans,DejaVu Sans,Hiragino Sans GB,Microsoft Yahei,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",Segoe UI Symbol,"Android Emoji",EmojiSymbols;margin:0 1px 0 0;overflow:auto;width:100%;flex:1;min-width:1px;border:0;resize:none;padding:10px 9px 10px 10px;box-sizing:border-box;background-color:var(--panel-background-color);outline:0 none;font-size:16px;line-height:22px;color:var(--textarea-text-color);border-radius:0 0 3px 3px;font-variant-ligatures:no-common-ligatures;white-space:pre-wrap;word-break:break-word;word-wrap:break-word}.vditor-sv[contenteditable=false]{opacity:.3;cursor:not-allowed}.vditor-sv:empty:before{content:attr(placeholder);color:var(--second-color)}.vditor-sv:focus{background-color:var(--textarea-background-color)}.vditor-sv:after{content:"";height:var(--editor-bottom);display:block}.vditor-sv span[data-type=newline]+span[data-type=text]:empty{display:inherit}.vditor-sv .sup{vertical-align:super;font-size:smaller}.vditor-sv .strong{font-weight:700}.vditor-sv .em{font-style:italic}.vditor-sv .s{text-decoration:line-through}.vditor-sv .mark:not(.vditor-sv__marker){background-color:#ff0;color:#000}.vditor-sv .h1{font-size:1.75em;line-height:44px}.vditor-sv .h2{font-size:1.55em;line-height:38px}.vditor-sv .h3{font-size:1.38em;line-height:27px}.vditor-sv .h4{font-size:1.25em;line-height:25px}.vditor-sv .h5{font-size:1.13em}.vditor-sv .h6{font-size:1em}.vditor-sv__marker{color:var(--second-color)}.vditor-sv__marker--heading{color:var(--ir-heading-color)}.vditor-sv__marker--bi{color:var(--ir-bi-color)}.vditor-sv__marker--link{color:var(--ir-link-color)}.vditor-sv__marker--title{color:var(--ir-title-color)}.vditor-sv__marker--bracket{color:var(--ir-bracket-color)}.vditor-sv__marker--paren{color:var(--ir-paren-color)}.vditor-sv__marker--info{color:var(--ir-heading-color)}.vditor-sv__marker--strong{font-weight:700}
diff --git a/dist/assets/Gallery-BWGJDDfX.css b/dist/assets/Gallery-BWGJDDfX.css
deleted file mode 100644
index a3da5e3..0000000
--- a/dist/assets/Gallery-BWGJDDfX.css
+++ /dev/null
@@ -1 +0,0 @@
-.devui-image-preview{position:fixed;inset:0;z-index:var(--devui-z-index-full-page-overlay, 1080);display:flex;align-items:center;justify-content:center;overflow:hidden}.devui-image-preview svg,.devui-image-preview polygon,.devui-image-preview g,.devui-image-preview path{fill:var(--devui-icon-text, #71757f)}.devui-image-preview__main-image{width:auto;height:auto;max-width:90%;max-height:90%;margin-top:-20px;cursor:grab}.devui-image-preview__close-btn{position:fixed;z-index:var(--devui-z-index-full-page-overlay, 1080);cursor:pointer;width:36px;height:36px;border-radius:50%;border:none;background:var(--devui-highlight-overlay, rgba(255, 255, 255, .8));box-shadow:var(--devui-shadow-length-base, 0 2px 6px 0) var(--devui-light-shadow, rgba(37, 43, 58, .12));display:inline-flex;align-items:center;justify-content:center;top:15px;right:20px}.devui-image-preview__close-btn:hover{background:var(--devui-area, #f5f5f5)}.devui-image-preview__close-btn svg{width:38px;height:18px}.devui-image-preview__arrow-left{position:fixed;z-index:var(--devui-z-index-full-page-overlay, 1080);cursor:pointer;width:36px;height:36px;border-radius:50%;border:none;background:var(--devui-highlight-overlay, rgba(255, 255, 255, .8));box-shadow:var(--devui-shadow-length-base, 0 2px 6px 0) var(--devui-light-shadow, rgba(37, 43, 58, .12));display:inline-flex;align-items:center;justify-content:center;top:50%;left:20px;transform:translateY(-50%)}.devui-image-preview__arrow-left:hover{background:var(--devui-area, #f5f5f5)}.devui-image-preview__arrow-left svg{width:38px;height:18px}.devui-image-preview__arrow-right{position:fixed;z-index:var(--devui-z-index-full-page-overlay, 1080);cursor:pointer;width:36px;height:36px;border-radius:50%;border:none;background:var(--devui-highlight-overlay, rgba(255, 255, 255, .8));box-shadow:var(--devui-shadow-length-base, 0 2px 6px 0) var(--devui-light-shadow, rgba(37, 43, 58, .12));display:inline-flex;align-items:center;justify-content:center;top:50%;right:20px;transform:translateY(-50%)}.devui-image-preview__arrow-right:hover{background:var(--devui-area, #f5f5f5)}.devui-image-preview__arrow-right svg{width:38px;height:18px}.devui-image-preview__toolbar{position:fixed;bottom:0;left:0;width:100%;height:50px;display:flex;align-items:center;justify-content:center;background:var(--devui-highlight-overlay, rgba(255, 255, 255, .8));box-shadow:var(--devui-shadow-length-fullscreen-overlay, 0 10px 24px 0) var(--devui-light-shadow, rgba(37, 43, 58, .12))}.devui-image-preview__toolbar button{display:inline-flex;width:24px;height:24px;align-items:center;justify-content:center;color:var(--devui-text, #252b3a);border:none;background-color:transparent;cursor:pointer;outline:0;padding:0}.devui-image-preview__toolbar .devui-image-preview__index{display:inline-flex;width:100px;justify-content:center;align-items:center;cursor:pointer}.devui-image-preview__toolbar>:not(:first-child){margin-left:20px}.devui-image-preview__bg{position:fixed;inset:0;z-index:calc(var(--devui-z-index-full-page-overlay, 1080) - 1);background:var(--devui-shadow, rgba(37, 43, 58, .24));border-radius:var(--devui-border-radius, 2px);box-shadow:var(--devui-shadow-length-fullscreen-overlay, 0 10px 24px 0) var(--devui-shadow, rgba(37, 43, 58, .24))}.devui-fixed-overlay{position:fixed;inset:0;background-color:var(--devui-shadow, rgba(37, 43, 58, .24));opacity:1;z-index:1050}.devui-fixed-overlay--fade-enter-active,.devui-fixed-overlay--fade-leave-active{transition:opacity .1s cubic-bezier(0,0,1,1)}.devui-fixed-overlay--fade-enter-from,.devui-fixed-overlay--fade-leave-to{opacity:0}.devui-flexible-overlay{position:fixed;border-radius:var(--devui-border-radius, 2px);background-color:var(--devui-connected-overlay-bg, #ffffff);box-shadow:var(--devui-shadow-length-connected-overlay, 0 2px 12px 0) var(--devui-shadow, rgba(37, 43, 58, .24));z-index:1000}.devui-flexible-overlay__arrow{position:absolute;width:8px;height:8px;transform:rotate(45deg);background-color:inherit}.devui-popover__icon-wrap{width:16px;height:16px;margin-right:8px}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--success>g>path{fill:var(--devui-success, #50d4ab)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--success>g>circle,.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--success>g>polygon{fill:var(--devui-light-text, #ffffff)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--warning>g>path{fill:var(--devui-warning, #fac20a)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--warning>g>polygon{fill:var(--devui-light-text, #ffffff)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--info>g>g{fill:var(--devui-info, #5e7ce0)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--info>g>circle{fill:var(--devui-light-text, #ffffff)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--error>g>path{fill:var(--devui-danger, #f66f6a)}.devui-popover__icon-wrap .devui-popover__icon.devui-popover__icon--error>g>circle{fill:var(--devui-light-text, #ffffff)}.devui-popover__content.devui-flexible-overlay{display:flex;flex-wrap:wrap;align-items:center;white-space:nowrap;padding:4px 12px;line-height:1.5;border-radius:var(--devui-border-radius-feedback, 4px);color:var(--devui-feedback-overlay-text, #dfe1e6);background-color:var(--devui-feedback-overlay-bg, #464d6e);font-size:var(--devui-font-size-sm, 12px)}.devui-popover__content.devui-flexible-overlay.is-icon{flex-wrap:nowrap}.devui-popover--fade-bottom-enter-from,.devui-popover--fade-bottom-leave-to,.devui-popover--fade-top-enter-from,.devui-popover--fade-top-leave-to{opacity:.8;transform:scaleY(.8)}.devui-popover--fade-bottom-enter-to,.devui-popover--fade-bottom-leave-from,.devui-popover--fade-top-enter-to,.devui-popover--fade-top-leave-from{opacity:1;transform:scaleY(1)}.devui-popover--fade-bottom-enter-active,.devui-popover--fade-top-enter-active{transition:transform .1s cubic-bezier(.16,.75,.5,1),opacity .1s cubic-bezier(.16,.75,.5,1)}.devui-popover--fade-bottom-leave-active,.devui-popover--fade-top-leave-active{transition:transform .1s cubic-bezier(.5,0,.84,.25),opacity .1s cubic-bezier(.5,0,.84,.25)}.devui-popover--fade-left-enter-from,.devui-popover--fade-left-leave-to,.devui-popover--fade-right-enter-from,.devui-popover--fade-right-leave-to{opacity:.8;transform:scaleX(.8)}.devui-popover--fade-left-enter-to,.devui-popover--fade-left-leave-from,.devui-popover--fade-right-enter-to,.devui-popover--fade-right-leave-from{opacity:1;transform:scaleX(1)}.devui-popover--fade-left-enter-active,.devui-popover--fade-right-enter-active{transition:transform .1s cubic-bezier(.16,.75,.5,1),opacity .1s cubic-bezier(.16,.75,.5,1)}.devui-popover--fade-left-leave-active,.devui-popover--fade-right-leave-active{transition:transform .1s cubic-bezier(.5,0,.84,.25),opacity .1s cubic-bezier(.5,0,.84,.25)}.devui-form__label{align-self:flex-start}.devui-form__label--vertical{padding-bottom:8px}.devui-form__label--sm{flex:0 0 80px}.devui-form__label--md{flex:0 0 100px}.devui-form__label--lg{flex:0 0 150px}.devui-form__label--start{text-align:left}.devui-form__label--center{text-align:center}.devui-form__label--end{text-align:end}.devui-form__label-span{display:inline-block;vertical-align:middle;font-size:var(--devui-font-size, 12px);color:var(--devui-aide-text, #71757f)}.devui-form__label--required:before{content:"*";color:red;display:inline-block;margin-right:8px;margin-left:-12px}.devui-form__label--required-right:after{content:"*";color:red;display:inline-block;margin-left:8px}.devui-form__label--required-hide:before,.devui-form__label--required-hide:after{display:none}.devui-form__label-help{position:relative;top:-.1em;display:inline-block;vertical-align:middle;margin-left:4px;cursor:pointer}.devui-form__label-tips-popover .dv-popover__icon-wrap+span{flex:1}.devui-form__control{flex:1 1 auto;position:relative;width:100%}.devui-form__control--horizontal{margin-left:16px}.devui-form__control .devui-star{color:red}.devui-form__control .devui-form__control-container{position:relative}.devui-form__control .devui-form__control-container--horizontal{display:flex;width:100%}.devui-form__control .devui-form__control-container--horizontal .devui-validate-tip{margin:0}.devui-form__control .devui-form__control-container .devui-form__feedback-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:16px;text-align:center;visibility:visible;pointer-events:none;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}.devui-form__control .devui-form__control-container .devui-form__feedback-icon--error svg circle{fill:var(--devui-danger, #f66f6a)}.devui-form__control .devui-form__control-container .devui-form__feedback-icon--error svg polygon{fill:var(--devui-base-bg, #ffffff)}.devui-form__control .devui-form__control-container .devui-form__feedback-icon--success svg circle{fill:var(--devui-success, #50d4ab)}.devui-form__control .devui-form__control-container .devui-form__feedback-icon--success svg polygon{fill:var(--devui-base-bg, #ffffff)}.devui-form__control .devui-form__control-container .devui-form__feedback-icon--pending svg{animation:loading-keyframes 1s infinite linear}.devui-form__control .devui-form__control-container .devui-form__feedback-icon--pending svg path{fill:var(--devui-brand, #5e7ce0)}.devui-form__control .devui-form__control-container--has-feedback{display:flex;align-items:center}.devui-form__control .devui-form__control-container--has-feedback input{padding-right:28px}.devui-form__control .devui-form__control-container--feedback-error{border:1px solid #f66f6a;border-radius:2px}.devui-form__control .devui-form__control-container--feedback-error input{background-color:#ffeeed;border-color:transparent}.devui-form__control .devui-form__control-container--feedback-error input:hover{border-color:transparent!important}.devui-form__control .devui-form__control-container--feedback-error input:focus{border-color:transparent!important}.devui-form__control .devui-form__control-container--feedback-error .devui-select-arrow{right:24px!important}.devui-form__control .devui-form__control-info{line-height:1}.devui-form__control .devui-form__control-info .error-message{display:inline-block;min-height:20px;line-height:1.5;font-size:var(--devui-font-size, 12px);color:var(--devui-danger, #f66f6a)}.devui-form__control .devui-form__control-info .devui-form__control-extra{font-size:var(--devui-font-size, 12px);color:var(--devui-aide-text, #71757f);min-height:20px;line-height:1.5;text-align:justify}@keyframes loading-keyframes{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.devui-form__item--horizontal{display:flex;align-items:center;margin-bottom:20px}.devui-form__item--vertical{display:flex;flex-direction:column;margin-bottom:20px}.devui-form__item--error{margin-bottom:0}.devui-form-operation .star{color:red}.devui-icon__container{display:inline-block;color:var(--devui-icon-fill, #71757f)}.devui-icon__container>*:not(:last-child){vertical-align:middle;margin-right:8px}.devui-icon__container i{vertical-align:middle;transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-icon--no-slots i,.devui-icon--no-slots img{display:block}.devui-icon--disabled{color:var(--devui-disabled-text, #cfd0d3);cursor:not-allowed}.devui-icon--disabled i{color:var(--devui-disabled-text, #cfd0d3)}.devui-icon--operable:not(.devui-icon--disabled){cursor:pointer;transition:color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-icon--operable:not(.devui-icon--disabled) i{cursor:pointer}.devui-icon--operable:hover:not(.devui-icon--disabled){color:var(--devui-icon-fill-hover, #252b3a)}.devui-icon--operable:hover:not(.devui-icon--disabled).devui-icon__container{background-color:var(--devui-icon-background-hover, var(--devui-list-item-hover-bg, #f2f2f3))}.devui-icon--operable:hover:not(.devui-icon--disabled) i{color:var(--devui-icon-fill-hover, #252b3a)}.devui-icon--operable:active:not(.devui-icon--disabled){color:var(--devui-icon-active-color, var(--devui-icon-fill-active, #252b3a))}.devui-icon--operable:active:not(.devui-icon--disabled).devui-icon__container{background-color:var(--devui-icon-background-active, var(--devui-list-item-active-bg, #f2f5fc))}.devui-icon--operable:active:not(.devui-icon--disabled) i{color:var(--devui-icon-active-color, var(--devui-icon-fill-active, #252b3a))}.devui-icon--operable.devui-icon__container{height:32px;line-height:32px;padding:0 8px;margin-left:-8px;border-radius:var(--devui-border-radius, 2px);transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-icon--spin{animation:iconSpin 2.5s linear infinite}.devui-svg-icon{vertical-align:middle}@keyframes iconSpin{0%{transform:rotate(0)}50%{transform:rotate(180deg)}to{transform:rotate(360deg)}}.devui-input{width:100%;height:32px;font-size:var(--devui-font-size, 12px)}.devui-input__wrapper{display:inline-flex;align-items:center;justify-content:center;width:100%;padding:0 8px;box-sizing:border-box;border:1px solid var(--devui-form-control-line, #d7d8da);border-radius:var(--devui-border-radius, 2px);background-color:var(--devui-form-control-bg, #ffffff);transition:border-color .3s var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),box-shadow var(--devui-animation-duration-base, .2s) var(--devui-animation-ease-in, cubic-bezier(.5, 0, .84, .25));height:100%}.devui-input__wrapper:not(.devui-input--error):not(.devui-input--disabled):not(.devui-input--focus):hover{border-color:var(--devui-form-control-line-hover, #9b9fa8)}.devui-input__wrapper.devui-input--glow-style:not(.devui-input--error):not(.devui-input--disabled):not(.devui-input--focus):hover{box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08));border-color:var(--devui-form-control-line, #d7d8da)}.devui-input--focus:not(.devui-input--error){border-color:var(--devui-form-control-line-active, #5e7ce0)}.devui-input--focus.devui-input--glow-style:not(.devui-input--error){box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08));border-color:var(--devui-form-control-line-active, #5e7ce0)}.devui-input--disabled{color:var(--devui-disabled-text, #cfd0d3);border-color:var(--devui-disabled-line, #dfe1e6);background-color:var(--devui-disabled-bg, #f5f5f5);cursor:not-allowed}.devui-input--disabled:hover{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-input--disabled .devui-input__inner{color:var(--devui-disabled-text, #cfd0d3);cursor:not-allowed}.devui-input--error{border-color:var(--devui-danger-line, #f66f6a);background-color:var(--devui-danger-bg, #ffd5d4)}.devui-input--sm{height:26px;font-size:var(--devui-font-size-sm, 12px)}.devui-input--sm .devui-input__clear--icon{width:14px;height:14px}.devui-input--lg{height:46px;font-size:var(--devui-font-size-lg, 14px)}.devui-input--lg .devui-input__clear--icon{width:18px;height:18px}.devui-input--feedback{padding-right:28px}.devui-input__inner{width:100%;height:100%;color:var(--devui-text, #252b3a);font-size:inherit;padding:4px 0;border:none;background:none;outline:none;box-sizing:border-box}.devui-input__inner::placeholder{color:var(--devui-placeholder, #babbc0)}.devui-input--prepend .devui-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.devui-input--append .devui-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.devui-input-slot{display:inline-flex;width:100%;align-items:stretch}.devui-input-slot__prepend,.devui-input-slot__append{color:var(--devui-text);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;padding:0 20px;white-space:nowrap;border:1px solid var(--devui-form-control-line, #d7d8da);border-radius:var(--devui-border-radius, 2px);background-color:var(--devui-form-control-bg, #ffffff)}.devui-input-slot__prepend .devui-button,.devui-input-slot__prepend .devui-select .devui-select__selection,.devui-input-slot__append .devui-button,.devui-input-slot__append .devui-select .devui-select__selection{border:none!important;background-color:transparent!important;color:inherit}.devui-input-slot__prepend .devui-button,.devui-input-slot__prepend .devui-select__selection,.devui-input-slot__append .devui-button,.devui-input-slot__append .devui-select__selection{margin:0 -20px}.devui-input-slot__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.devui-input-slot__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.devui-input-slot__prefix,.devui-input-slot__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;align-items:center}.devui-input-slot__prefix>*{margin-right:8px}.devui-input-slot__suffix>*{margin-left:8px}.devui-input__clear--icon,.devui-input__password--icon{cursor:pointer}.devui-input__clear--icon path{fill:var(--devui-shape-icon-fill, #d7d8da);transition:all var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)) var(--devui-animation-duration-slow, .3s)}.devui-input__clear--icon:hover path{fill:var(--devui-shape-icon-fill-hover, #babbc0)}.devui-input--gray-style:not(.devui-input--disabled) .devui-input__wrapper:not(.devui-input--error){background:#f5f5f5;border-color:#f5f5f5}.devui-input--gray-style:not(.devui-input--disabled) .devui-input__wrapper:not(.devui-input--error):hover{background:#ebebeb;border-color:#ebebeb}body[ui-theme=galaxy-theme] .devui-input__inner:-webkit-autofill,body[ui-theme=galaxy-theme] .devui-input__inner:-webkit-autofill:hover,body[ui-theme=galaxy-theme] .devui-input__inner:-webkit-autofill:focus,body[ui-theme=galaxy-theme] .devui-input__inner:-webkit-autofill:active{-webkit-box-shadow:0 0 0 1000px transparent inset!important;box-shadow:0 0 0 1000px transparent inset!important;caret-color:#fff}body[ui-theme=galaxy-theme] .devui-input__inner:-internal-autofill-previewed,body[ui-theme=galaxy-theme] .devui-input__inner:-internal-autofill-selected{-webkit-text-fill-color:var(--devui-text, #252b3a);transition:background-color 99999s ease-out .5s}.devui-search{position:relative;border-radius:var(--devui-border-radius, 2px);transition:border-color .3s var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),box-shadow var(--devui-animation-duration-base, .2s) var(--devui-animation-ease-in, cubic-bezier(.5, 0, .84, .25));display:flex;justify-content:center;align-items:center}.devui-search:not(.devui-search--error):not(.devui-search--disabled):not(.devui-search--focus):not(.devui-search--glow-style):hover .devui-input{border-color:var(--devui-form-control-line-hover, #9b9fa8)}.devui-search .devui-input{display:inline-flex;align-items:center;justify-content:center;width:100%;height:32px;padding:4px 60px 4px 8px;font-size:var(--devui-font-size-md, 12px);color:var(--devui-text, #252b3a);box-sizing:border-box;border:1px solid var(--devui-form-control-line, #d7d8da);border-radius:var(--devui-border-radius, 2px);background-color:var(--devui-form-control-bg, #ffffff);transition:border-color .3s var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-search .devui-input__inner{padding:0}.devui-search .devui-input__wrapper{border:none;padding:0}.devui-search--focus .devui-input{border-color:var(--devui-form-control-line-active, #5e7ce0)}.devui-search__clear,.devui-search__icon{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.devui-search__clear svg path,.devui-search__icon svg path{fill:var(--devui-icon-text, #71757f)}.devui-search__clear{position:absolute;right:36px;cursor:pointer;font-size:10px;width:30px;height:100%;display:flex;justify-content:center;align-items:center}.devui-search__clear>svg path{fill:var(--devui-shape-icon-fill, #d7d8da);transition:all var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)) var(--devui-animation-duration-slow, .3s)}.devui-search__clear>svg:hover path{fill:var(--devui-shape-icon-fill-hover, #babbc0)}.devui-search__clear:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);width:1px;height:46%;border-left:1px solid var(--devui-dividing-line, #f2f2f3)}.devui-search__icon{pointer-events:all;cursor:pointer;position:absolute;z-index:1;right:0;top:0}.devui-search--glow-style:not(.devui-search--disabled):hover,.devui-search--glow-style:not(.devui-search--disabled).devui-search--focus{box-shadow:0 0 0 4px var(--devui-form-control-interactive-outline, rgba(94, 124, 224, .08))}.devui-search--sm .devui-input{height:24px;font-size:var(--devui-font-size-sm, 12px)}.devui-search--sm .devui-input.devui-input--sm{font-size:var(--devui-font-size, 12px);padding-right:60px}.devui-search--sm .devui-search__icon{width:34px;height:26px}.devui-search--sm .devui-search__icon svg{width:14px;height:14px}.devui-search--sm .devui-search__clear{width:26px;height:100%;right:34px}.devui-search--sm .devui-search__clear>svg{width:14px;height:14px}.devui-search--sm .devui-search__clear{right:24px}.devui-search--lg .devui-input{height:40px;font-size:var(--devui-font-size-lg, 14px)}.devui-search--lg .devui-input.devui-input--lg{padding:4px 80px 4px 10px}.devui-search--lg .devui-search__icon,.devui-search--lg .devui-search__clear{width:40px;height:40px}.devui-search--lg .devui-search__icon svg,.devui-search--lg .devui-search__clear svg{width:18px;height:18px}.devui-search--lg .devui-search__clear{right:40px}.devui-search--disabled .devui-input{cursor:not-allowed;color:var(--devui-disabled-text, #cfd0d3);border-color:var(--devui-disabled-line, #dfe1e6);background-color:var(--devui-disabled-bg, #f5f5f5)}.devui-search--disabled .devui-search__icon{cursor:not-allowed}.devui-search--disabled .icon-search{color:var(--devui-disabled-text, #cfd0d3)!important}.devui-search--left .devui-input{padding-right:32px;padding-left:32px}.devui-search--left .devui-input.devui-input--lg{padding-right:40px;padding-left:40px}.devui-search--left .devui-input.devui-input--sm{padding-right:24px;padding-left:24px}.devui-search--left .devui-search__clear{right:0}.devui-search--left .devui-search__clear:after{display:none}.devui-search--left .devui-search__icon{left:0}.devui-search--no-border .devui-input,.devui-search--no-border .devui-input__wrapper{background-color:unset}.devui-search--no-border:not(.devui-search--focus) .devui-input:not(:hover,:focus,:active){border:1px solid transparent}[data-v-bcb56b5f] .devui-tabs__nav{display:flex;justify-content:center;width:100%!important}[data-v-bcb56b5f] .devui-tabs__nav li{width:50%;display:flex;justify-content:center}[data-v-bcb56b5f] .devui-tabs__nav li a span{font-size:18px!important;font-weight:500}.ps[data-v-bcb56b5f]{height:calc(100vh - 65px);width:100%}[data-v-bcb56b5f] .devui-upload{width:100%}[data-v-bcb56b5f] .devui-upload>div{width:100%}
diff --git a/dist/assets/codicon-SZR-f31-.ttf b/dist/assets/codicon-SZR-f31-.ttf
deleted file mode 100644
index 5abfa74..0000000
Binary files a/dist/assets/codicon-SZR-f31-.ttf and /dev/null differ
diff --git a/dist/assets/devui-icomoon-BHLqMzSu.woff b/dist/assets/devui-icomoon-BHLqMzSu.woff
deleted file mode 100644
index f9cf773..0000000
Binary files a/dist/assets/devui-icomoon-BHLqMzSu.woff and /dev/null differ
diff --git a/dist/assets/devui-icomoon-BeYkSg23.eot b/dist/assets/devui-icomoon-BeYkSg23.eot
deleted file mode 100644
index 0b49c8d..0000000
Binary files a/dist/assets/devui-icomoon-BeYkSg23.eot and /dev/null differ
diff --git a/dist/assets/devui-icomoon-C-SlqI79.ttf b/dist/assets/devui-icomoon-C-SlqI79.ttf
deleted file mode 100644
index e1eddd6..0000000
Binary files a/dist/assets/devui-icomoon-C-SlqI79.ttf and /dev/null differ
diff --git a/dist/assets/devui-icomoon-NjuehwAK.svg b/dist/assets/devui-icomoon-NjuehwAK.svg
deleted file mode 100644
index ff5e078..0000000
--- a/dist/assets/devui-icomoon-NjuehwAK.svg
+++ /dev/null
@@ -1,2196 +0,0 @@
-
-
-
diff --git a/dist/index.html b/dist/index.html
index 4bf0eae..112bcc8 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -7,8 +7,8 @@
柚子の网站
-
-
+
+
diff --git a/extra.d.ts b/extra.d.ts
index d889090..ca35233 100644
--- a/extra.d.ts
+++ b/extra.d.ts
@@ -1,2 +1,3 @@
declare module "aplayer";
-declare module 'vue3-video-play';
\ No newline at end of file
+declare module "vue3-video-play";
+declare module "vue3-masonry-plus";
\ No newline at end of file
diff --git a/package.json b/package.json
index dceb84e..f8b3bb2 100644
--- a/package.json
+++ b/package.json
@@ -14,29 +14,28 @@
"type-check": "vue-tsc --build"
},
"dependencies": {
- "@devui-design/icons": "^1.4.0",
"@imengyu/vue3-context-menu": "^1.5.2",
"@meting/core": "^1.5.13",
"@unocss/reset": "^66.3.3",
"aplayer": "^1.10.1",
"axios": "^1.11.0",
"crypto-js": "^4.2.0",
- "devui-theme": "^0.0.7",
"es-toolkit": "^1.39.8",
"less": "^4.4.0",
- "ng-devui": "^18.0.0",
"pinia": "^3.0.3",
"qweather-icons": "^1.7.0",
"unocss": "^66.3.3",
"unplugin-auto-import": "^19.3.0",
"unplugin-vue-components": "^28.8.0",
"unplugin-vue-router": "^0.15.0",
+ "v-infinite-scroll": "^1.0.4",
"vditor": "^3.11.2",
"vite-svg-loader": "^5.1.0",
"vue": "^3.6.0-alpha.2",
- "vue-devui": "^1.6.33",
+ "vue-masonry": "^0.16.0",
"vue-router": "^4.5.1",
"vue3-cookies": "^1.0.6",
+ "vue3-masonry-plus": "^1.2.5",
"vue3-perfect-scrollbar": "^2.0.0",
"vue3-video-play": "^1.3.2"
},
@@ -45,10 +44,13 @@
"@types/node": "^22.16.5",
"@vitejs/plugin-vue": "^6.0.1",
"@vue/tsconfig": "^0.7.0",
+ "naive-ui": "^2.43.2",
"npm-run-all2": "^8.0.4",
"typescript": "~5.8.0",
+ "vfonts": "^0.0.3",
"vite": "^7.0.6",
"vite-plugin-vue-devtools": "^8.0.0",
+ "vue-devui": "^1.6.35",
"vue-tsc": "^3.0.4"
}
}
diff --git a/src/App.vue b/src/App.vue
index 96691f5..4f2c539 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,71 +1,29 @@
-
-
-
- {{ modal.content }}
-
-
-
- {{modal.cancelText}}
- {{modal.submitText}}
-
-
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/Index.vue b/src/Index.vue
index f48a0a1..8acfe0a 100644
--- a/src/Index.vue
+++ b/src/Index.vue
@@ -1,38 +1,112 @@
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+ {{ modal.title }}
+
+
+
{{ modal.content }}
+
+
+
+
+
+ {{ modal.cancelText }}
+ {{ modal.submitText }}
+
+
+
+
-
\ No newline at end of file
diff --git a/src/components/Login.vue b/src/components/Login.vue
index 980e154..7a8731f 100644
--- a/src/components/Login.vue
+++ b/src/components/Login.vue
@@ -1,44 +1,47 @@
-
-
-
-
-
-
-
-
-
-
-
- 登 录
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 注册
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ 登 录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注册
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/menuH.vue b/src/components/menuH.vue
index e6edd06..041f201 100644
--- a/src/components/menuH.vue
+++ b/src/components/menuH.vue
@@ -5,36 +5,15 @@
-
-
-
- 首页
-
-
-
- 画廊
-
-
-
- 文章
-
-
-
- 工具
-
-
-
- 软件分享
-
-
-
- 友链
-
-
+
+
+
-
+
+
+
{{ locationInfo }}
|
@@ -44,47 +23,35 @@
-
+
-
+
{{ userinfo.nickname }}
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
{{ userinfo.nickname }}
-
+
+
+
{{ userinfo.nickname }}
+
@@ -101,16 +68,16 @@ import linkSvg from '@/icon/menu/link.svg';
import picSvg from '@/icon/menu/pic.svg';
import settingSvg from '@/icon/menu/setting.svg';
import loginModal from '@/components/Login.vue'
+import masked from '@/components/mask.vue'
import { onMounted, ref, watch } from 'vue';
-import { useRoute, useRouter } from 'vue-router';
-
+import { useRoute, useRouter, RouterLink } from 'vue-router';
+const activeKey = ref('home')
const route = useRoute();
const visible = ref(false);
const router = useRouter();
-const key = ref("home");
const locationInfo = ref("获取位置中...");
const latitude = ref
(null);
const longitude = ref(null);
@@ -122,7 +89,69 @@ const userinfo: any = ref(null)
const nav: any = useTemplateRef('nav')
const navx = $store.nav.useNavStore()
const usrLog = $store.log.useLogStore()
-console.log('>>> --> route:', route)
+const menuOptions = ref([
+ {
+ label: () => h(RouterLink, { to: '/home', class: 'flex items-center justify-center' }, { default: () => '首页' }),
+ key: "home",
+ icon: () => h(homeSvg)
+ },
+ {
+ label: () => h(RouterLink, { to: '/gallery', class: 'flex items-center justify-center' }, { default: () => '画廊管理' }),
+ key: "gallery",
+ icon: () => h(picSvg)
+ },
+ {
+ label: () => h(RouterLink, { to: '/blog', class: 'flex items-center justify-center' }, { default: () => '文章管理' }),
+ key: "blog",
+ icon: () => h(artiSvg)
+ },
+ {
+ label: () => h(RouterLink, { to: '/widget', class: 'flex items-center justify-center' }, { default: () => '工具管理' }),
+ key: "widget",
+ icon: () => h(downSvg)
+ },
+ {
+ label: () => h(RouterLink, { to: '/apps', class: 'flex items-center justify-center' }, { default: () => '软件管理' }),
+ key: "apps",
+ icon: () => h(settingSvg)
+ },
+ {
+ label: () => h(RouterLink, { to: '/plink', class: 'flex items-center justify-center' }, { default: () => '友链管理' }),
+ key: "plink",
+ icon: () => h(linkSvg)
+ },
+]);
+const oprOp = ref([
+ {
+ key: 'logout',
+ label: '退出登录',
+ },
+ {
+ key: 'console',
+ label: '控制台',
+ },
+ {
+ key: 'setting',
+ label: '设置',
+ }
+])
+
+function setVisible(v: any) {
+ visible.value = v
+}
+
+function handleSelect(key: string) {
+ console.log('>>> --> handleSelect --> key:', key)
+ if (key == 'logout') {
+ logout()
+ return
+ }
+ if (key == 'console') {
+ router.push('/console')
+ return
+ }
+}
+
// 获取地理位置
const getLocation = () => {
if (!navigator.geolocation) {
@@ -198,7 +227,7 @@ async function handdleJw(jw: string) {
}
watch(() => route.name, (newVal) => {
- key.value = newVal as string
+ activeKey.value = newVal as string
})
function goHome() {
@@ -220,6 +249,9 @@ function logout() {
usrLog.setIsLogin(false)
userinfo.value = null;
}
+function gotoConsole() {
+ window.open("https://www.hxyouzi.com/console/home", "_BLACK")
+}
function gotoHf() {
console.log('>>> --> gotoHf --> fxlink:', fxlink)
@@ -230,7 +262,10 @@ onMounted(() => {
userinfo.value = $cookies.get('userinfo');
console.log('>>>>>>>>>>', userinfo.value);
- key.value = route.name as string;
+ setTimeout(() => {
+ console.log('>>>>>>>>>>', route)
+ activeKey.value = route.name as string;
+ }, 20);
console.log('>>> --> route.name:', route.name)
getLocation(); // 组件挂载时获取位置
@@ -242,7 +277,7 @@ onMounted(() => {
});
onBeforeUpdate(() => {
userinfo.value = $cookies.get('userinfo');
- key.value = route.name as string;
+ activeKey.value = route.name as string;
const h: number = nav.value.clientHeight
// console.log('******>>> --> nav.value:', nav.value)
// console.log('()()()()()>>> --> h:', h)
@@ -257,32 +292,10 @@ onBeforeUpdate(() => {
margin-bottom: 1px;
}
-:deep(.devui-menu-horizontal .devui-menu-item:hover span .icon) {
- color: var(--devui-brand, #5e7ce0) !important;
- fill: var(--devui-brand, #5e7ce0) !important;
+:deep(.n-menu-item-content__icon) {
+ width: 16px !important;
+ height: 16px !important;
}
-:deep(.devui-menu-item-select span svg) {
- color: var(--devui-brand, #5e7ce0) !important;
- fill: var(--devui-brand, #5e7ce0) !important;
- line-height: 100% !important;
-}
-:deep(.devui-menu-item-select span) {
- color: var(--devui-brand, #5e7ce0) !important;
-}
-
-:deep(.devui-menu-horizontal) {
- padding: 14px 20px 6px;
-}
-
-:deep(.devui-menu-item span) {
- display: flex;
- align-items: center;
-
- .devui-icon__container {
- display: flex;
- align-items: center;
- }
-}
\ No newline at end of file
diff --git a/src/config/msg.ts b/src/config/msg.ts
deleted file mode 100644
index 954e1d0..0000000
--- a/src/config/msg.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Message } from 'vue-devui';
-
-const msg:any = Message;
-
-export default msg;
diff --git a/src/icon/loc.svg b/src/icon/loc.svg
new file mode 100644
index 0000000..1a4301c
--- /dev/null
+++ b/src/icon/loc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icon/search.svg b/src/icon/search.svg
new file mode 100644
index 0000000..92c0cc4
--- /dev/null
+++ b/src/icon/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/lib/assets/loadError.png b/src/lib/assets/loadError.png
new file mode 100644
index 0000000..4e39110
Binary files /dev/null and b/src/lib/assets/loadError.png differ
diff --git a/src/lib/assets/loading.gif b/src/lib/assets/loading.gif
new file mode 100644
index 0000000..d75b51c
Binary files /dev/null and b/src/lib/assets/loading.gif differ
diff --git a/src/lib/components/LazyImg.vue b/src/lib/components/LazyImg.vue
new file mode 100644
index 0000000..5582711
--- /dev/null
+++ b/src/lib/components/LazyImg.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![preview]()
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/components/Waterfall.vue b/src/lib/components/Waterfall.vue
new file mode 100644
index 0000000..6e41aca
--- /dev/null
+++ b/src/lib/components/Waterfall.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
diff --git a/src/lib/index.ts b/src/lib/index.ts
new file mode 100644
index 0000000..2019686
--- /dev/null
+++ b/src/lib/index.ts
@@ -0,0 +1,3 @@
+import Waterfall from './components/Waterfall.vue'
+import LazyImg from './components/LazyImg.vue'
+export { Waterfall, LazyImg }
diff --git a/src/lib/types/images.d.ts b/src/lib/types/images.d.ts
new file mode 100644
index 0000000..3c36566
--- /dev/null
+++ b/src/lib/types/images.d.ts
@@ -0,0 +1,4 @@
+declare module "*.gif" {
+ const value: string;
+ export default value;
+}
diff --git a/src/lib/types/jsx.d.ts b/src/lib/types/jsx.d.ts
new file mode 100644
index 0000000..080356f
--- /dev/null
+++ b/src/lib/types/jsx.d.ts
@@ -0,0 +1,13 @@
+import { VNode } from "vue";
+
+declare global {
+ namespace JSX {
+ interface Element extends VNode {}
+ interface ElementClass {
+ $props: {};
+ }
+ interface IntrinsicElements {
+ [elem: string]: any;
+ }
+ }
+}
diff --git a/src/lib/types/lazy.d.ts b/src/lib/types/lazy.d.ts
new file mode 100644
index 0000000..dde2032
--- /dev/null
+++ b/src/lib/types/lazy.d.ts
@@ -0,0 +1,77 @@
+export interface LazyOptions {
+ error?: string;
+ loading?: string;
+ observerOptions?: IntersectionObserverInit;
+ log?: boolean;
+}
+
+export interface ValueFormatterObject {
+ src: string;
+ error?: string;
+ loading?: string;
+}
+
+export default class Lazy {
+ lazyActive: boolean;
+ options: LazyOptions;
+
+ _images = new WeakMap();
+
+ constructor(flag = true, options: LazyOptions);
+
+ config(options = {}): void;
+
+ // mount
+ mount(
+ el: HTMLImageElement,
+ binding: string | ValueFormatterObject,
+ callback: () => void
+ ): void;
+
+ // unmount
+ unmount(el: HTMLElement): void;
+
+ resize(el: HTMLElement, callback: () => void): void;
+
+ /**
+ * 设置img的src
+ * @param {*} el - img
+ * @param {*} src - 原图
+ * @param {*} error - 错误图片
+ * @param {*} callback - 完成的回调函数,通知组件刷新布局
+ * @returns
+ */
+ _setImageSrc(
+ el: HTMLImageElement,
+ src: string,
+ callback: () => void,
+ error?: string
+ ): void;
+
+ _isOpenLazy(): boolean;
+
+ /**
+ * 添加img和对应的observer到weakMap中
+ * 开启监听
+ * 当出现在可视区域后取消监听
+ * @param {*} el - img
+ * @param {*} src - 图片
+ * @param {*} error - 错误图片
+ * @param {*} callback - 完成的回调函数,通知组件刷新布局
+ */
+ _initIntersectionObserver(
+ el: HTMLImageElement,
+ src: string,
+ callback: () => void,
+ error?: string
+ ): void;
+
+ // 格式化参数
+ _valueFormatter(value: ValueFormatterObject | string): ValueFormatterObject;
+
+ // 日志
+ _log(callback: () => void): void;
+
+ // 在map中获取对应img的observer事件
+ _realObserver(el: HTMLElement): IntersectionObserver | undefined;
+}
diff --git a/src/lib/types/shims-vue.d.ts b/src/lib/types/shims-vue.d.ts
new file mode 100644
index 0000000..527ef57
--- /dev/null
+++ b/src/lib/types/shims-vue.d.ts
@@ -0,0 +1,4 @@
+declare module "*.png" {
+ const src: string;
+ export default src;
+}
diff --git a/src/lib/types/util.d.ts b/src/lib/types/util.d.ts
new file mode 100644
index 0000000..af073b1
--- /dev/null
+++ b/src/lib/types/util.d.ts
@@ -0,0 +1,3 @@
+export type Nullable = T | null
+
+export type CssStyleObject = Partial & Record
diff --git a/src/lib/types/waterfall.d.ts b/src/lib/types/waterfall.d.ts
new file mode 100644
index 0000000..571c6ef
--- /dev/null
+++ b/src/lib/types/waterfall.d.ts
@@ -0,0 +1,34 @@
+export interface ViewCard {
+ src?: any;
+ id?: string;
+ name?: string;
+ star?: boolean;
+ backgroundColor?: string;
+ [key: string]: any;
+}
+
+export interface WaterfallProps {
+ columns: number;
+ width: number;
+ animationDuration: number;
+ animationDelay: number;
+ animationEffect: string;
+ hasAroundGutter: boolean;
+ gutter: number;
+ list: ViewCard[];
+ animationPrefix: string;
+ backgroundColor: string;
+ lazyload: boolean;
+ loadProps: Record;
+ crossOrigin: boolean;
+ delay: number;
+ rowKey: string;
+ imgSelector: string;
+}
+
+export interface ItemWidthProps {
+ wrapperWidth: number;
+ gutter: number;
+ hasAroundGutter: boolean;
+ columns: number;
+}
diff --git a/src/lib/use/index.ts b/src/lib/use/index.ts
new file mode 100644
index 0000000..2e9d4bd
--- /dev/null
+++ b/src/lib/use/index.ts
@@ -0,0 +1,3 @@
+
+export { useCalculateCols } from './useCalculateCols'
+export { useLayout } from './useLayout'
diff --git a/src/lib/use/useCalculateCols.ts b/src/lib/use/useCalculateCols.ts
new file mode 100644
index 0000000..48c120c
--- /dev/null
+++ b/src/lib/use/useCalculateCols.ts
@@ -0,0 +1,46 @@
+import { computed, ref } from "vue";
+import { useResizeObserver } from "@vueuse/core";
+import { getItemWidth } from "../utils/itemWidth";
+import type { WaterfallProps } from "../types/waterfall";
+import type { Nullable } from "../types/util";
+
+export function useCalculateCols(props: WaterfallProps) {
+ const wrapperWidth = ref(0);
+ const waterfallWrapper = ref>(null);
+
+ useResizeObserver(waterfallWrapper, (entries) => {
+ const entry = entries[0];
+ const { width } = entry.contentRect;
+ if (width === 0) return;
+ wrapperWidth.value = width;
+ });
+
+ // 列实际宽度
+ const colWidth = computed(() => {
+ return getItemWidth({
+ wrapperWidth: wrapperWidth.value,
+ gutter: props.gutter,
+ hasAroundGutter: props.hasAroundGutter,
+ columns: props.columns,
+ });
+ });
+
+ // 列
+ const cols = computed(() => props.columns);
+
+ // 偏移
+ const offsetX = computed(() => {
+ const offset = props.hasAroundGutter ? props.gutter : -props.gutter;
+ const contextWidth =
+ cols.value * (colWidth.value + props.gutter) + offset;
+ return (wrapperWidth.value - contextWidth) / 2;
+ });
+
+ return {
+ waterfallWrapper,
+ wrapperWidth,
+ colWidth,
+ cols,
+ offsetX,
+ };
+}
diff --git a/src/lib/use/useLayout.ts b/src/lib/use/useLayout.ts
new file mode 100644
index 0000000..c303714
--- /dev/null
+++ b/src/lib/use/useLayout.ts
@@ -0,0 +1,118 @@
+import type { Ref } from "vue";
+import { ref } from "vue";
+import { addClass, hasClass, prefixStyle } from "../utils/dom";
+import type { WaterfallProps } from "../types/waterfall";
+import type { CssStyleObject, Nullable } from "../types/util";
+
+const transform = prefixStyle("transform");
+const duration = prefixStyle("animation-duration");
+const delay = prefixStyle("animation-delay");
+const transition = prefixStyle("transition");
+const fillMode = prefixStyle("animation-fill-mode");
+
+export function useLayout(
+ props: WaterfallProps,
+ colWidth: Ref,
+ cols: Ref,
+ offsetX: Ref,
+ waterfallWrapper: Ref>
+) {
+ const posY = ref([]);
+ const wrapperHeight = ref(0);
+
+ // 获取对应y下标的x的值
+ const getX = (index: number): number => {
+ const count = props.hasAroundGutter ? index + 1 : index;
+ return props.gutter * count + colWidth.value * index + offsetX.value;
+ };
+
+ // 初始y
+ const initY = (): void => {
+ posY.value = new Array(cols.value).fill(
+ props.hasAroundGutter ? props.gutter : 0
+ );
+ };
+
+ // 添加入场动画
+ const animation = addAnimation(props);
+
+ // 排版
+ const layoutHandle = async () => {
+ // 初始化y集合
+ initY();
+
+ // 构造列表
+ const items: HTMLElement[] = [];
+ if (waterfallWrapper && waterfallWrapper.value) {
+ waterfallWrapper.value.childNodes.forEach((el: any) => {
+ if (el!.className === "waterfall-item") items.push(el);
+ });
+ }
+
+ // 获取节点
+ if (items.length === 0) return false;
+
+ // 遍历节点
+ for (let i = 0; i < items.length; i++) {
+ const curItem = items[i] as HTMLElement;
+ // 最小的y值
+ const minY = Math.min.apply(null, posY.value);
+ // 最小y的下标
+ const minYIndex = posY.value.indexOf(minY);
+ // 当前下标对应的x
+ const curX = getX(minYIndex);
+
+ // 设置x,y,width
+ const style = curItem.style as CssStyleObject;
+
+ // 设置偏移
+ if (transform) style[transform] = `translate3d(${curX}px,${minY}px, 0)`;
+ style.width = `${colWidth.value}px`;
+
+ // 更新当前index的y值
+ const { height } = curItem.getBoundingClientRect();
+ posY.value[minYIndex] += height + props.gutter;
+
+ // 添加入场动画
+ animation(curItem, () => {
+ // 添加动画时间
+ if (transition) style[transition] = "transform .3s";
+ });
+ }
+
+ wrapperHeight.value = Math.max.apply(null, posY.value);
+ };
+
+ return {
+ wrapperHeight,
+ layoutHandle,
+ };
+}
+
+// 动画
+function addAnimation(props: WaterfallProps) {
+ return (item: HTMLElement, callback?: () => void) => {
+ const content = item!.firstChild as HTMLElement;
+ if (content && !hasClass(content, props.animationPrefix)) {
+ const durationSec = `${props.animationDuration / 1000}s`;
+ const delaySec = `${props.animationDelay / 1000}s`;
+ const style = content.style as CssStyleObject;
+ style.visibility = "visible";
+ if (duration) style[duration] = durationSec;
+
+ if (delay) style[delay] = delaySec;
+
+ if (fillMode) style[fillMode] = "both";
+
+ addClass(content, props.animationPrefix);
+ addClass(content, props.animationEffect);
+
+ // 确保动画完成后item可见
+ setTimeout(() => {
+ const itemStyle = item.style as CssStyleObject;
+ itemStyle.visibility = "visible";
+ if (callback) callback();
+ }, props.animationDuration + props.animationDelay);
+ }
+ };
+}
diff --git a/src/lib/utils/Lazy.ts b/src/lib/utils/Lazy.ts
new file mode 100644
index 0000000..a9604c1
--- /dev/null
+++ b/src/lib/utils/Lazy.ts
@@ -0,0 +1,188 @@
+import type { LazyOptions, ValueFormatterObject } from '../types/lazy'
+import type { CssStyleObject } from '../types/util'
+import { loadImage } from './loader'
+import { assign, hasIntersectionObserver, isObject } from './util'
+
+enum LifecycleEnum {
+ LOADING = 'loading',
+ LOADED = 'loaded',
+ ERROR = 'error',
+}
+
+const DEFAULT_OBSERVER_OPTIONS = {
+ rootMargin: '0px',
+ threshold: 0,
+}
+
+const DEFAULT_LOADING = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
+const DEFAULT_ERROR = ''
+
+export default class Lazy {
+ lazyActive = true // 是否开启懒加载
+ crossOrigin = true // 开启跨域
+ options: LazyOptions = {
+ loading: DEFAULT_LOADING,
+ error: DEFAULT_ERROR,
+ observerOptions: DEFAULT_OBSERVER_OPTIONS,
+ log: true,
+ }
+
+ _images = new WeakMap()
+
+ constructor(flag = true, options: LazyOptions, crossOrigin = true) {
+ this.lazyActive = flag
+ this.crossOrigin = crossOrigin
+ this.config(options)
+ }
+
+ config(options = {}) {
+ assign(this.options, options)
+ }
+
+ // mount
+ mount(el: HTMLImageElement, binding: string | ValueFormatterObject, callback: () => void): void {
+ const { src, loading, error } = this._valueFormatter(binding)
+ el.setAttribute('lazy', LifecycleEnum.LOADING)
+ el.setAttribute('src', loading || DEFAULT_LOADING)
+ if (!this.lazyActive) {
+ this._setImageSrc(el, src, callback, error)
+ }
+ else {
+ if (!hasIntersectionObserver) {
+ this._setImageSrc(el, src, callback, error)
+ this._log(() => {
+ throw new Error('Not support IntersectionObserver!')
+ })
+ }
+ this._initIntersectionObserver(el, src, callback, error)
+ }
+ }
+
+ // resize
+ resize(el: HTMLImageElement, callback: () => void) {
+ const lazy = el.getAttribute('lazy')
+ const src = el.getAttribute('src')
+ if (lazy && lazy === LifecycleEnum.LOADED && src) {
+ loadImage(src, this.crossOrigin).then((image) => {
+ const { width, height } = image
+ const curHeight = (el.width / width) * height
+ el.height = curHeight
+ const style = el.style as CssStyleObject
+ style.height = `${curHeight}px`
+ callback()
+ })
+ }
+ }
+
+ // unmount
+ unmount(el: HTMLElement): void {
+ const imgItem = this._realObserver(el)
+ imgItem && imgItem.unobserve(el)
+ this._images.delete(el)
+ }
+
+ /**
+ * 设置img的src
+ * @param {*} el - img
+ * @param {*} src - 原图
+ * @param {*} error - 错误图片
+ * @param {*} callback - 完成的回调函数,通知组件刷新布局
+ * @returns
+ */
+ _setImageSrc(el: HTMLImageElement, src: string, callback: () => void, error?: string): void {
+ if (!src)
+ return
+
+ const preSrc = el.getAttribute('src')
+ if (preSrc === src)
+ return
+
+ loadImage(src, this.crossOrigin)
+ .then((image) => {
+ // 修改容器
+ const { width, height } = image
+ const ratio = height / width
+ const lazyBox = el.parentNode!.parentNode as HTMLElement
+ lazyBox.style.paddingBottom = `${ratio * 100}%`
+
+ // 设置图片
+ el.setAttribute('lazy', LifecycleEnum.LOADED)
+ el.removeAttribute('src')
+ el.setAttribute('src', src)
+
+ callback()
+ })
+ .catch(() => {
+ const imgItem = this._realObserver(el)
+ imgItem && imgItem.disconnect()
+ if (error) {
+ el.setAttribute('lazy', LifecycleEnum.ERROR)
+ el.setAttribute('src', error)
+ }
+ this._log(() => {
+ throw new Error(`Image failed to load!And failed src was: ${src} `)
+ })
+ callback()
+ })
+ }
+
+ _isOpenLazy(): boolean {
+ return hasIntersectionObserver && this.lazyActive
+ }
+
+ /**
+ * 添加img和对应的observer到weakMap中
+ * 开启监听
+ * 当出现在可视区域后取消监听
+ * @param {*} el - img
+ * @param {*} src - 图片
+ * @param {*} error - 错误图片
+ * @param {*} callback - 完成的回调函数,通知组件刷新布局
+ */
+ _initIntersectionObserver(el: HTMLImageElement, src: string, callback: () => void, error?: string): void {
+ const observerOptions = this.options.observerOptions
+ this._images.set(
+ el,
+ new IntersectionObserver((entries) => {
+ Array.prototype.forEach.call(entries, (entry) => {
+ if (entry.isIntersecting) {
+ const imgItem = this._realObserver(el)
+ imgItem && imgItem.unobserve(entry.target)
+ this._setImageSrc(el, src, callback, error)
+ }
+ })
+ }, observerOptions),
+ )
+
+ const imgItem = this._realObserver(el)
+ imgItem && imgItem.observe(el)
+ }
+
+ // 格式化参数
+ _valueFormatter(value: ValueFormatterObject | string): ValueFormatterObject {
+ let src = value as string
+ let loading = this.options.loading
+ let error = this.options.error
+ if (isObject(value)) {
+ src = (value as ValueFormatterObject).src
+ loading = (value as ValueFormatterObject).loading || this.options.loading
+ error = (value as ValueFormatterObject).error || this.options.error
+ }
+ return {
+ src,
+ loading,
+ error,
+ }
+ }
+
+ // 日志
+ _log(callback: () => void): void {
+ if (this.options.log)
+ callback()
+ }
+
+ // 在map中获取对应img的observer事件
+ _realObserver(el: HTMLElement): IntersectionObserver | undefined {
+ return this._images.get(el)
+ }
+}
diff --git a/src/lib/utils/dom.ts b/src/lib/utils/dom.ts
new file mode 100644
index 0000000..011e7bd
--- /dev/null
+++ b/src/lib/utils/dom.ts
@@ -0,0 +1,53 @@
+import type { CssStyleObject } from '../types/util'
+
+
+export function hasClass(el: HTMLElement, className: string) {
+ const reg = new RegExp(`(^|\\s)${className}(\\s|$)`)
+ return reg.test(el.className)
+}
+
+export function addClass(el: HTMLElement, className: string) {
+ if (hasClass(el, className))
+ return
+
+ const newClass = el.className.split(/\s+/)
+ newClass.push(className)
+ el.className = newClass.join(' ')
+}
+
+export function removeClass(el: HTMLElement, className: string) {
+ if (hasClass(el, className)) {
+ const newClass = el.className.split(/\s+/).filter(name => name !== className)
+ el.className = newClass.join(' ')
+ }
+}
+
+const elementStyle = document.createElement('div').style as CssStyleObject
+
+const vendor = (() => {
+ const transformNames: Record = {
+ webkit: 'webkitTransform',
+ Moz: 'MozTransform',
+ O: 'OTransform',
+ ms: 'msTransform',
+ standard: 'transform',
+ }
+
+ for (const key in transformNames) {
+ const val = transformNames[key]
+ if (elementStyle[val] !== undefined)
+ return key
+ }
+
+ return false
+})()
+
+export function prefixStyle(style: string) {
+ if (vendor === false)
+ return false
+
+ if (vendor === 'standard')
+ return style
+
+ return vendor + style.charAt(0).toUpperCase() + style.substr(1)
+}
diff --git a/src/lib/utils/itemWidth.ts b/src/lib/utils/itemWidth.ts
new file mode 100644
index 0000000..46f3284
--- /dev/null
+++ b/src/lib/utils/itemWidth.ts
@@ -0,0 +1,19 @@
+import type { ItemWidthProps } from "../types/waterfall";
+
+/**
+ * @description: 获取当前窗口尺寸下格子的宽度
+ * @param {ItemWidthProps} param1
+ * @return {*}
+ */
+export const getItemWidth = ({
+ wrapperWidth,
+ gutter,
+ hasAroundGutter,
+ columns,
+}: ItemWidthProps) => {
+ if (hasAroundGutter) {
+ return (wrapperWidth - gutter) / columns - gutter;
+ } else {
+ return (wrapperWidth - (columns - 1) * gutter) / columns;
+ }
+};
diff --git a/src/lib/utils/loader.ts b/src/lib/utils/loader.ts
new file mode 100644
index 0000000..36135dc
--- /dev/null
+++ b/src/lib/utils/loader.ts
@@ -0,0 +1,20 @@
+
+/**
+ * load images
+ * @param {Array[String]} images - 图片链接数组
+ */
+export function loadImage(url: string, crossOrigin: Boolean): Promise {
+ return new Promise((resolve, reject) => {
+ const image = new Image()
+ image.onload = () => {
+ resolve(image)
+ }
+ image.onerror = () => {
+ reject(new Error('Image load error'))
+ }
+ if (crossOrigin)
+ image.crossOrigin = 'Anonymous' // 支持跨域图片
+
+ image.src = url
+ })
+}
diff --git a/src/lib/utils/util.ts b/src/lib/utils/util.ts
new file mode 100644
index 0000000..53188f7
--- /dev/null
+++ b/src/lib/utils/util.ts
@@ -0,0 +1,156 @@
+export const inBrowser = typeof window !== 'undefined' && window !== null
+
+export const hasIntersectionObserver = checkIntersectionObserver()
+const isEnumerable = Object.prototype.propertyIsEnumerable
+const getSymbols = Object.getOwnPropertySymbols
+
+/**
+ * 取值
+ * @param {Object | Array} form
+ * @param {...any} selectors
+ * @returns
+ */
+export function getValue(form: any, ...selectors: string[]) {
+ const res = selectors.map((s) => {
+ return s
+ .replace(/\[(\w+)\]/g, '.$1')
+ .split('.')
+ .reduce((prev, cur) => {
+ return prev && prev[cur]
+ }, form)
+ })
+ return res
+}
+
+/**
+ * 防抖
+ * @param {*} fn
+ * @param {*} delay
+ * @returns
+ */
+export function debounce(fn: (args?: any) => void, delay: number) {
+ let timer: any
+ return function(this: any, ...args: any) {
+ timer && clearTimeout(timer)
+ timer = null
+ timer = setTimeout(() => {
+ fn.apply(this, args)
+ }, delay)
+ }
+}
+
+/**
+ * 判断是否支持IntersectionObserver
+ * @returns {boolean}
+ */
+export function checkIntersectionObserver(): boolean {
+ if (
+ inBrowser
+ && 'IntersectionObserver' in window
+ && 'IntersectionObserverEntry' in window
+ && 'intersectionRatio' in window.IntersectionObserverEntry.prototype
+ ) {
+ // Minimal polyfill for Edge 15's lack of `isIntersecting`
+ // See: https://github.com/w3c/IntersectionObserver/issues/211
+ if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {
+ Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {
+ get() {
+ return this.intersectionRatio > 0
+ },
+ })
+ }
+ return true
+ }
+ return false
+}
+
+/**
+ * is object
+ *
+ * @param {*} val
+ * @returns {boolean}
+ */
+export function isObject(val: any): boolean {
+ return typeof val === 'function' || toString.call(val) === '[object Object]'
+}
+
+/**
+ * is primitive
+ *
+ * @param {*} val
+ * @returns {boolean}
+ */
+export function isPrimitive(val: any): boolean {
+ return typeof val === 'object' ? val === null : typeof val !== 'function'
+}
+
+/**
+ * check private key
+ *
+ * @export
+ * @param {*} key
+ * @returns {boolean}
+ */
+export function isValidKey(key: any): boolean {
+ return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'
+}
+
+/**
+ * Assign the enumerable es6 Symbol properties from one
+ * or more objects to the first object passed on the arguments.
+ * Can be used as a supplement to other extend, assign or
+ * merge methods as a polyfill for the Symbols part of
+ * the es6 Object.assign method.
+ * https://github.com/jonschlinkert/assign-symbols
+ *
+ * @param {*} target
+ * @param {Array} args
+ * @returns
+ */
+function assignSymbols(target: any, ...args: any[]) {
+ if (!isObject(target))
+ throw new TypeError('expected the first argument to be an object')
+
+ if (args.length === 0 || typeof Symbol !== 'function' || typeof getSymbols !== 'function')
+ return target
+
+ for (const arg of args) {
+ const names = getSymbols(arg)
+
+ for (const key of names) {
+ if (isEnumerable.call(arg, key))
+ target[key] = arg[key]
+ }
+ }
+ return target
+}
+
+/**
+ * Deeply assign the values of all enumerable-own-properties and symbols
+ * from one or more source objects to a target object. Returns the target object.
+ * https://github.com/jonschlinkert/assign-deep
+ *
+ * @param {*} target
+ * @param {Array} args
+ * @returns
+ */
+export function assign(target: any, ...args: any[]): void {
+ let i = 0
+ if (isPrimitive(target)) target = args[i++]
+ if (!target) target = {}
+ for (; i < args.length; i++) {
+ if (isObject(args[i])) {
+ for (const key of Object.keys(args[i])) {
+ if (isValidKey(key)) {
+ if (isObject(target[key]) && isObject(args[i][key]))
+ assign(target[key], args[i][key])
+
+ else
+ target[key] = args[i][key]
+ }
+ }
+ assignSymbols(target, args[i])
+ }
+ }
+ return target
+}
diff --git a/src/main.ts b/src/main.ts
index e5f6b0b..8023c49 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -3,23 +3,16 @@ import { useConfig } from "@/config";
import icon from "@/icon/index.ts";
import { createPinia } from "pinia";
import "virtual:uno.css";
-import { createApp, vaporInteropPlugin } from "vue";
+import 'vue-devui/tag/style.css';
import App from "./App.vue";
import router from "./router";
-// 自定义主题配置 - 设置主色和二级色
-import { ThemeServiceInit, infinityTheme, sweetTheme } from "devui-theme";
-
+// 自定义主题配置 - 设置主色和二级色\
+import "vfonts/FiraCode.css";
+import Tag from 'vue-devui/tag';
import { PerfectScrollbarPlugin } from "vue3-perfect-scrollbar";
-// import vue3videoPlay from "vue3-video-play";
-// import "vue3-video-play/dist/style.css";
-//main.js
-
-// ThemeServiceInit({ customTheme }, "customTheme");
-const themeService = ThemeServiceInit({ infinityTheme }, "infinityTheme");
-themeService?.applyTheme(sweetTheme);
const app = createApp(App);
-app.use(vaporInteropPlugin)
+app.use(Tag)
app.use(createPinia());
app.use(router);
@@ -30,4 +23,3 @@ for (const key in icon) {
}
app.use(PerfectScrollbarPlugin);
app.mount("#app");
-
diff --git a/src/util/request.ts b/src/util/request.ts
index 51861b1..e748754 100644
--- a/src/util/request.ts
+++ b/src/util/request.ts
@@ -1,4 +1,3 @@
-import router from "@/router";
import type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from "axios";
import axios from "axios";
import { useCookies } from "vue3-cookies";
@@ -45,16 +44,16 @@ request.interceptors.response.use(
console.log("Response error", error);
if (error.response?.status === 401) {
- // window.$msg.warning("无效的token");
+ window.$msg.warning("无效的token");
cookies.remove("token");
cookies.remove("userinfo");
- window.$modal({
- title: "无效的token",
- content: "token已失效,需要登录,请登录 =>",
- handdleSubmit: () => {
- router.replace("/login");
- },
- });
+ // window.$modal({
+ // title: "无效的token",
+ // content: "token已失效,需要登录,请登录 =>",
+ // handdleSubmit: () => {
+ // router.replace("/login");
+ // },
+ // });
// router.replace("/login");
return "Unauthorized";
diff --git a/src/util/theme.ts b/src/util/theme.ts
new file mode 100644
index 0000000..cf808d8
--- /dev/null
+++ b/src/util/theme.ts
@@ -0,0 +1,15 @@
+ /**
+ * js 文件下使用这个做类型提示
+ * @type import('naive-ui').GlobalThemeOverrides
+ */
+ const themeOverrides = {
+ common: {
+ primaryColor: '#ec66ab',
+ primaryColorHover: '#ec66ab',
+ primaryColorPressed: '#ec66ab',
+ primaryColorSuppl: '#ec66ab',
+ },
+ // ...
+ }
+
+ export default themeOverrides;
\ No newline at end of file
diff --git a/src/views/Article.vue b/src/views/Article.vue
deleted file mode 100644
index 44dc331..0000000
--- a/src/views/Article.vue
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/Blog.vue b/src/views/Blog.vue
new file mode 100644
index 0000000..4d2db16
--- /dev/null
+++ b/src/views/Blog.vue
@@ -0,0 +1,18 @@
+
+
+
文章页
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/Gallery.vue b/src/views/Gallery.vue
index 9ea6920..cf2a391 100644
--- a/src/views/Gallery.vue
+++ b/src/views/Gallery.vue
@@ -1,126 +1,75 @@
-
+
-
-
-
-
-
+
+
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 065556b..e2d1772 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -1,97 +1,99 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
导航: {{i.menu_name }}
+ :class="selecedIdx === idx ? 'text-white bg-primary' : ''" v-for="(i, idx) in searchItems" :key="idx"
+ @click="goExtra(i.menu_link)" @keyup.enter="goExtra(i.menu_link)">
导航:
+ {{ i.menu_name }}
-
- {{ tag.name }}
-
-
-
-
+
+
+ {{ tag.name }}
+
+
+
-
-
-
-
- {{ item.first }}
-
![]()
-
{{ item.menu_name || "" }}
-
{{ item.tag }}
-
-
-
-
+
+
+
+ {{ item.first }}
+
![]()
+
{{ item.menu_name || "" }}
+
{{ item.tag }}
+
+
+
+ class="w-8 h-8 rounded-full text-2xl text-white flex items-center justify-center">
+
+
新增导航
-
+
-
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
![]()
-
-
-
-
-
-
- 取消
- 确定
-
-
+
+
+ 新增导航
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+
+
@@ -116,25 +118,29 @@
-
-
- 原
-
导航名称:{{ currentItem.menu_name }}
-
导航链接:{{ currentItem.menu_link }}
-
导航标签:{{ currentItem.tag }}
+
+
+
修改导航内容
+
+ 原
+ 导航名称:{{ currentItem?.menu_name }}
+ 导航链接:{{ currentItem?.menu_link }}
+ 导航标签:{{ currentItem?.tag }}
+
+
+
+ 取消
+ 确定
+
-
-
- 取消
- 确定
-
-
+
-
-
\ No newline at end of file
diff --git a/typed-router.d.ts b/typed-router.d.ts
index 27afa29..5c3a3ef 100644
--- a/typed-router.d.ts
+++ b/typed-router.d.ts
@@ -19,8 +19,7 @@ declare module 'vue-router/auto-routes' {
*/
export interface RouteNamedMap {
'appshare': RouteRecordInfo<'appshare', '/AppShare', Record, Record>,
- 'article': RouteRecordInfo<'article', '/Article', Record, Record>,
- '/console/home': RouteRecordInfo<'/console/home', '/console/home', Record, Record>,
+ 'blog': RouteRecordInfo<'blog', '/Blog', Record, Record>,
'gallery': RouteRecordInfo<'gallery', '/Gallery', Record, Record>,
'home': RouteRecordInfo<'home', '/Home', Record, Record>,
'404': RouteRecordInfo<'404', '/NotFound', Record, Record>,
@@ -43,12 +42,8 @@ declare module 'vue-router/auto-routes' {
routes: 'appshare'
views: never
}
- 'src/views/Article.vue': {
- routes: 'article'
- views: never
- }
- 'src/views/console/home.vue': {
- routes: '/console/home'
+ 'src/views/Blog.vue': {
+ routes: 'blog'
views: never
}
'src/views/Gallery.vue': {
diff --git a/vite.config.ts b/vite.config.ts
index d3206d6..8b4b7f6 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -3,10 +3,10 @@ import { fileURLToPath, URL } from "node:url";
import { resolve } from "path";
import UnoCSS from "unocss/vite";
import AutoImport from "unplugin-auto-import/vite";
-import { DevUiResolver } from "unplugin-vue-components/resolvers";
+import { NaiveUiResolver } from "unplugin-vue-components/resolvers";
import Components from "unplugin-vue-components/vite";
-import { VueRouterAutoImports } from 'unplugin-vue-router';
-import VueRouter from 'unplugin-vue-router/vite';
+import { VueRouterAutoImports } from "unplugin-vue-router";
+import VueRouter from "unplugin-vue-router/vite";
import { defineConfig } from "vite";
// import vueDevTools from "vite-plugin-vue-devtools";
import svgLoader from "vite-svg-loader";
@@ -14,17 +14,24 @@ import svgLoader from "vite-svg-loader";
export default defineConfig({
plugins: [
vue(),
-
+
VueRouter({
routesFolder: "src/views",
}),
AutoImport({
include: [/\.[tj]sx?$/, /\.vue$/, /\.vue\?vue/, /\.md$/],
- imports: ["vue", "pinia", VueRouterAutoImports],
+ imports: [
+ "vue",
+ "pinia",
+ VueRouterAutoImports,
+ {
+ "naive-ui": ["useDialog", "useMessage", "useNotification", "useLoadingBar"],
+ },
+ ],
}),
-
+
Components({
- resolvers: [DevUiResolver()],
+ resolvers: [NaiveUiResolver()],
dirs: ["src/components"],
}),
UnoCSS(),
@@ -39,7 +46,7 @@ export default defineConfig({
base: "/blog/",
server: {
host: "0.0.0.0",
- port: 8080,
+ port: 8989,
},
resolve: {
alias: {
diff --git a/yarn.lock b/yarn.lock
index 4e29615..f2b8b5a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10,15 +10,6 @@
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
-"@angular/cdk@^18.0.0":
- version "18.2.14"
- resolved "https://registry.npmmirror.com/@angular/cdk/-/cdk-18.2.14.tgz#6114f37a77f2f182de482da2273c70f74a6cc52d"
- integrity sha512-vDyOh1lwjfVk9OqoroZAP8pf3xxKUvyl+TVR8nJxL4c5fOfUFkD7l94HaanqKSRwJcI2xiztuu92IVoHn8T33Q==
- dependencies:
- tslib "^2.3.0"
- optionalDependencies:
- parse5 "^7.1.2"
-
"@antfu/install-pkg@^1.0.0":
version "1.1.0"
resolved "https://registry.npmmirror.com/@antfu/install-pkg/-/install-pkg-1.1.0.tgz#78fa036be1a6081b5a77a5cf59f50c7752b6ba26"
@@ -279,11 +270,6 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
"@babel/plugin-syntax-typescript" "^7.27.1"
-"@babel/runtime@^7.21.0":
- version "7.28.2"
- resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473"
- integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==
-
"@babel/template@^7.26.9", "@babel/template@^7.27.2":
version "7.27.2"
resolved "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
@@ -306,15 +292,7 @@
"@babel/types" "^7.28.0"
debug "^4.3.1"
-"@babel/types@^7.24.7", "@babel/types@^7.26.9", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0", "@babel/types@^7.28.2":
- version "7.28.2"
- resolved "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b"
- integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==
- dependencies:
- "@babel/helper-string-parser" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.27.1"
-
-"@babel/types@^7.28.5":
+"@babel/types@^7.24.7", "@babel/types@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b"
integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
@@ -322,16 +300,49 @@
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.28.5"
+"@babel/types@^7.26.9", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0", "@babel/types@^7.28.2":
+ version "7.28.2"
+ resolved "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b"
+ integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+
"@braintree/sanitize-url@^6.0.0":
version "6.0.4"
resolved "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783"
integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==
-"@devui-design/icons@^1.3.0", "@devui-design/icons@^1.4.0":
+"@css-render/plugin-bem@^0.15.14":
+ version "0.15.14"
+ resolved "https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz#de13fc9f59299c2b646119851763dfa08929b3c1"
+ integrity sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==
+
+"@css-render/vue3-ssr@^0.15.10", "@css-render/vue3-ssr@^0.15.14":
+ version "0.15.14"
+ resolved "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz#a2f4dedc3e86211a3ce1445555265095b7736491"
+ integrity sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==
+
+"@ctrl/tinycolor@^3.4.1":
+ version "3.6.1"
+ resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31"
+ integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
+
+"@devui-design/icons@^1.3.0":
version "1.4.0"
resolved "https://registry.npmmirror.com/@devui-design/icons/-/icons-1.4.0.tgz#41fe1ce82e1aa6b111ca30c6a553cfc4a073fd47"
integrity sha512-taAX1RNW0QHUqQTRPqLTYTB2PZIqUplhWeF4hcmWkSTjpWlDNI40DssG/WRb3sISkfBk/4BMUxxC5XeTL3jo7A==
+"@element-plus/icons-vue@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz#7e9cb231fb738b2056f33e22c3a29e214b538dcf"
+ integrity sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==
+
+"@emotion/hash@~0.8.0":
+ version "0.8.0"
+ resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
"@esbuild/aix-ppc64@0.25.8":
version "0.25.8"
resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz#a1414903bb38027382f85f03dda6065056757727"
@@ -462,10 +473,10 @@
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz#610d7ea539d2fcdbe39237b5cc175eb2c4451f9c"
integrity sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==
-"@floating-ui/core@^1.2.4":
- version "1.7.2"
- resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.2.tgz#3d1c35263950b314b6d5a72c8bfb9e3c1551aefd"
- integrity sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==
+"@floating-ui/core@^1.2.4", "@floating-ui/core@^1.7.3":
+ version "1.7.3"
+ resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7"
+ integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==
dependencies:
"@floating-ui/utils" "^0.2.10"
@@ -476,6 +487,14 @@
dependencies:
"@floating-ui/core" "^1.2.4"
+"@floating-ui/dom@^1.0.1":
+ version "1.7.4"
+ resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77"
+ integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==
+ dependencies:
+ "@floating-ui/core" "^1.7.3"
+ "@floating-ui/utils" "^0.2.10"
+
"@floating-ui/utils@^0.2.10":
version "0.2.10"
resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c"
@@ -550,6 +569,11 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@juggle/resize-observer@^3.3.1":
+ version "3.4.0"
+ resolved "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60"
+ integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==
+
"@meting/core@^1.5.13":
version "1.5.13"
resolved "https://registry.npmmirror.com/@meting/core/-/core-1.5.13.tgz#d5178b99124e5ba8e5cef36ca70d6e63d7426339"
@@ -560,10 +584,10 @@
resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1"
integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==
-"@popperjs/core@^2.5.4":
- version "2.11.8"
- resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
- integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
+"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
+ version "2.11.7"
+ resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671"
+ integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
"@quansync/fs@^0.1.1":
version "0.1.3"
@@ -709,7 +733,12 @@
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
-"@types/lodash-es@^4.17.4":
+"@types/katex@^0.16.2":
+ version "0.16.7"
+ resolved "https://registry.npmmirror.com/@types/katex/-/katex-0.16.7.tgz#03ab680ab4fa4fbc6cb46ecf987ecad5d8019868"
+ integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==
+
+"@types/lodash-es@^4.17.12", "@types/lodash-es@^4.17.4":
version "4.17.12"
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b"
integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==
@@ -721,6 +750,11 @@
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.20.tgz#1ca77361d7363432d29f5e55950d9ec1e1c6ea93"
integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==
+"@types/lodash@^4.17.20":
+ version "4.17.21"
+ resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz#b806831543d696b14f8112db600ea9d3a1df6ea4"
+ integrity sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==
+
"@types/node@^22.16.5":
version "22.16.5"
resolved "https://registry.npmmirror.com/@types/node/-/node-22.16.5.tgz#cc46ac3994cd957000d0c11095a0b1dae2ea2368"
@@ -740,6 +774,11 @@
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz#94e175b53623384bff1f354cdb3197a8d63cdbe5"
integrity sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==
+"@types/web-bluetooth@^0.0.20":
+ version "0.0.20"
+ resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597"
+ integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
+
"@unocss/astro@66.3.3":
version "66.3.3"
resolved "https://registry.npmmirror.com/@unocss/astro/-/astro-66.3.3.tgz#707d1df627158540bb91bde2b5f8452c073599f9"
@@ -1380,12 +1419,12 @@
"@vue/compiler-ssr" "3.6.0-alpha.2"
"@vue/shared" "3.6.0-alpha.2"
-"@vue/shared@3.5.18", "@vue/shared@^3.2.33", "@vue/shared@^3.5.0", "@vue/shared@^3.5.13":
+"@vue/shared@3.5.18", "@vue/shared@^3.5.0", "@vue/shared@^3.5.13":
version "3.5.18"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.18.tgz#529f24a88d3ed678d50fd5c07455841fbe8ac95e"
integrity sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==
-"@vue/shared@3.5.26":
+"@vue/shared@3.5.26", "@vue/shared@^3.2.33":
version "3.5.26"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.26.tgz#1e02ef2d64aced818cd31d81ce5175711dc90a9f"
integrity sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==
@@ -1410,11 +1449,33 @@
"@vueuse/shared" "8.9.4"
vue-demi "*"
+"@vueuse/core@^10.11.0":
+ version "10.11.1"
+ resolved "https://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz#15d2c0b6448d2212235b23a7ba29c27173e0c2c6"
+ integrity sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.20"
+ "@vueuse/metadata" "10.11.1"
+ "@vueuse/shared" "10.11.1"
+ vue-demi ">=0.14.8"
+
+"@vueuse/metadata@10.11.1":
+ version "10.11.1"
+ resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.11.1.tgz#209db7bb5915aa172a87510b6de2ca01cadbd2a7"
+ integrity sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==
+
"@vueuse/metadata@8.9.4":
version "8.9.4"
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.9.4.tgz#a4132db33e4c1b1023636acfa20aa7b37ab3d978"
integrity sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==
+"@vueuse/shared@10.11.1":
+ version "10.11.1"
+ resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.11.1.tgz#62b84e3118ae6e1f3ff38f4fbe71b0c5d0f10938"
+ integrity sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==
+ dependencies:
+ vue-demi ">=0.14.8"
+
"@vueuse/shared@8.9.4":
version "8.9.4"
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.9.4.tgz#c9741c30ffb666b50d62f0dd80b76119fd47573e"
@@ -1437,6 +1498,11 @@ alien-signals@^2.0.5:
resolved "https://registry.npmmirror.com/alien-signals/-/alien-signals-2.0.5.tgz#7528fc28de7cd76ccb6aad1d46d5b5635ce10805"
integrity sha512-PdJB6+06nUNAClInE3Dweq7/2xVAYM64vvvS1IHVHSJmgeOtEdrAGyp7Z2oJtYm0B342/Exd2NT0uMJaThcjLQ==
+animate.css@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
+ integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
+
ansi-styles@^6.2.1:
version "6.2.1"
resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
@@ -1485,7 +1551,7 @@ ast-walker-scope@^0.8.1:
"@babel/parser" "^7.28.3"
ast-kit "^2.1.2"
-async-validator@^4.0.7:
+async-validator@^4.0.7, async-validator@^4.2.5:
version "4.2.5"
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
@@ -1504,11 +1570,6 @@ axios@^1.11.0:
form-data "^4.0.4"
proxy-from-env "^1.1.0"
-balanced-match@^1.0.2:
- version "1.0.2"
- resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
balloon-css@^0.5.0:
version "0.5.2"
resolved "https://registry.npmmirror.com/balloon-css/-/balloon-css-0.5.2.tgz#9e2163565a136c9d4aa20e8400772ce3b738d3ff"
@@ -1682,6 +1743,14 @@ crypto-js@^4.2.0:
resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631"
integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==
+css-render@^0.15.10, css-render@^0.15.14:
+ version "0.15.14"
+ resolved "https://registry.npmmirror.com/css-render/-/css-render-0.15.14.tgz#c23d8c8b9c0b44cd20b426f5e9de7ef7bade69b8"
+ integrity sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==
+ dependencies:
+ "@emotion/hash" "~0.8.0"
+ csstype "~3.0.5"
+
css-select@^5.1.0:
version "5.2.2"
resolved "https://registry.npmmirror.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e"
@@ -1717,14 +1786,6 @@ css-tree@~2.2.0:
mdn-data "2.0.28"
source-map-js "^1.0.1"
-css-vars-ponyfill@^2.3.2:
- version "2.4.9"
- resolved "https://registry.npmmirror.com/css-vars-ponyfill/-/css-vars-ponyfill-2.4.9.tgz#ad04f0ee5937f816616b7fae3cfa945a33e7bfd1"
- integrity sha512-aZyLue5bdiGVNCiCclNjo123D8I7kyoYNUaAvz+H1JalX1ye4Ilz7jNRRH5YbM+dYD6ucejiydGwk7lol/GCXQ==
- dependencies:
- balanced-match "^1.0.2"
- get-css-data "^2.0.2"
-
css-what@^6.1.0:
version "6.2.2"
resolved "https://registry.npmmirror.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea"
@@ -1752,6 +1813,11 @@ csstype@^3.2.3:
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a"
integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==
+csstype@~3.0.5:
+ version "3.0.11"
+ resolved "https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
+ integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
+
d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0:
version "1.2.4"
resolved "https://registry.npmmirror.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
@@ -2262,17 +2328,20 @@ dagre@^0.8.5:
graphlib "^2.1.8"
lodash "^4.17.15"
-date-fns@^2.20.0:
- version "2.30.0"
- resolved "https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
- integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
- dependencies:
- "@babel/runtime" "^7.21.0"
+date-fns-tz@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-3.2.0.tgz#647dc56d38ac33a3e37b65e9d5c4cda5af5e58e6"
+ integrity sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==
-dayjs@^1.11.3:
- version "1.11.13"
- resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
- integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+date-fns@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14"
+ integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==
+
+dayjs@^1.11.19, dayjs@^1.11.3:
+ version "1.11.19"
+ resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938"
+ integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==
de-indent@^1.0.2:
version "1.0.2"
@@ -2326,6 +2395,11 @@ delegate@^3.1.2:
resolved "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+desandro-matches-selector@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz#717beed4dc13e7d8f3762f707a6d58a6774218e1"
+ integrity sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==
+
destr@^2.0.3:
version "2.0.5"
resolved "https://registry.npmmirror.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb"
@@ -2336,11 +2410,6 @@ devui-theme@^0.0.1:
resolved "https://registry.npmmirror.com/devui-theme/-/devui-theme-0.0.1.tgz#9539023f0fdc1c90202bcfa00b0e945fd6bf1f78"
integrity sha512-5nF6fChlsXKeAtvkaAF4bZ0NMiEAbzwqQ9XZQiNuM0RRFz5lW29nnbhfDCNPkmnw5ZyCVyXqYwVRBIZrwZHXrA==
-devui-theme@^0.0.7:
- version "0.0.7"
- resolved "https://registry.npmmirror.com/devui-theme/-/devui-theme-0.0.7.tgz#978a8a32aa7c097430350c586f0ba819e63e6a9f"
- integrity sha512-sJWnkqOvqqVyvqaqyXn3/F+SIlNuoPUGdxG6TyDXuzZSAigWMuQsz8v8JJYTKL2Ash1q8kAKfRT01SqZmvlByA==
-
diff-match-patch@^1.0.5:
version "1.0.5"
resolved "https://registry.npmmirror.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37"
@@ -2423,16 +2492,31 @@ electron-to-chromium@^1.5.173:
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz#6dfc57a41846a57b18f9c0121821a6df1e165cc1"
integrity sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==
+element-plus@^2.7.4:
+ version "2.13.0"
+ resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.13.0.tgz#e2ae817c1ed4fa9e94456af69a0f88cd824ee0c7"
+ integrity sha512-qjxS+SBChvqCl6lU6ShiliLMN6WqFHiXQENYbAY3GKNflG+FS3jqn8JmQq0CBZq4koFqsi95NT1M6SL4whZfrA==
+ dependencies:
+ "@ctrl/tinycolor" "^3.4.1"
+ "@element-plus/icons-vue" "^2.3.2"
+ "@floating-ui/dom" "^1.0.1"
+ "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7"
+ "@types/lodash" "^4.17.20"
+ "@types/lodash-es" "^4.17.12"
+ "@vueuse/core" "^10.11.0"
+ async-validator "^4.2.5"
+ dayjs "^1.11.19"
+ lodash "^4.17.21"
+ lodash-es "^4.17.21"
+ lodash-unified "^1.0.3"
+ memoize-one "^6.0.0"
+ normalize-wheel-es "^1.2.0"
+
entities@^4.2.0, entities@^4.5.0:
version "4.5.0"
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
-entities@^6.0.0:
- version "6.0.1"
- resolved "https://registry.npmmirror.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694"
- integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==
-
entities@^7.0.0:
version "7.0.0"
resolved "https://registry.npmmirror.com/entities/-/entities-7.0.0.tgz#2ae4e443f3f17d152d3f5b0f79b932c1e59deb7a"
@@ -2541,6 +2625,16 @@ estree-walker@^3.0.3:
dependencies:
"@types/estree" "^1.0.0"
+ev-emitter@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/ev-emitter/-/ev-emitter-1.1.1.tgz#8f18b0ce5c76a5d18017f71c0a795c65b9138f2a"
+ integrity sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==
+
+evtd@^0.2.2, evtd@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz#0aac39ba44d6926e6668948ac27618e0795b9d07"
+ integrity sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==
+
execa@^9.6.0:
version "9.6.0"
resolved "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz#38665530e54e2e018384108322f37f35ae74f3bc"
@@ -2583,6 +2677,13 @@ fill-range@^7.1.1:
dependencies:
to-regex-range "^5.0.1"
+fizzy-ui-utils@^2.0.0:
+ version "2.0.7"
+ resolved "https://registry.npmmirror.com/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz#7df45dcc4eb374a08b65d39bb9a4beedf7330505"
+ integrity sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==
+ dependencies:
+ desandro-matches-selector "^2.0.0"
+
follow-redirects@^1.15.6:
version "1.15.9"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
@@ -2623,11 +2724,6 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-get-css-data@^2.0.2:
- version "2.1.1"
- resolved "https://registry.npmmirror.com/get-css-data/-/get-css-data-2.1.1.tgz#be1ef413f5a0854b75967f3b694a6ce164557070"
- integrity sha512-JpMa/f5P4mDXKg6l5/2cHL5xNY77Jap7tHyduMa6BF0E2a7bQ6Tvaz2BIMjeVYZYLcmOZ5w2Ro0yVJEI41tMbw==
-
get-intrinsic@^1.2.6:
version "1.3.0"
resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
@@ -2652,6 +2748,11 @@ get-proto@^1.0.1:
dunder-proto "^1.0.1"
es-object-atoms "^1.0.0"
+get-size@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/get-size/-/get-size-2.0.3.tgz#54a1d0256b20ea7ac646516756202769941ad2ef"
+ integrity sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q==
+
get-stream@^9.0.0:
version "9.0.1"
resolved "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27"
@@ -2732,7 +2833,7 @@ highlight.js@11.9.0:
resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0"
integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==
-highlight.js@^11.6.0:
+highlight.js@^11.6.0, highlight.js@^11.8.0:
version "11.11.1"
resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585"
integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==
@@ -2779,6 +2880,13 @@ image-size@~0.5.0:
resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
+imagesloaded@4.1.4:
+ version "4.1.4"
+ resolved "https://registry.npmmirror.com/imagesloaded/-/imagesloaded-4.1.4.tgz#1376efcd162bb768c34c3727ac89cc04051f3cc7"
+ integrity sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==
+ dependencies:
+ ev-emitter "^1.0.0"
+
"internmap@1 - 2":
version "2.0.3"
resolved "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
@@ -2893,9 +3001,9 @@ json5@^2.2.3:
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ version "6.2.0"
+ resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62"
+ integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==
dependencies:
universalify "^2.0.0"
optionalDependencies:
@@ -2951,10 +3059,15 @@ local-pkg@^1.0.0, local-pkg@^1.1.1:
pkg-types "^2.0.1"
quansync "^0.2.8"
-lodash-es@^4.17.15, lodash-es@^4.17.20:
- version "4.17.21"
- resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
- integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash-es@^4.17.20, lodash-es@^4.17.21:
+ version "4.17.22"
+ resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.22.tgz#eb7d123ec2470d69b911abe34f85cb694849b346"
+ integrity sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==
+
+lodash-unified@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz#80b1eac10ed2eb02ed189f08614a29c27d07c894"
+ integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==
lodash@^4.17.15, lodash@^4.17.21:
version "4.17.21"
@@ -3018,6 +3131,14 @@ markdown-it@12.2.0:
mdurl "^1.0.1"
uc.micro "^1.0.5"
+masonry-layout@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.npmmirror.com/masonry-layout/-/masonry-layout-4.2.2.tgz#d57b44af13e601bfcdc423f1dd8348b5524de348"
+ integrity sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA==
+ dependencies:
+ get-size "^2.0.2"
+ outlayer "^2.1.0"
+
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
@@ -3043,6 +3164,11 @@ mdurl@^1.0.1:
resolved "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
+memoize-one@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
+ integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
+
memorystream@^0.3.1:
version "0.3.1"
resolved "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
@@ -3125,6 +3251,31 @@ muggle-string@^0.4.1:
resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328"
integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==
+naive-ui@^2.43.2:
+ version "2.43.2"
+ resolved "https://registry.npmmirror.com/naive-ui/-/naive-ui-2.43.2.tgz#101ded965257119090d4f9e6f4479a5a09fbafa1"
+ integrity sha512-YlLMnGrwGTOc+zMj90sG3ubaH5/7czsgLgGcjTLA981IUaz8r6t4WIujNt8r9PNr+dqv6XNEr0vxkARgPPjfBQ==
+ dependencies:
+ "@css-render/plugin-bem" "^0.15.14"
+ "@css-render/vue3-ssr" "^0.15.14"
+ "@types/katex" "^0.16.2"
+ "@types/lodash" "^4.17.20"
+ "@types/lodash-es" "^4.17.12"
+ async-validator "^4.2.5"
+ css-render "^0.15.14"
+ csstype "^3.1.3"
+ date-fns "^4.1.0"
+ date-fns-tz "^3.2.0"
+ evtd "^0.2.4"
+ highlight.js "^11.8.0"
+ lodash "^4.17.21"
+ lodash-es "^4.17.21"
+ seemly "^0.3.10"
+ treemate "^0.3.11"
+ vdirs "^0.1.8"
+ vooks "^0.2.12"
+ vueuc "^0.4.65"
+
nanoid@^3.3.11:
version "3.3.11"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
@@ -3143,18 +3294,6 @@ needle@^3.1.0:
iconv-lite "^0.6.3"
sax "^1.2.4"
-ng-devui@^18.0.0:
- version "18.0.0"
- resolved "https://registry.npmmirror.com/ng-devui/-/ng-devui-18.0.0.tgz#48cf945f0da4dbf1fc69b9131b64194efbf3e4ef"
- integrity sha512-QZzDqZ2cUF8w5VF65QASLIeE/2vpDr4iw9FCIbbFaQc4eLMb4lHRwRQFPyVatCpxe05k8qT2larICJbfJA6NJA==
- dependencies:
- "@angular/cdk" "^18.0.0"
- "@popperjs/core" "^2.5.4"
- css-vars-ponyfill "^2.3.2"
- date-fns "^2.20.0"
- lodash-es "^4.17.15"
- tslib "^2.0.0"
-
node-fetch-native@^1.6.4:
version "1.6.6"
resolved "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz#ae1d0e537af35c2c0b0de81cbff37eedd410aa37"
@@ -3177,6 +3316,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+normalize-wheel-es@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e"
+ integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
+
npm-normalize-package-bin@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1"
@@ -3235,6 +3379,15 @@ open@^10.2.0:
is-inside-container "^1.0.0"
wsl-utils "^0.1.0"
+outlayer@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/outlayer/-/outlayer-2.1.1.tgz#29863b6de10ea5dadfffcadfa0d728907387e9a2"
+ integrity sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw==
+ dependencies:
+ ev-emitter "^1.0.0"
+ fizzy-ui-utils "^2.0.0"
+ get-size "^2.0.2"
+
package-manager-detector@^1.3.0:
version "1.3.0"
resolved "https://registry.npmmirror.com/package-manager-detector/-/package-manager-detector-1.3.0.tgz#b42d641c448826e03c2b354272456a771ce453c0"
@@ -3250,13 +3403,6 @@ parse-node-version@^1.0.1:
resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
-parse5@^7.1.2:
- version "7.3.0"
- resolved "https://registry.npmmirror.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05"
- integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==
- dependencies:
- entities "^6.0.0"
-
path-browserify@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
@@ -3469,6 +3615,11 @@ scule@^1.3.0:
resolved "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3"
integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==
+seemly@^0.3.10, seemly@^0.3.6:
+ version "0.3.10"
+ resolved "https://registry.npmmirror.com/seemly/-/seemly-0.3.10.tgz#acf5d22c85ce855bf3715bbb740d18f544e59746"
+ integrity sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==
+
select@^1.1.2:
version "1.1.2"
resolved "https://registry.npmmirror.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
@@ -3607,12 +3758,17 @@ totalist@^3.0.0:
resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+treemate@^0.3.11:
+ version "0.3.11"
+ resolved "https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz#7d52f8f69ab9ce326f8d139e0a3d1ffb25e48222"
+ integrity sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==
+
tslib@2.3.0:
version "2.3.0"
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
-tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0:
+tslib@^2.1.0, tslib@^2.3.0:
version "2.8.1"
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
@@ -3780,6 +3936,18 @@ uuid@^9.0.1:
resolved "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+v-infinite-scroll@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/v-infinite-scroll/-/v-infinite-scroll-1.0.4.tgz#56aad33b3d89759abd23702d7960763aeb8e0fc7"
+ integrity sha512-o2PeC0LNh3nSpsak+tcJEPRj9ENWWZTFvp1JdsraOom/d7lEbj7QfsJuF56AyrkqdSszaAwiVq2h4xTayl3RtQ==
+
+vdirs@^0.1.4, vdirs@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz#a103bc43baca738f8dea912a7e9737154a19dbc2"
+ integrity sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==
+ dependencies:
+ evtd "^0.2.2"
+
vditor@^3.11.2:
version "3.11.2"
resolved "https://registry.npmmirror.com/vditor/-/vditor-3.11.2.tgz#612a405c74b71278a4eea188db3c7d93c0884c11"
@@ -3787,6 +3955,11 @@ vditor@^3.11.2:
dependencies:
diff-match-patch "^1.0.5"
+vfonts@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.npmmirror.com/vfonts/-/vfonts-0.0.3.tgz#999d66fecea18efee3f2b966c81101ae8ce01a29"
+ integrity sha512-nguyw8L6Un8eelg1vQ31vIU2ESxqid7EYmy8V+MDeMaHBqaRSkg3dTBToC1PR00D89UzS/SLkfYPnx0Wf23IQQ==
+
vite-dev-rpc@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz#a54be63cc4dbb127bce1360e4b12d9038087c204"
@@ -3864,20 +4037,32 @@ vite@^7.0.6:
optionalDependencies:
fsevents "~2.3.3"
+vooks@^0.2.12, vooks@^0.2.4:
+ version "0.2.12"
+ resolved "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz#2b6e23330b77bac81c7f7a344c4ca3e9f4f6c373"
+ integrity sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==
+ dependencies:
+ evtd "^0.2.2"
+
vscode-uri@^3.0.8:
version "3.1.0"
resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz#dd09ec5a66a38b5c3fffc774015713496d14e09c"
integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==
-vue-demi@*:
+vue-demi@*, vue-demi@>=0.14.8:
version "0.14.10"
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04"
integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==
-vue-devui@^1.6.33:
- version "1.6.33"
- resolved "https://registry.npmmirror.com/vue-devui/-/vue-devui-1.6.33.tgz#7fb3638a9da78c75c5584379b832bb26fbf8fa5f"
- integrity sha512-HQI1OAPyqEKa1BX8jlcsGq1pL99mUYJmzQxAZ7sWy19wR+sSvvl2OWcMDwr24ngVCx5uEQA1cSvM8TYum5249A==
+vue-demi@^0.13.2:
+ version "0.13.11"
+ resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99"
+ integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==
+
+vue-devui@^1.6.35:
+ version "1.6.35"
+ resolved "https://registry.npmmirror.com/vue-devui/-/vue-devui-1.6.35.tgz#9d3602957c0fd4d4368b8920083ee7938b952272"
+ integrity sha512-vjyR7fny+j5PoX0gC/JobTZW9kxcILHUfkibgAj1LwU/LPWnV/1xFkbrCYiKt+OlE1ONT5nv0WlYaNqZzbMHIA==
dependencies:
"@babel/helper-hoist-variables" "^7.22.5"
"@devui-design/icons" "^1.3.0"
@@ -3916,7 +4101,24 @@ vue-flow-layout@^0.1.1:
resolved "https://registry.npmmirror.com/vue-flow-layout/-/vue-flow-layout-0.1.1.tgz#4095d9e79b80e845f110d4d015de6faf2c71f735"
integrity sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==
-vue-router@^4.0.3, vue-router@^4.5.1:
+vue-masonry@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.npmmirror.com/vue-masonry/-/vue-masonry-0.16.0.tgz#e374fa34024cee664f6983bf672f417aa8cad2d1"
+ integrity sha512-0Wi/BH4iYYRrAAFY/wokczz0lWWPg1vmOvFW4aC2nKybKf6kVqUvFfR9/+izDfzG657/vY+Om0gqOB5YPxPxuQ==
+ dependencies:
+ imagesloaded "4.1.4"
+ masonry-layout "^4.2.2"
+ mitt "^3.0.0"
+ vue-demi "^0.13.2"
+
+vue-router@^4.0.3:
+ version "4.6.4"
+ resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz#a0a9cb9ef811a106d249e4bb9313d286718020d8"
+ integrity sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==
+ dependencies:
+ "@vue/devtools-api" "^6.6.4"
+
+vue-router@^4.5.1:
version "4.5.1"
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz#47bffe2d3a5479d2886a9a244547a853aa0abf69"
integrity sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==
@@ -3938,6 +4140,14 @@ vue3-cookies@^1.0.6:
dependencies:
vue "^3.0.0"
+vue3-masonry-plus@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmmirror.com/vue3-masonry-plus/-/vue3-masonry-plus-1.2.5.tgz#72d2af86471746921ee3b497d2ba073d91825d2a"
+ integrity sha512-MU6zVeGsD8H1RIS+LWGjd9Yd7W68UwjJksO71p3Se+owTuj5zt08FkbkYH5chbd51FuVmdDpAh1nO1/F9Aop8A==
+ dependencies:
+ animate.css "^4.1.1"
+ element-plus "^2.7.4"
+
vue3-perfect-scrollbar@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/vue3-perfect-scrollbar/-/vue3-perfect-scrollbar-2.0.0.tgz#51cedf1090d731ec7cc8163067e348867de0aa69"
@@ -3988,6 +4198,19 @@ vue@^3.6.0-alpha.2:
"@vue/server-renderer" "3.6.0-alpha.2"
"@vue/shared" "3.6.0-alpha.2"
+vueuc@^0.4.65:
+ version "0.4.65"
+ resolved "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.65.tgz#12c53aa9c92c307f26f6291ab40cab84cdfbe004"
+ integrity sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==
+ dependencies:
+ "@css-render/vue3-ssr" "^0.15.10"
+ "@juggle/resize-observer" "^3.3.1"
+ css-render "^0.15.10"
+ evtd "^0.2.4"
+ seemly "^0.3.6"
+ vdirs "^0.1.4"
+ vooks "^0.2.4"
+
webpack-virtual-modules@^0.6.2:
version "0.6.2"
resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8"