docs: improve code (#5040)

* docs: remove unused code

* refactor(docs): improve code
This commit is contained in:
三咲智子
2021-12-30 19:00:11 +08:00
committed by GitHub
parent fe0bcd16ce
commit d28d0701d7
28 changed files with 103 additions and 230 deletions

View File

@ -1,5 +1,6 @@
module.exports = { /* eslint-disable @typescript-eslint/no-var-requires */
rules: { const { defineConfig } = require('eslint-define-config')
'@typescript-eslint/no-var-requires': 'off',
}, module.exports = defineConfig({
} rules: {},
})

View File

@ -1,5 +1,8 @@
module.exports = { /* eslint-disable @typescript-eslint/no-var-requires */
const { defineConfig } = require('eslint-define-config')
module.exports = defineConfig({
rules: { rules: {
'no-console': 'off', 'no-console': 'off',
}, },
} })

View File

@ -15,6 +15,7 @@ async function main() {
if (fs.existsSync(localeOutput)) { if (fs.existsSync(localeOutput)) {
throw new Error(exists) throw new Error(exists)
} }
console.log(chalk.cyan('Starting for build doc for developing')) console.log(chalk.cyan('Starting for build doc for developing'))
// all language should be identical since it is mirrored from crowdin. // all language should be identical since it is mirrored from crowdin.
const dirs = await fs.promises.readdir(componentLocaleRoot, { const dirs = await fs.promises.readdir(componentLocaleRoot, {
@ -29,9 +30,7 @@ async function main() {
await fs.promises.writeFile( await fs.promises.writeFile(
path.resolve(localeOutput, 'lang.json'), path.resolve(localeOutput, 'lang.json'),
JSON.stringify(languages), JSON.stringify(languages),
{ 'utf-8'
encoding: 'utf-8',
}
) )
// loop through en-US // loop through en-US
@ -49,7 +48,11 @@ async function main() {
await traverseDir(enUS, languagePaths, localeOutput) await traverseDir(enUS, languagePaths, localeOutput)
} }
async function traverseDir(dir, paths, targetPath) { async function traverseDir(
dir: string,
paths: { name: string; pathname: string }[],
targetPath: string
) {
const contents = await fs.promises.readdir(dir, { withFileTypes: true }) const contents = await fs.promises.readdir(dir, { withFileTypes: true })
await Promise.all( await Promise.all(

View File

@ -5,22 +5,22 @@ import navLocale from '../i18n/pages/sidebar.json'
function getNav() { function getNav() {
return Object.fromEntries( return Object.fromEntries(
Object.entries(navLocale).map(([lang, val]) => { Object.entries(navLocale).map(([lang, locales]) => {
const value: { const item: {
link: string link: string
text: string text: string
activeMatch?: string activeMatch?: string
}[] = Object.values(val).map((item) => ({ }[] = Object.values(locales).map((item) => ({
...item, ...item,
link: `${ensureLang(lang)}${item.link}`, link: `${ensureLang(lang)}${item.link}`,
})) }))
value.push({ item.push({
text: lang === 'zh-CN' ? '旧版文档' : 'Old Doc', text: lang === 'zh-CN' ? '旧版文档' : 'Old Doc',
link: 'https://doc-archive.element-plus.org/', link: 'https://doc-archive.element-plus.org/',
}) })
return [lang, value] return [lang, item]
}) })
) )
} }

View File

@ -1,6 +1,5 @@
import path from 'path' import path from 'path'
import fs from 'fs' import fs from 'fs'
import { parse } from 'vue/compiler-sfc'
import MarkdownIt from 'markdown-it' import MarkdownIt from 'markdown-it'
import mdContainer from 'markdown-it-container' import mdContainer from 'markdown-it-container'
import { highlight } from '../utils/highlight' import { highlight } from '../utils/highlight'
@ -45,9 +44,9 @@ export const mdPlugin = (md: MarkdownIt) => {
path.resolve(docRoot, 'examples', `${sourceFile}.vue`), path.resolve(docRoot, 'examples', `${sourceFile}.vue`),
'utf-8' 'utf-8'
) )
const existingScriptIndex = hoistedTags.findIndex((tag) => { const existingScriptIndex = hoistedTags.findIndex((tag) =>
return scriptSetupRE.test(tag) scriptSetupRE.test(tag)
}) )
if (existingScriptIndex === -1) { if (existingScriptIndex === -1) {
hoistedTags.push(` hoistedTags.push(`
<script setup> <script setup>
@ -59,11 +58,9 @@ export const mdPlugin = (md: MarkdownIt) => {
} }
if (!source) throw new Error(`Incorrect source file: ${sourceFile}`) if (!source) throw new Error(`Incorrect source file: ${sourceFile}`)
const { html, js, css, cssPreProcessor, jsPreProcessor } =
generateCodePenSnippet(source)
return `<Demo :demos="demos" source="${encodeURIComponent( return `<Demo :demos="demos" source="${encodeURIComponent(
highlight(source, 'vue') highlight(source, 'vue')
)}" path="${sourceFile}" html="${html}" js="${js}" css="${css}" css-pre-processor="${cssPreProcessor}" js-pre-processor="${jsPreProcessor}" raw-source="${encodeURIComponent( )}" path="${sourceFile}" raw-source="${encodeURIComponent(
source source
)}" description="${encodeURIComponent(localMd.render(description))}">` )}" description="${encodeURIComponent(localMd.render(description))}">`
} else { } else {
@ -72,15 +69,3 @@ export const mdPlugin = (md: MarkdownIt) => {
}, },
} as ContainerOpts) } as ContainerOpts)
} }
function generateCodePenSnippet(source: string) {
const { template, script, styles } = parse(source).descriptor
const css = styles.pop()
return {
html: encodeURIComponent(template?.content ?? ''),
js: encodeURIComponent((script || { content: '' }).content),
css: encodeURIComponent(css?.content || ''),
cssPreProcessor: css?.lang || 'none',
jsPreProcessor: script?.lang || 'none',
}
}

View File

@ -1,13 +0,0 @@
{
"en-US": {
"view-source": "View source",
"edit-in-editor": "Edit in PlayGround",
"edit-on-github": "Edit on Github",
"edit-in-codepen": "Edit in Codepen.io",
"copy-code": "Copy code",
"switch-button-option-text": "Switch to Options API",
"switch-button-setup-text": "Switch to Composition API",
"copy-success": "Copied!",
"copy-error": "This browser does not support automatic copy"
}
}

View File

@ -5,16 +5,18 @@ import 'virtual:windi-base.css'
import 'virtual:windi-components.css' import 'virtual:windi-components.css'
import VPApp, { globals, NotFound } from '../vitepress' import VPApp, { globals, NotFound } from '../vitepress'
import { define } from '../utils/types'
// windicss utilities should be the last style import // windicss utilities should be the last style import
import 'virtual:windi-utilities.css' import 'virtual:windi-utilities.css'
// windicss devtools support (dev only) // windicss devtools support (dev only)
import 'virtual:windi-devtools' import 'virtual:windi-devtools'
export default { import type { Theme } from 'vitepress'
export default define<Theme>({
NotFound, NotFound,
Layout: VPApp, Layout: VPApp,
logo: '/images/element-plus-logo-small.svg',
enhanceApp: ({ app }) => { enhanceApp: ({ app }) => {
app.use(ElementPlus) app.use(ElementPlus)
@ -22,4 +24,4 @@ export default {
app.component(name, Comp) app.component(name, Comp)
}) })
}, },
} })

View File

@ -4,6 +4,7 @@ import escapeHtml from 'escape-html'
import prism from 'prismjs' import prism from 'prismjs'
// prism is listed as actual dep so it's ok to require // prism is listed as actual dep so it's ok to require
// eslint-disable-next-line @typescript-eslint/no-var-requires
const loadLanguages = require('prismjs/components/index') const loadLanguages = require('prismjs/components/index')
// required to make embedded highlighting work... // required to make embedded highlighting work...

View File

@ -0,0 +1 @@
export const define = <T>(value: T): T => value

View File

@ -1,100 +0,0 @@
<script setup lang="ts">
import { computed, ref } from 'vue'
const props = defineProps({
css: {
type: String,
required: true,
},
cssPreProcessor: {
type: String,
required: true,
},
js: {
type: String,
required: true,
},
jsPreProcessor: {
type: String,
required: true,
},
html: {
type: String,
required: true,
},
})
const globalMapper = {
"'vue'": 'Vue',
"'element-plus'": 'ElementPlus',
}
const js = computed(() => {
const decodedJs = decodeURIComponent(props.js || '')
const imports = /(import*) ([^'\n]*) from ([^\n]*)/g
const globals = []
let match
while ((match = imports.exec(decodedJs))) {
const [, , members, target] = match
globals.push(`const ${members} = ${globalMapper[target]};`)
}
const componentRegex = decodedJs.includes('export default defineComponent')
? /export default defineComponent\({([\s\S]*)}\)/g
: /export default {([\s\S]*)}/g
let component = componentRegex.exec(decodedJs)
component = ((component && component[1]) || '')
.replace(/\n {2}/g, '\n')
.trim()
return `${globals.join('\n')}
var Main = {
${component}
};
const app = Vue.createApp(Main);
app.use(ElementPlus);
app.mount("#app");
`
})
const data = computed(() => {
return JSON.stringify({
html: `<script src="//unpkg.com/vue@next"><${'/script'}>
<script src="//unpkg.com/element-plus/dist/index.full.js"><${'/script'}>
<div id="app">
${decodeURIComponent(props.html).trim()}
</div>
`,
css: `@import url("//unpkg.com/element-plus/dist/index.css");
${decodeURIComponent(props.css).trim()}
`,
js: js.value,
css_pre_processor: props.cssPreProcessor,
js_pre_processor:
props.jsPreProcessor === 'ts' ? ' typescript' : props.jsPreProcessor,
})
})
const formRef = ref(null)
const submit = () => {
formRef.value.submit?.()
}
defineExpose({
submit,
})
</script>
<template>
<form
ref="formRef"
action="https://codepen.io/pen/define/"
method="POST"
target="_blank"
>
<input type="hidden" name="data" :value="data" />
</form>
</template>

View File

@ -51,7 +51,7 @@ const copySvgIcon = async (name, refs) => {
<ul class="demo-icon-list"> <ul class="demo-icon-list">
<li <li
v-for="component in Icons" v-for="component in Icons"
:key="component" :key="component.name"
:ref="component.name" :ref="component.name"
class="icon-item" class="icon-item"
@click="copySvgIcon(component.name, $refs)" @click="copySvgIcon(component.name, $refs)"

View File

@ -28,7 +28,7 @@ onMounted(async () => {
window.addEventListener( window.addEventListener(
'click', 'click',
(e) => { (e) => {
const link = e.target.closest('a') const link = (e.target as HTMLElement).closest('a')
if (!link) return if (!link) return
const { protocol, hostname, pathname, target } = link const { protocol, hostname, pathname, target } = link
@ -69,9 +69,7 @@ onMounted(async () => {
location.href = `https://element-plus.gitee.io${toLang}${location.pathname.slice( location.href = `https://element-plus.gitee.io${toLang}${location.pathname.slice(
toLang.length toLang.length
)}` )}`
} catch (e) { } catch {}
// do nothing
}
} }
}) })
</script> </script>

View File

@ -86,8 +86,8 @@ const decodedDescription = computed(() =>
) )
const onPlaygroundClicked = () => { const onPlaygroundClicked = () => {
const code = usePlayGround(props.rawSource) const { link } = usePlayGround(props.rawSource)
window.open(`https://element-plus.run/#${code}`) window.open(link)
} }
const copyCode = async () => { const copyCode = async () => {

View File

@ -56,7 +56,7 @@ export function useActiveSidebarLinks(
} }
} }
function deactiveLink(link: HTMLElement) { function deactiveLink(link: HTMLElement | null) {
link && link.classList.remove('active') link && link.classList.remove('active')
} }
@ -93,7 +93,7 @@ function getPageOffset() {
function getAnchorTop(anchor: HTMLAnchorElement) { function getAnchorTop(anchor: HTMLAnchorElement) {
const pageOffset = getPageOffset() const pageOffset = getPageOffset()
try { try {
return anchor.parentElement.offsetTop - pageOffset - 15 return anchor.parentElement!.offsetTop - pageOffset - 15
} catch (e) { } catch (e) {
return 0 return 0
} }

View File

@ -10,7 +10,7 @@ export const useLang = () => {
let lang: string let lang: string
if (path?.includes('/')) { if (path?.includes('/')) {
lang = path.split('/').shift() lang = path.split('/').shift()!
} else { } else {
lang = defaultLang lang = defaultLang
} }

View File

@ -1,4 +1,5 @@
import { onUnmounted } from 'vue' import { onUnmounted } from 'vue'
import { isClient } from '@vueuse/core'
import { import {
addClass, addClass,
hasClass, hasClass,
@ -6,7 +7,6 @@ import {
removeClass, removeClass,
} from '@element-plus/utils/dom' } from '@element-plus/utils/dom'
import getScrollBarWidth from '@element-plus/utils/scrollbar-width' import getScrollBarWidth from '@element-plus/utils/scrollbar-width'
import { isServer } from '../utils'
export const useLockScreen = () => { export const useLockScreen = () => {
let scrollBarWidth = 0 let scrollBarWidth = 0
@ -19,7 +19,7 @@ export const useLockScreen = () => {
}) })
const cleanup = () => { const cleanup = () => {
if (isServer) return if (!isClient) return
removeClass(document.body, 'el-popup-parent--hidden') removeClass(document.body, 'el-popup-parent--hidden')
if (withoutHiddenClass) { if (withoutHiddenClass) {
document.body.style.paddingRight = bodyPaddingRight document.body.style.paddingRight = bodyPaddingRight
@ -27,7 +27,7 @@ export const useLockScreen = () => {
} }
const lock = () => { const lock = () => {
if (isServer) return if (!isClient) return
withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden') withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden')
if (withoutHiddenClass) { if (withoutHiddenClass) {
bodyPaddingRight = document.body.style.paddingRight bodyPaddingRight = document.body.style.paddingRight

View File

@ -1,5 +1,5 @@
import { NOOP } from '@vue/shared' import { NOOP } from '@vue/shared'
import { isServer } from '../utils' import { isClient } from '@vueuse/core'
import { useFeatureFlag } from './feature-flag' import { useFeatureFlag } from './feature-flag'
const THEME_KEY = 'preferred_theme' const THEME_KEY = 'preferred_theme'
@ -7,7 +7,7 @@ const PREFER_SYSTEM = 'system'
export const useTheme = () => { export const useTheme = () => {
const themeEnabled = useFeatureFlag('theme') const themeEnabled = useFeatureFlag('theme')
if (isServer || !themeEnabled.value) return NOOP if (!isClient || !themeEnabled.value) return NOOP
const cachedPreference = localStorage.getItem(THEME_KEY) || PREFER_SYSTEM const cachedPreference = localStorage.getItem(THEME_KEY) || PREFER_SYSTEM
// refer to https://css-tricks.com/dark-modes-with-css/ // refer to https://css-tricks.com/dark-modes-with-css/

View File

@ -1,20 +1,16 @@
import { isRef, ref } from 'vue' import { isRef, ref } from 'vue'
import { isBoolean } from '@vueuse/core'
import type { MaybeRef } from '@vueuse/core'
import type { Ref } from 'vue' export const useToggle = (getToggled?: MaybeRef<boolean>) => {
const isBool = (val: unknown): val is boolean => {
return typeof val === 'boolean'
}
export const useToggle = (getToggled?: Ref<boolean>) => {
const val = isRef(getToggled) const val = isRef(getToggled)
? getToggled ? getToggled
: ref(isBool(getToggled) ? getToggled : false) : ref(isBoolean(getToggled) ? getToggled : false)
return [ return [
val, val,
(toggle?: boolean) => { (toggle?: boolean) => {
val.value = isBool(toggle) ? toggle : !val.value val.value = isBoolean(toggle) ? toggle : !val.value
}, },
] as const ] as const
} }

View File

@ -1,31 +1,38 @@
/* eslint-disable */
import { utoa } from '../utils' import { utoa } from '../utils'
const scriptRe = /<script[^>]*>([\s\S]*)<\/script>/ const scriptRe = /<script[^>]*>([\s\S]*)<\/script>/
const MAIN_FILE_NAME = 'App.vue'
const SETUP_CODE = `import { setupElementPlus } from './element-plus.js'
setupElementPlus()`
export const usePlayGround = (source: string) => { export const usePlayGround = (source: string) => {
const decodeCode = decodeURIComponent(source) const decodeCode = decodeURIComponent(source)
const result = decodeCode.match(scriptRe) const result = decodeCode.match(scriptRe)
let finalCode = '' let code: string
if (result) { if (result) {
finalCode = decodeCode.replace( code = decodeCode.replace(
scriptRe, scriptRe,
`<script lang="ts" setup> `<script lang="ts" setup>
import { setupElementPlus } from './element-plus.js' ${SETUP_CODE}
setupElementPlus()
$1 $1
<\/script>` </script>`
) )
} else { } else {
finalCode = `${decodeCode} code = `${decodeCode}
<script lang="ts" setup> <script lang="ts" setup>
import { setupElementPlus } from './element-plus.js' ${SETUP_CODE}
setupElementPlus() </script>
<\/script>
` `
} }
const originCode = { const originCode = {
'App.vue': finalCode, [MAIN_FILE_NAME]: code,
}
const encoded = utoa(JSON.stringify(originCode))
const link = `https://element-plus.run/#${encoded}`
return {
encoded,
link,
} }
return utoa(JSON.stringify(originCode))
} }

View File

@ -1,6 +1,5 @@
import { computed } from 'vue' import { computed } from 'vue'
import { useData } from 'vitepress' import { useData } from 'vitepress'
import { joinUrl } from '../utils'
import type { PageData } from 'vitepress' import type { PageData } from 'vitepress'
@ -19,17 +18,6 @@ export const useToc = () => {
return computed(() => resolveHeaders(page.value.headers)) return computed(() => resolveHeaders(page.value.headers))
} }
export const resolveLink = (base: string, path: string) => {
if (path === undefined) {
return path
}
// keep relative hash to the same page
if (path.startsWith('#')) {
return path
}
return joinUrl(base, path)
}
export const resolveHeaders = (headers: PageData['headers']) => { export const resolveHeaders = (headers: PageData['headers']) => {
return mapHeaders(groupHeaders(headers)) return mapHeaders(groupHeaders(headers))
} }

View File

@ -14,10 +14,12 @@ import IconList from './components/globals/icons.vue'
import ParallaxHome from './components/globals/parallax-home.vue' import ParallaxHome from './components/globals/parallax-home.vue'
import type { Component } from 'vue'
export { default as NotFound } from './components/vp-not-found.vue' export { default as NotFound } from './components/vp-not-found.vue'
export default VPApp export default VPApp
export const globals = [ export const globals: [string, Component][] = [
['Demo', VPDemo], ['Demo', VPDemo],
['MainColor', MainColor], ['MainColor', MainColor],
['NeutralColor', NeutralColor], ['NeutralColor', NeutralColor],

View File

@ -8,7 +8,17 @@ import { inBrowser } from 'vitepress'
import type { Route } from 'vitepress' import type { Route } from 'vitepress'
export * from 'vitepress/dist/client/theme-default/utils' export {
isArray,
isNullish,
isExternal,
isActive,
normalize,
joinUrl,
ensureEndingSlash,
ensureStartingSlash,
removeExtention,
} from 'vitepress/dist/client/theme-default/utils'
export function utoa(data: string): string { export function utoa(data: string): string {
return btoa(unescape(encodeURIComponent(data))) return btoa(unescape(encodeURIComponent(data)))
@ -61,8 +71,6 @@ export function createGitHubUrl(
}${folder || ''}${path}${ext || ''}` }${folder || ''}${path}${ext || ''}`
} }
export const isServer = typeof window === 'undefined'
export function createCrowdinUrl(targetLang: string) { export function createCrowdinUrl(targetLang: string) {
let translateLang = '' let translateLang = ''
// for zh-CN zh-HK zh-TW, maybe later we will have cases like Chinese lang // for zh-CN zh-HK zh-TW, maybe later we will have cases like Chinese lang
@ -70,7 +78,7 @@ export function createCrowdinUrl(targetLang: string) {
if (targetLang.startsWith('zh-')) { if (targetLang.startsWith('zh-')) {
translateLang = targetLang.split('-').join('').toLocaleLowerCase() translateLang = targetLang.split('-').join('').toLocaleLowerCase()
} else { } else {
translateLang = targetLang.split('-').shift().toLocaleLowerCase() translateLang = targetLang.split('-').shift()!.toLocaleLowerCase()
} }
return `https://crowdin.com/translate/element-plus/all/en-${translateLang}` return `https://crowdin.com/translate/element-plus/all/en-${translateLang}`
} }

View File

@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const { defineConfig } = require('eslint-define-config') const { defineConfig } = require('eslint-define-config')
module.exports = defineConfig({ module.exports = defineConfig({

View File

@ -58,8 +58,10 @@ const tableRef = ref<InstanceType<typeof ElTable>>()
const resetDateFilter = () => { const resetDateFilter = () => {
tableRef.value!.clearFilter(['date']) tableRef.value!.clearFilter(['date'])
} }
// TODO: improvement typeing when refactor table // TODO: improvement typing when refactor table
const clearFilter = () => { const clearFilter = () => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
tableRef.value!.clearFilter() tableRef.value!.clearFilter()
} }
const formatter = (row: User, column: TableColumnCtx<User>) => { const formatter = (row: User, column: TableColumnCtx<User>) => {

View File

@ -35,7 +35,9 @@ const multipleSelection = ref<User[]>([])
const toggleSelection = (rows?: User[]) => { const toggleSelection = (rows?: User[]) => {
if (rows) { if (rows) {
rows.forEach((row) => { rows.forEach((row) => {
// TODO: improvement typeing when refactor table // TODO: improvement typing when refactor table
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
multipleTableRef.value!.toggleRowSelection(row, undefined) multipleTableRef.value!.toggleRowSelection(row, undefined)
}) })
} else { } else {

View File

@ -59,7 +59,9 @@ const props = {
} }
const onQueryChanged = (query: string) => { const onQueryChanged = (query: string) => {
// TODO: fix typeing when refactor tree-v2 // TODO: fix typing when refactor tree-v2
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
treeRef.value!.filter(query) treeRef.value!.filter(query)
} }
const filterMethod = (query: string, node: TreeNode) => { const filterMethod = (query: string, node: TreeNode) => {

View File

@ -1,6 +1,6 @@
{ {
"name": "@element-plus/docs", "name": "@element-plus/docs",
"version": "0.0.1", "private": true,
"scripts": { "scripts": {
"dev": "pnpm gen-locale && vitepress dev .", "dev": "pnpm gen-locale && vitepress dev .",
"build": "cross-env NODE_ENV=production && vitepress build .", "build": "cross-env NODE_ENV=production && vitepress build .",
@ -9,6 +9,8 @@
"crowdin-credentials": "sucrase-node .vitepress/build/crowdin-credentials.ts" "crowdin-credentials": "sucrase-node .vitepress/build/crowdin-credentials.ts"
}, },
"dependencies": { "dependencies": {
"@docsearch/js": "^3.0.0-alpha.42",
"@docsearch/react": "^3.0.0-alpha.42",
"@vueuse/core": "7.4.1", "@vueuse/core": "7.4.1",
"axios": "0.24.0", "axios": "0.24.0",
"clipboard-copy": "4.0.1", "clipboard-copy": "4.0.1",

26
pnpm-lock.yaml generated
View File

@ -148,6 +148,8 @@ importers:
docs: docs:
specifiers: specifiers:
'@crowdin/cli': 3.7.4 '@crowdin/cli': 3.7.4
'@docsearch/js': ^3.0.0-alpha.42
'@docsearch/react': ^3.0.0-alpha.42
'@types/markdown-it': 12.2.3 '@types/markdown-it': 12.2.3
'@vueuse/core': 7.4.1 '@vueuse/core': 7.4.1
axios: 0.24.0 axios: 0.24.0
@ -163,6 +165,8 @@ importers:
vite-plugin-windicss: 1.6.1 vite-plugin-windicss: 1.6.1
vitepress: 0.20.10 vitepress: 0.20.10
dependencies: dependencies:
'@docsearch/js': 3.0.0-alpha.42
'@docsearch/react': 3.0.0-alpha.42
'@vueuse/core': 7.4.1_vue@3.2.26 '@vueuse/core': 7.4.1_vue@3.2.26
axios: 0.24.0 axios: 0.24.0
clipboard-copy: 4.0.1 clipboard-copy: 4.0.1
@ -271,7 +275,6 @@ packages:
resolution: {integrity: sha512-E7+VJwcvwMM8vPeaVn7fNUgix8WHV8A1WUeHDi2KHemCaaGc8lvUnP3QnvhMxiDhTe7OpMEv4o2TBUMyDgThaw==} resolution: {integrity: sha512-E7+VJwcvwMM8vPeaVn7fNUgix8WHV8A1WUeHDi2KHemCaaGc8lvUnP3QnvhMxiDhTe7OpMEv4o2TBUMyDgThaw==}
dependencies: dependencies:
'@algolia/autocomplete-shared': 1.5.0 '@algolia/autocomplete-shared': 1.5.0
dev: true
/@algolia/autocomplete-preset-algolia/1.5.0_algoliasearch@4.10.5: /@algolia/autocomplete-preset-algolia/1.5.0_algoliasearch@4.10.5:
resolution: {integrity: sha512-iiFxKERGHkvkiupmrFJbvESpP/zv5jSgH714XRiP5LDvUHaYOo4GLAwZCFf2ef/L5tdtPBARvekn6k1Xf33gjA==} resolution: {integrity: sha512-iiFxKERGHkvkiupmrFJbvESpP/zv5jSgH714XRiP5LDvUHaYOo4GLAwZCFf2ef/L5tdtPBARvekn6k1Xf33gjA==}
@ -281,27 +284,22 @@ packages:
dependencies: dependencies:
'@algolia/autocomplete-shared': 1.5.0 '@algolia/autocomplete-shared': 1.5.0
algoliasearch: 4.10.5 algoliasearch: 4.10.5
dev: true
/@algolia/autocomplete-shared/1.5.0: /@algolia/autocomplete-shared/1.5.0:
resolution: {integrity: sha512-bRSkqHHHSwZYbFY3w9hgMyQRm86Wz27bRaGCbNldLfbk0zUjApmE4ajx+ZCVSLqxvcUEjMqZFJzDsder12eKsg==} resolution: {integrity: sha512-bRSkqHHHSwZYbFY3w9hgMyQRm86Wz27bRaGCbNldLfbk0zUjApmE4ajx+ZCVSLqxvcUEjMqZFJzDsder12eKsg==}
dev: true
/@algolia/cache-browser-local-storage/4.10.5: /@algolia/cache-browser-local-storage/4.10.5:
resolution: {integrity: sha512-cfX2rEKOtuuljcGI5DMDHClwZHdDqd2nT2Ohsc8aHtBiz6bUxKVyIqxr2gaC6tU8AgPtrTVBzcxCA+UavXpKww==} resolution: {integrity: sha512-cfX2rEKOtuuljcGI5DMDHClwZHdDqd2nT2Ohsc8aHtBiz6bUxKVyIqxr2gaC6tU8AgPtrTVBzcxCA+UavXpKww==}
dependencies: dependencies:
'@algolia/cache-common': 4.10.5 '@algolia/cache-common': 4.10.5
dev: true
/@algolia/cache-common/4.10.5: /@algolia/cache-common/4.10.5:
resolution: {integrity: sha512-1mClwdmTHll+OnHkG+yeRoFM17kSxDs4qXkjf6rNZhoZGXDvfYLy3YcZ1FX4Kyz0DJv8aroq5RYGBDsWkHj6Tw==} resolution: {integrity: sha512-1mClwdmTHll+OnHkG+yeRoFM17kSxDs4qXkjf6rNZhoZGXDvfYLy3YcZ1FX4Kyz0DJv8aroq5RYGBDsWkHj6Tw==}
dev: true
/@algolia/cache-in-memory/4.10.5: /@algolia/cache-in-memory/4.10.5:
resolution: {integrity: sha512-+ciQnfIGi5wjMk02XhEY8fmy2pzy+oY1nIIfu8LBOglaSipCRAtjk6WhHc7/KIbXPiYzIwuDbM2K1+YOwSGjwA==} resolution: {integrity: sha512-+ciQnfIGi5wjMk02XhEY8fmy2pzy+oY1nIIfu8LBOglaSipCRAtjk6WhHc7/KIbXPiYzIwuDbM2K1+YOwSGjwA==}
dependencies: dependencies:
'@algolia/cache-common': 4.10.5 '@algolia/cache-common': 4.10.5
dev: true
/@algolia/client-account/4.10.5: /@algolia/client-account/4.10.5:
resolution: {integrity: sha512-I9UkSS2glXm7RBZYZIALjBMmXSQbw/fI/djPcBHxiwXIheNIlqIFl2SNPkvihpPF979BSkzjqdJNRPhE1vku3Q==} resolution: {integrity: sha512-I9UkSS2glXm7RBZYZIALjBMmXSQbw/fI/djPcBHxiwXIheNIlqIFl2SNPkvihpPF979BSkzjqdJNRPhE1vku3Q==}
@ -309,7 +307,6 @@ packages:
'@algolia/client-common': 4.10.5 '@algolia/client-common': 4.10.5
'@algolia/client-search': 4.10.5 '@algolia/client-search': 4.10.5
'@algolia/transporter': 4.10.5 '@algolia/transporter': 4.10.5
dev: true
/@algolia/client-analytics/4.10.5: /@algolia/client-analytics/4.10.5:
resolution: {integrity: sha512-h2owwJSkovPxzc+xIsjY1pMl0gj+jdVwP9rcnGjlaTY2fqHbSLrR9yvGyyr6305LvTppxsQnfAbRdE/5Z3eFxw==} resolution: {integrity: sha512-h2owwJSkovPxzc+xIsjY1pMl0gj+jdVwP9rcnGjlaTY2fqHbSLrR9yvGyyr6305LvTppxsQnfAbRdE/5Z3eFxw==}
@ -318,14 +315,12 @@ packages:
'@algolia/client-search': 4.10.5 '@algolia/client-search': 4.10.5
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
'@algolia/transporter': 4.10.5 '@algolia/transporter': 4.10.5
dev: true
/@algolia/client-common/4.10.5: /@algolia/client-common/4.10.5:
resolution: {integrity: sha512-21FAvIai5qm8DVmZHm2Gp4LssQ/a0nWwMchAx+1hIRj1TX7OcdW6oZDPyZ8asQdvTtK7rStQrRnD8a95SCUnzA==} resolution: {integrity: sha512-21FAvIai5qm8DVmZHm2Gp4LssQ/a0nWwMchAx+1hIRj1TX7OcdW6oZDPyZ8asQdvTtK7rStQrRnD8a95SCUnzA==}
dependencies: dependencies:
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
'@algolia/transporter': 4.10.5 '@algolia/transporter': 4.10.5
dev: true
/@algolia/client-personalization/4.10.5: /@algolia/client-personalization/4.10.5:
resolution: {integrity: sha512-nH+IyFKBi8tCyzGOanJTbXC5t4dspSovX3+ABfmwKWUYllYzmiQNFUadpb3qo+MLA3jFx5IwBesjneN6dD5o3w==} resolution: {integrity: sha512-nH+IyFKBi8tCyzGOanJTbXC5t4dspSovX3+ABfmwKWUYllYzmiQNFUadpb3qo+MLA3jFx5IwBesjneN6dD5o3w==}
@ -333,7 +328,6 @@ packages:
'@algolia/client-common': 4.10.5 '@algolia/client-common': 4.10.5
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
'@algolia/transporter': 4.10.5 '@algolia/transporter': 4.10.5
dev: true
/@algolia/client-search/4.10.5: /@algolia/client-search/4.10.5:
resolution: {integrity: sha512-1eQFMz9uodrc5OM+9HeT+hHcfR1E1AsgFWXwyJ9Q3xejA2c1c4eObGgOgC9ZoshuHHdptaTN1m3rexqAxXRDBg==} resolution: {integrity: sha512-1eQFMz9uodrc5OM+9HeT+hHcfR1E1AsgFWXwyJ9Q3xejA2c1c4eObGgOgC9ZoshuHHdptaTN1m3rexqAxXRDBg==}
@ -341,33 +335,27 @@ packages:
'@algolia/client-common': 4.10.5 '@algolia/client-common': 4.10.5
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
'@algolia/transporter': 4.10.5 '@algolia/transporter': 4.10.5
dev: true
/@algolia/logger-common/4.10.5: /@algolia/logger-common/4.10.5:
resolution: {integrity: sha512-gRJo9zt1UYP4k3woEmZm4iuEBIQd/FrArIsjzsL/b+ihNoOqIxZKTSuGFU4UUZOEhvmxDReiA4gzvQXG+TMTmA==} resolution: {integrity: sha512-gRJo9zt1UYP4k3woEmZm4iuEBIQd/FrArIsjzsL/b+ihNoOqIxZKTSuGFU4UUZOEhvmxDReiA4gzvQXG+TMTmA==}
dev: true
/@algolia/logger-console/4.10.5: /@algolia/logger-console/4.10.5:
resolution: {integrity: sha512-4WfIbn4253EDU12u9UiYvz+QTvAXDv39mKNg9xSoMCjKE5szcQxfcSczw2byc6pYhahOJ9PmxPBfs1doqsdTKQ==} resolution: {integrity: sha512-4WfIbn4253EDU12u9UiYvz+QTvAXDv39mKNg9xSoMCjKE5szcQxfcSczw2byc6pYhahOJ9PmxPBfs1doqsdTKQ==}
dependencies: dependencies:
'@algolia/logger-common': 4.10.5 '@algolia/logger-common': 4.10.5
dev: true
/@algolia/requester-browser-xhr/4.10.5: /@algolia/requester-browser-xhr/4.10.5:
resolution: {integrity: sha512-53/MURQEqtK+bGdfq4ITSPwTh5hnADU99qzvpAINGQveUFNSFGERipJxHjTJjIrjFz3vxj5kKwjtxDnU6ygO9g==} resolution: {integrity: sha512-53/MURQEqtK+bGdfq4ITSPwTh5hnADU99qzvpAINGQveUFNSFGERipJxHjTJjIrjFz3vxj5kKwjtxDnU6ygO9g==}
dependencies: dependencies:
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
dev: true
/@algolia/requester-common/4.10.5: /@algolia/requester-common/4.10.5:
resolution: {integrity: sha512-UkVa1Oyuj6NPiAEt5ZvrbVopEv1m/mKqjs40KLB+dvfZnNcj+9Fry4Oxnt15HMy/HLORXsx4UwcthAvBuOXE9Q==} resolution: {integrity: sha512-UkVa1Oyuj6NPiAEt5ZvrbVopEv1m/mKqjs40KLB+dvfZnNcj+9Fry4Oxnt15HMy/HLORXsx4UwcthAvBuOXE9Q==}
dev: true
/@algolia/requester-node-http/4.10.5: /@algolia/requester-node-http/4.10.5:
resolution: {integrity: sha512-aNEKVKXL4fiiC+bS7yJwAHdxln81ieBwY3tsMCtM4zF9f5KwCzY2OtN4WKEZa5AAADVcghSAUdyjs4AcGUlO5w==} resolution: {integrity: sha512-aNEKVKXL4fiiC+bS7yJwAHdxln81ieBwY3tsMCtM4zF9f5KwCzY2OtN4WKEZa5AAADVcghSAUdyjs4AcGUlO5w==}
dependencies: dependencies:
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
dev: true
/@algolia/transporter/4.10.5: /@algolia/transporter/4.10.5:
resolution: {integrity: sha512-F8DLkmIlvCoMwSCZA3FKHtmdjH3o5clbt0pi2ktFStVNpC6ZDmY307HcK619bKP5xW6h8sVJhcvrLB775D2cyA==} resolution: {integrity: sha512-F8DLkmIlvCoMwSCZA3FKHtmdjH3o5clbt0pi2ktFStVNpC6ZDmY307HcK619bKP5xW6h8sVJhcvrLB775D2cyA==}
@ -375,7 +363,6 @@ packages:
'@algolia/cache-common': 4.10.5 '@algolia/cache-common': 4.10.5
'@algolia/logger-common': 4.10.5 '@algolia/logger-common': 4.10.5
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
dev: true
/@antfu/utils/0.3.0: /@antfu/utils/0.3.0:
resolution: {integrity: sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA==} resolution: {integrity: sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA==}
@ -955,7 +942,6 @@ packages:
/@docsearch/css/3.0.0-alpha.42: /@docsearch/css/3.0.0-alpha.42:
resolution: {integrity: sha512-AGwI2AXUacYhVOHmYnsXoYDJKO6Ued2W+QO80GERbMLhC7GH5tfvtW5REs/s7jSdcU3vzFoxT8iPDBCh/PkrlQ==} resolution: {integrity: sha512-AGwI2AXUacYhVOHmYnsXoYDJKO6Ued2W+QO80GERbMLhC7GH5tfvtW5REs/s7jSdcU3vzFoxT8iPDBCh/PkrlQ==}
dev: true
/@docsearch/js/3.0.0-alpha.42: /@docsearch/js/3.0.0-alpha.42:
resolution: {integrity: sha512-8rxxsvFKS5GzDX2MYMETeib4EOwAkoxVUHFP5R4tSENXojhuCEy3np+k3Q0c9WPT+MUmWLxKJab5jyl0jmaeBQ==} resolution: {integrity: sha512-8rxxsvFKS5GzDX2MYMETeib4EOwAkoxVUHFP5R4tSENXojhuCEy3np+k3Q0c9WPT+MUmWLxKJab5jyl0jmaeBQ==}
@ -967,7 +953,6 @@ packages:
- '@types/react' - '@types/react'
- react - react
- react-dom - react-dom
dev: true
/@docsearch/react/3.0.0-alpha.42: /@docsearch/react/3.0.0-alpha.42:
resolution: {integrity: sha512-1aOslZJDxwUUcm2QRNmlEePUgL8P5fOAeFdOLDMctHQkV2iTja9/rKVbkP8FZbIUnZxuuCCn8ErLrjD/oXWOag==} resolution: {integrity: sha512-1aOslZJDxwUUcm2QRNmlEePUgL8P5fOAeFdOLDMctHQkV2iTja9/rKVbkP8FZbIUnZxuuCCn8ErLrjD/oXWOag==}
@ -982,7 +967,6 @@ packages:
algoliasearch: 4.10.5 algoliasearch: 4.10.5
transitivePeerDependencies: transitivePeerDependencies:
- '@algolia/client-search' - '@algolia/client-search'
dev: true
/@element-plus/icons-vue/0.2.4_vue@3.2.26: /@element-plus/icons-vue/0.2.4_vue@3.2.26:
resolution: {integrity: sha512-RsJNyL58rwxtsjeMy34o8txkL6UlME1stWsUlRpTac6UE9Bx9gdJvnDXbIKhOJqBLX17fBjmposdrn6VTqim2w==} resolution: {integrity: sha512-RsJNyL58rwxtsjeMy34o8txkL6UlME1stWsUlRpTac6UE9Bx9gdJvnDXbIKhOJqBLX17fBjmposdrn6VTqim2w==}
@ -2421,7 +2405,6 @@ packages:
'@algolia/requester-common': 4.10.5 '@algolia/requester-common': 4.10.5
'@algolia/requester-node-http': 4.10.5 '@algolia/requester-node-http': 4.10.5
'@algolia/transporter': 4.10.5 '@algolia/transporter': 4.10.5
dev: true
/ansi-align/3.0.1: /ansi-align/3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
@ -8327,7 +8310,6 @@ packages:
/preact/10.5.14: /preact/10.5.14:
resolution: {integrity: sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==} resolution: {integrity: sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==}
dev: true
/prelude-ls/1.1.2: /prelude-ls/1.1.2:
resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=}