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 @@ - \ 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 @@ - \ 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 @@ + + + + + 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 @@ - - \ 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"