From 834c93ed8534a9029bf02d0785add37cde27f6f3 Mon Sep 17 00:00:00 2001 From: kura Date: Thu, 2 Jan 2025 11:21:04 +0800 Subject: [PATCH] init --- .eslintrc.js | 45 + .gitignore | 24 + LICENSE | 21 + README.md | 63 + index.html | 26 + package.json | 46 + shims-uni.d.ts | 8 + static/copy.png | Bin 0 -> 6779 bytes static/icon.png | Bin 0 -> 847 bytes static/icons/IMG.webp | Bin 0 -> 1836 bytes static/icons/MUSIC.webp | Bin 0 -> 1934 bytes static/icons/OTHER.webp | Bin 0 -> 878 bytes static/icons/PDF.webp | Bin 0 -> 2264 bytes static/icons/PPT.webp | Bin 0 -> 1474 bytes static/icons/TXT.webp | Bin 0 -> 958 bytes static/icons/VIDEO.webp | Bin 0 -> 1436 bytes static/icons/WORD.webp | Bin 0 -> 2454 bytes static/icons/XML.webp | Bin 0 -> 1922 bytes static/icons/ZIP.webp | Bin 0 -> 1514 bytes static/icons/wenjianjia.webp | Bin 0 -> 1136 bytes tsconfig.json | 17 + vite.config.ts | 14 + yarn.lock | 2193 ++++++++++++++++++++++++++++++++++ 23 files changed, 2457 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 index.html create mode 100644 package.json create mode 100644 shims-uni.d.ts create mode 100644 static/copy.png create mode 100644 static/icon.png create mode 100644 static/icons/IMG.webp create mode 100644 static/icons/MUSIC.webp create mode 100644 static/icons/OTHER.webp create mode 100644 static/icons/PDF.webp create mode 100644 static/icons/PPT.webp create mode 100644 static/icons/TXT.webp create mode 100644 static/icons/VIDEO.webp create mode 100644 static/icons/WORD.webp create mode 100644 static/icons/XML.webp create mode 100644 static/icons/ZIP.webp create mode 100644 static/icons/wenjianjia.webp create mode 100644 tsconfig.json create mode 100644 vite.config.ts create mode 100644 yarn.lock diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..3933dc3 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,45 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + extends: [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier', + ], + // 小程序全局变量 + globals: { + uni: true, + wx: true, + WechatMiniprogram: true, + getCurrentPages: true, + getApp: true, + UniApp: true, + UniHelper: true, + App: true, + Page: true, + Component: true, + AnyObject: true, + }, + parserOptions: { + ecmaVersion: 'latest', + }, + rules: { + 'prettier/prettier': [ + 'warn', + { + singleQuote: true, + semi: false, + printWidth: 120, + trailingComma: 'all', + endOfLine: 'auto', + }, + ], + 'vue/multi-word-component-names': ['off'], + 'vue/no-setup-props-destructure': ['off'], + 'vue/no-deprecated-html-element-is': ['off'], + '@typescript-eslint/no-unused-vars': ['off'], + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9148540 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +*.local + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.husky/pre-commit +.vscode/settings.json +.vscode/vue3-uniapp.code-snippets diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2d0ed82 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 唯之为之 + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f49eed --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# p2p-explorer-web - P2P 文件传输工具 + +p2p-explorer-web 是一个基于浏览器的 webtrc P2P 远程文件传输工具,远程文件 web 资源管理器,让用户能够安全、快速地在设备间传输文件,理想情况下无需通过服务器中转。 + +在线体验: https://explorer.kuraa.cc + +## ✨ 特性 + +- 🔒 本地权限管控 P2P 流式文件传输 +- 📁 支持文件夹传输 +- 📋 集成剪贴板共享功能 +- 🔗 简单的 ID 连接机制 +- 🌐 无需安装,基于浏览器即可使用 +- 💨 快速分享链接功能 + +## 🚀 快速开始 + +### 安装 + +```bash +# 克隆项目 +git clone [项目地址] + +# 安装依赖 +yarn install + +# 启动开发服务器 +yarn dev +``` + +### 构建 + +```bash +# 构建生产版本 +yarn build +# 将 static 目录完整的拷贝到 dist 目录下 +cp -r static dist/ +``` + +## 🎯 使用方法 + +1. 打开应用后,系统会自动生成你的 ID +2. 将你的 ID 分享给对方,或使用分享链接功能 +3. 对方输入你的 ID 后即可建立连接 +4. 选择要传输的文件或文件夹 + +## 🛠 技术栈 + +- WebRTC +- Vue 3 +- TypeScript +- PeerJS +- Ant Design Vue +- Vite + +## 待完成 + +- 本地发送到远程的 ui 展示 +- 屏幕预览 +- docker 化,使用自己的 stun 与 turn 自定义部署 +- 各种异常处理需要闭环 +- 英文版本 +- 打包下载 diff --git a/index.html b/index.html new file mode 100644 index 0000000..125507c --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + p2p-explorer-web + + + + + +
+ + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..4dcf739 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "p2p-explorer-web", + "version": "0.0.1", + "scripts": { + "dev": "vite", + "build": "vite build", + "type-check": "vue-tsc --noEmit", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "prepare": "husky install", + "lint-staged": "lint-staged" + }, + "lint-staged": { + "*.{vue,ts,js}": [ + "eslint --fix" + ] + }, + "dependencies": { + "@dcloudio/uni-ui": "^1.4.28", + "ant-design-vue": "4.x", + "highlight.js": "^11.11.1", + "peerjs": "^1.5.4", + "vue": "^3.3.0", + "vue-i18n": "^9.1.9" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.6.1", + "@types/node": "^20.10.6", + "@types/wicg-file-system-access": "^2023.10.5", + "@vitejs/plugin-basic-ssl": "^1.2.0", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/eslint-config-prettier": "^9.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/runtime-core": "^3.2.45", + "@vue/tsconfig": "^0.1.3", + "eslint": "^8.56.0", + "eslint-plugin-vue": "^9.19.2", + "husky": "^8.0.0", + "lint-staged": "^15.2.0", + "miniprogram-api-typings": "^3.12.2", + "sass": "^1.69.7", + "sass-loader": "^13.3.3", + "typescript": "^4.9.4", + "vite": "4.1.4", + "vue-tsc": "^1.0.24" + } +} diff --git a/shims-uni.d.ts b/shims-uni.d.ts new file mode 100644 index 0000000..63180b8 --- /dev/null +++ b/shims-uni.d.ts @@ -0,0 +1,8 @@ +/// +import 'vue' + +declare module '@vue/runtime-core' { + type Hooks = App.AppInstance & Page.PageInstance + + interface ComponentCustomOptions extends Hooks {} +} diff --git a/static/copy.png b/static/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..6379f6eb5cf7bc3429d16f72902460aea7acd63e GIT binary patch literal 6779 zcmeHLXEdDO)<0t~I*ArUiRc6oB1#yYgfTjQqC}MFy+oNwM2Zsrh%Q=)E<*GgMDIjz zi8}fqqRqVAyVkv*-uv->c-Q-^^{jo)K6{_@?ETxn^E~Hyi$thVk};D304O!om309i zxM&gp66l3!&E@L65KvD=4Sf<4lIcb5g^Mn!o4Sc70A!q(H>5;g_{N2j$xFr9OV8ET z%h$@o2Kf5=3O{vm^t85evk`XnuuIvNWxkko1F5O6g2&@8?EnAz{|x+}&wvuyjmnE4 z|9I&l^ZqPso5h7ORLA$ zPi$=M?4LR~Iyt+zy19FJdi(hL`9BK?3__uwzX*95`s($Yw_)KCk?;PFiH&<7pOBc8 zoRXUMAw45AEBj+k?x(!`g2JNWlG4v*U&<@KR#sKl)YjEEG&VK2d~0oM|K8Er)zjP8 zKQK5nJTf}=V|-$AYInLe;z`6)#DD?vZix=~}J3aJaz z5Sd`G#64(L;wyY|LT4bxp36g&^Im=QqgHWmy3`NKW%?Y)J*JiUdiroO&k_IN`}^KM zUS@V~@iu;bcYHrwXT|5vIYl|gyjrGf+EQ_ESjCgfA64p4tf1vw39!r=Np5TTa^A5Z zon02O!snB5tyP&z<2*i6-d!>HuR zTRuP1C88AeO1aWaQXU>)+P*cs6MSO6vU*uKYd$E{m^g!_5RnV zcgIj!*%)?yj9q87@=c~c?xz;yvQFCPzYyIZ1_A;2^7YKJCX$&9~jpAGQWkqfaarwBXgKjdULORgvds)adWK=5Np6j~PMK zVkp6yTD@!U;Vrb7)%kcVE3ju;WijPFuE3Rj^Lot_$KyasFR{zmO{zkk(YC9?Q2uJoXL zQI6_YQ|MBR@*S@?n*{KOe)Bl;dB`>HPU$eV>=Vche1(0h2q)Jz009*O(sw`c>2 zEt8rCfD1s1xrWC@u^%v^DPNHO_4EP;0oTk?Orv2CnNZ~w(6`dauw3Z9tg`cRpzJEZ zV~zbIqQG@V&B1Fjke7Jso!91jL(5>uI|JfFknvJ}KNw?&gA8&dW+*>|AlbKl{O2W{ zn4eLw$k-rozqI8~zddXU+VVB^*__$m9->B!r@Gp^-&Y8R!Ik_`EVrz+lF-$q!Kn3j z9F@2VMxgcUd?p7aYIShF;_O19#0J-G!2vb_D4fZme>- zoGvOz2y#zSprzeQW1L2OA05Li^efk@#y}pUD<%K$tXylveDi3#3lM*Ens8A4?q=iB zvLP`j0E6=GlE|c-SwB~cT)z(LX~A*L27SvCQlU!vY*RZg9RecUES+wRnE52Jzo>O}Dm8aALXa^foJy>vOG+l${#N?!B0M1`;j%T&<}q=y|Yy2Nian z2~-ntobqo|%`xk;)|b?Onr=8{MISh_LH!)n%erM`T;7CV*uX?}YIEFYI#z%COw?lW zEr5drNEP5lPJ&>?g7RM}!3)U3QXelar*c*LNub5k$AE?c@EW;i;hLQbK0{v}wO_=c z0O9i;p4h6F_-H&m8XYCPcb^!vK;V;{!l{vqHTz4iN5=so5cn?ex#zSiUsJrbO;?+#($ESx{D2nKI4*pm*LnMJ zuvidJ2n9soI*yjZSShTG`-Tie9D=?I-We%sEuwz+lMi*?6$40u=3{C5oAQfa$EBsX zpe(D^aaz1SMb8S>I%=fuls8HEjDCil@E&0p*cW}lRo5=rrRt#_w`s@g%rD$kWa
5ec!X?SgpzpNBZY{ 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 WSeIB+r#%~#m_1$nT-G@yGywo|SY)XH literal 0 HcmV?d00001 diff --git a/static/icons/IMG.webp b/static/icons/IMG.webp new file mode 100644 index 0000000000000000000000000000000000000000..e7dad7def8fb893fb2cc1a9b15c64a1b8c248a61 GIT binary patch literal 1836 zcmV+{2h;dcNk&E_2LJ$9MM6+kP&il$0000G0000h0RSrj06|PpNH75a01beZZCl>v zaZnsAQ;_U%N6i#8Q;`0hS3;4n2GF9i%o2SH5q*UqnE1BuSBE;lp@> z-6wFnWsB0ef{EH;%aqL3OUIOL^Ef5d9zaJGEuf{!J*cT=4Qi^`ftt!%&{HkwsU;|? zJ&I}ximF0UxjBle0!5XfsR}feLsen^XZ~mYXa4sS+yPb1{Ad0%|C#^Hf95~)pZU-H zXZ|z)ng7gx=0EdaLOxVwjQEC~rVNF^hIr1Iz|Qe>mB6})9~!5HxZXffCtXb8=}uUe zBQfW_usl(P`?;u2pTym=nF;E;i~c)j*$b*n;0JWmifKgx3$NWw##<|rSnr!$!v6u) zB(h=o@FLxn7ynK=3;ubTOLmWNB&m%dT&vQ#T%P-mW8ZPJ0aj2rAkGB<0B|+{odGH= z0W1MNwOXo9r$3}3BNNGs@D_<zu#tb$`6i_Kst2AMsC0+4%Ka-k<1nh4TRY zVd)#@1J0Mxm-fF<58Q6DuRsqjUu2){U--I!KmYJ3QRWe!8tRVH@pCeAX;f}f%_K3$^t`X<2>_#*I2UV|84%(e8FA)c^*us^Pup}u@ zsAC3ez=X3FNbMohqQRm58cx;UPh5OltdtFkMZv*4q;2Sd1Cvsu`sUGZ`EpG6X`lG? z?ixzf&R;;BBhCxYSiGWR0HMZ-16PjZxp~2P>-+)&EzAHHoEM(Iz#t;rzyW!|dF%WF z0xiq{7n}@zOJMFC5pG}t05N%t0092};fnoj|NZbgG9b0y9v%{&b=0E9Guho{`$H=BgG=8puSf+Iyk{x@`fejy z37?gTT>wRAQ6WueiF1mw8LS~t?Oo>=8iE5cz3nRo-Oa@b^54-j((19&zrgR)HW z*4Li{ZS0Yem<=pWANwTKiD57{P6k`n#D{$0NBFlGEPs!A`>0YNXPSXST1#70$V3X< zEAA}Sq*I%G#1XmiRG1p6J)@GN2vXm*Mg!1CjjUJ>o(wp-en@)Gt=TJxuTj{IM1>k# z6^0p7(vsPYq8W-!>bq?3F345EKmgrJE+hq}C1XzC8v`q{=imw}I61o04~RS)qVs$7 z|M$S=7cKeHA0~pEkLF5zlu6?Zb%9Pntox9V;~b~#=U?a?q*ym z#pqyN0)9YzrhoYZ$*~9L?a40ZsHRSP=FQ)1wPzHKq#lFAM`d{e-bfwO@kiUPt~0(8 zu2C2H+pbAzUC+`RYIQkUar(tg^BLLj0A}V20hc0pH z01-2_1#prz4{2LZI_D#)jJl{4tEOd((>;b|>)P9!!2-wWU6W_t zJ*XuAbi@(p1oh2%HNEp;Wd=E)=Gw}?12oyFTBBYnjN>0GRf{gP{IL&mb;+%ZNE)e^ zZ8S|FEJpY>+z#qK;cUuUE2&nJPsg5NPi#o=5gIS5O!p4k6U&N8ngsfjDt!xvmZq$WqK4(SM-zm~b2*&kBRlc`%2_j>3@BGF)g(Gw#yx zFY+X7N(ib|3`WKB%oE~X0kD*71Chgk+~Qq)ApQQC=b;$LyrH!96A3vQtO)h^B}#s> z5e0vFDnJ&>u~6Df6qOplt0Q1|@wUo8Do(EY@sJH?{FY_S@AikYP_98-ExRuXS6DMV zj}WgZ)XGlNwAT&lzbu=op3#aya48#%b|Cn5fYksL^Rf1rYHN2phEL^DN(V|UvG%dz z;tWs#o*OU)lo+5aplkp}&#KA1Q!+gqqVkP@63ZCR+<(#9Gg*;CJ%T@l=*LRfxR00F a4SGhUfBZdWq0002M27aLc literal 0 HcmV?d00001 diff --git a/static/icons/MUSIC.webp b/static/icons/MUSIC.webp new file mode 100644 index 0000000000000000000000000000000000000000..9bc455901552c6ff1b2abc97e0d3229a3df4e7a7 GIT binary patch literal 1934 zcmV;92XXjPNk&G72LJ$9MM6+kP&il$0000G0000h0RSrj06|PpNH75a01beZZCl>v zaZnsAQ;_U%N6i#8Q;`0hS3;4n2GF9i%o2SH5q*UqnE1BuSBE;lp@> z-6wFnWsB0ef{EH;%aqL3OUIOL^Ef5d9zaJGEuf{!J*cT=4Qi^`ftt!%&{HkwsU;|? zJ&I}ximF0UxjBle0!5XfsR}feLsen^XZ~mYXa4sS+yPb1{Ad0%|C#^Hf95~)pZU-H zXZ|z)ng7gx=0EdaLOxVwjQEC~rVNF^hIr1Iz|Qe>mB6})9~!5HxZXffCtXb8=}uUe zBQfW_usl(P`?;u2pTym=nF;E;i~c)j*$b*n;0JWmifKgx3$NWw##<|rSnr!$!v6u) zB(h=o@FLxn7ynK=3;ubTOLmWNB&m%dT&vQ#T%P-mW8ZPJ0aj2rATS0105CWJodGH= z0W1MNwOXrArzNDKBeGd2;1-EvZsBu4=G_18KcH)sd9E(q)aak8oY;1aioer8aK2z4 zs{gIsVSK=T&w9^#75@S18U9PCThIf`tJydEZ~i}CFF+6f{@?v7A zb!(4f-y!oN!zo2@x+c!fOMY-SaCjs7MFMzU@QTdQQ<=CKCW(A#Mrp*M<^$ad;Tr0w zH_+0dH^bLL*DhCYY$IJ#?I<+%YUQed#5M(5?$Ub)vK!AsB=qE|Viv!W_eZ!{}x3@&wE zAZy=5vV(zu^}2$M#~EZ{!d7p}qs-@Mf3uBIx$gY)HMHHIQN7Z7{%%tx|lodtn;u27C^cNE3;o9Eo(9!IJZ6tJ**S{{Gj4s)`y6O=Y+1aZ8Zg z8Zcoqb1M_4!W*+q&m>VcsGREiCmxq3A3ueUz+XE@UBeDe?bb46C{Fn7-U0{G@E?R} z^5vYQDNvNG3s?7_uOqBip>h9clSf21TLq@tp`ueSJaktcQ;`%QU1UGG5eyl^LhysB z3^0%Z_%WE%4%JNnav;5nTu7eRc3!n$h|X9ct2xA~PDz(?7_q2f2V?T8T_ps#hDa19 zR^t5)?VZPNQ{3kyf7gYA25QDK5Ji}0H?(CEoS=h1W?qZG$#543tJaom1GN}D_k21T zw>S_0KIz+`R?L3NTP|i;?Uv7591XL=G83?3D~fZPTYT7-;RfPwO1wG$~ak3tKSWr#G*~-*@)`u{^}iTBO}qx%oPR-+|W$!X)LH zEQX!_QtEsrgrV~m1{^r!4wx{KAQCdCWap|s@T9fwZ;cbF$UJhkuWvTsp6QirvCiGH zkAhiCh!uGD!K0bx>{>e^8w2>^v}!LJTif#k;rIslg#3PuzaRHk67tW;P=?JFG^hK6 zeuJ>NAA-PdTr<4eAB7y5*;Z;apDHCj z<}T=n?PAEAie+cf6J`!L98lkAJ<$*rfps~d+>~1C>NDV9@c}S~Rrd)g1^nc5tV{Yo zYPO%wi7I*(`DHO3n()o_uOsK`GJ?9J5mn$lB3vzT{c5~({iO7^YBK4BSCuQCSvV6s zzh>bbDt1!J7&qGdeBt_)QXtf=e`N*vHeXAR^?Up0D>{KHNx#gIq2=hC6Kbav`tKUt zP7VeRRrkq!;8{MIu^8E(@L*jIY7!xlJCY%z>i#cJ8h?G8IhiJdUgKVNKDh`}khq9Z z-4m)HpS@(NO4L=?Tb2!xO0w61DjYlZ-Lniloy&nitNg~3e?JW))|L+?Nwj#21|=Q U)Fs`Cx6`L@$@A^F=23tE02RHn6#xJL literal 0 HcmV?d00001 diff --git a/static/icons/OTHER.webp b/static/icons/OTHER.webp new file mode 100644 index 0000000000000000000000000000000000000000..2b8aa5fd52eb925116f1454fcc52bc006de329ee GIT binary patch literal 878 zcmV-!1CjhvNk&Fy0{{S5MM6+kP&il$0000G0000h0RSrj06|PpNH75a01beZZCl>v zaZnsAQ;_U%N6i#8Q;`0hS3;4n2GF9i%o2SH5q*UqnE1BuSBE;lp@> z-6wFnWsB0ef{EH;%aqL3OUIOL^Ef5d9zaJGEuf{!J*cT=4Qi^`ftt!%&{HkwsU;|? zJ&I}ximF0UxjBle0!5XfsR}feLsen^XZ~mYXa4sS+yPb1{Ad0%|C#^Hf95~)pZU-H zXZ|z)ng7gx=0EdaLOxVwjQEC~rVNF^hIr1Iz|Qe>mB6})9~!5HxZXffCtXb8=}uUe zBQfW_usl(P`?;u2pTym=nF;E;i~c)j*$b*n;0JWmifKgx3$NWw##<|rSnr!$!v6u) zB(h=o@FLxn7ynK=3;ubTOLmWNB&m%dT&vQ#T%P-mW8ZPJ0aj2rAP@oo08l6ZodGH= z0W1MNwOXl8Cnh8!CN&sP;1-E#ZsBu58}o;x59GlZ9-84>>%fOdCDZwEw8OStce-y_ z)^%;$`B!#46QNrdtZP1-N$zH~aw0LEL8^Q>Xo)p%nhmUr)*V&dj|9T^P3s!YeDBC% zwDMvZjfq4N4<1g4lU|xr?6qLa({7p)I9p9GPL3XVx9lP~x;W{#(waDI(rJk0J)J1) zKBtQr{%O?B5SLC5CgZ}uGAFn8f7_<(({@@ypQr%P8BIOXNxAGw%M60>`f9;odTWV@ zV!4`n1&l@O7xtSPz;0rabm0{8F))+mp41`oeMCMSG%ZV}ZH6;=vh?WT=bL`QumubU z1dbVcZp%nh^#leNloYJM3x#i*jenZ->ByK?`tg|ox*KKb(}svyPf25Jy*hBw5$4`R z|4pQApHM^U2oj=z0RH~G=kb64}rfb4f4#j~R;t+&eRd<=KM)W~O)! z!M3VeuO9o-Sl%f2O&!1nCJDV^=#&6hgFdY981aP??dx0Ob+pF?oxDw; zfDknTsRg)ArG?_;0V6+rYq&v~5VE(`oF?@{bebMyhc~`ksy|}>PIVA;Qlw6R00AbT E05>M4CIA2c literal 0 HcmV?d00001 diff --git a/static/icons/PDF.webp b/static/icons/PDF.webp new file mode 100644 index 0000000000000000000000000000000000000000..cb183bd83cf6fddf4f7d6685fb1a40485fa324d0 GIT binary patch literal 2264 zcmV;}2q*VaNk&G{2mkv zaZnsAQ;_U%N6i#8Q;`0hS3;4n2GF9i%o2SH5q*UqnE1BuSBE;lp@> z-6wFnWsB0ef{EH;%aqL3OUIOL^Ef5d9zaJGEuf{!J*cT=4Qi^`ftt!%&{HkwsU;|? zJ&I}ximF0UxjBle0!5XfsR}feLsen^XZ~mYXa4sS+yPb1{Ad0%|C#^Hf95~)pZU-H zXZ|z)ng7gx=0EdaLOxVwjQEC~rVNF^hIr1Iz|Qe>mB6})9~!5HxZXffCtXb8=}uUe zBQfW_usl(P`?;u2pTym=nF;E;i~c)j*$b*n;0JWmifKgx3$NWw##<|rSnr!$!v6u) zB(h=o@FLxn7ynK=3;ubTOLmWNB&m%dT&vQ#T%P-mW8ZPJ0aj2rAbJM?01!F=odGH= z0W1MNwOXrArzNDKBi30E;1-EvZsByG`Q2agf3EC@dmlSH6ZtRc{B`KNv^mCjr}W43 zDf=tyBk4E$*Qf{fPNeTaK9#@S947tWYbCfxVe+L28zFUM4?W*e_5#6`ca)pm4n35< ziK$m@hcqnJp@e!jIXLjMde2*~&|BUsoPEvnF__^>3VGS5gzdBEuFKjjW>A9te1YgQ zsQLI6V`3HdW(3bc5lOGMe=vuO@`l!jg*I5X@LEx{Qf{VbrFt|ZX`}UeZ zz$53~gzBal+nL-Qjvouj?h}N>+?-!x$rpqHWDM8-= zXb6K&$IK&n zbY=dUb>wUw0P?Q8{a5$<@wgYTVPP$ zhR)yKxoEddqsP?n+L~xb7r+jQEa|Xwx^i34akv1GD9!KLl+4?kJAZoRqTM!+A5+6> zX`vib&zCT$qj$@|ZoRB{`N=LqjK((~*F7%3BPTfH1-GWp#^!ZZs*OAPt&A z05Coe&hgZ@&N#Sx&|xz!;h3;y-8rT}Cy?0ozv<7CjP${#}9zG9EVx^*QKpS#lDRRY3zuW_c!B zCgPeGcTr-e^Uol)DI)yxo}Slm7#FDU5zUV*vh``^VgxQ{S4T^;#qS1?Mo1P>i1)GM zvoQ+~I$^|VpIB$u-_sM!(3ozRhoN&rrk)F|I1J9K=J<=Ency@9-MAq(t(edO{5X0?-J zz*2!S`T>;nq@Es~LT6$>EB8Qhd7k;QmHMK?% zd}XPo!=vs$D9qWl3WS>Ge~^eM z;!=-45R9;YJ;r@Tyw+5N0Ha@WWCoXfBoI*#hQE~URy&xBR8Lj2vLzWGeCaZ$~j8n4h~K|e>_*Oo(;rjL$uHDsR^ z1=9|}mb?6Dx~MvPYG>1h${DWCO#s~&kXZg5T~}$_e9(%=%jD&VNx%~K!xgRfTln2` zJb4uo@J5utd2c#PRd)7|J3eT3X9>=>m8<%n_=lY1V zD{B4~`}(XJHyeK<|6zK5jG(fDd6g&tO%ebfaswxT0tB6k87-6f2hnkxQj+F>d!R|| m|I0RSj82dc5%Ol6pgjKqpUF)He`PtOe09}Rl{tUl0000KH)-+! literal 0 HcmV?d00001 diff --git a/static/icons/PPT.webp b/static/icons/PPT.webp new file mode 100644 index 0000000000000000000000000000000000000000..3e57a9073b0086b9c3be7ec5e05e3a1183cdcb9f GIT binary patch literal 1474 zcmV;z1wHywNk&Gx1pok7MM6+kP&il$0000G0000h0RSrj06|PpNH75a01beZZCl>v zaZnsAQ;_U%N6i#8Q;`0hS3;4n2GF9i%o2SH5q*UqnE1BuSBE;lp@> z-6wFnWsB0ef{EH;%aqL3OUIOL^Ef5d9zaJGEuf{!J*cT=4Qi^`ftt!%&{HkwsU;|? zJ&I}ximF0UxjBle0!5XfsR}feLsen^XZ~mYXa4sS+yPb1{Ad0%|C#^Hf95~)pZU-H zXZ|z)ng7gx=0EdaLOxVwjQEC~rVNF^hIr1Iz|Qe>mB6})9~!5HxZXffCtXb8=}uUe zBQfW_usl(P`?;u2pTym=nF;E;i~c)j*$b*n;0JWmifKgx3$NWw##<|rSnr!$!v6u) zB(h=o@FLxn7ynK=3;ubTOLmWNB&m%dT&vQ#T%P-mW8ZPJ0aj2rAY=pp0I)3podGH= z0W1MNwN|K4rzAh3A<)@#@D_<>Zt|Z({Iep}x=j72mk&BfiF_BzQR|^phirS>_+HxDo6$IC#r%UO@_I$JmxUd8?0Y+ ztPVQ#ORwh0P9%K0qD9o3KA?v(NirzC=EzPYe7l&``qd-^LKa9=EjN0!kcV zy4E+~$W<(a6#rdytZuc9&zhd@n9vf_(QB3nd)8%xDru}|?S8teE--Zk<4#$%*oj#Z zr2t+U&OXk$mS7}|xYr}$ajp*)HqFxvPg0X?gcSc>bD5O;aHRS(`x)Rjlh*1_W^quj zq(GSeML`>-WtcU#7S8d}{{>Ay?uiz!!3)$!f!T7N)~IKP)cVyAsY6|B8tEBvu1CUH z8B?ft1U{f7jJVe$;+N^IV{_)GyQVY=(SbTJ7rEGlLu=Eg6p#}X$J4aIxdhcD1n9t* zO|0ku{{FtY{ipx^_Sl$D5)E=Zf{$-mivuEDpLfp$y=Lz{5c1Z3poyXP*?VA_g6hFe zjk6Zhh8U&*0C5Q_8>1*$$MF=5b-r9HNZX0zb${#J>mc}XBAMw7kgKov@=F3(l6i@Q z*KJa_%^4D?;!#2gQN|!_0;5_GK9b1_?4UOT;Wng+n}EclU74kwD4ix4M;L*y3XNz$ zpa=NFmV+-ZNX( zN;(u!N#*)jdmr#yZC$`c?ty^@iTQzV_4lK#mi-NfO<-`LCN8-cP zDcdhgHF9f}6UBY8YTxe4@~A?mt9{qt-6kJ1ctb*eK_v#h(Gl4FJRNws&MDqOH!l}x z@ql(*-7-W(gzE+CP`6Iyl3KYG{-<8rkZrLa?_1f4J3pZoU*f20rwyQ7B)aR2`jFEn zn?&&fjy#e5-am56|DKJ0c}qo}@@GJ;LUgESB8gDRAC)uC3gf;iH`y+8Y)-T#{_SdB z4M;wr#(m%&(!Rti_@% literal 0 HcmV?d00001 diff --git a/static/icons/TXT.webp b/static/icons/TXT.webp new file mode 100644 index 0000000000000000000000000000000000000000..2fce5b2f52edccfa3a5dc948e6bfbd6d93b18e12 GIT binary patch literal 958 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 U@}|^74xsUWXL6DUAclkh05Go9{r~^~ literal 0 HcmV?d00001 diff --git a/static/icons/XML.webp b/static/icons/XML.webp new file mode 100644 index 0000000000000000000000000000000000000000..9eb0956ec3f9868e40dad481ebfafffd27516f07 GIT binary patch literal 1922 zcmV-|2YvWbNk&F`2LJ$9MM6+kP&il$0000G0000h0RSrj06|PpNH75a01beZZCl>v zaZnsAQ;_U%N6i#8Q;`0hS3;4n2GF9i%o2SH5q*UqnE1BuSBE;lp@> z-6wFnWsB0ef{EH;%aqL3OUIOL^Ef5d9zaJGEuf{!J*cT=4Qi^`ftt!%&{HkwsU;|? zJ&I}ximF0UxjBle0!5XfsR}feLsen^XZ~mYXa4sS+yPb1{Ad0%|C#^Hf95~)pZU-H zXZ|z)ng7gx=0EdaLOxVwjQEC~rVNF^hIr1Iz|Qe>mB6})9~!5HxZXffCtXb8=}uUe zBQfW_usl(P`?;u2pTym=nF;E;i~c)j*$b*n;0JWmifKgx3$NWw##<|rSnr!$!v6u) zB(h=o@FLxn7ynK=3;ubTOLmWNB&m%dT&vQ#T%P-mW8ZPJ0aj2rAS4C=0B|_~odGH= z0W1MNwOXl8rzIpJBbF&h;1-ExZsBwA^&vX%a?$F)r1Bah3wrts^8o$->0ST3qhC(D zcH;$)(=XQk$o?Js$6c+<`wx{X@Nw17FzWGx>1F%U{sP-mt&C^2EB+X@ZJ{ zXPUs(<rySCxqOIM0MDL#8N!AF zGacwJX4LjMA`>DEedkITy_^mSIz5hq+yGR^d~MEREunIyR@D&{0FpH2&e}Sq^HVDT z^9QX~;?ESTu8SC5;%lu0mEdv=icOVzviP)D(g_R&P}^p$1UUDp6huC;!wr2HCUYECMt=1sXY@T}T3;@l${dwZ~ z_{q5Wqx36{f4zVCKG=k;=aLObpGj{Tm#yKINAL^4Jq(pW3X$``P7R?buf@v9Nr8k8 zCK1EOCcmrNTW06t9OcF8DO&U(Z^Buzq<)k#Dziuta3TksCc z4Eh734+I9Z7jk|Keq&*`>4Ag}C6pO^%5lygb?MWnJOC4Ar?xzR&GHlDNFqrl&X1a>pJ(c>+eae)} ziy^aPONzO!t(R1mPI~JsOlaDxzfPop5sRve7TNT2e`k%|r!7?;I^RxFPO~!KSB$kY zMdS`rz@=uC8>(DTrpt$1h?dn0;<_e!OxrR<)tMnr>E%3ZLpOwh;kn%vkSGppgn8x> zoRuNZod}cs$g&>d9ehv zl8p73ix2)%5L@td^CjH3nYqCy^-Dh64fJPFDb!@;N@2K<6AYDRWGM6cy;Jg*jODN5 z)g(No(hxk##pt}bXeHWYXc81AJ3CYxlY2b4^QQiifx;EQ+3~OYyL@#oIETB|{=uO3 zrr6;W+f|9CJ@eCbV%oZ$P(fCVyw3wY41ot>BL-BjRFLXsC(PXMU}b%73`7N=OdR1h z>45`&8e=U6oOZnNvxL4 z&Y1BY>v4BJLn?l|;(tSrQ9CbVX+FLriyJQNjV7L;W13` zO@a!R&B%97&~-INh_{&dK`z{mnWkjITe)A~AoqxxMyl6Wi^b4(@w$#ZnXXLhyrnwLCE3>@KYi@G?hk`8?K+Y8*D ImC)b-02QjTHUIzs literal 0 HcmV?d00001 diff --git a/static/icons/ZIP.webp b/static/icons/ZIP.webp new file mode 100644 index 0000000000000000000000000000000000000000..8e93b14e281e30fdc30cd8dd9a6423f7a2be45f5 GIT binary patch literal 1514 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 Rotb%2=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + +scroll-into-view-if-needed@^2.2.25: + version "2.2.31" + resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" + integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== + dependencies: + compute-scroll-into-view "^1.0.20" + +sdp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/sdp/-/sdp-3.2.0.tgz#8961420552b36663b4d13ddba6f478d1461896a5" + integrity sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw== + +semver@^7.3.6, semver@^7.5.4, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +shallow-equal@^1.0.0: + version "1.2.1" + resolved "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +string-argv@~0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +string-width@^7.0.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +stylis@^4.1.3: + version "4.3.4" + resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4" + integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.9.1: + version "0.9.2" + resolved "https://registry.npmmirror.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throttle-debounce@^5.0.0: + version "5.0.2" + resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" + integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-api-utils@^1.0.1: + version "1.4.3" + resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@^4.9.4: + version "4.9.5" + resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vite@4.1.4: + version "4.1.4" + resolved "https://registry.npmmirror.com/vite/-/vite-4.1.4.tgz#170d93bcff97e0ebc09764c053eebe130bfe6ca0" + integrity sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg== + dependencies: + esbuild "^0.16.14" + postcss "^8.4.21" + resolve "^1.22.1" + rollup "^3.10.0" + optionalDependencies: + fsevents "~2.3.2" + +vue-eslint-parser@^9.3.1, vue-eslint-parser@^9.4.3: + version "9.4.3" + resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8" + integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-i18n@^9.1.9: + version "9.14.2" + resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.14.2.tgz#e7f657664fcb3ccf99ecea684fc56e0f8e5335ce" + integrity sha512-JK9Pm80OqssGJU2Y6F7DcM8RFHqVG4WkuCqOZTVsXkEzZME7ABejAUqUdA931zEBedc4thBgSUWxeQh4uocJAQ== + dependencies: + "@intlify/core-base" "9.14.2" + "@intlify/shared" "9.14.2" + "@vue/devtools-api" "^6.5.0" + +vue-template-compiler@^2.7.14: + version "2.7.16" + resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" + integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +vue-tsc@^1.0.24: + version "1.8.27" + resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c" + integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== + dependencies: + "@volar/typescript" "~1.11.1" + "@vue/language-core" "1.8.27" + semver "^7.5.4" + +vue-types@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d" + integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw== + dependencies: + is-plain-object "3.0.1" + +vue@^3.3.0: + version "3.5.13" + resolved "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a" + integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== + dependencies: + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-sfc" "3.5.13" + "@vue/runtime-dom" "3.5.13" + "@vue/server-renderer" "3.5.13" + "@vue/shared" "3.5.13" + +warning@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +webrtc-adapter@^9.0.0: + version "9.0.1" + resolved "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-9.0.1.tgz#d4efa22ca9604cb2c8cdb9e492815ba37acfa0b2" + integrity sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ== + dependencies: + sdp "^3.2.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +yaml@~2.6.1: + version "2.6.1" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==