├── .nvmrc ├── .npmrc ├── packages ├── components │ ├── index.ts │ ├── icon │ │ ├── index.ts │ │ └── src │ │ │ ├── icon.ts │ │ │ └── icon.vue │ └── package.json ├── theme-chalk │ ├── src │ │ ├── index.scss │ │ ├── fonts │ │ │ ├── iconfont.ttf │ │ │ ├── iconfont.woff │ │ │ └── iconfont.woff2 │ │ ├── mixins │ │ │ ├── mixins.scss │ │ │ └── config.scss │ │ └── icon.scss │ ├── package.json │ └── gulpfile.ts ├── utils │ ├── index.ts │ ├── gulpfile.ts │ ├── package.json │ ├── with-install.ts │ └── with-name.ts └── tg-ui │ ├── package.json │ └── index.ts ├── docs ├── .gitignore ├── src │ ├── public │ │ ├── logo.png │ │ └── favicon.ico │ ├── components │ │ ├── index.md │ │ ├── example.md │ │ ├── count-to.md │ │ ├── watermark.md │ │ ├── cropper.md │ │ └── excel.md │ ├── index.md │ └── guide │ │ ├── component.md │ │ └── index.md ├── netlify.toml ├── .vitepress │ ├── theme │ │ ├── index.ts │ │ ├── styles │ │ │ └── index.css │ │ └── components │ │ │ └── Button.vue │ ├── components.d.ts │ ├── plugins │ │ └── navbar.ts │ └── config.ts ├── .editorconfig ├── env.d.ts ├── tsconfig.json ├── package.json ├── README.md ├── LICENSE └── pnpm-lock.yaml ├── .eslintrc.json ├── .markdownlint.json ├── internal ├── plop │ ├── constants │ │ └── index.js │ ├── component │ │ ├── hbs │ │ │ ├── less.hbs │ │ │ ├── exports.hbs │ │ │ ├── vue.hbs │ │ │ └── ts.hbs │ │ └── config.js │ ├── package.json │ └── utils │ │ └── index.js ├── build │ ├── utils │ │ ├── index.ts │ │ ├── gulp.ts │ │ ├── pkg.ts │ │ └── process.ts │ ├── tasks │ │ ├── index.ts │ │ ├── utils.ts │ │ ├── gen-types.ts │ │ ├── full-component.ts │ │ └── component.ts │ ├── config │ │ ├── constants.ts │ │ ├── paths.ts │ │ └── bundle.ts │ └── gulpfile.ts └── build2 │ ├── utils │ ├── index.ts │ ├── pkg.ts │ ├── gulp.ts │ └── process.ts │ ├── config │ ├── constants.ts │ ├── paths.ts │ └── bundle.ts │ ├── tasks │ ├── index.ts │ ├── utils.ts │ ├── gen-entry-types.ts │ ├── component.ts │ ├── full-component.ts │ └── gen-types.ts │ ├── tsconfig.json │ ├── package.json │ └── gulpfile.ts ├── examples ├── .eslintrc.json ├── public │ └── favicon.ico ├── src │ ├── assets │ │ └── logo.png │ ├── main.ts │ ├── constants │ │ └── index.ts │ ├── App.vue │ └── components │ │ └── HelloWorld.vue ├── vite.config.ts ├── index.html └── package.json ├── .husky ├── pre-commit └── commit-msg ├── commitlint.config.js ├── .eslintignore ├── pnpm-workspace.yaml ├── .gitattributes ├── .npmignore ├── .editorConfig ├── typings └── vue-shim.d.ts ├── .gitpod.yml ├── plopfile.js ├── .gitignore ├── README.md ├── LICENSE ├── .vscode └── extensions.json ├── tsconfig.json └── package.json /.nvmrc: -------------------------------------------------------------------------------- 1 | v16 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist = true 2 | -------------------------------------------------------------------------------- /packages/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './icon' 2 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/index.scss: -------------------------------------------------------------------------------- 1 | @use 'icon.scss'; 2 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | components.d.ts 4 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@zgsgs" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD033": false, 3 | "MD013": false 4 | } 5 | -------------------------------------------------------------------------------- /internal/plop/constants/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | PREFIX: 'tg-', 3 | } 4 | -------------------------------------------------------------------------------- /examples/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-console": "off" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npm run lint:fix 5 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { extends: ['@commitlint/config-conventional'] } 2 | -------------------------------------------------------------------------------- /packages/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './with-install' 2 | export * from './with-name' 3 | -------------------------------------------------------------------------------- /docs/src/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/docs/src/public/logo.png -------------------------------------------------------------------------------- /internal/plop/component/hbs/less.hbs: -------------------------------------------------------------------------------- 1 | .{{prefixName}} { 2 | 3 | } 4 | 5 | .{{name}} { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /docs/src/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/docs/src/public/favicon.ico -------------------------------------------------------------------------------- /examples/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/examples/public/favicon.ico -------------------------------------------------------------------------------- /examples/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/examples/src/assets/logo.png -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx --no-install commitlint --edit $1 5 | -------------------------------------------------------------------------------- /internal/build/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './gulp' 2 | export * from './pkg' 3 | export * from './process' 4 | -------------------------------------------------------------------------------- /internal/build2/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './process' 2 | export * from './gulp' 3 | export * from './pkg' 4 | -------------------------------------------------------------------------------- /docs/src/components/index.md: -------------------------------------------------------------------------------- 1 | # 组件 2 | 3 | `src/components` 下的组件没有进行全局注册,也没有通过 `unplugins-vue-components` 自动导入,使用时需要自己手动导入。 4 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/packages/theme-chalk/src/fonts/iconfont.ttf -------------------------------------------------------------------------------- /packages/theme-chalk/src/fonts/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/packages/theme-chalk/src/fonts/iconfont.woff -------------------------------------------------------------------------------- /packages/theme-chalk/src/fonts/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/happy-vue/tg-ui/HEAD/packages/theme-chalk/src/fonts/iconfont.woff2 -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | pnpm-lock.yaml 4 | CHANGELOG.en-US.md 5 | !.* 6 | docs/components.d.ts 7 | coverage 8 | ssr-testing/cases/* -------------------------------------------------------------------------------- /internal/build/tasks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './component' 2 | export * from './full-component' 3 | export * from './gen-types' 4 | export * from './utils' 5 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/** # 存放编写的组件库 3 | - internal/* # 构建配置包 4 | - examples # 应用案例 5 | - docs # 项目文档 6 | - plop # 构建脚手架 7 | -------------------------------------------------------------------------------- /internal/build/config/constants.ts: -------------------------------------------------------------------------------- 1 | export const PKG_NAME = 'tg-ui' 2 | 3 | export const PKG_PREFIX = `@${PKG_NAME}` 4 | 5 | export const VERSION = '0.0.0-dev.0' 6 | -------------------------------------------------------------------------------- /internal/build2/config/constants.ts: -------------------------------------------------------------------------------- 1 | export const PKG_NAME = 'tg-ui' 2 | 3 | export const PKG_PREFIX = `@${PKG_NAME}` 4 | 5 | export const VERSION = '0.0.0-dev.0' 6 | -------------------------------------------------------------------------------- /internal/build2/tasks/index.ts: -------------------------------------------------------------------------------- 1 | // 任务执行器 gulp 任务名 就会执行对应的任务 2 | export * from './component' 3 | export * from './full-component' 4 | export * from './gen-types' 5 | export * from './utils' 6 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/mixins/mixins.scss: -------------------------------------------------------------------------------- 1 | // 声明公共的sass方法 2 | 3 | /* 4 | * 引入config 5 | */ 6 | @use 'config' as *; 7 | 8 | /* 9 | * 将config暴露给全局使用 10 | */ 11 | @forward 'config'; 12 | -------------------------------------------------------------------------------- /packages/utils/gulpfile.ts: -------------------------------------------------------------------------------- 1 | // 打包工具方法 2 | // import { buildUtils } from '@tg-ui/build/tasks' 3 | import { buildUtils } from '../../internal/build/tasks' 4 | 5 | export default buildUtils(__dirname, 'utils') 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.ts linguist-detectable=false 3 | *.css linguist-detectable=false 4 | *.scss linguist-detectable=false 5 | *.js linguist-detectable=true 6 | *.vue linguist-detectable=true 7 | -------------------------------------------------------------------------------- /packages/components/icon/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@tg-ui/utils/with-install' 2 | import Icon from './src/icon.vue' 3 | 4 | const TgIcon = withInstall(Icon) 5 | 6 | export { TgIcon } 7 | export default TgIcon 8 | -------------------------------------------------------------------------------- /examples/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import TgIcon from '@tg-ui/components/icon' 3 | import App from './App.vue' 4 | import '@tg-ui/theme-chalk/src/index.scss' 5 | 6 | const app = createApp(App) 7 | app.use(TgIcon) 8 | app.mount('#app') 9 | -------------------------------------------------------------------------------- /docs/netlify.toml: -------------------------------------------------------------------------------- 1 | [build.environment] 2 | # bypass npm auto install 3 | NPM_FLAGS = "--version" 4 | NODE_VERSION = "16" 5 | 6 | [build] 7 | publish = ".vitepress/dist" 8 | command = "npx pnpm i --store=node_modules/.pnpm-store && npx pnpm run build" 9 | -------------------------------------------------------------------------------- /packages/components/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/components", 3 | "version": "1.0.0", 4 | "main": "index.ts", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "author": "", 9 | "license": "ISC" 10 | } 11 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/mixins/config.scss: -------------------------------------------------------------------------------- 1 | // 命名空间 2 | $namespace: 'tg'; 3 | 4 | /** 5 | * 命名规范 BEM规范 6 | 7 |
8 |
9 |
10 |
11 | 12 | */ 13 | -------------------------------------------------------------------------------- /packages/utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/utils", 3 | "version": "1.0.0", 4 | "license": "ISC", 5 | "author": "", 6 | "main": "index.js", 7 | "scripts": { 8 | "build": "gulp --require sucrase/register/ts -f ./gulpfile.ts" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/index.ts: -------------------------------------------------------------------------------- 1 | import { h } from 'vue' 2 | import { VPTheme } from '@vue/theme' 3 | 4 | import './styles/index.css' 5 | 6 | export default Object.assign({}, VPTheme, { 7 | Layout: () => { 8 | return h(VPTheme.Layout, null, {}) 9 | } 10 | }) 11 | -------------------------------------------------------------------------------- /packages/theme-chalk/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/theme-chalk", 3 | "version": "1.0.0", 4 | "license": "ISC", 5 | "author": "", 6 | "main": "index.js", 7 | "scripts": { 8 | "build": "gulp --require sucrase/register/ts -f ./gulpfile.ts" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /docs/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_size = 2 6 | indent_style = space 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | insert_final_newline = false 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /internal/plop/component/hbs/exports.hbs: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@tg-ui/utils/with-install'; 2 | import {{pascalName}} from './src/{{name}}.vue'; 3 | 4 | const {{pascalPrefixName}} = withInstall({{pascalName}}); 5 | 6 | export { {{pascalPrefixName}} }; 7 | export default {{pascalPrefixName}}; 8 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # 忽略目录 2 | .idea 3 | .vscode 4 | build/ 5 | docs/ 6 | examples/ 7 | packages/ 8 | public/ 9 | node_modules/ 10 | typings/ 11 | 12 | # 忽略指定文件 13 | babel.config.js 14 | tsconfig.json 15 | tslint.json 16 | vue.config.js 17 | .gitignore 18 | .browserslistrc 19 | *.map 20 | -------------------------------------------------------------------------------- /examples/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [vue()], 7 | css: { 8 | modules: { 9 | localsConvention: 'camelCase', 10 | }, 11 | }, 12 | }) 13 | -------------------------------------------------------------------------------- /.editorConfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*.{js,jsx,ts,tsx,vue}] 5 | charset = "utf-8" 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | quote_type = single 12 | max_line_length = 100 13 | -------------------------------------------------------------------------------- /docs/src/components/example.md: -------------------------------------------------------------------------------- 1 | # ExampleTemplate 2 | 3 | 这是一个简单的示例模版,不一定要按照这个格式来编写。也欢迎你提出更好的模版示例。 4 | 5 | ## Example 6 | 7 | 组件相关案例。 8 | 9 | ## Types 10 | 11 | 组件相关类型。 12 | 13 | ## Function 14 | 15 | 组件提供相关方法。 16 | 17 | ## Events 18 | 19 | 组件相关事件。 20 | 21 | ## 贡献者 22 | 23 | - [zgsgs](https://github.com/zgsgs) 24 | -------------------------------------------------------------------------------- /typings/vue-shim.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import type { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /packages/components/icon/src/icon.ts: -------------------------------------------------------------------------------- 1 | // 放置组件的props和一些公共的方法 2 | import type { ExtractPropTypes } from 'vue' 3 | // as const,会让对象的每个属性变成只读(readonly) 4 | export const iconProps = { 5 | size: { 6 | type: Number, 7 | }, 8 | color: { 9 | type: String, 10 | }, 11 | } 12 | 13 | export type IconProps = ExtractPropTypes 14 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | # This configuration file was automatically generated by Gitpod. 2 | # Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file) 3 | # and commit this file to your remote git repository to share the goodness with others. 4 | 5 | tasks: 6 | - init: npm install && npm run build 7 | command: npm run dev 8 | 9 | 10 | -------------------------------------------------------------------------------- /examples/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Lin ZeFan 3 | * @Date: 2022-04-09 19:53:29 4 | * @LastEditTime : 2022-05-04 13:48:36 5 | * @LastEditors : Please set LastEditors 6 | * @Description: 7 | * @FilePath : \tg-ui\examples\src\constants\index.ts 8 | * 9 | */ 10 | export const PREFIX = 'tg-' 11 | 12 | export default { 13 | PREFIX, 14 | } 15 | -------------------------------------------------------------------------------- /internal/plop/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/plop", 3 | "version": "0.0.1", 4 | "private": true, 5 | "description": "", 6 | "keywords": [], 7 | "license": "ISC", 8 | "author": "", 9 | "scripts": { 10 | "component": "plop component", 11 | "api": "plop api" 12 | }, 13 | "devDependencies": { 14 | "plop": "^3.0.5" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/.vitepress/components.d.ts: -------------------------------------------------------------------------------- 1 | // generated by unplugin-vue-components 2 | // We suggest you to commit this file into source control 3 | // Read more: https://github.com/vuejs/vue-next/pull/3399 4 | 5 | declare module 'vue' { 6 | export interface GlobalComponents { 7 | Button: typeof import('./theme/components/Button.vue')['default'] 8 | } 9 | } 10 | 11 | export { } 12 | -------------------------------------------------------------------------------- /packages/tg-ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tg-ui", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "lib/index.js", 6 | "module": "es/index.js", 7 | "output": { 8 | "exports": "named" 9 | }, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "ISC" 16 | } 17 | -------------------------------------------------------------------------------- /examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Vite App 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /plopfile.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Lin ZeFan 3 | * @Date: 2022-04-09 17:57:14 4 | * @LastEditTime : 2022-04-22 23:22:16 5 | * @LastEditors : Please set LastEditors 6 | * @Description: plop模板 7 | * @FilePath : \tg-ui\plopfile.js 8 | * 9 | */ 10 | 11 | const setComponent = require('./packages/plop/component/config'); 12 | 13 | module.exports = function (plop) { 14 | setComponent(plop); 15 | }; 16 | -------------------------------------------------------------------------------- /examples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/examples", 3 | "private": true, 4 | "description": "", 5 | "scripts": { 6 | "dev": "vite" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": {}, 12 | "devDependencies": { 13 | "vue": "^3.2.25", 14 | "@vitejs/plugin-vue": "^2.3.0", 15 | "typescript": "^4.5.4", 16 | "vite": "^2.9.0", 17 | "vue-tsc": "^0.29.8" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /internal/build2/utils/pkg.ts: -------------------------------------------------------------------------------- 1 | import { PKG_PREFIX } from '../config/constants' 2 | import { bundleConfig } from '../config/bundle' 3 | import type { Module } from '../config/bundle' 4 | 5 | // 重写打包后的包 处理路径 @tg-ui/es => tg-ui/es 6 | export const pathRewriter = (module: Module) => { 7 | const { bundle: { path } } = bundleConfig[module] 8 | return (id: string) => { 9 | id = id.replaceAll(`${PKG_PREFIX}/`, `${path}/`) 10 | return id 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /internal/build/utils/gulp.ts: -------------------------------------------------------------------------------- 1 | import type { TaskFunction } from 'gulp' 2 | import { buildRoot } from '../config/paths' 3 | import { run } from './process' 4 | 5 | // 携带任务名称 6 | export const withTaskName = (name: string, fn: T) => 7 | Object.assign(fn, { displayName: name }) 8 | 9 | // 执行任务 10 | export const runTask = (name: string) => 11 | withTaskName(`shellTask: ${name}`, () => { 12 | run(`pnpm run build ${name}`, buildRoot) 13 | }) 14 | 15 | -------------------------------------------------------------------------------- /internal/build2/utils/gulp.ts: -------------------------------------------------------------------------------- 1 | import type { TaskFunction } from 'gulp' 2 | import { buildRoot } from '../config/paths' 3 | import { run } from './process' 4 | 5 | // 携带任务名称 6 | export const withTaskName = (name: string, fn: T) => 7 | Object.assign(fn, { displayName: name }) 8 | 9 | // 执行任务 10 | export const runTask = (name: string) => 11 | withTaskName(`shellTask: ${name}`, () => { 12 | run(`pnpm run build ${name}`, buildRoot) 13 | }) 14 | 15 | -------------------------------------------------------------------------------- /docs/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import type { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | 10 | declare module '@vue/theme/config' { 11 | import type { UserConfig } from 'vitepress' 12 | const config: () => Promise 13 | export default config 14 | } 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | dist-ssr 11 | *.local 12 | 13 | # Editor directories and files 14 | .vscode/* 15 | !.vscode/extensions.json 16 | .idea 17 | .DS_Store 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | 24 | # Package Manager 25 | node_modules 26 | .pnpm-debug.log* 27 | 28 | # Bundle 29 | dist 30 | coverage 31 | 32 | # local env files 33 | *.local 34 | cypress/screenshots/* 35 | cypress/videos/* 36 | tmp 37 | -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "target": "esnext", 5 | "module": "esnext", 6 | "jsx": "preserve", 7 | "moduleResolution": "node", 8 | "esModuleInterop": true, 9 | "resolveJsonModule": true, 10 | "allowJs": true, 11 | "strict": true, 12 | "baseUrl": ".", 13 | "paths": { 14 | "/@theme/*": [ 15 | ".vitepress/theme/*" 16 | ] 17 | } 18 | }, 19 | "include": [ 20 | "env.d.ts", 21 | "src/**/*", 22 | ".vitepress/**/*" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /internal/plop/component/hbs/vue.hbs: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/styles/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --vt-c-bg-code: #fff5f5; 3 | --vt-c-text-code: #ff502c; 4 | } 5 | 6 | .dark { 7 | --vt-c-bg-code: var(--vt-c-black-mute); 8 | --vt-c-text-code: var(--vt-c-text-dark-code); 9 | } 10 | 11 | /* inline code */ 12 | .vt-doc :not(pre) > code { 13 | background-color: var(--vt-c-bg-code); 14 | color: var(--vt-c-text-code); 15 | } 16 | 17 | .VPFooter { 18 | background-color: var(--vt-c-bg) !important; 19 | } 20 | 21 | .VPFooter .copyright { 22 | font-size: .9rem; 23 | color: var(--vt-c-text-light); 24 | opacity: 0.6; 25 | } 26 | 27 | .VPNavBarSearch { 28 | display: none !important; 29 | } 30 | -------------------------------------------------------------------------------- /packages/utils/with-install.ts: -------------------------------------------------------------------------------- 1 | // 只是导入类型不是导入App的值 2 | import type { App, Plugin } from 'vue' 3 | /** 4 | * 组件外部使用use时执行install,然后将组件注册为全局 5 | */ 6 | 7 | // 类型必须导出否则生成不了.d.ts文件 8 | export type SFCWithInstall = T & Plugin 9 | 10 | /** 11 | * 定义一个withInstall方法处理以下组件类型问题 12 | * @param comp 13 | */ 14 | export const withInstall = (comp: T) => { 15 | /** 16 | * 直接写comp.install = function(){} 的话会报错,因为comp下没有install方法 17 | * 所以从vue中引入Plugin类型,断言comp的类型为T&Plugin 18 | */ 19 | (comp as SFCWithInstall).install = function (app: App) { 20 | app.component((comp as any).name, comp) 21 | } 22 | return comp as SFCWithInstall 23 | } 24 | -------------------------------------------------------------------------------- /internal/plop/component/hbs/ts.hbs: -------------------------------------------------------------------------------- 1 | import { buildProps, definePropType } from '@tg-ui/utils' 2 | import type { ExtractPropTypes } from 'vue' 3 | import type {{pascalName}} from './{{name}}.vue' 4 | 5 | export const {{camelName}}Props = buildProps({ 6 | prop: { 7 | type: String, 8 | default: '', 9 | }, 10 | } as const) 11 | 12 | export type {{pascalName}}Props = ExtractPropTypes 13 | 14 | export const {{camelName}}Emits = { 15 | error: (evt: Event) => evt instanceof Event, 16 | } 17 | 18 | export type {{pascalName}}Emits = typeof {{camelName}}Emits 19 | 20 | export type {{pascalName}}Instance = InstanceType 21 | -------------------------------------------------------------------------------- /internal/build/utils/pkg.ts: -------------------------------------------------------------------------------- 1 | // import { PKG_PREFIX } from '../config/constants' 2 | // import { bundleConfig } from '../config/bundle' 3 | // import type { Module } from '../config/bundle' 4 | 5 | // // 重写打包后的包 处理路径 @tg-ui/es => tg-ui/es 6 | // export const pathRewriter = (module: Module) => { 7 | // const { bundle: { path } } = bundleConfig[module] 8 | // return (id: string) => { 9 | // id = id.replaceAll(`${PKG_PREFIX}/`, `${path}/`) 10 | // return id 11 | // } 12 | // } 13 | 14 | // 重写打包后的@tg-ui 路径 15 | export const pathRewriter = (format: string) => { 16 | return (id: string) => { 17 | id = id.replaceAll('@tg-ui', `tg-ui/${format}`) 18 | return id 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/tg-ui/index.ts: -------------------------------------------------------------------------------- 1 | // import { WIcon,WButton } from "@tg-ui/components"; 2 | import * as components from '@tg-ui/components' 3 | import type { App } from 'vue' 4 | 5 | // const components = [WIcon,WButton]; 6 | 7 | const install = (app: App) => { 8 | // 每个组件在写的时候都提供了install方法 9 | 10 | // 有的是组件,有的可能是指令 xxx.install = () => { app.directive() } 11 | // components.forEach((component) => app.use(component)); 12 | 13 | Object.entries(components).forEach(([name, component]) => { 14 | app.component(name, component) 15 | }) 16 | } 17 | 18 | // use: app.use(WPlus) 19 | export default { 20 | install, 21 | } 22 | 23 | // use: import { WIcon } from 'tg-ui 24 | export * from '@tg-ui/components' 25 | -------------------------------------------------------------------------------- /packages/components/icon/src/icon.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 29 | -------------------------------------------------------------------------------- /examples/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 25 | -------------------------------------------------------------------------------- /docs/src/index.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | 提供现成的开箱解决方案及丰富的示例,提高开发效率。 4 | 5 | ## 文档 6 | 7 | - 仓库地址 [tg-ui-docs](https://github.com/zgsgs/tg-ui-docs)。 8 | - 采用 [Vitepress](https://github.com/vuejs/vitepress) 构建的,依赖于 [@vue/theme](https://github.com/vuejs/theme)。 9 | - 如发现文档有误,欢迎提 PR 帮助我们改进。 10 | 11 | ## 本地运行项目 12 | 13 | 如需本地运行文档,请拉取代码到本地。 14 | 15 | ``` bash 16 | # 拉取代码 17 | git clone https://github.com/zgsgs/tg-ui 18 | 19 | # 安装依赖 20 | pnpm install 21 | 22 | # 运行项目 23 | pnpm run dev 24 | ``` 25 | 26 | ## 如何加入我们 27 | 28 | - 目前 [tg-ui](https://github.com/zgsgs/tg-ui) 正在火热更新中,欢迎您的参与,共同维护,逐步完善。 29 | - 如果你想加入我们,可以多提供一些好的建议或者提交 PR,我们会根据你的活跃度邀请你加入。 30 | - 你也可以添加微信:`wulian988` 了解更多。 31 | 32 | ## 贡献者 33 | 34 | - [zgsgs](https://github.com/zgsgs) 35 | 36 | ## LICENSE 37 | 38 | MIT, Copyright (c) 2021 zgsgs. 39 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/docs", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "vitepress dev", 8 | "build": "vitepress build", 9 | "serve": "vitepress serve" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/zgsgs/tg-ui.git" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/zgsgs/tg-ui/issues" 20 | }, 21 | "homepage": "https://github.com/zgsgs/tg-ui#readme", 22 | "devDependencies": { 23 | "@types/node": "^17.0.23", 24 | "@vue/theme": "^1.0.1", 25 | "unplugin-vue-components": "^0.18.5", 26 | "vite": "^2.9.1", 27 | "vitepress": "^0.22.3", 28 | "vue": "^3.2.31" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/src/guide/component.md: -------------------------------------------------------------------------------- 1 | # 组件开发规范 2 | 3 | [src/components](https://github.com/zgsgs/zgsgs/packges/components) 下新增组件需遵从以下规范。 4 | 5 | ## 目录结构 6 | 7 | ```bash 8 | ├── components 9 | │ ├── example 10 | │ │ ├── src 11 | │ │ │ ├── example.less 12 | │ │ │ ├── example.ts 13 | │ │ │ ├── example.vue 14 | │ │ │ ├── example-other.ts 15 | │ │ └── index.ts 16 | ``` 17 | 18 | ## `index.ts` 作为统一出口 19 | 20 | ``` ts 21 | // Example/index.ts 22 | import { withInstall } from '@tg-ui/utils/with-install' 23 | import Example from './src/example.vue' 24 | 25 | const TgExample = withInstall(Example) 26 | 27 | export { TgExample } 28 | export default TgExample 29 | 30 | ``` 31 | 32 | ## 组件示例、文档 33 | 34 | 当你完成了一个组件开发,在提交 PR 之前,请更新 Demo 示例,以及编写相关文档。 35 | 36 | 文档仓库地址:[tg-ui](https://github.com/zgsgs/tg-ui) 37 | 38 | 文档编写模版:[Example](../components/example) 39 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/components/Button.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 40 | -------------------------------------------------------------------------------- /docs/src/guide/index.md: -------------------------------------------------------------------------------- 1 | # 贡献指南 2 | 3 | 你好!很高兴你有兴趣为 [tg-ui](https://github.com/zgsgs/tg-ui) 做贡献。在提交您的贡献之前,请务必花点时间阅读以下指南: 4 | 5 | [[toc]] 6 | 7 | ## 开发设置 8 | 9 | 你将需要 [Node.js](https://nodejs.org) 版本 16+ 和 [pnpm](https://github.com/pnpm/pnpm)。 10 | 11 | 我们还建议安装 [ni](https://github.com/antfu/ni) 以帮助使用不同的包管理器在 repos 之间切换。`ni` 还提供了方便的 `nr` 命令,可以更轻松地运行 npm 脚本。 12 | 13 | ## 任务状态 14 | 15 | - issue `Assignee` 有指向时,表示任务已被领取; 16 | - issue 下有人留言要去做这个功能,表示任务已被领取; 17 | - 否则,视为未被领取。 18 | 19 | ## 领取任务 20 | 21 | - 项目成员:对应 issue `Assignee` 指向自己; 22 | - 非项目成员:对应任务 issue 下留言,项目成员看见会为你修改 `Assignee` 指向。 23 | 24 | ## 提交 PR 指南 25 | 26 | - 如果添加新功能: 27 | - 在 PR 描述中添加 `close #1`。 28 | - 如果修复错误: 29 | - 如果您正在解决一个特殊问题,请在您的 PR 标题中添加(#xxxx 问题 ID)以获得更好的发布日志,例如 `update entities encoding/decoding (fix #1)`。 30 | - 在 PR 中提供错误的详细描述。 31 | - 在 PR 上进行多个小提交是可以的 - GitHub 可以在合并之前自动压缩它们。 32 | 33 | ## 最后 34 | 35 | 祝,编码快乐,收获满满,玩的愉快... 36 | -------------------------------------------------------------------------------- /internal/build2/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "compilerOptions": { 4 | "module": "ESNext", // 打包模块类型ESNext 5 | "declaration": false, // 默认不要声明文件 6 | "noImplicitAny": false, // 支持类型不标注可以默认any 7 | "removeComments": true, // 删除注释 8 | "moduleResolution": "node", // 按照node模块来解析 9 | "esModuleInterop": true, // 支持es6,commonjs模块 10 | "jsx": "preserve", // jsx 不转 11 | "noLib": false, // 不处理类库 12 | "target": "es6", // 遵循es6版本 13 | "sourceMap": true, 14 | "lib": [ 15 | // 编译时用的库 16 | "ESNext", 17 | "DOM" 18 | ], 19 | "allowSyntheticDefaultImports": true, // 允许没有导出的模块中导入 20 | "experimentalDecorators": true, // 装饰器语法 21 | "forceConsistentCasingInFileNames": true, // 强制区分大小写 22 | "resolveJsonModule": true, // 解析json模块 23 | "strict": true, // 是否启动严格模式 24 | "skipLibCheck": true // 跳过类库检测 25 | }, 26 | "include": [ 27 | "**/*" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /packages/utils/with-name.ts: -------------------------------------------------------------------------------- 1 | export function camelize(event: string) { 2 | /** replace的第二个参数为函数 3 | * 参数一:正则匹配的结,即-x 4 | * 参数二:为\w 5 | */ 6 | // replace的函数回调有个特点,正则里面只要有()包裹的,判断为分组($1),都会单独返会一个结果,所以这里参数2是-后的字母,如果(\w)换成\w,那参数2会是匹配结果的下标 7 | return event.replace(/-(\w)/g, (_, str: string) => { 8 | return str.toUpperCase() 9 | }) 10 | } 11 | /** 12 | * @description: 转大驼峰 取出首字母,转换为大写 + 切割掉首字母 13 | * @access: public 14 | * @param {string} event 15 | * @return {*} 16 | */ 17 | export function capitalize(event: string) { 18 | return event ? event.charAt(0).toLocaleUpperCase() + event.slice(1) : '' 19 | } 20 | 21 | /** 22 | * @description: 校验kebab-case 23 | * @access: public 24 | * @param {string} event 25 | * @return {*} 26 | */ 27 | export function validateKebabCase(event: string) { 28 | if (!event || event.trim() === '') 29 | return '组件名称不能为空' 30 | 31 | if (/[A-Z]/.test(event)) 32 | return '组件名称请遵守 kebab-case' 33 | 34 | return true 35 | } 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tg-ui 2 | 3 | `tg-ui` 是基于 Vue 3 + Typescript + Vite 技术开发的前端 Vue 组件库。该项目采用`pnpm+monorepo`进行包管理,使用`gulp`控制打包流程,`rollup`进行打包。 4 | 5 | ## Demo 6 | 7 | ## 目标 8 | 9 | - 开发出完备的组件库 10 | - 提供易用好用,易维护,易拓展的调用方式 11 | - 抱团进步,一起学习,共同维护,相互 review,步步高升 12 | - 熟悉组件库开发,熟悉开源项目流程 13 | - 300start 14 | 15 | ## 参与贡献 16 | 17 | 使用 Issues 管理项目。 18 | [Issues](https://github.com/zgsgs/tg-ui/issues) 19 | 20 | ## 待完成需求列表 21 | 22 | [New feature](https://github.com/zgsgs/tg-ui/labels/feature) 23 | 24 | ## 任务是否被领取 25 | 26 | - 当 issue 存在 `Developer` 或格式为 `Developer:username` 的 `label`,既已被领取。 27 | - 否则,视为未被领取。 28 | 29 | ## 如何领取任务 30 | 31 | - 项目成员:对应 issue 添加 `label`,格式为:`Developer:username`。 32 | - 非项目成员:issue 留言,管理员会为你添加 `label` -> `Developer`。 33 | 34 | ## 参考项目汇总 35 | 36 | 拿到一个需求,没有灵感,不知道该怎么下手? 37 | 38 | 如果你遇到这样的问题,那么你可以[去这里](https://github.com/zgsgs/tg-ui/discussions/4)研究一下这些项目,寻找一些灵感~ 39 | 40 | ## 加入小组 41 | 42 | 项目初期暂时不增加社群维护成本,等做出一定成绩再吸纳更多优秀的同学参与。 43 | 44 | ## LICENSE 45 | 46 | MIT, Copyright (c) 2021 zgsgs. 47 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # tg-ui 2 | 3 | `tg-ui` 是基于 Vue 3 + Typescript + Vite 技术开发的前端 Vue 组件库。该项目采用`pnpm+monorepo`进行包管理,使用`gulp`控制打包流程,`rollup`进行打包。 4 | 5 | ## Demo 6 | 7 | ## 目标 8 | 9 | - 开发出完备的组件库 10 | - 提供易用好用,易维护,易拓展的调用方式 11 | - 抱团进步,一起学习,共同维护,相互 review,步步高升 12 | - 熟悉组件库开发,熟悉开源项目流程 13 | - 300start 14 | 15 | ## 参与贡献 16 | 17 | 使用 Issues 管理项目。 18 | [Issues](https://github.com/zgsgs/tg-ui/issues) 19 | 20 | ## 待完成需求列表 21 | 22 | [New feature](https://github.com/zgsgs/tg-ui/labels/feature) 23 | 24 | ## 任务是否被领取 25 | 26 | - 当 issue 存在 `Developer` 或格式为 `Developer:username` 的 `label`,既已被领取。 27 | - 否则,视为未被领取。 28 | 29 | ## 如何领取任务 30 | 31 | - 项目成员:对应 issue 添加 `label`,格式为:`Developer:username`。 32 | - 非项目成员:issue 留言,管理员会为你添加 `label` -> `Developer`。 33 | 34 | ## 参考项目汇总 35 | 36 | 拿到一个需求,没有灵感,不知道该怎么下手? 37 | 38 | 如果你遇到这样的问题,那么你可以[去这里](https://github.com/zgsgs/tg-ui/discussions/4)研究一下这些项目,寻找一些灵感~ 39 | 40 | ## 加入小组 41 | 42 | 项目初期暂时不增加社群维护成本,等做出一定成绩再吸纳更多优秀的同学参与。 43 | 44 | ## LICENSE 45 | 46 | MIT, Copyright (c) 2021 zgsgs. 47 | -------------------------------------------------------------------------------- /docs/.vitepress/plugins/navbar.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin } from 'vite' 2 | 3 | // Due to https://github.com/vuejs/theme/commit/842e4451fbf13925d1c67aa4274f86fc5a8510f7 4 | export function NavbarFix(): Plugin { 5 | return { 6 | name: 'navbar-fix', 7 | enforce: 'pre', 8 | transform(code, id) { 9 | if (id.includes('VPNavBarTitle.vue') && !id.endsWith('.css')) { 10 | return ` 11 | 17 | 18 | 40 | ` 41 | } 42 | }, 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 jason 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 jason 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /internal/build2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tg-ui/build", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "private": true, 6 | "description": "Internal build tools", 7 | "keywords": [], 8 | "license": "MIT", 9 | "author": "zgsgs", 10 | "main": "index.js", 11 | "scripts": { 12 | "build": "gulp --require sucrase/register/ts -f ./gulpfile.ts" 13 | }, 14 | "devDependencies": { 15 | "@rollup/plugin-commonjs": "^21.0.3", 16 | "@rollup/plugin-node-resolve": "^13.2.0", 17 | "@types/gulp": "^4.0.9", 18 | "@types/gulp-autoprefixer": "^0.0.33", 19 | "@types/gulp-clean-css": "^4.3.0", 20 | "@types/gulp-sass": "^5.0.0", 21 | "@types/sass": "^1.43.1", 22 | "@vue/compiler-sfc": "^3.2.32", 23 | "fast-glob": "^3.2.11", 24 | "gulp": "^4.0.2", 25 | "gulp-autoprefixer": "^8.0.0", 26 | "gulp-clean-css": "^4.3.0", 27 | "gulp-sass": "^5.1.0", 28 | "gulp-typescript": "^6.0.0-alpha.1", 29 | "rollup": "^2.70.1", 30 | "rollup-plugin-typescript2": "^0.31.2", 31 | "rollup-plugin-vue": "^6.0.0", 32 | "sucrase": "^3.20.3", 33 | "ts-morph": "^14.0.0", 34 | "typescript": "^4.5.4", 35 | "vue": "^3.2.25", 36 | "vue-tsc": "^0.29.8" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "github.github-vscode-theme", 4 | "emmanuelbeziat.vscode-great-icons", 5 | "redjue.git-commit-plugin", 6 | "github.vscode-pull-request-github", 7 | "formulahendry.auto-close-tag", 8 | "formulahendry.auto-complete-tag", 9 | "steoates.autoimport", 10 | "formulahendry.auto-rename-tag", 11 | "coenraads.bracket-pair-colorizer-2", 12 | "naumovs.color-highlight", 13 | "pranaygp.vscode-css-peek", 14 | "mikestead.dotenv", 15 | "editorconfig.editorconfig", 16 | "johnsoncodehk.volar", 17 | "dbaeumer.vscode-eslint", 18 | "mhutchie.git-graph", 19 | "eamodio.gitlens", 20 | "lokalise.i18n-ally", 21 | "afzalsayed96.icones", 22 | "antfu.iconify", 23 | "kisstkondoros.vscode-gutter-preview", 24 | "xabikos.javascriptsnippets", 25 | "whtouche.vscode-js-console-utils", 26 | "ritwickdey.liveserver", 27 | "yzhang.markdown-all-in-one", 28 | "jimdong.naive-ui-snippets", 29 | "christian-kohler.path-intellisense", 30 | "esbenp.prettier-vscode", 31 | "johnsoncodehk.vscode-typescript-vue-plugin", 32 | "dariofuzinato.vue-peek", 33 | "wscats.vue", 34 | "antfu.unocss" 35 | ], 36 | } 37 | -------------------------------------------------------------------------------- /examples/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 37 | 38 | 56 | -------------------------------------------------------------------------------- /internal/build2/gulpfile.ts: -------------------------------------------------------------------------------- 1 | // import { mkdir } from 'fs/promises' 2 | import { parallel, series } from 'gulp' 3 | import { genTypes } from './tasks/gen-types' 4 | import { run, runTask, withTaskName } from './utils' 5 | import { buildOutput, uiRoot } from './config/paths' 6 | import { genEntryTypes } from './tasks/gen-entry-types' 7 | 8 | // gulp 不打包只做代码转化 使用它做流程控制 9 | 10 | // 拷贝源码 11 | const copyPackage = () => async () => { 12 | await run(`cp ${uiRoot}/package.json ${buildOutput}/package.json`) 13 | } 14 | 15 | /** 16 | * 1. 打包样式 17 | * 2. 打包工具方法 18 | * 3. 打包所有组件 19 | * 4. 打包每个组件 20 | * 5. 生成一个组件库 21 | * 6. 发布组件 22 | */ 23 | export default series( 24 | withTaskName('clean', async () => { 25 | await run('rm -rf ./dist') // 删除dist目录 26 | }), 27 | // withTaskName('mkdir', () => mkdir(sdOutput, { recursive: true })), 28 | parallel( 29 | // 并行执行 packages 目录下的 build 脚本 30 | withTaskName('buildPackages', async () => { 31 | await run('pnpm run --filter ./packages --parallel build') 32 | }), 33 | runTask('buildFullComponent'), 34 | runTask('buildComponent'), 35 | ), 36 | parallel(genEntryTypes, copyPackage()), 37 | parallel(genTypes, copyPackage()), 38 | ) 39 | 40 | // 任务执行器 gulp 任务名 就会执行对应的任务 41 | export * from './tasks' 42 | -------------------------------------------------------------------------------- /internal/build/gulpfile.ts: -------------------------------------------------------------------------------- 1 | import { parallel, series } from 'gulp' 2 | import { genTypes } from './tasks' 3 | import { run, withTaskName } from './utils' 4 | import { buildOutput, uiRoot } from './config/paths' 5 | 6 | // gulp 不打包只做代码转化 使用它做流程控制 7 | 8 | // 拷贝源码 9 | const copySourceCode = () => async () => { 10 | await run(`cp ${uiRoot}/package.json ${buildOutput}/package.json`) 11 | } 12 | 13 | /** 14 | * 1. 打包样式 15 | * 2. 打包工具方法 16 | * 3. 打包所有组件 17 | * 4. 打包每个组件 18 | * 5. 生成一个组件库 19 | * 6. 发布组件 20 | */ 21 | export default series( 22 | withTaskName('clean', async () => { 23 | await run('rm -rf ./dist') // 删除dist目录 24 | }), 25 | parallel( 26 | // 并行执行packages目录下的build脚本 27 | withTaskName('buildPackages', async () => { 28 | await run('pnpm run --filter ./packages --parallel build') 29 | }), 30 | // 执行build命令时会调用rollup,给rollup传参数buildFullComponent,那么就会执行导出任务叫buildFullComponent 31 | // runTask('buildFullComponent'), 32 | withTaskName('buildFullComponent', async () => { 33 | await run('pnpm run build buildFullComponent') 34 | }), 35 | withTaskName('buildComponent', async () => { 36 | await run('pnpm run build buildComponent') 37 | }), 38 | ), 39 | parallel(genTypes, copySourceCode()), 40 | ) 41 | 42 | // 任务执行器 gulp 任务名 就会执行对应的任务 43 | export * from './tasks' 44 | -------------------------------------------------------------------------------- /docs/src/components/count-to.md: -------------------------------------------------------------------------------- 1 | # CountTo 2 | 3 | 数字动画组件。 4 | 5 | ## Example 6 | 7 | ``` vue 8 | 14 | 15 | 18 | ``` 19 | 20 | ## Props 21 | 22 | | 属性 | 类型 | 默认值 | 说明 | 23 | | ---------- | --------- | -------- | ----------- | 24 | | startVal | `number` | `0` | 起始值 | 25 | | endVal | `number` | `2022` | 结束值 | 26 | | duration | `number` | `1000` | 动画持续时间 | 27 | | autoplay | `boolean` | `true` | 自动执行 | 28 | | prefix | `string` | - | 前缀 | 29 | | suffix | `string` | - | 后缀 | 30 | | separator | `string` | `,` | 分隔符 | 31 | | color | `string` | - | 字体颜色 | 32 | | useEasing | `boolean` | `true` | 是否开启动画 | 33 | | transition | `string` | `linear` | 动画效果 | 34 | | decimals | `number` | `0` | 保留小数点位数 | 35 | 36 | ## Methods 37 | 38 | | 名称 | 回调参数 | 说明 | 39 | | ----- | ---------- | ------------ | 40 | | start | `()=>void` | 开始执行动画 | 41 | | reset | `()=>void` | 重置 | 42 | 43 | ## 贡献者 44 | 45 | - [zgsgs](https://github.com/zgsgs) 46 | -------------------------------------------------------------------------------- /internal/build/config/paths.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path' 2 | import { PKG_NAME } from './constants' 3 | 4 | /* 源文件 */ 5 | // 项目根目录 6 | export const projectRoot = resolve(__dirname, '..', '..', '..') 7 | // 包目录 8 | export const pkgRoot = resolve(projectRoot, 'packages') 9 | // 包/组件目录 10 | export const vueComponentRoot = resolve(pkgRoot, 'components') 11 | // 包/共享 12 | export const sharedRoot = resolve(pkgRoot, 'shared') 13 | // 包/生产库 14 | export const uiRoot = resolve(pkgRoot, PKG_NAME) 15 | // 构建脚本目录 16 | export const buildRoot = resolve(projectRoot, 'internal', 'build') 17 | 18 | /* output */ 19 | // 打包输出目录 20 | export const buildOutput = resolve(projectRoot, 'dist') 21 | // 输出UI目录 22 | export const uiOutput = resolve(buildOutput, PKG_NAME) 23 | // 组件导出文件类型输出目录 24 | export const uiTypeOutput = resolve(buildOutput, 'entry/types') 25 | // 类型输出目录 26 | export const typesOutput = resolve(buildOutput, 'types') 27 | // 组件类型输出目录 28 | export const componentTypeOutput = resolve(typesOutput, 'components') 29 | 30 | /* package.json位置 */ 31 | export const projPackage = resolve(projectRoot, 'package.json') 32 | export const vueComponentPackage = resolve(vueComponentRoot, 'package.json') 33 | export const uiPackage = resolve(uiRoot, 'package.json') 34 | export const sharedPackage = resolve(sharedRoot, 'package.json') 35 | 36 | /* tsconfig.json */ 37 | // 根目录的 ts 配置 38 | export const tsConfigRoot = resolve(projectRoot, 'tsconfig.json') 39 | -------------------------------------------------------------------------------- /internal/build2/config/paths.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path' 2 | import { PKG_NAME } from './constants' 3 | 4 | /* 源文件 */ 5 | // 项目根目录 6 | export const projectRoot = resolve(__dirname, '..', '..', '..', '..') 7 | // 包目录 8 | export const pkgRoot = resolve(projectRoot, 'packages') 9 | // 包/组件目录 10 | export const vueComponentRoot = resolve(pkgRoot, 'components') 11 | // 包/共享 12 | export const sharedRoot = resolve(pkgRoot, 'shared') 13 | // 包/生产库 14 | export const uiRoot = resolve(pkgRoot, PKG_NAME) 15 | // 构建脚本目录 16 | export const buildRoot = resolve(projectRoot, 'internal', 'build') 17 | 18 | /* output */ 19 | // 打包输出目录 20 | export const buildOutput = resolve(projectRoot, 'dist') 21 | // 输出UI目录 22 | export const uiOutput = resolve(buildOutput, PKG_NAME) 23 | // 组件导出文件类型输出目录 24 | export const uiTypeOutput = resolve(buildOutput, 'entry/types') 25 | // 类型输出目录 26 | export const typesOutput = resolve(buildOutput, 'types') 27 | // 组件类型输出目录 28 | export const componentTypeOutput = resolve(typesOutput, 'components') 29 | 30 | /* package.json位置 */ 31 | export const projPackage = resolve(projectRoot, 'package.json') 32 | export const vueComponentPackage = resolve(vueComponentRoot, 'package.json') 33 | export const uiPackage = resolve(uiRoot, 'package.json') 34 | export const sharedPackage = resolve(sharedRoot, 'package.json') 35 | 36 | /* tsconfig.json */ 37 | // 根目录的 ts 配置 38 | export const tsConfigRoot = resolve(projectRoot, 'tsconfig.json') 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "ESNext", // 打包模块类型ESNext 4 | "declaration": false, // 默认不要声明文件 5 | "noImplicitAny": false, // 支持类型不标注可以默认any 6 | "removeComments": true, // 删除注释 7 | "moduleResolution": "node", // 按照node模块来解析 8 | "esModuleInterop": true, // 支持es6,commonjs模块 9 | "jsx": "preserve", // jsx 不转 10 | "noLib": false, // 不处理类库 11 | "target": "es6", // 遵循es6版本 12 | "sourceMap": true, 13 | "lib": [ 14 | // 编译时用的库 15 | "ESNext", 16 | "DOM" 17 | ], 18 | "allowSyntheticDefaultImports": true, // 允许没有导出的模块中导入 19 | "experimentalDecorators": true, // 装饰器语法 20 | "forceConsistentCasingInFileNames": true, // 强制区分大小写 21 | "resolveJsonModule": true, // 解析json模块 22 | "strict": true, // 是否启动严格模式 23 | "skipLibCheck": true, // 跳过类库检测 24 | "paths": { 25 | "~/*": [ 26 | "./*" 27 | ], 28 | "@/*": [ 29 | "./src/*" 30 | ] 31 | } 32 | }, 33 | "include": [ 34 | "examples/**/*.ts", 35 | "examples/**/*.tsx", 36 | "examples/**/*.vue", 37 | "packages/**/*.ts", 38 | "packages/**/*.tsx", 39 | "packages/**/*.vue", 40 | "tests/**/*.ts", 41 | "tests/**/*.tsx", 42 | "typings/**/*.ts", 43 | "typings/**/*.d.ts" 44 | ], 45 | "exclude": [ 46 | // 排除掉哪些类库 47 | "node_modules", 48 | "**/__tests__", 49 | "dist/**", 50 | "tg-ui/**" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /internal/build/tasks/utils.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import { dest, parallel, series, src } from 'gulp' 3 | import ts from 'gulp-typescript' 4 | import { withTaskName } from '../utils/index' 5 | import { buildOutput, projectRoot } from '../config/paths' 6 | import { bundleConfig } from '../config/bundle' 7 | 8 | // 专门打包utils,指令,hooks等ts文件 9 | export const buildUtils = (dirName: string, name: string) => { 10 | const tasks = Object.entries(bundleConfig).map(([, config]) => { 11 | const tsConfig = path.resolve(projectRoot, 'tsconfig.json') 12 | const inputs = ['**/*.ts', '!gulpfile.ts', '!node_modules'] 13 | const output = path.resolve(dirName, 'dist', config.output.name) 14 | // 安装依赖gulp-typescript 15 | return series( 16 | // 处理ts文件 17 | withTaskName(`build: ${dirName}`, () => { 18 | return src(inputs) 19 | .pipe( 20 | ts.createProject(tsConfig, { 21 | declaration: true, // 需要生成声明文件 22 | strict: false, // 关闭严格模式 23 | module: config.module, 24 | })(), 25 | ) 26 | .pipe(dest(output)) 27 | }), 28 | withTaskName(`copy: ${dirName}`, () => { 29 | // 将打包好的文件放到 es=>utils 和 lib => utils 30 | // 将utils模块拷贝到dist目录下的es和lib目录 31 | return src(`${output}/**`).pipe( 32 | dest(path.resolve(buildOutput, config.output.name, name)), 33 | ) 34 | }), 35 | ) 36 | }) 37 | return parallel(...tasks) 38 | } 39 | -------------------------------------------------------------------------------- /internal/build2/tasks/utils.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import ts from 'gulp-typescript' 3 | import { dest, parallel, series, src } from 'gulp' 4 | import { withTaskName } from '../utils' 5 | import { buildOutput, projectRoot } from '../config/paths' 6 | import { bundleConfig } from '../config/bundle' 7 | 8 | // 专门打包 utils、指令、hooks 等 ts 文件 9 | export const buildUtils = (dirName: string, name: string) => { 10 | const tasks = Object.entries(bundleConfig).map(([, config]) => { 11 | const tsConfig = path.resolve(projectRoot, 'tsconfig.json') 12 | const inputs = ['**/*.ts', '!gulpfile.ts', '!node_modules'] 13 | const output = path.resolve(dirName, 'dist', config.output.name) 14 | // 安装依赖gulp-typescript 15 | return series( 16 | // 处理ts文件 17 | withTaskName(`build: ${dirName}`, () => { 18 | return src(inputs) 19 | .pipe( 20 | ts.createProject(tsConfig, { 21 | declaration: true, // 需要生成声明文件 22 | strict: false, // 关闭严格模式 23 | module: config.module, 24 | })(), 25 | ) 26 | .pipe(dest(output)) 27 | }), 28 | withTaskName(`copy: ${dirName}`, () => { 29 | // 将打包好的文件放到 es=>utils 和 lib => utils 30 | // 将utils模块拷贝到dist目录下的es和lib目录 31 | return src(`${output}/**`).pipe( 32 | dest(path.resolve(buildOutput, config.output.name, name)), 33 | ) 34 | }), 35 | ) 36 | }) 37 | return parallel(...tasks) 38 | } 39 | -------------------------------------------------------------------------------- /internal/build/utils/process.ts: -------------------------------------------------------------------------------- 1 | import { spawn } from 'child_process' 2 | import { projectRoot } from '../config/paths' 3 | 4 | /** 5 | * 子进程 6 | * child_process.spawn(command[, args][, options]) 7 | * command 要运行的命令。 8 | * args 字符串参数列表。 9 | * options 10 | * - cwd | 子进程的当前工作目录 11 | * - stdio | 子进程的标准输入输出配置。'inherit':通过相应的标准输入输出流传入/传出父进程 12 | * - shell | 如果是 true,则在 shell 内运行 command。 在 Unix 上使用 '/bin/sh',在 Windows 上使用 process.env.ComSpec。 可以将不同的 shell 指定为字符串。 请参阅 shell 的要求和默认的 Windows shell。 默认值: false (没有 shell)x 13 | */ 14 | 15 | // 在node使用子进程来运行脚本 16 | export const run = async (command: string, cwd: string = projectRoot) => { 17 | return new Promise((resolve, reject) => { 18 | // 将命令分割 例如:rm -rf 分割为['rm', '-rf'],进行解构[cmd,...args] 19 | const [cmd, ...args] = command.split(' ') 20 | 21 | const app = spawn(cmd, args, { 22 | cwd, 23 | stdio: 'inherit', // 直接将这个子进程输出 24 | shell: process.platform === 'win32', // 默认情况下 linux才支持rm -rf (安装git bash可以支持) 25 | }) 26 | 27 | // 定义进程退出监听函数 28 | const onProcessExit = () => app.kill('SIGHUP') 29 | 30 | // 在进程已结束并且子进程的标准输入输出流已关闭之后,则触发 'close' 事件 31 | app.on('close', (code) => { 32 | process.removeListener('exit', onProcessExit) 33 | if (code === 0) { resolve() } 34 | else { 35 | reject( 36 | new Error(`Failed to execute Command. \n Command: ${command} \n Code: ${code}`), 37 | ) 38 | } 39 | }) 40 | process.on('exit', onProcessExit) 41 | }) 42 | } 43 | -------------------------------------------------------------------------------- /packages/theme-chalk/gulpfile.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 打包样式 3 | * 安装相关依赖 4 | * pnpm install gulp-sass @types/gulp-sass @types/sass gulp-autoprefixer @types/gulp-autoprefixer @types/gulp-clean-css gulp-clean-css -w -D 5 | * gulp-autoprefixer:添加样式前缀 gulp-clean-css:压缩css 6 | */ 7 | import path from 'path' 8 | import gulpSass from 'gulp-sass' 9 | import dartSass from 'sass' 10 | import autoprefixer from 'gulp-autoprefixer' 11 | import cleanCss from 'gulp-clean-css' 12 | 13 | /** 14 | * gulp是类似一个管道的方式执行,从入口开始到出口,中间一步步执行 15 | */ 16 | import { dest, series, src } from 'gulp' 17 | 18 | /** 19 | * 对sass文件做处理 20 | */ 21 | function compileScss() { 22 | const sass = gulpSass(dartSass) 23 | return src(path.resolve(__dirname, './src/*.scss')) 24 | .pipe(sass.sync()) 25 | .pipe(autoprefixer()) 26 | .on('data', (data) => { 27 | let content = data.contents.toString() 28 | content = content.replaceAll('./fonts', 'tg-ui/theme-chalk/fonts') 29 | data.contents = Buffer.from(content) 30 | }) 31 | .pipe(cleanCss()) 32 | .pipe(dest('./dist/css')) 33 | } 34 | 35 | /** 36 | * 处理font文件 37 | */ 38 | function copyFonts() { 39 | // 从src下单fonts文件夹下的所有文件开始=>压缩=>最终输出到当前目录下dist下的font目录 40 | return src(path.resolve(__dirname, './src/fonts/**')) 41 | .pipe(cleanCss()) 42 | .pipe(dest('./dist/fonts')) 43 | } 44 | 45 | /** 46 | * 把打包好的css输出到根目录的dist 47 | */ 48 | function copyFullStyle() { 49 | const rootDistPath = path.resolve(__dirname, '../../dist/theme-chalk') 50 | return src(path.resolve(__dirname, './dist/**')).pipe(dest(rootDistPath)) 51 | } 52 | 53 | export default series(compileScss, copyFonts, copyFullStyle) 54 | -------------------------------------------------------------------------------- /internal/build/config/bundle.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import type { ModuleFormat } from 'rollup' 3 | import { buildOutput } from './paths' 4 | 5 | // 包格式 6 | export const modules = ['esm', 'cjs'] as const 7 | export type Module = typeof modules[number] 8 | 9 | // 包名 10 | export const modulesName = ['es', 'lib'] as const 11 | export type ModuleName = typeof modulesName[number] 12 | 13 | // 包类型信息 14 | export interface BundleInfo { 15 | module: 'ESNext' | 'CommonJS' 16 | format: ModuleFormat 17 | ext: 'mjs' | 'cjs' | 'js' 18 | output: { 19 | /** e.g: `es` */ 20 | name: string 21 | /** e.g: `dist/uno-ux/es` */ 22 | path: string 23 | } 24 | 25 | bundle: { 26 | /** e.g: `uno-ux/es` */ 27 | path: string 28 | } 29 | } 30 | 31 | export const bundleConfig: Record = { 32 | esm: { 33 | module: 'ESNext', // tsconfig 输出的结果 es6 模块 34 | format: 'esm', // 需要配置格式化后的模块规范 35 | ext: 'mjs', 36 | output: { 37 | name: 'es', // 打包到 dist 目录下的 es 目录 38 | path: path.resolve(buildOutput, 'es'), 39 | }, 40 | bundle: { 41 | path: 'tg-ui/es', 42 | }, 43 | }, 44 | cjs: { 45 | module: 'CommonJS', 46 | format: 'cjs', 47 | ext: 'js', 48 | output: { 49 | name: 'lib', 50 | path: path.resolve(buildOutput, 'lib'), 51 | }, 52 | bundle: { 53 | path: 'tg-ui/lib', 54 | }, 55 | }, 56 | } 57 | 58 | // 目标生成版本 59 | export const target = 'es2018' 60 | 61 | export type BundleConfig = typeof bundleConfig 62 | 63 | export type BundleConfigEntries = [Module, BundleInfo][] 64 | 65 | export const bundleConfigEntries = Object.entries( 66 | bundleConfig, 67 | ) as BundleConfigEntries 68 | -------------------------------------------------------------------------------- /internal/build2/utils/process.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 子进程 3 | * child_process.spawn(command[, args][, options]) 4 | * command 要运行的命令。 5 | * args 字符串参数列表。 6 | * options 7 | * - cwd | 子进程的当前工作目录 8 | * - stdio | 子进程的标准输入输出配置。'inherit':通过相应的标准输入输出流传入/传出父进程 9 | * - shell | 如果是 true,则在 shell 内运行 command。 在 Unix 上使用 '/bin/sh',在 Windows 上使用 process.env.ComSpec。 可以将不同的 shell 指定为字符串。 请参阅 shell 的要求和默认的 Windows shell。 默认值: false (没有 shell)x 10 | */ 11 | import { spawn } from 'child_process' 12 | import chalk from 'chalk' 13 | import consola from 'consola' 14 | import { projectRoot } from '../config/paths' 15 | 16 | // 在node使用子进程来运行脚本 17 | export const run = async (command: string, cwd: string = projectRoot) => { 18 | return new Promise((resolve, reject) => { 19 | // 将命令分割 例如:rm -rf 分割为['rm', '-rf'],进行解构[cmd,...args] 20 | const [cmd, ...args] = command.split(' ') 21 | consola.info(`run task: ${chalk.green(`${cmd} ${args.join(' ')}`)}`) 22 | const app = spawn(cmd, args, { 23 | cwd, 24 | stdio: 'inherit', // 直接将这个子进程输出 25 | shell: process.platform === 'win32', // 默认情况下 linux才支持rm -rf (安装git bash可以支持) 26 | }) 27 | 28 | // 定义进程退出监听函数 29 | const onProcessExit = () => app.kill('SIGHUP') 30 | 31 | // 在进程已结束并且子进程的标准输入输出流已关闭之后,则触发 'close' 事件 32 | app.on('close', (code) => { 33 | process.removeListener('exit', onProcessExit) 34 | if (code === 0) { resolve() } 35 | else { 36 | reject( 37 | new Error(`Failed to execute Command. \n Command: ${command} \n Code: ${code}`), 38 | ) 39 | } 40 | }) 41 | process.on('exit', onProcessExit) 42 | }) 43 | } 44 | -------------------------------------------------------------------------------- /internal/build2/config/bundle.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path' 2 | import type { ModuleFormat } from 'rollup' 3 | import { PKG_NAME } from './constants' 4 | import { buildOutput } from './paths' 5 | 6 | // 包格式 7 | export const modules = ['esm', 'cjs'] as const 8 | 9 | export type Module = typeof modules[number] 10 | 11 | // 包名 12 | export const modulesName = ['es', 'lib'] as const 13 | 14 | export type ModuleName = typeof modulesName[number] 15 | 16 | // 包类型信息 17 | export interface BundleInfo { 18 | module: 'ESNext' | 'CommonJS' 19 | format: ModuleFormat 20 | ext: 'mjs' | 'cjs' | 'js' 21 | output: { 22 | /** e.g: `es` */ 23 | name: string 24 | /** e.g: `dist/uno-ux/es` */ 25 | path: string 26 | } 27 | 28 | bundle: { 29 | /** e.g: `uno-ux/es` */ 30 | path: string 31 | } 32 | } 33 | 34 | // 导出包类型的配置 35 | export const bundleConfig: Record = { 36 | esm: { 37 | module: 'ESNext', // tsconfig输出的结果是es6模块 38 | format: 'esm', // 需要配置格式化后的模块规范 39 | ext: 'mjs', 40 | output: { 41 | name: 'es', // 打包到dist目录下的es目录 42 | path: resolve(buildOutput, 'es'), 43 | }, 44 | bundle: { 45 | path: `${PKG_NAME}/es`, 46 | }, 47 | }, 48 | cjs: { 49 | module: 'CommonJS', 50 | format: 'cjs', 51 | ext: 'js', 52 | output: { 53 | name: 'lib', 54 | path: resolve(buildOutput, 'lib'), 55 | }, 56 | bundle: { 57 | path: `${PKG_NAME}/lib`, 58 | }, 59 | }, 60 | } 61 | 62 | // 目标生成版本 63 | export const target = 'es2018' 64 | 65 | export type BundleConfig = typeof bundleConfig 66 | 67 | export type BundleConfigEntries = [Module, BundleInfo][] 68 | 69 | export const bundleConfigEntries = Object.entries( 70 | bundleConfig, 71 | ) as BundleConfigEntries 72 | 73 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tg-ui", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "pnpm -C examples dev", 7 | "build": "gulp --require sucrase/register/ts -f internal/build/gulpfile.ts", 8 | "preview": "vite preview", 9 | "docs:dev": "pnpm -C docs dev", 10 | "docs:build": "pnpm -C docs build", 11 | "docs:serve": "pnpm -C docs serve", 12 | "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx,.json --max-warnings 0 --fix", 13 | "lint:fix": "lint-staged", 14 | "plop:cmp": "pnpm -C internal/plop component", 15 | "plop:api": "pnpm -C internal/plop api", 16 | "prepare": "husky install" 17 | }, 18 | "dependencies": { 19 | "@tg-ui/build": "workspace:*", 20 | "@tg-ui/components": "workspace:*", 21 | "@tg-ui/theme-chalk": "workspace:*", 22 | "@tg-ui/utils": "workspace:*", 23 | "@vueuse/core": "^8.2.5" 24 | }, 25 | "devDependencies": { 26 | "@commitlint/cli": "^16.2.3", 27 | "@commitlint/config-conventional": "^16.2.1", 28 | "@rollup/plugin-commonjs": "^21.0.3", 29 | "@rollup/plugin-node-resolve": "^13.2.0", 30 | "@types/gulp": "^4.0.9", 31 | "@types/gulp-autoprefixer": "^0.0.33", 32 | "@types/gulp-clean-css": "^4.3.0", 33 | "@types/gulp-sass": "^5.0.0", 34 | "@types/sass": "^1.43.1", 35 | "@vue/compiler-sfc": "^3.2.32", 36 | "@vue/tsconfig": "^0.1.3", 37 | "@zgsgs/eslint-config": "^0.0.6", 38 | "chalk": "^5.0.1", 39 | "clipboard-copy": "^4.0.1", 40 | "consola": "^2.15.3", 41 | "cross-env": "^7.0.3", 42 | "eslint": "^8.13.0", 43 | "fast-glob": "^3.2.11", 44 | "gulp": "^4.0.2", 45 | "gulp-autoprefixer": "^8.0.0", 46 | "gulp-clean-css": "^4.3.0", 47 | "gulp-sass": "^5.1.0", 48 | "gulp-typescript": "^6.0.0-alpha.1", 49 | "husky": "^7.0.4", 50 | "lint-staged": "^12.4.1", 51 | "rimraf": "^3.0.2", 52 | "rollup": "^2.70.1", 53 | "rollup-plugin-typescript2": "^0.31.2", 54 | "rollup-plugin-vue": "^6.0.0", 55 | "sass": "^1.49.11", 56 | "sucrase": "^3.20.3", 57 | "ts-morph": "^14.0.0", 58 | "typescript": "^4.5.4", 59 | "vue": "^3.2.25", 60 | "vue-tsc": "^0.29.8" 61 | }, 62 | "lint-staged": { 63 | "*.{vue,js,jsx,ts,tsx,json}": "eslint --fix" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /docs/src/components/watermark.md: -------------------------------------------------------------------------------- 1 | # useWatermark 2 | 3 | 这是一个水印函数组件,属于前端浏览器环境添加水印效果。 4 | 5 | ## Example 6 | 7 | ```vue 8 | 13 | 14 | 39 | ``` 40 | 41 | ## Function 42 | 43 | ```ts 44 | // 引入 45 | import { useWatermark } from '~/components/Watermark' 46 | 47 | const { setWatermark, clear } = useWatermark() 48 | 49 | // 有默认值,不传参数,就按照默认设置 50 | const options = { 51 | str: '防伪 ☆ 加密', 52 | str2: '', 53 | font: '15px Vedana', 54 | fillStyle: 'rgba(0, 0, 0, 0.3)', 55 | textAlign: 'center', 56 | textBaseline: 'middle', 57 | } 58 | 59 | // 创建水印 60 | setWatermark(options) 61 | // 清除水印 62 | clear() 63 | ``` 64 | 65 | ## Events 66 | 67 | | 事件 | 回调参数 | 说明 | 68 | | ------------ | ----------------------- | ------ | 69 | | setWatermark | (options: Attr) => void | 创建水印 | 70 | | clear | () => void | 清除水印 | 71 | 72 | ### Attr 73 | 74 | | 参数 | 类型 | 默认值 | 说明 | 75 | | ------------ | ----------------- | -------------------- | -------------------- | 76 | | str | string | '防伪 ☆ 加密' | 第一行文案 | 77 | | str2 | string | '' | 第二行文案 | 78 | | font | string | '15px Vedana' | canvas font 属性 | 79 | | fillStyle | string | 'rgba(0, 0, 0, 0.3)' | canvas fillStyle 属性 | 80 | | textAlign | CanvasTextAlign | 'center' | canvas textAlign 属性 | 81 | | textBaseline | CanvasTextBaseline | 'middle' | canvas textBaseline 属性 | 82 | 83 | ## 贡献者 84 | 85 | - [BiggerRain](https://github.com/RainyNight9) 86 | -------------------------------------------------------------------------------- /internal/plop/component/config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Lin ZeFan 3 | * @Date: 2022-04-09 19:02:32 4 | * @LastEditTime : 2022-05-04 13:49:15 5 | * @LastEditors : Please set LastEditors 6 | * @Description: plop生成组件执行脚本 7 | * @FilePath : \tg-ui\packages\plop\component\config.js 8 | * 9 | */ 10 | 11 | const { PREFIX } = require('../constants') 12 | const { camelize, getPascal, validateKebabCase } = require('../utils') 13 | 14 | module.exports = (plop) => { 15 | plop.setGenerator('component', { 16 | description: '新建一个新组件', 17 | prompts: [ 18 | { 19 | type: 'input', 20 | name: 'name', 21 | message: '提供你的组件名称(使用 kebab-case)', 22 | validate: v => validateKebabCase(v), 23 | }, 24 | ], 25 | actions: (data) => { 26 | const { name } = data 27 | const prefixName = `${PREFIX}${name}` 28 | const camelName = camelize(name) 29 | const pascalName = getPascal(name) 30 | const pascalPrefixName = getPascal(prefixName) 31 | // console.log(`[prefixName, pascalName, pascalPrefixName]`, [ 32 | // prefixName, 33 | // pascalName, 34 | // pascalPrefixName, 35 | // ]); 36 | const actions = [ 37 | { 38 | type: 'add', 39 | path: `packages/components/${name}/src/${name}.vue`, // 创建路径 40 | templateFile: 'packages/plop/component/hbs/vue.hbs', // 模板,将根据此模板内容生成新文件 41 | data: { 42 | name, 43 | camelName, 44 | prefixName, 45 | }, 46 | }, 47 | { 48 | type: 'add', 49 | path: `packages/components/${name}/src/${name}.less`, 50 | templateFile: 'packages/plop/component/hbs/less.hbs', 51 | data: { 52 | name, 53 | prefixName, 54 | }, 55 | }, 56 | { 57 | type: 'add', 58 | path: `packages/components/${name}/src/${name}.ts`, 59 | templateFile: 'packages/plop/component/hbs/ts.hbs', 60 | data: { 61 | camelName, 62 | pascalName, 63 | }, 64 | }, 65 | { 66 | type: 'add', 67 | path: `packages/components/${name}/index.ts`, 68 | templateFile: 'packages/plop/component/hbs/exports.hbs', 69 | data: { 70 | name, 71 | pascalName, 72 | pascalPrefixName, 73 | }, 74 | }, 75 | ] 76 | 77 | return actions 78 | }, 79 | }) 80 | } 81 | -------------------------------------------------------------------------------- /internal/build2/tasks/gen-entry-types.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs/promises' 2 | import path from 'path' 3 | import glob from 'fast-glob' 4 | import type { SourceFile } from 'ts-morph' 5 | import { ModuleKind, Project, ScriptTarget } from 'ts-morph' 6 | import { parallel, series } from 'gulp' 7 | import { buildOutput, tsConfigRoot, uiRoot, uiTypeOutput } from '../config/paths' 8 | import { bundleConfig } from '../config/bundle' 9 | import type { Module } from '../config/bundle' 10 | import { run, withTaskName } from '../utils' 11 | 12 | export const genEntryTypesTask = async () => { 13 | const files = await glob('*.ts', { 14 | cwd: uiRoot, 15 | absolute: true, 16 | onlyFiles: true, 17 | }) 18 | 19 | const project = new Project({ 20 | compilerOptions: { 21 | declaration: true, 22 | module: ModuleKind.ESNext, 23 | allowJs: true, 24 | emitDeclarationOnly: true, 25 | noEmitOnError: false, 26 | outDir: uiTypeOutput, 27 | target: ScriptTarget.ESNext, 28 | rootDir: uiRoot, 29 | strict: false, 30 | }, 31 | skipFileDependencyResolution: true, 32 | tsConfigFilePath: tsConfigRoot, 33 | skipAddingFilesFromTsConfig: true, 34 | }) 35 | const sourceFiles: SourceFile[] = [] 36 | files.map((f) => { 37 | const sourceFile = project.addSourceFileAtPath(f) 38 | sourceFiles.push(sourceFile) 39 | return f 40 | }) 41 | await project.emit({ 42 | emitOnlyDtsFiles: true, 43 | }) 44 | const tasks = sourceFiles.map(async (sourceFile) => { 45 | const emitOutput = sourceFile.getEmitOutput() 46 | for (const outputFile of emitOutput.getOutputFiles()) { 47 | const filepath = outputFile.getFilePath() 48 | await fs.mkdir(path.dirname(filepath), { recursive: true }) 49 | await fs.writeFile( 50 | filepath, 51 | outputFile.getText().split('@tg-ui').join('.'), 52 | 'utf8', 53 | ) 54 | } 55 | }) 56 | await Promise.all(tasks) 57 | } 58 | 59 | export const copyEntryTypes = () => { 60 | const copy = (module: Module) => { 61 | return parallel( 62 | withTaskName(`copyEntryTypes:${module}`, async () => { 63 | await run( 64 | `cp -r ${uiTypeOutput}/* ${path.resolve( 65 | buildOutput, 66 | bundleConfig[module as Module].output.path, 67 | )}/`, 68 | ) 69 | }), 70 | ) 71 | } 72 | return parallel(copy('esm'), copy('cjs')) 73 | } 74 | 75 | export const genEntryTypes = series(genEntryTypesTask, copyEntryTypes()) 76 | -------------------------------------------------------------------------------- /internal/build/tasks/gen-types.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs/promises' 2 | import path from 'path' 3 | import glob from 'fast-glob' 4 | import type { SourceFile } from 'ts-morph' 5 | import { ModuleKind, Project, ScriptTarget } from 'ts-morph' 6 | import { parallel, series } from 'gulp' 7 | import { run, withTaskName } from '../utils' 8 | import { buildOutput, projectRoot, uiRoot } from '../config/paths' 9 | import { bundleConfig } from '../config/bundle' 10 | import { PKG_PREFIX } from '../config/constants' 11 | 12 | // 生成入口定义 13 | export const genEntryTypes = async () => { 14 | const files = await glob('*.ts', { 15 | cwd: uiRoot, 16 | absolute: true, 17 | onlyFiles: true, 18 | }) 19 | 20 | const project = new Project({ 21 | compilerOptions: { 22 | declaration: true, 23 | module: ModuleKind.ESNext, 24 | allowJs: true, 25 | emitDeclarationOnly: true, 26 | noEmitOnError: false, 27 | outDir: path.resolve(buildOutput, 'entry/types'), 28 | target: ScriptTarget.ESNext, 29 | rootDir: uiRoot, 30 | strict: false, 31 | }, 32 | skipFileDependencyResolution: true, 33 | tsConfigFilePath: path.resolve(projectRoot, 'tsconfig.json'), 34 | skipAddingFilesFromTsConfig: true, 35 | }) 36 | const sourceFiles: SourceFile[] = [] 37 | files.map((f) => { 38 | const sourceFile = project.addSourceFileAtPath(f) 39 | sourceFiles.push(sourceFile) 40 | return f 41 | }) 42 | await project.emit({ 43 | emitOnlyDtsFiles: true, // 仅生成定义文件 44 | }) 45 | const tasks = sourceFiles.map(async (sourceFile) => { 46 | const emitOutput = sourceFile.getEmitOutput() 47 | for (const outputFile of emitOutput.getOutputFiles()) { 48 | const filepath = outputFile.getFilePath() 49 | await fs.mkdir(path.dirname(filepath), { recursive: true }) 50 | await fs.writeFile( 51 | filepath, 52 | outputFile.getText().split(PKG_PREFIX).join('.'), 53 | 'utf8', 54 | ) 55 | } 56 | }) 57 | await Promise.all(tasks) 58 | } 59 | 60 | // 把入口定义 分别拷贝到对应类型的目录下 61 | export const copyEntryTypes = () => { 62 | const src = path.resolve(buildOutput, 'entry/types') 63 | const copy = (module) => { 64 | return parallel( 65 | withTaskName(`copyEntryTypes:${module}`, async () => { 66 | await run( 67 | `cp -r ${src}/* ${path.resolve( 68 | buildOutput, 69 | bundleConfig[module].output.path, 70 | )}/`, 71 | ) 72 | }), 73 | ) 74 | } 75 | return parallel(copy('esm'), copy('cjs')) 76 | } 77 | 78 | export const genTypes = series(genEntryTypes, copyEntryTypes()) 79 | -------------------------------------------------------------------------------- /docs/src/components/cropper.md: -------------------------------------------------------------------------------- 1 | # Cropper 2 | 3 | 图片裁剪组件。 4 | 5 | 依赖于 `cropperjs`,具体文档可以参考 [cropperjs](https://github.com/fengyuanchen/cropperjs)。 6 | 7 | ## Usage 8 | 9 | ``` vue 10 | 23 | 24 | 27 | ``` 28 | 29 | ## Props 30 | 31 | | 属性 | 类型 | 默认值 | 说明 | 32 | | --------------- | --------- | ---------------- | --------------- | 33 | | src | `string` | - | 图片源 | 34 | | alt | `string` | - | 图片 alt | 35 | | circled | `boolean` | `false` | 圆形裁剪框 | 36 | | realTimePreview | `boolean` | `true` | 实时触发预览 | 37 | | height | `string` | `360px` | 高度 | 38 | | imageStyle | `object` | - | 图片样式 | 39 | | options | `object` | `DefaultOptions` | corpperjs 配置项 | 40 | 41 | ## Events 42 | 43 | | 名称 | 参数 | 说明 | 44 | | ---------------| -------------------------------- | ---------------- | 45 | | ready | cropper 实例 | cropper 实例 | 46 | | cropend | `{ imgBase64: '', imgInfo: {} }` | 图片信息 | 47 | | error | - | error | 48 | 49 | ## DefaultOptions 50 | 51 | ```json 52 | { 53 | "aspectRatio": 1, // 定义裁剪框的固定纵横比 54 | "zoomable": true, // 缩放图像 55 | "zoomOnTouch": true, // 通过拖动触摸来缩放图像 56 | "zoomOnWheel": true, // 通过鼠标滚轮缩放图像 57 | "cropBoxMovable": true, // 通过拖动来移动裁剪框 58 | "cropBoxResizable": true, // 通过拖动来调整裁剪框的大小 59 | "toggleDragModeOnDblclick": true, // 在裁剪器上单击两次时,启用以在“裁剪”和“移动”之间切换拖动模式 60 | "autoCrop": true, // 在初始化时自动裁剪图像 61 | "background": true, // 显示容器的网格背景 62 | "highlight": true, // 在裁剪框上方显示白色模态 63 | "center": true, // 在裁剪框上方显示中心指示器 64 | "responsive": true, // 调整窗口大小时重新渲染裁剪器 65 | "restore": true, // 调整窗口大小后恢复裁剪区域 66 | "checkCrossOrigin": true, // 检查当前图像是否为跨域图像 67 | "checkOrientation": true, // 检查当前图像的 Exif 方向信息 68 | "scalable": true, // 缩放图像 69 | "modal": true, // 在图像上方和裁剪框下方显示黑色模态 70 | "guides": true, // 在裁剪框上方显示虚线 71 | "movable": true, // 移动图像 72 | "rotatable": true // 旋转图像 73 | } 74 | ``` 75 | -------------------------------------------------------------------------------- /internal/build2/tasks/component.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 安装依赖 pnpm install fast-glob -w -D 3 | */ 4 | import { resolve } from 'path' 5 | import consola from 'consola' 6 | import { series } from 'gulp' 7 | import { rollup } from 'rollup' 8 | import type { OutputOptions } from 'rollup' 9 | import { nodeResolve } from '@rollup/plugin-node-resolve' 10 | import commonjs from '@rollup/plugin-commonjs' 11 | import vue from 'rollup-plugin-vue' 12 | import typescript from 'rollup-plugin-typescript2' 13 | import { sync } from 'fast-glob' // 同步查找文件 14 | import type { Module } from '../config/bundle' 15 | import { bundleConfig } from '../config/bundle' 16 | import { pathRewriter } from '../utils' 17 | import { vueComponentRoot } from '../config/paths' 18 | 19 | // 打包每个组件 20 | const buildEachComponent = async () => { 21 | // 查找 components 下所有的组件目录 ["icon", "button", ...] 22 | const dirs = sync('*', { 23 | cwd: vueComponentRoot, 24 | onlyDirectories: true, // 只查找文件夹 25 | }) 26 | 27 | // 分别把 components 文件夹下的组件,放到 dist/es/components 和 dist/lib/components 下 28 | const builds = dirs.map(async (dir: string) => { 29 | // 找到每个组件的入口文件 index.ts 30 | const input = resolve(vueComponentRoot, dir, 'index.ts') 31 | const config = { 32 | input, 33 | plugins: [nodeResolve(), typescript(), vue(), commonjs()], 34 | external: (id: string) => /^vue/.test(id) || /^@tg-ui/.test(id), // 排除掉 vue 和 @tg-ui 的依赖 35 | } 36 | const bundle = await rollup(config) 37 | consola.log('打包完毕') 38 | 39 | // 生成写入配置信息 40 | const options = Object.values(bundleConfig).map((config) => { 41 | const { format, output: { name, path } } = config 42 | return { 43 | format, 44 | file: resolve(path, `components/${dir}/index.js`), 45 | paths: pathRewriter(name as Module), // 处理路径 替换为真实路径 46 | exports: 'named', 47 | } 48 | }) 49 | // 打包结果写入指定目录 50 | await Promise.all( 51 | options.map(option => bundle.write(option as OutputOptions)), 52 | ) 53 | consola.log('写入完毕') 54 | }) 55 | 56 | return Promise.all(builds) 57 | } 58 | 59 | // 编译组件入口 60 | async function buildComponentEntry() { 61 | const config = { 62 | input: resolve(vueComponentRoot, 'index.ts'), 63 | plugins: [typescript()], 64 | external: () => true, 65 | } 66 | const bundle = await rollup(config) 67 | return Promise.all( 68 | Object.values(bundleConfig) 69 | .map(config => ({ 70 | format: config.format, 71 | file: resolve(config.output.path, 'components/index.js'), 72 | })) 73 | .map(config => bundle.write(config as OutputOptions)), 74 | ) 75 | } 76 | 77 | export const buildComponent = series( 78 | buildEachComponent, 79 | buildComponentEntry, 80 | ) 81 | -------------------------------------------------------------------------------- /docs/.vitepress/config.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path' 2 | import { defineConfigWithTheme } from 'vitepress' 3 | import baseConfig from '@vue/theme/config' 4 | import type { Config } from '@vue/theme' 5 | import type { UserConfig } from 'vitepress' 6 | import { NavbarFix } from './plugins/navbar' 7 | import Components from 'unplugin-vue-components/vite' 8 | 9 | export default defineConfigWithTheme({ 10 | extends: baseConfig as () => UserConfig, 11 | 12 | lang: 'zh-CN', 13 | title: 'tg-ui组件库文档', 14 | description: '提供现成的开箱解决方案及丰富的示例,提高开发效率。', 15 | base: '/', 16 | srcDir: 'src', 17 | 18 | head: [ 19 | ['link', { rel: 'icon', href: '/favicon.ico' }] 20 | ], 21 | 22 | themeConfig: { 23 | socialLinks: [ 24 | { icon: 'github', link: 'https://github.com/zgsgs/tg-ui.git' } 25 | ], 26 | 27 | editLink: { 28 | repo: 'zgsgs/tg-ui/docs', 29 | text: 'Edit this page on GitHub' 30 | }, 31 | 32 | nav: [ 33 | { text: '教程', link: '/' }, 34 | { text: '组件', link: '/components/' }, 35 | { text: '在线预览', link: 'https://zgsgs.netlify.app' } 36 | ], 37 | 38 | sidebar: { 39 | '/guide/': getGuideSidebar(), 40 | '/components/': getComponentsSidebar(), 41 | '/': getGuideSidebar() 42 | } 43 | }, 44 | 45 | vite: { 46 | define: { 47 | __VUE_OPTIONS_API__: false 48 | }, 49 | plugins: [ 50 | NavbarFix(), 51 | Components({ 52 | dirs: resolve(__dirname, 'theme/components'), 53 | include: [/\.vue$/, /\.vue\?vue/, /\.md$/], 54 | dts: '../.vitepress/components.d.ts', 55 | transformer: 'vue3', 56 | }) 57 | ] 58 | }, 59 | 60 | vue: { 61 | reactivityTransform: true 62 | } 63 | }) 64 | 65 | function getGuideSidebar() { 66 | return [ 67 | { 68 | text: '指南', 69 | items: [ 70 | { text: '介绍', link: '/' }, 71 | { text: '贡献指南', link: '/guide/' } 72 | ] 73 | }, 74 | { 75 | text: '开发指南', 76 | items: [ 77 | { text: '新增路由', link: '/guide/add-route' }, 78 | { text: '组件开发规范', link: '/guide/component' }, 79 | ] 80 | } 81 | ] 82 | } 83 | 84 | function getComponentsSidebar() { 85 | return [ 86 | { 87 | text: '组件', 88 | items: [ 89 | { text: '介绍', link: '/components/' }, 90 | { text: '文档模版', link: '/components/example' } 91 | ] 92 | }, 93 | { 94 | text: '常用组件', 95 | items: [ 96 | { text: 'Excel', link: '/components/excel' }, 97 | { text: '水印', link: '/components/watermark' }, 98 | { text: '图片裁剪', link: '/components/cropper' }, 99 | ] 100 | } 101 | ] 102 | } 103 | -------------------------------------------------------------------------------- /internal/build2/tasks/full-component.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 安装依赖 pnpm install rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs rollup-plugin-typescript2 rollup-plugin-vue -D -w 3 | */ 4 | import fs from 'fs/promises' 5 | import path from 'path' 6 | import { nodeResolve } from '@rollup/plugin-node-resolve' // 处理文件路径 7 | import commonjs from '@rollup/plugin-commonjs' // 将 CommonJS 模块转换为 ES6 8 | import vue from 'rollup-plugin-vue' 9 | import typescript from 'rollup-plugin-typescript2' 10 | import { rollup } from 'rollup' 11 | import type { OutputOptions } from 'rollup' 12 | import { parallel } from 'gulp' 13 | import { pathRewriter } from '../utils' 14 | import { type Module, bundleConfig } from '../config/bundle' 15 | import { buildOutput, uiRoot } from '../config/paths' 16 | 17 | const buildFull = async () => { 18 | // rollup 打包的配置信息 19 | const config = { 20 | input: path.resolve(uiRoot, 'index.ts'), // 打包入口 21 | plugins: [nodeResolve(), typescript(), vue(), commonjs()], 22 | external: (id: string) => /^vue/.test(id), // 打包的时候不打包vue代码 23 | } 24 | 25 | // 组件库 esm umd 两种使用方式 import 导入组件库 在浏览器中使用script 26 | const bundleConfig = [ 27 | { 28 | format: 'umd', // 打包的格式 29 | file: path.resolve(buildOutput, 'index.js'), 30 | name: 'tgUi', // 全局变量名字 31 | exports: 'named', // 导出的名字 用命名的方式导出 libraryTarget:"" name:"" 32 | globals: { 33 | // 表示使用的vue是全局的 34 | vue: 'Vue', 35 | }, 36 | }, 37 | { 38 | format: 'esm', 39 | file: path.resolve(buildOutput, 'index.esm.js'), 40 | }, 41 | ] 42 | 43 | const bundle = await rollup(config) 44 | 45 | return Promise.all( 46 | bundleConfig.map((option) => { 47 | bundle.write(option as OutputOptions) 48 | return option 49 | }), 50 | ) 51 | } 52 | 53 | async function buildEntry() { 54 | // 读取tg-ui目录下的所有内容,包括目录和文件 55 | const entryFiles = await fs.readdir(uiRoot, { withFileTypes: true }) 56 | 57 | // 过滤掉 不是文件的内容和package.json文件 index.ts 作为打包入口 58 | const entryPoints = entryFiles 59 | .filter(f => f.isFile()) 60 | .filter(f => !['package.json'].includes(f.name)) 61 | .map(f => path.resolve(uiRoot, f.name)) 62 | 63 | const config = { 64 | input: entryPoints, 65 | plugins: [nodeResolve(), vue(), typescript()], 66 | external: (id: string) => /^vue/.test(id) || /^@tg-ui/.test(id), 67 | } 68 | const bundle = await rollup(config) 69 | return Promise.all( 70 | Object.values(bundleConfig) 71 | .map(config => ({ 72 | format: config.format, 73 | dir: config.output.path, 74 | paths: pathRewriter(config.output.name), 75 | })) 76 | .map(option => bundle.write(option as OutputOptions)), 77 | ) 78 | } 79 | 80 | // gulp适合流程控制和代码的转义 没有打包的功能 81 | export const buildFullComponent = parallel(buildFull, buildEntry) 82 | -------------------------------------------------------------------------------- /internal/build/tasks/full-component.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 安装依赖 pnpm install rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs rollup-plugin-typescript2 rollup-plugin-vue -D -w 3 | */ 4 | import fs from 'fs/promises' 5 | import path from 'path' 6 | import { nodeResolve } from '@rollup/plugin-node-resolve' // 处理文件路径 7 | import commonjs from '@rollup/plugin-commonjs' // 将 CommonJS 模块转换为 ES6 8 | import vue from 'rollup-plugin-vue' 9 | import typescript from 'rollup-plugin-typescript2' 10 | import { rollup } from 'rollup' 11 | import type { OutputOptions } from 'rollup' 12 | import { parallel } from 'gulp' 13 | import { pathRewriter } from '../utils' 14 | import { buildOutput, uiRoot } from '../config/paths' 15 | import type { Module } from '../config/bundle' 16 | import { bundleConfig } from '../config/bundle' 17 | 18 | const buildFull = async () => { 19 | // rollup 打包的配置信息 20 | const config = { 21 | input: path.resolve(uiRoot, 'index.ts'), // 打包入口 22 | plugins: [nodeResolve(), typescript(), vue(), commonjs()], 23 | external: id => /^vue/.test(id), // 打包的时候不打包vue代码 24 | } 25 | 26 | // 组件库 esm umd 两种使用方式 import 导入组件库 在浏览器中使用script 27 | const buildConfig = [ 28 | { 29 | format: 'umd', // 打包的格式 30 | file: path.resolve(buildOutput, 'index.js'), 31 | name: 'tgUi', // 全局变量名字 32 | exports: 'named', // 导出的名字 用命名的方式导出 libraryTarget:"" name:"" 33 | globals: { 34 | // 表示使用的vue是全局的 35 | vue: 'Vue', 36 | }, 37 | }, 38 | { 39 | format: 'esm', 40 | file: path.resolve(buildOutput, 'index.esm.js'), 41 | }, 42 | ] 43 | const bundle = await rollup(config) 44 | 45 | return Promise.all( 46 | buildConfig.map((option) => { 47 | bundle.write(option as OutputOptions) 48 | return option 49 | }), 50 | ) 51 | } 52 | 53 | async function buildEntry() { 54 | // 读取 tg-ui 目录下的所有内容,包括目录和文件 55 | const entryFiles = await fs.readdir(uiRoot, { withFileTypes: true }) 56 | 57 | // 过滤掉 不是文件的内容和package.json文件 index.ts 作为打包入口 58 | const entryPoints = entryFiles 59 | .filter(f => f.isFile()) 60 | .filter(f => !['package.json'].includes(f.name)) 61 | .map(f => path.resolve(uiRoot, f.name)) 62 | 63 | const config = { 64 | input: entryPoints, 65 | plugins: [nodeResolve(), vue(), typescript()], 66 | external: (id: string) => /^vue/.test(id) || /^@tg-ui/.test(id), 67 | } 68 | const bundle = await rollup(config) 69 | return Promise.all( 70 | Object.values(bundleConfig) 71 | .map(config => ({ 72 | format: config.format, 73 | dir: config.output.path, 74 | paths: pathRewriter(config.output.name as Module), 75 | })) 76 | .map(option => bundle.write(option as OutputOptions)), 77 | ) 78 | } 79 | 80 | // gulp适合流程控制和代码的转义 没有打包的功能 81 | export const buildFullComponent = parallel(buildFull, buildEntry) 82 | -------------------------------------------------------------------------------- /internal/plop/utils/index.js: -------------------------------------------------------------------------------- 1 | /** replace的第二个参数为函数 2 | * 参数一:正则匹配的结,即-x 3 | * 参数二:为\w 4 | * replace的函数回调有个特点,正则里面只要有()包裹的,判断为分组($1),都会单独返会一个结果,所以这里参数2是-后的字母,如果(\w)换成\w,那参数2会是匹配结果的下标 5 | */ 6 | 7 | /** 8 | * @description: 转camel 9 | * 例:kebab-case -> kebabCase; KebabCase -> kebabCase 10 | * @access: public 11 | * @param {*} str 12 | * @return {*} 13 | */ 14 | function camelize(str) { 15 | if (!str.trim()) 16 | return '' 17 | const result = str.replace(/-(\w)/g, (_, char) => { 18 | return char.toUpperCase() 19 | }) 20 | return result.replace(result[0], result[0].toLowerCase()) 21 | } 22 | 23 | /** 24 | * @description: 转pascal 25 | * 例:kebab-case -> KebabCase; kebabCase -> KebabCase 26 | * @access: public 27 | * @param {*} str 28 | * @return {*} 29 | */ 30 | function getPascal(str) { 31 | if (!str.trim()) 32 | return '' 33 | const result = str.replace(/-(\w)/g, (_, char) => { 34 | return char.toUpperCase() 35 | }) 36 | return result.replace(result[0], result[0].toUpperCase()) 37 | } 38 | 39 | /** 40 | * @description: 转kebab-case 41 | * 例:kebabCase -> kebab-case; KebabCase -> kebab-case 42 | * @access: public 43 | * @param {*} str 44 | * @return {*} 45 | */ 46 | function getKebabCase(str) { 47 | if (!str.trim()) 48 | return '' 49 | const result = str.replace(/([A-Z])/g, (char) => { 50 | return `-${char.toLowerCase()}` 51 | }) 52 | if (result.indexOf('-') === 0) 53 | return result.substr(1) 54 | 55 | return result 56 | } 57 | 58 | /** 59 | * @description: 首字母转大写 60 | * @access: public 61 | * @param {string} str 62 | * @return {*} 63 | */ 64 | function capitalize(str) { 65 | return str.trim() ? str.replace(str[0], str[0].toUpperCase()) : '' 66 | } 67 | 68 | /** 69 | * @description: 首字母转小写 70 | * @access: public 71 | * @param {*} str 72 | * @return {*} 73 | */ 74 | function lowercase(str) { 75 | return str.trim() ? str.replace(str[0], str[0].toLowerCase()) : '' 76 | } 77 | /** 78 | * @description: 判断空字符 79 | * @access: public 80 | * @param {*} str 81 | * @return {*} 82 | */ 83 | function isEmptyString(str) { 84 | return !str || str.trim() === '' 85 | } 86 | 87 | /** 88 | * @description: 校验pascal 89 | * @access: public 90 | * @param {string} str 91 | * @return {*} 92 | */ 93 | function validatePascal(str) { 94 | return /^[A-Z][a-z0-9]+([A-Z][a-z0-9]+)*/.test(str) 95 | } 96 | 97 | /** 98 | * @description: 校验camel 99 | * @access: public 100 | * @param {string} str 101 | * @return {*} 102 | */ 103 | function validateCamel(str) { 104 | return /^[a-z][a-z0-9]+([A-Z][a-z0-9]+)*/.test(str) 105 | } 106 | 107 | /** 108 | * @description: 校验kebab-case 109 | * @access: public 110 | * @param {string} str 111 | * @return {*} 112 | */ 113 | function validateKebabCase(str) { 114 | return /^[a-z]+(-[a-z]+)*/.test(str) 115 | } 116 | 117 | module.exports = { 118 | camelize, 119 | getPascal, 120 | getKebabCase, 121 | capitalize, 122 | lowercase, 123 | isEmptyString, 124 | validatePascal, 125 | validateCamel, 126 | validateKebabCase, 127 | } 128 | -------------------------------------------------------------------------------- /internal/build2/tasks/gen-types.ts: -------------------------------------------------------------------------------- 1 | import { dirname, relative, resolve } from 'path' 2 | import fs from 'fs/promises' 3 | import { parallel, series } from 'gulp' 4 | import glob from 'fast-glob' // 同步查找文件 5 | import { Project } from 'ts-morph' 6 | import type { SourceFile } from 'ts-morph' 7 | // sfc 解析 8 | import * as VueCompiler from '@vue/compiler-sfc' 9 | import type { Module, ModuleName } from '../config/bundle' 10 | import { pathRewriter, run } from '../utils' 11 | import { buildOutput, componentTypeOutput, projectRoot, tsConfigRoot, typesOutput, vueComponentRoot } from '../config/paths' 12 | 13 | // 临时索引 14 | let index = 1 15 | // 编译组件类型 16 | export async function genTypesTask() { 17 | const project = new Project({ 18 | // 生成.d.ts 我们需要有一个tsconfig 19 | compilerOptions: { 20 | allowJs: true, 21 | declaration: true, 22 | emitDeclarationOnly: true, 23 | noEmitOnError: true, 24 | outDir: typesOutput, // 输出文件地址 25 | baseUrl: projectRoot, // 编译文件地址 26 | paths: { 27 | '@tg-ui/*': ['packages/*'], 28 | }, // 路径映射 29 | skipLibCheck: true, 30 | strict: false, 31 | }, 32 | tsConfigFilePath: tsConfigRoot, // tsconfig配置文件 33 | skipAddingFilesFromTsConfig: true, // 跳过从 tsconfig 添加文件 34 | }) 35 | 36 | // 打包 packages 目录 正则匹配所有的 js vue ts 37 | const filePaths = await glob('**/*.{js(x),ts(x),vue}', { 38 | // ** 任意目录 * 任意文件 39 | cwd: vueComponentRoot, 40 | onlyFiles: true, 41 | absolute: true, 42 | }) 43 | 44 | const sourceFiles: SourceFile[] = [] 45 | 46 | await Promise.all( 47 | filePaths.map(async (file) => { 48 | // vue 文件解析后放入 49 | if (file.endsWith('.vue')) { 50 | const content = await fs.readFile(file, 'utf8') // 读取文件内容 51 | const sfc = VueCompiler.parse(content) // sfc 解析 52 | const { script, scriptSetup } = sfc.descriptor // 分割 脚本 和 setup 部分 53 | if (script || scriptSetup) { 54 | let content = script?.content ?? '' // 拿到脚本 icon.vue.ts => icon.vue.d.ts 55 | 56 | // 编译 setup 57 | if (scriptSetup) { 58 | const compiled = VueCompiler.compileScript(sfc.descriptor, { 59 | id: `${index++}`, // 源码中是为解析 CSS 变量而存在的, 这里只需提供一个索引即可 60 | }) 61 | // 编译后产物组合 62 | content += compiled.content 63 | } 64 | 65 | // 获取脚本语言类型 66 | const lang = scriptSetup?.lang || script?.lang || 'js' 67 | const sourceFile = project.createSourceFile( 68 | `${relative(process.cwd(), file)}.${lang}`, 69 | content, 70 | ) 71 | // 放入源文件数组 72 | sourceFiles.push(sourceFile) 73 | } 74 | } 75 | else { 76 | // 其他文件直接放入 77 | const sourceFile = project.addSourceFileAtPath(file) 78 | sourceFiles.push(sourceFile) 79 | } 80 | }), 81 | ) 82 | await project.emit({ 83 | // 默认是放到内存中的 84 | emitOnlyDtsFiles: true, 85 | }) 86 | 87 | const tasks = sourceFiles.map(async (sourceFile: any) => { 88 | const emitOutput = sourceFile.getEmitOutput() 89 | const tasks = emitOutput.getOutputFiles().map(async (outputFile: any) => { 90 | const filepath = outputFile.getFilePath() 91 | await fs.mkdir(dirname(filepath), { 92 | recursive: true, 93 | }) 94 | await fs.writeFile(filepath, pathRewriter('es' as Module)(outputFile.getText())) 95 | }) 96 | await Promise.all(tasks) 97 | }) 98 | 99 | await Promise.all(tasks) 100 | } 101 | 102 | // 拷贝类型到 输出目录 103 | function copyTypes() { 104 | const copy = (module: ModuleName) => { 105 | const output = resolve(buildOutput, module, 'components') 106 | return () => run(`cp -r ${componentTypeOutput}/* ${output}`) 107 | } 108 | return parallel(copy('es'), copy('lib')) 109 | } 110 | 111 | export const genTypes = series(genTypesTask, copyTypes()) 112 | -------------------------------------------------------------------------------- /docs/src/components/excel.md: -------------------------------------------------------------------------------- 1 | # Excel 2 | 3 | `excel` 导入导出操作。 4 | 5 | 依赖于 `xlsx`,具体文档可以参考 [xlsx](https://github.com/sheetjs/sheetjs)。 6 | 7 | ## Import 8 | 9 | ### Usage 10 | 11 | ``` vue 12 | 39 | 40 | 43 | ``` 44 | 45 | ### Events 46 | 47 | | 事件 | 回调参数 | 说明 | 48 | | ------- | ----------------------- | ---------- | 49 | | success | (res:ExcelData) => void | 导入成功回调 | 50 | | error | (err) => void | 导出错误 | 51 | 52 | ### ExcelData 53 | 54 | | 属性 | 类型 | 默认值 | 说明 | 55 | | ------- | --------------------- | ----- | ----------- | 56 | | header | string[] | - | table 表头 | 57 | | results | T[] | any[] | table 数据 | 58 | | meta | { sheetName: string } | - | table title | 59 | 60 | ## Export 61 | 62 | ``` ts 63 | import { aoaToSheetXlsx, jsonToSheetXlsx } from '~/components/Excel' 64 | ``` 65 | 66 | ### 数组格式数据导出 67 | 68 | ``` ts 69 | import { aoaToSheetXlsx } from '~/components/Excel' 70 | 71 | // 保证 data 顺序与 header 一致 72 | aoaToSheetXlsx({ 73 | data: [], 74 | header: [], 75 | filename: '二维数组方式导出excel.xlsx' 76 | }) 77 | ``` 78 | 79 | ### 自定义导出格式 80 | 81 | ``` ts 82 | import { jsonToSheetXlsx } from '~/components/Excel' 83 | 84 | jsonToSheetXlsx({ 85 | data, 86 | filename, 87 | write2excelOpts: { 88 | // 可以是 xlsx/html/csv/txt 89 | bookType 90 | } 91 | }) 92 | ``` 93 | 94 | ### json 格式导出 95 | 96 | ``` ts 97 | import { jsonToSheetXlsx } from '~/components/Excel' 98 | 99 | jsonToSheetXlsx({ 100 | data, 101 | filename: '使用 key 作为默认头部.xlsx', 102 | }) 103 | 104 | jsonToSheetXlsx({ 105 | data, 106 | header: { 107 | id: 'ID', 108 | name: '姓名', 109 | age: '年龄', 110 | no: '编号', 111 | address: '地址', 112 | beginTime: '开始时间', 113 | endTime: '结束时间' 114 | }, 115 | filename: '自定义头部.xlsx', 116 | json2sheetOpts: { 117 | // 指定顺序 118 | header: ['name', 'id'] 119 | } 120 | }) 121 | ``` 122 | 123 | ### Function 124 | 125 | | 方法 | 回调参数 | 返回值 | 说明 | 126 | | --------------- | ----------------------- | ------ | --------------------------- | 127 | | jsonToSheetXlsx | `Function(JsonToSheet)` | | json 格式数据,导出到 excel | 128 | | aoaToSheetXlsx | `Function(AoAToSheet)` | | 数组格式,导出到 excel | 129 | 130 | ### JsonToSheet Type 131 | 132 | | 属性 | 类型 | 默认值 | 说明 | 133 | | --- | --- | --- | --- | 134 | | data | `T[]` | | JSON 对象数组 | 135 | | header?: | `T`; | | 表头未设置则取 JSON 对象的 `key` 作为 `header` | 136 | | filename?: | `string` | `excel-list.xlsx` | 导出的文件名 | 137 | | json2sheetOpts?: | `JSON2SheetOpts` | | 调用 `XLSX.utils.json_to_sheet` 的可选参数 | 138 | | write2excelOpts?: | `WritingOptions` | `{ bookType: 'xlsx' }` | 调用 `XLSX.writeFile` 的可选参数,具体参 XLSX 文档 | 139 | 140 | ### AoAToSheet Type 141 | 142 | | 属性 | 类型 | 默认值 | 说明 | 143 | | ----------------- | --------------- | ---------------------- | -------------------------------- | 144 | | data | T[][]; | | 二维数组 | 145 | | header?: | T; | | 表头 ;未设置则没有表头 | 146 | | filename?: | string; | `excel-list.xlsx` | 导出的文件名 | 147 | | write2excelOpts?: | WritingOptions; | `{ bookType: 'xlsx' }` | 调用 `XLSX.writeFile` 的可选参数 | 148 | -------------------------------------------------------------------------------- /internal/build/tasks/component.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 安装依赖 pnpm install fast-glob -w -D 3 | */ 4 | import fs from 'fs/promises' 5 | import path from 'path' 6 | import { parallel, series } from 'gulp' 7 | import { rollup } from 'rollup' 8 | import type { OutputOptions } from 'rollup' 9 | import { nodeResolve } from '@rollup/plugin-node-resolve' 10 | import commonjs from '@rollup/plugin-commonjs' 11 | import vue from 'rollup-plugin-vue' 12 | import typescript from 'rollup-plugin-typescript2' 13 | import glob, { sync } from 'fast-glob' // 同步查找文件 14 | import { Project } from 'ts-morph' 15 | import type { SourceFile } from 'ts-morph' 16 | import * as VueCompiler from '@vue/compiler-sfc' 17 | import { pathRewriter, run } from '../utils' 18 | import { buildOutput, projectRoot, vueComponentRoot } from '../config/paths' 19 | import type { Module } from '../config/bundle' 20 | import { bundleConfig } from '../config/bundle' 21 | 22 | // 打包每个组件 23 | const buildEachComponent = async () => { 24 | // 查找 components 下所有的组件目录 ["icon", "button", ...] 25 | const files = sync('*', { 26 | cwd: vueComponentRoot, 27 | onlyDirectories: true, // 只查找文件夹 28 | }) 29 | 30 | // 分别把components文件夹下的组件,放到dist/es/components下 和 dist/lib/components 31 | const builds = files.map(async (file: string) => { 32 | // 找到每个组件的入口文件 index.ts 33 | const input = path.resolve(vueComponentRoot, file, 'index.ts') 34 | const config = { 35 | input, 36 | plugins: [nodeResolve(), typescript(), vue(), commonjs()], 37 | external: id => /^vue/.test(id) || /^@tg-ui/.test(id), // 排除掉vue和@w-plus的依赖 38 | } 39 | const bundle = await rollup(config) 40 | const options = Object.values(bundleConfig).map(config => ({ 41 | format: config.format, 42 | file: path.resolve(config.output.path, `components/${file}/index.js`), 43 | paths: pathRewriter(config.output.name as Module), // @tg-ui => tg-ui/es tg-ui/lib 处理路径 44 | exports: 'named', 45 | })) 46 | 47 | await Promise.all( 48 | options.map(option => bundle.write(option as OutputOptions)), 49 | ) 50 | }) 51 | 52 | return Promise.all(builds) 53 | } 54 | 55 | async function genTypes() { 56 | const project = new Project({ 57 | // 生成.d.ts 我们需要有一个tsconfig 58 | compilerOptions: { 59 | allowJs: true, 60 | declaration: true, 61 | emitDeclarationOnly: true, 62 | noEmitOnError: true, 63 | outDir: path.resolve(buildOutput, 'types'), 64 | baseUrl: projectRoot, 65 | paths: { 66 | '@tg-ui/*': ['packages/*'], 67 | }, 68 | skipLibCheck: true, 69 | strict: false, 70 | }, 71 | tsConfigFilePath: path.resolve(projectRoot, 'tsconfig.json'), 72 | skipAddingFilesFromTsConfig: true, 73 | }) 74 | 75 | const filePaths = await glob('**/*', { 76 | // ** 任意目录 * 任意文件 77 | cwd: vueComponentRoot, 78 | onlyFiles: true, 79 | absolute: true, 80 | }) 81 | 82 | const sourceFiles: SourceFile[] = [] 83 | 84 | await Promise.all( 85 | filePaths.map(async (file) => { 86 | if (file.endsWith('.vue')) { 87 | const content = await fs.readFile(file, 'utf8') 88 | const sfc = VueCompiler.parse(content) 89 | const { script } = sfc.descriptor 90 | if (script) { 91 | const content = script.content // 拿到脚本 icon.vue.ts => icon.vue.d.ts 92 | const sourceFile = project.createSourceFile(`${file}.ts`, content) 93 | sourceFiles.push(sourceFile) 94 | } 95 | } 96 | else { 97 | const sourceFile = project.addSourceFileAtPath(file) // 把所有的ts文件都放在一起 发射成.d.ts文件 98 | sourceFiles.push(sourceFile) 99 | } 100 | }), 101 | ) 102 | await project.emit({ 103 | // 默认是放到内存中的 104 | emitOnlyDtsFiles: true, 105 | }) 106 | 107 | const tasks = sourceFiles.map(async (sourceFile: any) => { 108 | const emitOutput = sourceFile.getEmitOutput() 109 | const tasks = emitOutput.getOutputFiles().map(async (outputFile: any) => { 110 | const filepath = outputFile.getFilePath() 111 | await fs.mkdir(path.dirname(filepath), { 112 | recursive: true, 113 | }) 114 | await fs.writeFile(filepath, pathRewriter('es' as Module)(outputFile.getText())) 115 | }) 116 | await Promise.all(tasks) 117 | }) 118 | 119 | await Promise.all(tasks) 120 | } 121 | 122 | function copyTypes() { 123 | const src = path.resolve(buildOutput, 'types/components/') 124 | const copy = (module) => { 125 | const output = path.resolve(buildOutput, module, 'components') 126 | return () => run(`cp -r ${src}/* ${output}`) 127 | } 128 | return parallel(copy('es'), copy('lib')) 129 | } 130 | 131 | async function buildComponentEntry() { 132 | const config = { 133 | input: path.resolve(vueComponentRoot, 'index.ts'), 134 | plugins: [typescript()], 135 | external: () => true, 136 | } 137 | const bundle = await rollup(config) 138 | return Promise.all( 139 | Object.values(bundleConfig) 140 | .map(config => ({ 141 | format: config.format, 142 | file: path.resolve(config.output.path, 'components/index.js'), 143 | })) 144 | .map(config => bundle.write(config as OutputOptions)), 145 | ) 146 | } 147 | 148 | export const buildComponent = series( 149 | buildEachComponent, 150 | genTypes, 151 | copyTypes(), 152 | buildComponentEntry, 153 | ) 154 | -------------------------------------------------------------------------------- /docs/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@types/node': ^17.0.23 5 | '@vue/theme': ^1.0.1 6 | unplugin-vue-components: ^0.18.5 7 | vite: ^2.9.1 8 | vitepress: ^0.22.3 9 | vue: ^3.2.31 10 | 11 | devDependencies: 12 | '@types/node': 17.0.23 13 | '@vue/theme': 1.0.1_vue@3.2.31 14 | unplugin-vue-components: 0.18.5_vite@2.9.1+vue@3.2.31 15 | vite: 2.9.1 16 | vitepress: 0.22.3 17 | vue: 3.2.31 18 | 19 | packages: 20 | 21 | /@algolia/autocomplete-core/1.5.2: 22 | resolution: {integrity: sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==} 23 | dependencies: 24 | '@algolia/autocomplete-shared': 1.5.2 25 | dev: true 26 | 27 | /@algolia/autocomplete-preset-algolia/1.5.2_algoliasearch@4.13.0: 28 | resolution: {integrity: sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==} 29 | peerDependencies: 30 | '@algolia/client-search': ^4.9.1 31 | algoliasearch: ^4.9.1 32 | dependencies: 33 | '@algolia/autocomplete-shared': 1.5.2 34 | algoliasearch: 4.13.0 35 | dev: true 36 | 37 | /@algolia/autocomplete-shared/1.5.2: 38 | resolution: {integrity: sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==} 39 | dev: true 40 | 41 | /@algolia/cache-browser-local-storage/4.13.0: 42 | resolution: {integrity: sha512-nj1vHRZauTqP/bluwkRIgEADEimqojJgoTRCel5f6q8WCa9Y8QeI4bpDQP28FoeKnDRYa3J5CauDlN466jqRhg==} 43 | dependencies: 44 | '@algolia/cache-common': 4.13.0 45 | dev: true 46 | 47 | /@algolia/cache-common/4.13.0: 48 | resolution: {integrity: sha512-f9mdZjskCui/dA/fA/5a+6hZ7xnHaaZI5tM/Rw9X8rRB39SUlF/+o3P47onZ33n/AwkpSbi5QOyhs16wHd55kA==} 49 | dev: true 50 | 51 | /@algolia/cache-in-memory/4.13.0: 52 | resolution: {integrity: sha512-hHdc+ahPiMM92CQMljmObE75laYzNFYLrNOu0Q3/eyvubZZRtY2SUsEEgyUEyzXruNdzrkcDxFYa7YpWBJYHAg==} 53 | dependencies: 54 | '@algolia/cache-common': 4.13.0 55 | dev: true 56 | 57 | /@algolia/client-account/4.13.0: 58 | resolution: {integrity: sha512-FzFqFt9b0g/LKszBDoEsW+dVBuUe1K3scp2Yf7q6pgHWM1WqyqUlARwVpLxqyc+LoyJkTxQftOKjyFUqddnPKA==} 59 | dependencies: 60 | '@algolia/client-common': 4.13.0 61 | '@algolia/client-search': 4.13.0 62 | '@algolia/transporter': 4.13.0 63 | dev: true 64 | 65 | /@algolia/client-analytics/4.13.0: 66 | resolution: {integrity: sha512-klmnoq2FIiiMHImkzOm+cGxqRLLu9CMHqFhbgSy9wtXZrqb8BBUIUE2VyBe7azzv1wKcxZV2RUyNOMpFqmnRZA==} 67 | dependencies: 68 | '@algolia/client-common': 4.13.0 69 | '@algolia/client-search': 4.13.0 70 | '@algolia/requester-common': 4.13.0 71 | '@algolia/transporter': 4.13.0 72 | dev: true 73 | 74 | /@algolia/client-common/4.13.0: 75 | resolution: {integrity: sha512-GoXfTp0kVcbgfSXOjfrxx+slSipMqGO9WnNWgeMmru5Ra09MDjrcdunsiiuzF0wua6INbIpBQFTC2Mi5lUNqGA==} 76 | dependencies: 77 | '@algolia/requester-common': 4.13.0 78 | '@algolia/transporter': 4.13.0 79 | dev: true 80 | 81 | /@algolia/client-personalization/4.13.0: 82 | resolution: {integrity: sha512-KneLz2WaehJmNfdr5yt2HQETpLaCYagRdWwIwkTqRVFCv4DxRQ2ChPVW9jeTj4YfAAhfzE6F8hn7wkQ/Jfj6ZA==} 83 | dependencies: 84 | '@algolia/client-common': 4.13.0 85 | '@algolia/requester-common': 4.13.0 86 | '@algolia/transporter': 4.13.0 87 | dev: true 88 | 89 | /@algolia/client-search/4.13.0: 90 | resolution: {integrity: sha512-blgCKYbZh1NgJWzeGf+caKE32mo3j54NprOf0LZVCubQb3Kx37tk1Hc8SDs9bCAE8hUvf3cazMPIg7wscSxspA==} 91 | dependencies: 92 | '@algolia/client-common': 4.13.0 93 | '@algolia/requester-common': 4.13.0 94 | '@algolia/transporter': 4.13.0 95 | dev: true 96 | 97 | /@algolia/logger-common/4.13.0: 98 | resolution: {integrity: sha512-8yqXk7rMtmQJ9wZiHOt/6d4/JDEg5VCk83gJ39I+X/pwUPzIsbKy9QiK4uJ3aJELKyoIiDT1hpYVt+5ia+94IA==} 99 | dev: true 100 | 101 | /@algolia/logger-console/4.13.0: 102 | resolution: {integrity: sha512-YepRg7w2/87L0vSXRfMND6VJ5d6699sFJBRWzZPOlek2p5fLxxK7O0VncYuc/IbVHEgeApvgXx0WgCEa38GVuQ==} 103 | dependencies: 104 | '@algolia/logger-common': 4.13.0 105 | dev: true 106 | 107 | /@algolia/requester-browser-xhr/4.13.0: 108 | resolution: {integrity: sha512-Dj+bnoWR5MotrnjblzGKZ2kCdQi2cK/VzPURPnE616NU/il7Ypy6U6DLGZ/ZYz+tnwPa0yypNf21uqt84fOgrg==} 109 | dependencies: 110 | '@algolia/requester-common': 4.13.0 111 | dev: true 112 | 113 | /@algolia/requester-common/4.13.0: 114 | resolution: {integrity: sha512-BRTDj53ecK+gn7ugukDWOOcBRul59C4NblCHqj4Zm5msd5UnHFjd/sGX+RLOEoFMhetILAnmg6wMrRrQVac9vw==} 115 | dev: true 116 | 117 | /@algolia/requester-node-http/4.13.0: 118 | resolution: {integrity: sha512-9b+3O4QFU4azLhGMrZAr/uZPydvzOR4aEZfSL8ZrpLZ7fbbqTO0S/5EVko+QIgglRAtVwxvf8UJ1wzTD2jvKxQ==} 119 | dependencies: 120 | '@algolia/requester-common': 4.13.0 121 | dev: true 122 | 123 | /@algolia/transporter/4.13.0: 124 | resolution: {integrity: sha512-8tSQYE+ykQENAdeZdofvtkOr5uJ9VcQSWgRhQ9h01AehtBIPAczk/b2CLrMsw5yQZziLs5cZ3pJ3478yI+urhA==} 125 | dependencies: 126 | '@algolia/cache-common': 4.13.0 127 | '@algolia/logger-common': 4.13.0 128 | '@algolia/requester-common': 4.13.0 129 | dev: true 130 | 131 | /@antfu/utils/0.5.0: 132 | resolution: {integrity: sha512-MrAQ/MrPSxbh1bBrmwJjORfJymw4IqSHFBXqvxaga3ZdDM+/zokYF8DjyJpSjY2QmpmgQrajDUBJOWrYeARfzA==} 133 | dev: true 134 | 135 | /@babel/parser/7.17.9: 136 | resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==} 137 | engines: {node: '>=6.0.0'} 138 | hasBin: true 139 | dev: true 140 | 141 | /@docsearch/css/3.0.0: 142 | resolution: {integrity: sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA==} 143 | dev: true 144 | 145 | /@docsearch/js/3.0.0: 146 | resolution: {integrity: sha512-j3tUJWlgW3slYqzGB8fm7y05kh2qqrIK1dZOXHeMUm/5gdKE85fiz/ltfCPMDFb/MXF+bLZChJXSMzqY0Ck30Q==} 147 | dependencies: 148 | '@docsearch/react': 3.0.0 149 | preact: 10.7.1 150 | transitivePeerDependencies: 151 | - '@algolia/client-search' 152 | - '@types/react' 153 | - react 154 | - react-dom 155 | dev: true 156 | 157 | /@docsearch/react/3.0.0: 158 | resolution: {integrity: sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg==} 159 | peerDependencies: 160 | '@types/react': '>= 16.8.0 < 18.0.0' 161 | react: '>= 16.8.0 < 18.0.0' 162 | react-dom: '>= 16.8.0 < 18.0.0' 163 | dependencies: 164 | '@algolia/autocomplete-core': 1.5.2 165 | '@algolia/autocomplete-preset-algolia': 1.5.2_algoliasearch@4.13.0 166 | '@docsearch/css': 3.0.0 167 | algoliasearch: 4.13.0 168 | transitivePeerDependencies: 169 | - '@algolia/client-search' 170 | dev: true 171 | 172 | /@nodelib/fs.scandir/2.1.5: 173 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 174 | engines: {node: '>= 8'} 175 | dependencies: 176 | '@nodelib/fs.stat': 2.0.5 177 | run-parallel: 1.2.0 178 | dev: true 179 | 180 | /@nodelib/fs.stat/2.0.5: 181 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 182 | engines: {node: '>= 8'} 183 | dev: true 184 | 185 | /@nodelib/fs.walk/1.2.8: 186 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 187 | engines: {node: '>= 8'} 188 | dependencies: 189 | '@nodelib/fs.scandir': 2.1.5 190 | fastq: 1.13.0 191 | dev: true 192 | 193 | /@rollup/pluginutils/4.2.0: 194 | resolution: {integrity: sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==} 195 | engines: {node: '>= 8.0.0'} 196 | dependencies: 197 | estree-walker: 2.0.2 198 | picomatch: 2.3.1 199 | dev: true 200 | 201 | /@types/node/17.0.23: 202 | resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==} 203 | dev: true 204 | 205 | /@vitejs/plugin-vue/2.3.1_vite@2.9.1+vue@3.2.31: 206 | resolution: {integrity: sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==} 207 | engines: {node: '>=12.0.0'} 208 | peerDependencies: 209 | vite: ^2.5.10 210 | vue: ^3.2.25 211 | dependencies: 212 | vite: 2.9.1 213 | vue: 3.2.31 214 | dev: true 215 | 216 | /@vue/compiler-core/3.2.31: 217 | resolution: {integrity: sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==} 218 | dependencies: 219 | '@babel/parser': 7.17.9 220 | '@vue/shared': 3.2.31 221 | estree-walker: 2.0.2 222 | source-map: 0.6.1 223 | dev: true 224 | 225 | /@vue/compiler-dom/3.2.31: 226 | resolution: {integrity: sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==} 227 | dependencies: 228 | '@vue/compiler-core': 3.2.31 229 | '@vue/shared': 3.2.31 230 | dev: true 231 | 232 | /@vue/compiler-sfc/3.2.31: 233 | resolution: {integrity: sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==} 234 | dependencies: 235 | '@babel/parser': 7.17.9 236 | '@vue/compiler-core': 3.2.31 237 | '@vue/compiler-dom': 3.2.31 238 | '@vue/compiler-ssr': 3.2.31 239 | '@vue/reactivity-transform': 3.2.31 240 | '@vue/shared': 3.2.31 241 | estree-walker: 2.0.2 242 | magic-string: 0.25.9 243 | postcss: 8.4.12 244 | source-map: 0.6.1 245 | dev: true 246 | 247 | /@vue/compiler-ssr/3.2.31: 248 | resolution: {integrity: sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==} 249 | dependencies: 250 | '@vue/compiler-dom': 3.2.31 251 | '@vue/shared': 3.2.31 252 | dev: true 253 | 254 | /@vue/reactivity-transform/3.2.31: 255 | resolution: {integrity: sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==} 256 | dependencies: 257 | '@babel/parser': 7.17.9 258 | '@vue/compiler-core': 3.2.31 259 | '@vue/shared': 3.2.31 260 | estree-walker: 2.0.2 261 | magic-string: 0.25.9 262 | dev: true 263 | 264 | /@vue/reactivity/3.2.31: 265 | resolution: {integrity: sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==} 266 | dependencies: 267 | '@vue/shared': 3.2.31 268 | dev: true 269 | 270 | /@vue/runtime-core/3.2.31: 271 | resolution: {integrity: sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==} 272 | dependencies: 273 | '@vue/reactivity': 3.2.31 274 | '@vue/shared': 3.2.31 275 | dev: true 276 | 277 | /@vue/runtime-dom/3.2.31: 278 | resolution: {integrity: sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==} 279 | dependencies: 280 | '@vue/runtime-core': 3.2.31 281 | '@vue/shared': 3.2.31 282 | csstype: 2.6.20 283 | dev: true 284 | 285 | /@vue/server-renderer/3.2.31_vue@3.2.31: 286 | resolution: {integrity: sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==} 287 | peerDependencies: 288 | vue: 3.2.31 289 | dependencies: 290 | '@vue/compiler-ssr': 3.2.31 291 | '@vue/shared': 3.2.31 292 | vue: 3.2.31 293 | dev: true 294 | 295 | /@vue/shared/3.2.31: 296 | resolution: {integrity: sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==} 297 | dev: true 298 | 299 | /@vue/theme/1.0.1_vue@3.2.31: 300 | resolution: {integrity: sha512-yVynG5l1BNAh8eQCGg19cyt5TMcbqQCAErT/XZUJOjVT4FjGK1ofGc3wUnDan1JSRF2WNBLOLZHwjc5dJy1Haw==} 301 | dependencies: 302 | '@docsearch/css': 3.0.0 303 | '@docsearch/js': 3.0.0 304 | '@vueuse/core': 7.7.1_vue@3.2.31 305 | body-scroll-lock: 3.1.5 306 | normalize.css: 8.0.1 307 | shiki: 0.9.15 308 | transitivePeerDependencies: 309 | - '@algolia/client-search' 310 | - '@types/react' 311 | - '@vue/composition-api' 312 | - react 313 | - react-dom 314 | - vue 315 | dev: true 316 | 317 | /@vueuse/core/7.7.1_vue@3.2.31: 318 | resolution: {integrity: sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==} 319 | peerDependencies: 320 | '@vue/composition-api': ^1.1.0 321 | vue: ^2.6.0 || ^3.2.0 322 | peerDependenciesMeta: 323 | '@vue/composition-api': 324 | optional: true 325 | vue: 326 | optional: true 327 | dependencies: 328 | '@vueuse/shared': 7.7.1_vue@3.2.31 329 | vue: 3.2.31 330 | vue-demi: 0.12.5_vue@3.2.31 331 | dev: true 332 | 333 | /@vueuse/shared/7.7.1_vue@3.2.31: 334 | resolution: {integrity: sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==} 335 | peerDependencies: 336 | '@vue/composition-api': ^1.1.0 337 | vue: ^2.6.0 || ^3.2.0 338 | peerDependenciesMeta: 339 | '@vue/composition-api': 340 | optional: true 341 | vue: 342 | optional: true 343 | dependencies: 344 | vue: 3.2.31 345 | vue-demi: 0.12.5_vue@3.2.31 346 | dev: true 347 | 348 | /algoliasearch/4.13.0: 349 | resolution: {integrity: sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw==} 350 | dependencies: 351 | '@algolia/cache-browser-local-storage': 4.13.0 352 | '@algolia/cache-common': 4.13.0 353 | '@algolia/cache-in-memory': 4.13.0 354 | '@algolia/client-account': 4.13.0 355 | '@algolia/client-analytics': 4.13.0 356 | '@algolia/client-common': 4.13.0 357 | '@algolia/client-personalization': 4.13.0 358 | '@algolia/client-search': 4.13.0 359 | '@algolia/logger-common': 4.13.0 360 | '@algolia/logger-console': 4.13.0 361 | '@algolia/requester-browser-xhr': 4.13.0 362 | '@algolia/requester-common': 4.13.0 363 | '@algolia/requester-node-http': 4.13.0 364 | '@algolia/transporter': 4.13.0 365 | dev: true 366 | 367 | /anymatch/3.1.2: 368 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 369 | engines: {node: '>= 8'} 370 | dependencies: 371 | normalize-path: 3.0.0 372 | picomatch: 2.3.1 373 | dev: true 374 | 375 | /balanced-match/1.0.2: 376 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 377 | dev: true 378 | 379 | /binary-extensions/2.2.0: 380 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 381 | engines: {node: '>=8'} 382 | dev: true 383 | 384 | /body-scroll-lock/3.1.5: 385 | resolution: {integrity: sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==} 386 | dev: true 387 | 388 | /brace-expansion/2.0.1: 389 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 390 | dependencies: 391 | balanced-match: 1.0.2 392 | dev: true 393 | 394 | /braces/3.0.2: 395 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 396 | engines: {node: '>=8'} 397 | dependencies: 398 | fill-range: 7.0.1 399 | dev: true 400 | 401 | /chokidar/3.5.3: 402 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 403 | engines: {node: '>= 8.10.0'} 404 | dependencies: 405 | anymatch: 3.1.2 406 | braces: 3.0.2 407 | glob-parent: 5.1.2 408 | is-binary-path: 2.1.0 409 | is-glob: 4.0.3 410 | normalize-path: 3.0.0 411 | readdirp: 3.6.0 412 | optionalDependencies: 413 | fsevents: 2.3.2 414 | dev: true 415 | 416 | /csstype/2.6.20: 417 | resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} 418 | dev: true 419 | 420 | /debug/4.3.4: 421 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 422 | engines: {node: '>=6.0'} 423 | peerDependencies: 424 | supports-color: '*' 425 | peerDependenciesMeta: 426 | supports-color: 427 | optional: true 428 | dependencies: 429 | ms: 2.1.2 430 | dev: true 431 | 432 | /esbuild-android-64/0.14.34: 433 | resolution: {integrity: sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw==} 434 | engines: {node: '>=12'} 435 | cpu: [x64] 436 | os: [android] 437 | requiresBuild: true 438 | dev: true 439 | optional: true 440 | 441 | /esbuild-android-arm64/0.14.34: 442 | resolution: {integrity: sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew==} 443 | engines: {node: '>=12'} 444 | cpu: [arm64] 445 | os: [android] 446 | requiresBuild: true 447 | dev: true 448 | optional: true 449 | 450 | /esbuild-darwin-64/0.14.34: 451 | resolution: {integrity: sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw==} 452 | engines: {node: '>=12'} 453 | cpu: [x64] 454 | os: [darwin] 455 | requiresBuild: true 456 | dev: true 457 | optional: true 458 | 459 | /esbuild-darwin-arm64/0.14.34: 460 | resolution: {integrity: sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w==} 461 | engines: {node: '>=12'} 462 | cpu: [arm64] 463 | os: [darwin] 464 | requiresBuild: true 465 | dev: true 466 | optional: true 467 | 468 | /esbuild-freebsd-64/0.14.34: 469 | resolution: {integrity: sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA==} 470 | engines: {node: '>=12'} 471 | cpu: [x64] 472 | os: [freebsd] 473 | requiresBuild: true 474 | dev: true 475 | optional: true 476 | 477 | /esbuild-freebsd-arm64/0.14.34: 478 | resolution: {integrity: sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA==} 479 | engines: {node: '>=12'} 480 | cpu: [arm64] 481 | os: [freebsd] 482 | requiresBuild: true 483 | dev: true 484 | optional: true 485 | 486 | /esbuild-linux-32/0.14.34: 487 | resolution: {integrity: sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ==} 488 | engines: {node: '>=12'} 489 | cpu: [ia32] 490 | os: [linux] 491 | requiresBuild: true 492 | dev: true 493 | optional: true 494 | 495 | /esbuild-linux-64/0.14.34: 496 | resolution: {integrity: sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ==} 497 | engines: {node: '>=12'} 498 | cpu: [x64] 499 | os: [linux] 500 | requiresBuild: true 501 | dev: true 502 | optional: true 503 | 504 | /esbuild-linux-arm/0.14.34: 505 | resolution: {integrity: sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg==} 506 | engines: {node: '>=12'} 507 | cpu: [arm] 508 | os: [linux] 509 | requiresBuild: true 510 | dev: true 511 | optional: true 512 | 513 | /esbuild-linux-arm64/0.14.34: 514 | resolution: {integrity: sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA==} 515 | engines: {node: '>=12'} 516 | cpu: [arm64] 517 | os: [linux] 518 | requiresBuild: true 519 | dev: true 520 | optional: true 521 | 522 | /esbuild-linux-mips64le/0.14.34: 523 | resolution: {integrity: sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw==} 524 | engines: {node: '>=12'} 525 | cpu: [mips64el] 526 | os: [linux] 527 | requiresBuild: true 528 | dev: true 529 | optional: true 530 | 531 | /esbuild-linux-ppc64le/0.14.34: 532 | resolution: {integrity: sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg==} 533 | engines: {node: '>=12'} 534 | cpu: [ppc64] 535 | os: [linux] 536 | requiresBuild: true 537 | dev: true 538 | optional: true 539 | 540 | /esbuild-linux-riscv64/0.14.34: 541 | resolution: {integrity: sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA==} 542 | engines: {node: '>=12'} 543 | cpu: [riscv64] 544 | os: [linux] 545 | requiresBuild: true 546 | dev: true 547 | optional: true 548 | 549 | /esbuild-linux-s390x/0.14.34: 550 | resolution: {integrity: sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA==} 551 | engines: {node: '>=12'} 552 | cpu: [s390x] 553 | os: [linux] 554 | requiresBuild: true 555 | dev: true 556 | optional: true 557 | 558 | /esbuild-netbsd-64/0.14.34: 559 | resolution: {integrity: sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ==} 560 | engines: {node: '>=12'} 561 | cpu: [x64] 562 | os: [netbsd] 563 | requiresBuild: true 564 | dev: true 565 | optional: true 566 | 567 | /esbuild-openbsd-64/0.14.34: 568 | resolution: {integrity: sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow==} 569 | engines: {node: '>=12'} 570 | cpu: [x64] 571 | os: [openbsd] 572 | requiresBuild: true 573 | dev: true 574 | optional: true 575 | 576 | /esbuild-sunos-64/0.14.34: 577 | resolution: {integrity: sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA==} 578 | engines: {node: '>=12'} 579 | cpu: [x64] 580 | os: [sunos] 581 | requiresBuild: true 582 | dev: true 583 | optional: true 584 | 585 | /esbuild-windows-32/0.14.34: 586 | resolution: {integrity: sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg==} 587 | engines: {node: '>=12'} 588 | cpu: [ia32] 589 | os: [win32] 590 | requiresBuild: true 591 | dev: true 592 | optional: true 593 | 594 | /esbuild-windows-64/0.14.34: 595 | resolution: {integrity: sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q==} 596 | engines: {node: '>=12'} 597 | cpu: [x64] 598 | os: [win32] 599 | requiresBuild: true 600 | dev: true 601 | optional: true 602 | 603 | /esbuild-windows-arm64/0.14.34: 604 | resolution: {integrity: sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg==} 605 | engines: {node: '>=12'} 606 | cpu: [arm64] 607 | os: [win32] 608 | requiresBuild: true 609 | dev: true 610 | optional: true 611 | 612 | /esbuild/0.14.34: 613 | resolution: {integrity: sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg==} 614 | engines: {node: '>=12'} 615 | hasBin: true 616 | requiresBuild: true 617 | optionalDependencies: 618 | esbuild-android-64: 0.14.34 619 | esbuild-android-arm64: 0.14.34 620 | esbuild-darwin-64: 0.14.34 621 | esbuild-darwin-arm64: 0.14.34 622 | esbuild-freebsd-64: 0.14.34 623 | esbuild-freebsd-arm64: 0.14.34 624 | esbuild-linux-32: 0.14.34 625 | esbuild-linux-64: 0.14.34 626 | esbuild-linux-arm: 0.14.34 627 | esbuild-linux-arm64: 0.14.34 628 | esbuild-linux-mips64le: 0.14.34 629 | esbuild-linux-ppc64le: 0.14.34 630 | esbuild-linux-riscv64: 0.14.34 631 | esbuild-linux-s390x: 0.14.34 632 | esbuild-netbsd-64: 0.14.34 633 | esbuild-openbsd-64: 0.14.34 634 | esbuild-sunos-64: 0.14.34 635 | esbuild-windows-32: 0.14.34 636 | esbuild-windows-64: 0.14.34 637 | esbuild-windows-arm64: 0.14.34 638 | dev: true 639 | 640 | /estree-walker/2.0.2: 641 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 642 | dev: true 643 | 644 | /fast-glob/3.2.11: 645 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 646 | engines: {node: '>=8.6.0'} 647 | dependencies: 648 | '@nodelib/fs.stat': 2.0.5 649 | '@nodelib/fs.walk': 1.2.8 650 | glob-parent: 5.1.2 651 | merge2: 1.4.1 652 | micromatch: 4.0.5 653 | dev: true 654 | 655 | /fastq/1.13.0: 656 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 657 | dependencies: 658 | reusify: 1.0.4 659 | dev: true 660 | 661 | /fill-range/7.0.1: 662 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 663 | engines: {node: '>=8'} 664 | dependencies: 665 | to-regex-range: 5.0.1 666 | dev: true 667 | 668 | /fsevents/2.3.2: 669 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 670 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 671 | os: [darwin] 672 | requiresBuild: true 673 | dev: true 674 | optional: true 675 | 676 | /function-bind/1.1.1: 677 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 678 | dev: true 679 | 680 | /glob-parent/5.1.2: 681 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 682 | engines: {node: '>= 6'} 683 | dependencies: 684 | is-glob: 4.0.3 685 | dev: true 686 | 687 | /has/1.0.3: 688 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 689 | engines: {node: '>= 0.4.0'} 690 | dependencies: 691 | function-bind: 1.1.1 692 | dev: true 693 | 694 | /is-binary-path/2.1.0: 695 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 696 | engines: {node: '>=8'} 697 | dependencies: 698 | binary-extensions: 2.2.0 699 | dev: true 700 | 701 | /is-core-module/2.8.1: 702 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 703 | dependencies: 704 | has: 1.0.3 705 | dev: true 706 | 707 | /is-extglob/2.1.1: 708 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 709 | engines: {node: '>=0.10.0'} 710 | dev: true 711 | 712 | /is-glob/4.0.3: 713 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 714 | engines: {node: '>=0.10.0'} 715 | dependencies: 716 | is-extglob: 2.1.1 717 | dev: true 718 | 719 | /is-number/7.0.0: 720 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 721 | engines: {node: '>=0.12.0'} 722 | dev: true 723 | 724 | /jsonc-parser/3.0.0: 725 | resolution: {integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==} 726 | dev: true 727 | 728 | /local-pkg/0.4.1: 729 | resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} 730 | engines: {node: '>=14'} 731 | dev: true 732 | 733 | /magic-string/0.25.9: 734 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 735 | dependencies: 736 | sourcemap-codec: 1.4.8 737 | dev: true 738 | 739 | /magic-string/0.26.1: 740 | resolution: {integrity: sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==} 741 | engines: {node: '>=12'} 742 | dependencies: 743 | sourcemap-codec: 1.4.8 744 | dev: true 745 | 746 | /merge2/1.4.1: 747 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 748 | engines: {node: '>= 8'} 749 | dev: true 750 | 751 | /micromatch/4.0.5: 752 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 753 | engines: {node: '>=8.6'} 754 | dependencies: 755 | braces: 3.0.2 756 | picomatch: 2.3.1 757 | dev: true 758 | 759 | /minimatch/5.0.1: 760 | resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} 761 | engines: {node: '>=10'} 762 | dependencies: 763 | brace-expansion: 2.0.1 764 | dev: true 765 | 766 | /ms/2.1.2: 767 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 768 | dev: true 769 | 770 | /nanoid/3.3.2: 771 | resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} 772 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 773 | hasBin: true 774 | dev: true 775 | 776 | /normalize-path/3.0.0: 777 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 778 | engines: {node: '>=0.10.0'} 779 | dev: true 780 | 781 | /normalize.css/8.0.1: 782 | resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} 783 | dev: true 784 | 785 | /path-parse/1.0.7: 786 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 787 | dev: true 788 | 789 | /picocolors/1.0.0: 790 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 791 | dev: true 792 | 793 | /picomatch/2.3.1: 794 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 795 | engines: {node: '>=8.6'} 796 | dev: true 797 | 798 | /postcss/8.4.12: 799 | resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} 800 | engines: {node: ^10 || ^12 || >=14} 801 | dependencies: 802 | nanoid: 3.3.2 803 | picocolors: 1.0.0 804 | source-map-js: 1.0.2 805 | dev: true 806 | 807 | /preact/10.7.1: 808 | resolution: {integrity: sha512-MufnRFz39aIhs9AMFisonjzTud1PK1bY+jcJLo6m2T9Uh8AqjD77w11eAAawmjUogoGOnipECq7e/1RClIKsxg==} 809 | dev: true 810 | 811 | /prismjs/1.27.0: 812 | resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} 813 | engines: {node: '>=6'} 814 | dev: true 815 | 816 | /queue-microtask/1.2.3: 817 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 818 | dev: true 819 | 820 | /readdirp/3.6.0: 821 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 822 | engines: {node: '>=8.10.0'} 823 | dependencies: 824 | picomatch: 2.3.1 825 | dev: true 826 | 827 | /resolve/1.22.0: 828 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 829 | hasBin: true 830 | dependencies: 831 | is-core-module: 2.8.1 832 | path-parse: 1.0.7 833 | supports-preserve-symlinks-flag: 1.0.0 834 | dev: true 835 | 836 | /reusify/1.0.4: 837 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 838 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 839 | dev: true 840 | 841 | /rollup/2.70.1: 842 | resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} 843 | engines: {node: '>=10.0.0'} 844 | hasBin: true 845 | optionalDependencies: 846 | fsevents: 2.3.2 847 | dev: true 848 | 849 | /run-parallel/1.2.0: 850 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 851 | dependencies: 852 | queue-microtask: 1.2.3 853 | dev: true 854 | 855 | /shiki/0.9.15: 856 | resolution: {integrity: sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==} 857 | dependencies: 858 | jsonc-parser: 3.0.0 859 | vscode-oniguruma: 1.6.2 860 | vscode-textmate: 5.2.0 861 | dev: true 862 | 863 | /source-map-js/1.0.2: 864 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 865 | engines: {node: '>=0.10.0'} 866 | dev: true 867 | 868 | /source-map/0.6.1: 869 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 870 | engines: {node: '>=0.10.0'} 871 | dev: true 872 | 873 | /sourcemap-codec/1.4.8: 874 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 875 | dev: true 876 | 877 | /supports-preserve-symlinks-flag/1.0.0: 878 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 879 | engines: {node: '>= 0.4'} 880 | dev: true 881 | 882 | /to-regex-range/5.0.1: 883 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 884 | engines: {node: '>=8.0'} 885 | dependencies: 886 | is-number: 7.0.0 887 | dev: true 888 | 889 | /unplugin-vue-components/0.18.5_vite@2.9.1+vue@3.2.31: 890 | resolution: {integrity: sha512-VPA6z/4pcKRDYtWu1H+FIpV0MADlFKG3q7YMVFzNFC3EhMVZ4WuBJ76490oKyauguNw1T1obLCuxNU9JzJ0oAQ==} 891 | engines: {node: '>=14'} 892 | peerDependencies: 893 | '@babel/parser': ^7.15.8 894 | '@babel/traverse': ^7.15.4 895 | vue: 2 || 3 896 | peerDependenciesMeta: 897 | '@babel/parser': 898 | optional: true 899 | '@babel/traverse': 900 | optional: true 901 | dependencies: 902 | '@antfu/utils': 0.5.0 903 | '@rollup/pluginutils': 4.2.0 904 | chokidar: 3.5.3 905 | debug: 4.3.4 906 | fast-glob: 3.2.11 907 | local-pkg: 0.4.1 908 | magic-string: 0.26.1 909 | minimatch: 5.0.1 910 | resolve: 1.22.0 911 | unplugin: 0.4.0_vite@2.9.1 912 | vue: 3.2.31 913 | transitivePeerDependencies: 914 | - esbuild 915 | - rollup 916 | - supports-color 917 | - vite 918 | - webpack 919 | dev: true 920 | 921 | /unplugin/0.4.0_vite@2.9.1: 922 | resolution: {integrity: sha512-4ScITEmzlz1iZW3tkz+3L1V5k/xMQ6kjgm4lEXKxH0ozd8/OUWfiSA7RMRyrawsvq/t50JIzPpp1UyuSL/AXkA==} 923 | peerDependencies: 924 | esbuild: '>=0.13' 925 | rollup: ^2.50.0 926 | vite: ^2.3.0 927 | webpack: 4 || 5 928 | peerDependenciesMeta: 929 | esbuild: 930 | optional: true 931 | rollup: 932 | optional: true 933 | vite: 934 | optional: true 935 | webpack: 936 | optional: true 937 | dependencies: 938 | chokidar: 3.5.3 939 | vite: 2.9.1 940 | webpack-virtual-modules: 0.4.3 941 | dev: true 942 | 943 | /vite/2.9.1: 944 | resolution: {integrity: sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==} 945 | engines: {node: '>=12.2.0'} 946 | hasBin: true 947 | peerDependencies: 948 | less: '*' 949 | sass: '*' 950 | stylus: '*' 951 | peerDependenciesMeta: 952 | less: 953 | optional: true 954 | sass: 955 | optional: true 956 | stylus: 957 | optional: true 958 | dependencies: 959 | esbuild: 0.14.34 960 | postcss: 8.4.12 961 | resolve: 1.22.0 962 | rollup: 2.70.1 963 | optionalDependencies: 964 | fsevents: 2.3.2 965 | dev: true 966 | 967 | /vitepress/0.22.3: 968 | resolution: {integrity: sha512-Yfvu/rent2vp/TXIDZMutS6ft2TJPn4xngS48PYFWDEbuFI2ccUAXM481lF1qVVnCKxfh4g8e/KPvevSJdg1Bw==} 969 | engines: {node: '>=14.0.0'} 970 | hasBin: true 971 | dependencies: 972 | '@docsearch/css': 3.0.0 973 | '@docsearch/js': 3.0.0 974 | '@vitejs/plugin-vue': 2.3.1_vite@2.9.1+vue@3.2.31 975 | prismjs: 1.27.0 976 | vite: 2.9.1 977 | vue: 3.2.31 978 | transitivePeerDependencies: 979 | - '@algolia/client-search' 980 | - '@types/react' 981 | - less 982 | - react 983 | - react-dom 984 | - sass 985 | - stylus 986 | dev: true 987 | 988 | /vscode-oniguruma/1.6.2: 989 | resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==} 990 | dev: true 991 | 992 | /vscode-textmate/5.2.0: 993 | resolution: {integrity: sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==} 994 | dev: true 995 | 996 | /vue-demi/0.12.5_vue@3.2.31: 997 | resolution: {integrity: sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==} 998 | engines: {node: '>=12'} 999 | hasBin: true 1000 | requiresBuild: true 1001 | peerDependencies: 1002 | '@vue/composition-api': ^1.0.0-rc.1 1003 | vue: ^3.0.0-0 || ^2.6.0 1004 | peerDependenciesMeta: 1005 | '@vue/composition-api': 1006 | optional: true 1007 | dependencies: 1008 | vue: 3.2.31 1009 | dev: true 1010 | 1011 | /vue/3.2.31: 1012 | resolution: {integrity: sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==} 1013 | dependencies: 1014 | '@vue/compiler-dom': 3.2.31 1015 | '@vue/compiler-sfc': 3.2.31 1016 | '@vue/runtime-dom': 3.2.31 1017 | '@vue/server-renderer': 3.2.31_vue@3.2.31 1018 | '@vue/shared': 3.2.31 1019 | dev: true 1020 | 1021 | /webpack-virtual-modules/0.4.3: 1022 | resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} 1023 | dev: true 1024 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/icon.scss: -------------------------------------------------------------------------------- 1 | @use './mixins/mixins.scss' as *; 2 | 3 | @font-face { 4 | font-family: 'tg-ui-icons'; /* Project id 3302839 */ 5 | src: url('./fonts/iconfont.woff2') format('woff2'), url('./fonts/iconfont.woff') format('woff'), 6 | url('./fonts/iconfont.ttf') format('truetype'); 7 | } 8 | 9 | [class^='#{$namespace}-icon'], [class*='#{$namespace}-icon'] { 10 | font-family: 'tg-ui-icons' !important; 11 | font-size: 16px; 12 | font-style: normal; 13 | -webkit-font-smoothing: antialiased; 14 | -moz-osx-font-smoothing: grayscale; 15 | } 16 | 17 | .#{$namespace}-icon-tag:before { 18 | content: '\e84a'; 19 | } 20 | 21 | .#{$namespace}-icon-dropbox:before { 22 | content: '\e94a'; 23 | } 24 | 25 | .#{$namespace}-icon-wrench:before { 26 | content: '\e84b'; 27 | } 28 | 29 | .#{$namespace}-icon-dingtalk:before { 30 | content: '\e94b'; 31 | } 32 | 33 | .#{$namespace}-icon-tags:before { 34 | content: '\e84c'; 35 | } 36 | 37 | .#{$namespace}-icon-android-fill:before { 38 | content: '\e94c'; 39 | } 40 | 41 | .#{$namespace}-icon-scissor:before { 42 | content: '\e84d'; 43 | } 44 | 45 | .#{$namespace}-icon-apple-fill:before { 46 | content: '\e94d'; 47 | } 48 | 49 | .#{$namespace}-icon-mr:before { 50 | content: '\e84e'; 51 | } 52 | 53 | .#{$namespace}-icon-html-fill:before { 54 | content: '\e94e'; 55 | } 56 | 57 | .#{$namespace}-icon-share:before { 58 | content: '\e84f'; 59 | } 60 | 61 | .#{$namespace}-icon-windows-fill:before { 62 | content: '\e94f'; 63 | } 64 | 65 | .#{$namespace}-icon-branches:before { 66 | content: '\e850'; 67 | } 68 | 69 | .#{$namespace}-icon-qq:before { 70 | content: '\e950'; 71 | } 72 | 73 | .#{$namespace}-icon-fork:before { 74 | content: '\e851'; 75 | } 76 | 77 | .#{$namespace}-icon-twitter:before { 78 | content: '\e951'; 79 | } 80 | 81 | .#{$namespace}-icon-shrink:before { 82 | content: '\e852'; 83 | } 84 | 85 | .#{$namespace}-icon-skype-fill:before { 86 | content: '\e952'; 87 | } 88 | 89 | .#{$namespace}-icon-arrawsalt:before { 90 | content: '\e853'; 91 | } 92 | 93 | .#{$namespace}-icon-weibo:before { 94 | content: '\e953'; 95 | } 96 | 97 | .#{$namespace}-icon-verticalright:before { 98 | content: '\e854'; 99 | } 100 | 101 | .#{$namespace}-icon-yuque-fill:before { 102 | content: '\e954'; 103 | } 104 | 105 | .#{$namespace}-icon-verticalleft:before { 106 | content: '\e855'; 107 | } 108 | 109 | .#{$namespace}-icon-youtube-fill:before { 110 | content: '\e955'; 111 | } 112 | 113 | .#{$namespace}-icon-right:before { 114 | content: '\e856'; 115 | } 116 | 117 | .#{$namespace}-icon-yahoo-fill:before { 118 | content: '\e956'; 119 | } 120 | 121 | .#{$namespace}-icon-left:before { 122 | content: '\e857'; 123 | } 124 | 125 | .#{$namespace}-icon-wechat-fill:before { 126 | content: '\e957'; 127 | } 128 | 129 | .#{$namespace}-icon-up:before { 130 | content: '\e858'; 131 | } 132 | 133 | .#{$namespace}-icon-chrome-fill:before { 134 | content: '\e958'; 135 | } 136 | 137 | .#{$namespace}-icon-down:before { 138 | content: '\e859'; 139 | } 140 | 141 | .#{$namespace}-icon-alipay-circle-fill:before { 142 | content: '\e959'; 143 | } 144 | 145 | .#{$namespace}-icon-fullscreen:before { 146 | content: '\e85a'; 147 | } 148 | 149 | .#{$namespace}-icon-aliwangwang-fill:before { 150 | content: '\e95a'; 151 | } 152 | 153 | .#{$namespace}-icon-fullscreen-exit:before { 154 | content: '\e85b'; 155 | } 156 | 157 | .#{$namespace}-icon-behance-circle-fill:before { 158 | content: '\e95b'; 159 | } 160 | 161 | .#{$namespace}-icon-doubleleft:before { 162 | content: '\e85c'; 163 | } 164 | 165 | .#{$namespace}-icon-amazon-circle-fill:before { 166 | content: '\e95c'; 167 | } 168 | 169 | .#{$namespace}-icon-doubleright:before { 170 | content: '\e85d'; 171 | } 172 | 173 | .#{$namespace}-icon-codepen-circle-fill:before { 174 | content: '\e95d'; 175 | } 176 | 177 | .#{$namespace}-icon-arrowright:before { 178 | content: '\e85e'; 179 | } 180 | 181 | .#{$namespace}-icon-codesandbox-circle-f:before { 182 | content: '\e95e'; 183 | } 184 | 185 | .#{$namespace}-icon-arrowup:before { 186 | content: '\e85f'; 187 | } 188 | 189 | .#{$namespace}-icon-dropbox-circle-fill:before { 190 | content: '\e95f'; 191 | } 192 | 193 | .#{$namespace}-icon-arrowleft:before { 194 | content: '\e860'; 195 | } 196 | 197 | .#{$namespace}-icon-github-fill:before { 198 | content: '\e960'; 199 | } 200 | 201 | .#{$namespace}-icon-arrowdown:before { 202 | content: '\e861'; 203 | } 204 | 205 | .#{$namespace}-icon-dribbble-circle-fill:before { 206 | content: '\e961'; 207 | } 208 | 209 | .#{$namespace}-icon-upload:before { 210 | content: '\e862'; 211 | } 212 | 213 | .#{$namespace}-icon-googleplus-circle-f:before { 214 | content: '\e962'; 215 | } 216 | 217 | .#{$namespace}-icon-colum-height:before { 218 | content: '\e863'; 219 | } 220 | 221 | .#{$namespace}-icon-medium-circle-fill:before { 222 | content: '\e963'; 223 | } 224 | 225 | .#{$namespace}-icon-vertical-align-botto:before { 226 | content: '\e864'; 227 | } 228 | 229 | .#{$namespace}-icon-qq-circle-fill:before { 230 | content: '\e964'; 231 | } 232 | 233 | .#{$namespace}-icon-vertical-align-middl:before { 234 | content: '\e865'; 235 | } 236 | 237 | .#{$namespace}-icon-ie-circle-fill:before { 238 | content: '\e965'; 239 | } 240 | 241 | .#{$namespace}-icon-totop:before { 242 | content: '\e866'; 243 | } 244 | 245 | .#{$namespace}-icon-google-circle-fill:before { 246 | content: '\e966'; 247 | } 248 | 249 | .#{$namespace}-icon-vertical-align-top:before { 250 | content: '\e867'; 251 | } 252 | 253 | .#{$namespace}-icon-dingtalk-circle-fill:before { 254 | content: '\e967'; 255 | } 256 | 257 | .#{$namespace}-icon-download:before { 258 | content: '\e868'; 259 | } 260 | 261 | .#{$namespace}-icon-sketch-circle-fill:before { 262 | content: '\e968'; 263 | } 264 | 265 | .#{$namespace}-icon-sort-descending:before { 266 | content: '\e869'; 267 | } 268 | 269 | .#{$namespace}-icon-slack-circle-fill:before { 270 | content: '\e969'; 271 | } 272 | 273 | .#{$namespace}-icon-sort-ascending:before { 274 | content: '\e86a'; 275 | } 276 | 277 | .#{$namespace}-icon-twitter-circle-fill:before { 278 | content: '\e96a'; 279 | } 280 | 281 | .#{$namespace}-icon-fall:before { 282 | content: '\e86b'; 283 | } 284 | 285 | .#{$namespace}-icon-taobao-circle-fill:before { 286 | content: '\e96b'; 287 | } 288 | 289 | .#{$namespace}-icon-swap:before { 290 | content: '\e86c'; 291 | } 292 | 293 | .#{$namespace}-icon-weibo-circle-fill:before { 294 | content: '\e96c'; 295 | } 296 | 297 | .#{$namespace}-icon-stock:before { 298 | content: '\e86d'; 299 | } 300 | 301 | .#{$namespace}-icon-zhihu-circle-fill:before { 302 | content: '\e96d'; 303 | } 304 | 305 | .#{$namespace}-icon-rise:before { 306 | content: '\e86e'; 307 | } 308 | 309 | .#{$namespace}-icon-reddit-circle-fill:before { 310 | content: '\e96e'; 311 | } 312 | 313 | .#{$namespace}-icon-indent:before { 314 | content: '\e86f'; 315 | } 316 | 317 | .#{$namespace}-icon-alipay-square-fill:before { 318 | content: '\e96f'; 319 | } 320 | 321 | .#{$namespace}-icon-outdent:before { 322 | content: '\e870'; 323 | } 324 | 325 | .#{$namespace}-icon-dingtalk-square-fill:before { 326 | content: '\e970'; 327 | } 328 | 329 | .#{$namespace}-icon-menu:before { 330 | content: '\e871'; 331 | } 332 | 333 | .#{$namespace}-icon-codesandbox-square-f:before { 334 | content: '\e971'; 335 | } 336 | 337 | .#{$namespace}-icon-unorderedlist:before { 338 | content: '\e872'; 339 | } 340 | 341 | .#{$namespace}-icon-behance-square-fill:before { 342 | content: '\e972'; 343 | } 344 | 345 | .#{$namespace}-icon-orderedlist:before { 346 | content: '\e873'; 347 | } 348 | 349 | .#{$namespace}-icon-amazon-square-fill:before { 350 | content: '\e973'; 351 | } 352 | 353 | .#{$namespace}-icon-align-right:before { 354 | content: '\e874'; 355 | } 356 | 357 | .#{$namespace}-icon-codepen-square-fill:before { 358 | content: '\e974'; 359 | } 360 | 361 | .#{$namespace}-icon-align-center:before { 362 | content: '\e875'; 363 | } 364 | 365 | .#{$namespace}-icon-dribbble-square-fill:before { 366 | content: '\e975'; 367 | } 368 | 369 | .#{$namespace}-icon-align-left:before { 370 | content: '\e876'; 371 | } 372 | 373 | .#{$namespace}-icon-dropbox-square-fill:before { 374 | content: '\e976'; 375 | } 376 | 377 | .#{$namespace}-icon-pic-center:before { 378 | content: '\e877'; 379 | } 380 | 381 | .#{$namespace}-icon-facebook-fill:before { 382 | content: '\e977'; 383 | } 384 | 385 | .#{$namespace}-icon-pic-right:before { 386 | content: '\e878'; 387 | } 388 | 389 | .#{$namespace}-icon-googleplus-square-f:before { 390 | content: '\e978'; 391 | } 392 | 393 | .#{$namespace}-icon-pic-left:before { 394 | content: '\e879'; 395 | } 396 | 397 | .#{$namespace}-icon-google-square-fill:before { 398 | content: '\e979'; 399 | } 400 | 401 | .#{$namespace}-icon-bold:before { 402 | content: '\e87a'; 403 | } 404 | 405 | .#{$namespace}-icon-instagram-fill:before { 406 | content: '\e97a'; 407 | } 408 | 409 | .#{$namespace}-icon-font-colors:before { 410 | content: '\e87b'; 411 | } 412 | 413 | .#{$namespace}-icon-ie-square-fill:before { 414 | content: '\e97b'; 415 | } 416 | 417 | .#{$namespace}-icon-exclaimination:before { 418 | content: '\e87c'; 419 | } 420 | 421 | .#{$namespace}-icon-medium-square-fill:before { 422 | content: '\e97c'; 423 | } 424 | 425 | .#{$namespace}-icon-check-circle:before { 426 | content: '\e77d'; 427 | } 428 | 429 | .#{$namespace}-icon-font-size:before { 430 | content: '\e87d'; 431 | } 432 | 433 | .#{$namespace}-icon-linkedin-fill:before { 434 | content: '\e97d'; 435 | } 436 | 437 | .#{$namespace}-icon-ci:before { 438 | content: '\e77e'; 439 | } 440 | 441 | .#{$namespace}-icon-infomation:before { 442 | content: '\e87e'; 443 | } 444 | 445 | .#{$namespace}-icon-qq-square-fill:before { 446 | content: '\e97e'; 447 | } 448 | 449 | .#{$namespace}-icon-dollar:before { 450 | content: '\e77f'; 451 | } 452 | 453 | .#{$namespace}-icon-line-height:before { 454 | content: '\e87f'; 455 | } 456 | 457 | .#{$namespace}-icon-reddit-square-fill:before { 458 | content: '\e97f'; 459 | } 460 | 461 | .#{$namespace}-icon-compass:before { 462 | content: '\e780'; 463 | } 464 | 465 | .#{$namespace}-icon-strikethrough:before { 466 | content: '\e880'; 467 | } 468 | 469 | .#{$namespace}-icon-twitter-square-fill:before { 470 | content: '\e980'; 471 | } 472 | 473 | .#{$namespace}-icon-close-circle:before { 474 | content: '\e781'; 475 | } 476 | 477 | .#{$namespace}-icon-underline:before { 478 | content: '\e881'; 479 | } 480 | 481 | .#{$namespace}-icon-sketch-square-fill:before { 482 | content: '\e981'; 483 | } 484 | 485 | .#{$namespace}-icon-frown:before { 486 | content: '\e782'; 487 | } 488 | 489 | .#{$namespace}-icon-number:before { 490 | content: '\e882'; 491 | } 492 | 493 | .#{$namespace}-icon-slack-square-fill:before { 494 | content: '\e982'; 495 | } 496 | 497 | .#{$namespace}-icon-info-circle:before { 498 | content: '\e783'; 499 | } 500 | 501 | .#{$namespace}-icon-italic:before { 502 | content: '\e883'; 503 | } 504 | 505 | .#{$namespace}-icon-taobao-square-fill:before { 506 | content: '\e983'; 507 | } 508 | 509 | .#{$namespace}-icon-left-circle:before { 510 | content: '\e784'; 511 | } 512 | 513 | .#{$namespace}-icon-code:before { 514 | content: '\e884'; 515 | } 516 | 517 | .#{$namespace}-icon-weibo-square-fill:before { 518 | content: '\e984'; 519 | } 520 | 521 | .#{$namespace}-icon-down-circle:before { 522 | content: '\e785'; 523 | } 524 | 525 | .#{$namespace}-icon-column-width:before { 526 | content: '\e885'; 527 | } 528 | 529 | .#{$namespace}-icon-zhihu-square-fill:before { 530 | content: '\e985'; 531 | } 532 | 533 | .#{$namespace}-icon-euro:before { 534 | content: '\e786'; 535 | } 536 | 537 | .#{$namespace}-icon-check:before { 538 | content: '\e886'; 539 | } 540 | 541 | .#{$namespace}-icon-zoomout:before { 542 | content: '\e986'; 543 | } 544 | 545 | .#{$namespace}-icon-copyright:before { 546 | content: '\e787'; 547 | } 548 | 549 | .#{$namespace}-icon-ellipsis:before { 550 | content: '\e887'; 551 | } 552 | 553 | .#{$namespace}-icon-apartment:before { 554 | content: '\e987'; 555 | } 556 | 557 | .#{$namespace}-icon-minus-circle:before { 558 | content: '\e788'; 559 | } 560 | 561 | .#{$namespace}-icon-dash:before { 562 | content: '\e888'; 563 | } 564 | 565 | .#{$namespace}-icon-audio:before { 566 | content: '\e988'; 567 | } 568 | 569 | .#{$namespace}-icon-meh:before { 570 | content: '\e789'; 571 | } 572 | 573 | .#{$namespace}-icon-close:before { 574 | content: '\e889'; 575 | } 576 | 577 | .#{$namespace}-icon-audio-fill:before { 578 | content: '\e989'; 579 | } 580 | 581 | .#{$namespace}-icon-plus-circle:before { 582 | content: '\e78a'; 583 | } 584 | 585 | .#{$namespace}-icon-enter:before { 586 | content: '\e88a'; 587 | } 588 | 589 | .#{$namespace}-icon-robot:before { 590 | content: '\e98a'; 591 | } 592 | 593 | .#{$namespace}-icon-play-circle:before { 594 | content: '\e78b'; 595 | } 596 | 597 | .#{$namespace}-icon-line:before { 598 | content: '\e88b'; 599 | } 600 | 601 | .#{$namespace}-icon-zoomin:before { 602 | content: '\e98b'; 603 | } 604 | 605 | .#{$namespace}-icon-question-circle:before { 606 | content: '\e78c'; 607 | } 608 | 609 | .#{$namespace}-icon-minus:before { 610 | content: '\e88c'; 611 | } 612 | 613 | .#{$namespace}-icon-robot-fill:before { 614 | content: '\e98c'; 615 | } 616 | 617 | .#{$namespace}-icon-pound:before { 618 | content: '\e78d'; 619 | } 620 | 621 | .#{$namespace}-icon-question:before { 622 | content: '\e88d'; 623 | } 624 | 625 | .#{$namespace}-icon-bug-fill:before { 626 | content: '\e98d'; 627 | } 628 | 629 | .#{$namespace}-icon-right-circle:before { 630 | content: '\e78e'; 631 | } 632 | 633 | .#{$namespace}-icon-rollback:before { 634 | content: '\e88e'; 635 | } 636 | 637 | .#{$namespace}-icon-bug:before { 638 | content: '\e98e'; 639 | } 640 | 641 | .#{$namespace}-icon-smile:before { 642 | content: '\e78f'; 643 | } 644 | 645 | .#{$namespace}-icon-small-dash:before { 646 | content: '\e88f'; 647 | } 648 | 649 | .#{$namespace}-icon-audiostatic:before { 650 | content: '\e98f'; 651 | } 652 | 653 | .#{$namespace}-icon-trademark:before { 654 | content: '\e790'; 655 | } 656 | 657 | .#{$namespace}-icon-pause:before { 658 | content: '\e890'; 659 | } 660 | 661 | .#{$namespace}-icon-comment:before { 662 | content: '\e990'; 663 | } 664 | 665 | .#{$namespace}-icon-time-circle:before { 666 | content: '\e791'; 667 | } 668 | 669 | .#{$namespace}-icon-bg-colors:before { 670 | content: '\e891'; 671 | } 672 | 673 | .#{$namespace}-icon-signal-fill:before { 674 | content: '\e991'; 675 | } 676 | 677 | .#{$namespace}-icon-timeout:before { 678 | content: '\e792'; 679 | } 680 | 681 | .#{$namespace}-icon-crown:before { 682 | content: '\e892'; 683 | } 684 | 685 | .#{$namespace}-icon-verified:before { 686 | content: '\e992'; 687 | } 688 | 689 | .#{$namespace}-icon-earth:before { 690 | content: '\e793'; 691 | } 692 | 693 | .#{$namespace}-icon-drag:before { 694 | content: '\e893'; 695 | } 696 | 697 | .#{$namespace}-icon-shortcut-fill:before { 698 | content: '\e993'; 699 | } 700 | 701 | .#{$namespace}-icon-yuan:before { 702 | content: '\e794'; 703 | } 704 | 705 | .#{$namespace}-icon-desktop:before { 706 | content: '\e894'; 707 | } 708 | 709 | .#{$namespace}-icon-videocameraadd:before { 710 | content: '\e994'; 711 | } 712 | 713 | .#{$namespace}-icon-up-circle:before { 714 | content: '\e795'; 715 | } 716 | 717 | .#{$namespace}-icon-gift:before { 718 | content: '\e895'; 719 | } 720 | 721 | .#{$namespace}-icon-switchuser:before { 722 | content: '\e995'; 723 | } 724 | 725 | .#{$namespace}-icon-warning-circle:before { 726 | content: '\e796'; 727 | } 728 | 729 | .#{$namespace}-icon-stop:before { 730 | content: '\e896'; 731 | } 732 | 733 | .#{$namespace}-icon-whatsapp:before { 734 | content: '\e996'; 735 | } 736 | 737 | .#{$namespace}-icon-sync:before { 738 | content: '\e797'; 739 | } 740 | 741 | .#{$namespace}-icon-fire:before { 742 | content: '\e897'; 743 | } 744 | 745 | .#{$namespace}-icon-appstoreadd:before { 746 | content: '\e997'; 747 | } 748 | 749 | .#{$namespace}-icon-transaction:before { 750 | content: '\e798'; 751 | } 752 | 753 | .#{$namespace}-icon-thunderbolt:before { 754 | content: '\e898'; 755 | } 756 | 757 | .#{$namespace}-icon-caret-down:before { 758 | content: '\e998'; 759 | } 760 | 761 | .#{$namespace}-icon-undo:before { 762 | content: '\e799'; 763 | } 764 | 765 | .#{$namespace}-icon-check-circle-fill:before { 766 | content: '\e899'; 767 | } 768 | 769 | .#{$namespace}-icon-backward:before { 770 | content: '\e999'; 771 | } 772 | 773 | .#{$namespace}-icon-redo:before { 774 | content: '\e79a'; 775 | } 776 | 777 | .#{$namespace}-icon-left-circle-fill:before { 778 | content: '\e89a'; 779 | } 780 | 781 | .#{$namespace}-icon-caret-up:before { 782 | content: '\e99a'; 783 | } 784 | 785 | .#{$namespace}-icon-reload:before { 786 | content: '\e79b'; 787 | } 788 | 789 | .#{$namespace}-icon-down-circle-fill:before { 790 | content: '\e89b'; 791 | } 792 | 793 | .#{$namespace}-icon-caret-right:before { 794 | content: '\e99b'; 795 | } 796 | 797 | .#{$namespace}-icon-reloadtime:before { 798 | content: '\e79c'; 799 | } 800 | 801 | .#{$namespace}-icon-minus-circle-fill:before { 802 | content: '\e89c'; 803 | } 804 | 805 | .#{$namespace}-icon-caret-left:before { 806 | content: '\e99c'; 807 | } 808 | 809 | .#{$namespace}-icon-message:before { 810 | content: '\e79d'; 811 | } 812 | 813 | .#{$namespace}-icon-close-circle-fill:before { 814 | content: '\e89d'; 815 | } 816 | 817 | .#{$namespace}-icon-fast-backward:before { 818 | content: '\e99d'; 819 | } 820 | 821 | .#{$namespace}-icon-dashboard:before { 822 | content: '\e79e'; 823 | } 824 | 825 | .#{$namespace}-icon-info-circle-fill:before { 826 | content: '\e89e'; 827 | } 828 | 829 | .#{$namespace}-icon-forward:before { 830 | content: '\e99e'; 831 | } 832 | 833 | .#{$namespace}-icon-issuesclose:before { 834 | content: '\e79f'; 835 | } 836 | 837 | .#{$namespace}-icon-up-circle-fill:before { 838 | content: '\e89f'; 839 | } 840 | 841 | .#{$namespace}-icon-fast-forward:before { 842 | content: '\e99f'; 843 | } 844 | 845 | .#{$namespace}-icon-poweroff:before { 846 | content: '\e7a0'; 847 | } 848 | 849 | .#{$namespace}-icon-right-circle-fill:before { 850 | content: '\e8a0'; 851 | } 852 | 853 | .#{$namespace}-icon-search:before { 854 | content: '\e9a0'; 855 | } 856 | 857 | .#{$namespace}-icon-logout:before { 858 | content: '\e7a1'; 859 | } 860 | 861 | .#{$namespace}-icon-plus-circle-fill:before { 862 | content: '\e8a1'; 863 | } 864 | 865 | .#{$namespace}-icon-retweet:before { 866 | content: '\e9a1'; 867 | } 868 | 869 | .#{$namespace}-icon-piechart:before { 870 | content: '\e7a2'; 871 | } 872 | 873 | .#{$namespace}-icon-question-circle-fill:before { 874 | content: '\e8a2'; 875 | } 876 | 877 | .#{$namespace}-icon-login:before { 878 | content: '\e9a2'; 879 | } 880 | 881 | .#{$namespace}-icon-setting:before { 882 | content: '\e7a3'; 883 | } 884 | 885 | .#{$namespace}-icon-euro-circle-fill:before { 886 | content: '\e8a3'; 887 | } 888 | 889 | .#{$namespace}-icon-step-backward:before { 890 | content: '\e9a3'; 891 | } 892 | 893 | .#{$namespace}-icon-eye:before { 894 | content: '\e7a4'; 895 | } 896 | 897 | .#{$namespace}-icon-frown-fill:before { 898 | content: '\e8a4'; 899 | } 900 | 901 | .#{$namespace}-icon-step-forward:before { 902 | content: '\e9a4'; 903 | } 904 | 905 | .#{$namespace}-icon-location:before { 906 | content: '\e7a5'; 907 | } 908 | 909 | .#{$namespace}-icon-copyright-circle-fil:before { 910 | content: '\e8a5'; 911 | } 912 | 913 | .#{$namespace}-icon-swap-right:before { 914 | content: '\e9a5'; 915 | } 916 | 917 | .#{$namespace}-icon-edit-square:before { 918 | content: '\e7a6'; 919 | } 920 | 921 | .#{$namespace}-icon-ci-circle-fill:before { 922 | content: '\e8a6'; 923 | } 924 | 925 | .#{$namespace}-icon-swap-left:before { 926 | content: '\e9a6'; 927 | } 928 | 929 | .#{$namespace}-icon-export:before { 930 | content: '\e7a7'; 931 | } 932 | 933 | .#{$namespace}-icon-compass-fill:before { 934 | content: '\e8a7'; 935 | } 936 | 937 | .#{$namespace}-icon-woman:before { 938 | content: '\e9a7'; 939 | } 940 | 941 | .#{$namespace}-icon-save:before { 942 | content: '\e7a8'; 943 | } 944 | 945 | .#{$namespace}-icon-dollar-circle-fill:before { 946 | content: '\e8a8'; 947 | } 948 | 949 | .#{$namespace}-icon-plus:before { 950 | content: '\e9a8'; 951 | } 952 | 953 | .#{$namespace}-icon-import:before { 954 | content: '\e7a9'; 955 | } 956 | 957 | .#{$namespace}-icon-poweroff-circle-fill:before { 958 | content: '\e8a9'; 959 | } 960 | 961 | .#{$namespace}-icon-eyeclose-fill:before { 962 | content: '\e9a9'; 963 | } 964 | 965 | .#{$namespace}-icon-appstore:before { 966 | content: '\e7aa'; 967 | } 968 | 969 | .#{$namespace}-icon-meh-fill:before { 970 | content: '\e8aa'; 971 | } 972 | 973 | .#{$namespace}-icon-eye-close:before { 974 | content: '\e9aa'; 975 | } 976 | 977 | .#{$namespace}-icon-close-square:before { 978 | content: '\e7ab'; 979 | } 980 | 981 | .#{$namespace}-icon-play-circle-fill:before { 982 | content: '\e8ab'; 983 | } 984 | 985 | .#{$namespace}-icon-clear:before { 986 | content: '\e9ab'; 987 | } 988 | 989 | .#{$namespace}-icon-down-square:before { 990 | content: '\e7ac'; 991 | } 992 | 993 | .#{$namespace}-icon-pound-circle-fill:before { 994 | content: '\e8ac'; 995 | } 996 | 997 | .#{$namespace}-icon-collapse:before { 998 | content: '\e9ac'; 999 | } 1000 | 1001 | .#{$namespace}-icon-layout:before { 1002 | content: '\e7ad'; 1003 | } 1004 | 1005 | .#{$namespace}-icon-smile-fill:before { 1006 | content: '\e8ad'; 1007 | } 1008 | 1009 | .#{$namespace}-icon-expand:before { 1010 | content: '\e9ad'; 1011 | } 1012 | 1013 | .#{$namespace}-icon-left-square:before { 1014 | content: '\e7ae'; 1015 | } 1016 | 1017 | .#{$namespace}-icon-stop-fill:before { 1018 | content: '\e8ae'; 1019 | } 1020 | 1021 | .#{$namespace}-icon-deletecolumn:before { 1022 | content: '\e9ae'; 1023 | } 1024 | 1025 | .#{$namespace}-icon-play-square:before { 1026 | content: '\e7af'; 1027 | } 1028 | 1029 | .#{$namespace}-icon-warning-circle-fill:before { 1030 | content: '\e8af'; 1031 | } 1032 | 1033 | .#{$namespace}-icon-merge-cells:before { 1034 | content: '\e9af'; 1035 | } 1036 | 1037 | .#{$namespace}-icon-control:before { 1038 | content: '\e7b0'; 1039 | } 1040 | 1041 | .#{$namespace}-icon-time-circle-fill:before { 1042 | content: '\e8b0'; 1043 | } 1044 | 1045 | .#{$namespace}-icon-subnode:before { 1046 | content: '\e9b0'; 1047 | } 1048 | 1049 | .#{$namespace}-icon-codelibrary:before { 1050 | content: '\e7b1'; 1051 | } 1052 | 1053 | .#{$namespace}-icon-trademark-circle-fil:before { 1054 | content: '\e8b1'; 1055 | } 1056 | 1057 | .#{$namespace}-icon-rotate-left:before { 1058 | content: '\e9b1'; 1059 | } 1060 | 1061 | .#{$namespace}-icon-detail:before { 1062 | content: '\e7b2'; 1063 | } 1064 | 1065 | .#{$namespace}-icon-yuan-circle-fill:before { 1066 | content: '\e8b2'; 1067 | } 1068 | 1069 | .#{$namespace}-icon-rotate-right:before { 1070 | content: '\e9b2'; 1071 | } 1072 | 1073 | .#{$namespace}-icon-minus-square:before { 1074 | content: '\e7b3'; 1075 | } 1076 | 1077 | .#{$namespace}-icon-heart-fill:before { 1078 | content: '\e8b3'; 1079 | } 1080 | 1081 | .#{$namespace}-icon-insertrowbelow:before { 1082 | content: '\e9b3'; 1083 | } 1084 | 1085 | .#{$namespace}-icon-plus-square:before { 1086 | content: '\e7b4'; 1087 | } 1088 | 1089 | .#{$namespace}-icon-piechart-circle-fil:before { 1090 | content: '\e8b4'; 1091 | } 1092 | 1093 | .#{$namespace}-icon-insertrowabove:before { 1094 | content: '\e9b4'; 1095 | } 1096 | 1097 | .#{$namespace}-icon-right-square:before { 1098 | content: '\e7b5'; 1099 | } 1100 | 1101 | .#{$namespace}-icon-dashboard-fill:before { 1102 | content: '\e8b5'; 1103 | } 1104 | 1105 | .#{$namespace}-icon-table1:before { 1106 | content: '\e9b5'; 1107 | } 1108 | 1109 | .#{$namespace}-icon-project:before { 1110 | content: '\e7b6'; 1111 | } 1112 | 1113 | .#{$namespace}-icon-message-fill:before { 1114 | content: '\e8b6'; 1115 | } 1116 | 1117 | .#{$namespace}-icon-solit-cells:before { 1118 | content: '\e9b6'; 1119 | } 1120 | 1121 | .#{$namespace}-icon-wallet:before { 1122 | content: '\e7b7'; 1123 | } 1124 | 1125 | .#{$namespace}-icon-check-square-fill:before { 1126 | content: '\e8b7'; 1127 | } 1128 | 1129 | .#{$namespace}-icon-formatpainter:before { 1130 | content: '\e9b7'; 1131 | } 1132 | 1133 | .#{$namespace}-icon-up-square:before { 1134 | content: '\e7b8'; 1135 | } 1136 | 1137 | .#{$namespace}-icon-down-square-fill:before { 1138 | content: '\e8b8'; 1139 | } 1140 | 1141 | .#{$namespace}-icon-insertrowright:before { 1142 | content: '\e9b8'; 1143 | } 1144 | 1145 | .#{$namespace}-icon-calculator:before { 1146 | content: '\e7b9'; 1147 | } 1148 | 1149 | .#{$namespace}-icon-minus-square-fill:before { 1150 | content: '\e8b9'; 1151 | } 1152 | 1153 | .#{$namespace}-icon-formatpainter-fill:before { 1154 | content: '\e9b9'; 1155 | } 1156 | 1157 | .#{$namespace}-icon-interation:before { 1158 | content: '\e7ba'; 1159 | } 1160 | 1161 | .#{$namespace}-icon-close-square-fill:before { 1162 | content: '\e8ba'; 1163 | } 1164 | 1165 | .#{$namespace}-icon-insertrowleft:before { 1166 | content: '\e9ba'; 1167 | } 1168 | 1169 | .#{$namespace}-icon-check-square:before { 1170 | content: '\e7bb'; 1171 | } 1172 | 1173 | .#{$namespace}-icon-codelibrary-fill:before { 1174 | content: '\e8bb'; 1175 | } 1176 | 1177 | .#{$namespace}-icon-translate:before { 1178 | content: '\e9bb'; 1179 | } 1180 | 1181 | .#{$namespace}-icon-border:before { 1182 | content: '\e7bc'; 1183 | } 1184 | 1185 | .#{$namespace}-icon-left-square-fill:before { 1186 | content: '\e8bc'; 1187 | } 1188 | 1189 | .#{$namespace}-icon-deleterow:before { 1190 | content: '\e9bc'; 1191 | } 1192 | 1193 | .#{$namespace}-icon-border-outer:before { 1194 | content: '\e7bd'; 1195 | } 1196 | 1197 | .#{$namespace}-icon-play-square-fill:before { 1198 | content: '\e8bd'; 1199 | } 1200 | 1201 | .#{$namespace}-icon-sisternode:before { 1202 | content: '\e9bd'; 1203 | } 1204 | 1205 | .#{$namespace}-icon-border-top:before { 1206 | content: '\e7be'; 1207 | } 1208 | 1209 | .#{$namespace}-icon-up-square-fill:before { 1210 | content: '\e8be'; 1211 | } 1212 | 1213 | .#{$namespace}-icon-field-number:before { 1214 | content: '\e9be'; 1215 | } 1216 | 1217 | .#{$namespace}-icon-border-bottom:before { 1218 | content: '\e7bf'; 1219 | } 1220 | 1221 | .#{$namespace}-icon-right-square-fill:before { 1222 | content: '\e8bf'; 1223 | } 1224 | 1225 | .#{$namespace}-icon-field-string:before { 1226 | content: '\e9bf'; 1227 | } 1228 | 1229 | .#{$namespace}-icon-border-left:before { 1230 | content: '\e7c0'; 1231 | } 1232 | 1233 | .#{$namespace}-icon-plus-square-fill:before { 1234 | content: '\e8c0'; 1235 | } 1236 | 1237 | .#{$namespace}-icon-function:before { 1238 | content: '\e9c0'; 1239 | } 1240 | 1241 | .#{$namespace}-icon-border-right:before { 1242 | content: '\e7c1'; 1243 | } 1244 | 1245 | .#{$namespace}-icon-accountbook-fill:before { 1246 | content: '\e8c1'; 1247 | } 1248 | 1249 | .#{$namespace}-icon-field-time:before { 1250 | content: '\e9c1'; 1251 | } 1252 | 1253 | .#{$namespace}-icon-border-inner:before { 1254 | content: '\e7c2'; 1255 | } 1256 | 1257 | .#{$namespace}-icon-carryout-fill:before { 1258 | content: '\e8c2'; 1259 | } 1260 | 1261 | .#{$namespace}-icon-gif:before { 1262 | content: '\e9c2'; 1263 | } 1264 | 1265 | .#{$namespace}-icon-border-verticle:before { 1266 | content: '\e7c3'; 1267 | } 1268 | 1269 | .#{$namespace}-icon-calendar-fill:before { 1270 | content: '\e8c3'; 1271 | } 1272 | 1273 | .#{$namespace}-icon-partition:before { 1274 | content: '\e9c3'; 1275 | } 1276 | 1277 | .#{$namespace}-icon-border-horizontal:before { 1278 | content: '\e7c4'; 1279 | } 1280 | 1281 | .#{$namespace}-icon-calculator-fill:before { 1282 | content: '\e8c4'; 1283 | } 1284 | 1285 | .#{$namespace}-icon-index:before { 1286 | content: '\e9c4'; 1287 | } 1288 | 1289 | .#{$namespace}-icon-radius-bottomleft:before { 1290 | content: '\e7c5'; 1291 | } 1292 | 1293 | .#{$namespace}-icon-interation-fill:before { 1294 | content: '\e8c5'; 1295 | } 1296 | 1297 | .#{$namespace}-icon-storedprocedure:before { 1298 | content: '\e9c5'; 1299 | } 1300 | 1301 | .#{$namespace}-icon-radius-bottomright:before { 1302 | content: '\e7c6'; 1303 | } 1304 | 1305 | .#{$namespace}-icon-project-fill:before { 1306 | content: '\e8c6'; 1307 | } 1308 | 1309 | .#{$namespace}-icon-field-binary:before { 1310 | content: '\e9c6'; 1311 | } 1312 | 1313 | .#{$namespace}-icon-radius-upleft:before { 1314 | content: '\e7c7'; 1315 | } 1316 | 1317 | .#{$namespace}-icon-detail-fill:before { 1318 | content: '\e8c7'; 1319 | } 1320 | 1321 | .#{$namespace}-icon-console-sql:before { 1322 | content: '\e9c7'; 1323 | } 1324 | 1325 | .#{$namespace}-icon-radius-upright:before { 1326 | content: '\e7c8'; 1327 | } 1328 | 1329 | .#{$namespace}-icon-save-fill:before { 1330 | content: '\e8c8'; 1331 | } 1332 | 1333 | .#{$namespace}-icon-icon-test:before { 1334 | content: '\e9c8'; 1335 | } 1336 | 1337 | .#{$namespace}-icon-radius-setting:before { 1338 | content: '\e7c9'; 1339 | } 1340 | 1341 | .#{$namespace}-icon-wallet-fill:before { 1342 | content: '\e8c9'; 1343 | } 1344 | 1345 | .#{$namespace}-icon-aim:before { 1346 | content: '\e9c9'; 1347 | } 1348 | 1349 | .#{$namespace}-icon-adduser:before { 1350 | content: '\e7ca'; 1351 | } 1352 | 1353 | .#{$namespace}-icon-control-fill:before { 1354 | content: '\e8ca'; 1355 | } 1356 | 1357 | .#{$namespace}-icon-compress:before { 1358 | content: '\e9ca'; 1359 | } 1360 | 1361 | .#{$namespace}-icon-deleteteam:before { 1362 | content: '\e7cb'; 1363 | } 1364 | 1365 | .#{$namespace}-icon-layout-fill:before { 1366 | content: '\e8cb'; 1367 | } 1368 | 1369 | .#{$namespace}-icon-expend:before { 1370 | content: '\e9cb'; 1371 | } 1372 | 1373 | .#{$namespace}-icon-deleteuser:before { 1374 | content: '\e7cc'; 1375 | } 1376 | 1377 | .#{$namespace}-icon-appstore-fill:before { 1378 | content: '\e8cc'; 1379 | } 1380 | 1381 | .#{$namespace}-icon-folder-view:before { 1382 | content: '\e9cc'; 1383 | } 1384 | 1385 | .#{$namespace}-icon-addteam:before { 1386 | content: '\e7cd'; 1387 | } 1388 | 1389 | .#{$namespace}-icon-mobile-fill:before { 1390 | content: '\e8cd'; 1391 | } 1392 | 1393 | .#{$namespace}-icon-file-gif:before { 1394 | content: '\e9cd'; 1395 | } 1396 | 1397 | .#{$namespace}-icon-user:before { 1398 | content: '\e7ce'; 1399 | } 1400 | 1401 | .#{$namespace}-icon-tablet-fill:before { 1402 | content: '\e8ce'; 1403 | } 1404 | 1405 | .#{$namespace}-icon-group:before { 1406 | content: '\e9ce'; 1407 | } 1408 | 1409 | .#{$namespace}-icon-team:before { 1410 | content: '\e7cf'; 1411 | } 1412 | 1413 | .#{$namespace}-icon-book-fill:before { 1414 | content: '\e8cf'; 1415 | } 1416 | 1417 | .#{$namespace}-icon-send:before { 1418 | content: '\e9cf'; 1419 | } 1420 | 1421 | .#{$namespace}-icon-areachart:before { 1422 | content: '\e7d0'; 1423 | } 1424 | 1425 | .#{$namespace}-icon-redenvelope-fill:before { 1426 | content: '\e8d0'; 1427 | } 1428 | 1429 | .#{$namespace}-icon-report:before { 1430 | content: '\e9d0'; 1431 | } 1432 | 1433 | .#{$namespace}-icon-linechart:before { 1434 | content: '\e7d1'; 1435 | } 1436 | 1437 | .#{$namespace}-icon-safetycertificate-f:before { 1438 | content: '\e8d1'; 1439 | } 1440 | 1441 | .#{$namespace}-icon-view:before { 1442 | content: '\e9d1'; 1443 | } 1444 | 1445 | .#{$namespace}-icon-barchart:before { 1446 | content: '\e7d2'; 1447 | } 1448 | 1449 | .#{$namespace}-icon-propertysafety-fill:before { 1450 | content: '\e8d2'; 1451 | } 1452 | 1453 | .#{$namespace}-icon-shortcut:before { 1454 | content: '\e9d2'; 1455 | } 1456 | 1457 | .#{$namespace}-icon-pointmap:before { 1458 | content: '\e7d3'; 1459 | } 1460 | 1461 | .#{$namespace}-icon-insurance-fill:before { 1462 | content: '\e8d3'; 1463 | } 1464 | 1465 | .#{$namespace}-icon-ungroup:before { 1466 | content: '\e9d3'; 1467 | } 1468 | 1469 | .#{$namespace}-icon-container:before { 1470 | content: '\e7d4'; 1471 | } 1472 | 1473 | .#{$namespace}-icon-securityscan-fill:before { 1474 | content: '\e8d4'; 1475 | } 1476 | 1477 | .#{$namespace}-icon-database:before { 1478 | content: '\e7d5'; 1479 | } 1480 | 1481 | .#{$namespace}-icon-file-exclamation-fil:before { 1482 | content: '\e8d5'; 1483 | } 1484 | 1485 | .#{$namespace}-icon-sever:before { 1486 | content: '\e7d6'; 1487 | } 1488 | 1489 | .#{$namespace}-icon-file-add-fill:before { 1490 | content: '\e8d6'; 1491 | } 1492 | 1493 | .#{$namespace}-icon-mobile:before { 1494 | content: '\e7d7'; 1495 | } 1496 | 1497 | .#{$namespace}-icon-file-fill:before { 1498 | content: '\e8d7'; 1499 | } 1500 | 1501 | .#{$namespace}-icon-tablet:before { 1502 | content: '\e7d8'; 1503 | } 1504 | 1505 | .#{$namespace}-icon-file-excel-fill:before { 1506 | content: '\e8d8'; 1507 | } 1508 | 1509 | .#{$namespace}-icon-redenvelope:before { 1510 | content: '\e7d9'; 1511 | } 1512 | 1513 | .#{$namespace}-icon-file-markdown-fill:before { 1514 | content: '\e8d9'; 1515 | } 1516 | 1517 | .#{$namespace}-icon-book:before { 1518 | content: '\e7da'; 1519 | } 1520 | 1521 | .#{$namespace}-icon-file-text-fill:before { 1522 | content: '\e8da'; 1523 | } 1524 | 1525 | .#{$namespace}-icon-filedone:before { 1526 | content: '\e7db'; 1527 | } 1528 | 1529 | .#{$namespace}-icon-file-ppt-fill:before { 1530 | content: '\e8db'; 1531 | } 1532 | 1533 | .#{$namespace}-icon-reconciliation:before { 1534 | content: '\e7dc'; 1535 | } 1536 | 1537 | .#{$namespace}-icon-file-unknown-fill:before { 1538 | content: '\e8dc'; 1539 | } 1540 | 1541 | .#{$namespace}-icon-file-exception:before { 1542 | content: '\e7dd'; 1543 | } 1544 | 1545 | .#{$namespace}-icon-file-word-fill:before { 1546 | content: '\e8dd'; 1547 | } 1548 | 1549 | .#{$namespace}-icon-filesync:before { 1550 | content: '\e7de'; 1551 | } 1552 | 1553 | .#{$namespace}-icon-file-zip-fill:before { 1554 | content: '\e8de'; 1555 | } 1556 | 1557 | .#{$namespace}-icon-filesearch:before { 1558 | content: '\e7df'; 1559 | } 1560 | 1561 | .#{$namespace}-icon-file-pdf-fill:before { 1562 | content: '\e8df'; 1563 | } 1564 | 1565 | .#{$namespace}-icon-solution:before { 1566 | content: '\e7e0'; 1567 | } 1568 | 1569 | .#{$namespace}-icon-file-image-fill:before { 1570 | content: '\e8e0'; 1571 | } 1572 | 1573 | .#{$namespace}-icon-fileprotect:before { 1574 | content: '\e7e1'; 1575 | } 1576 | 1577 | .#{$namespace}-icon-diff-fill:before { 1578 | content: '\e8e1'; 1579 | } 1580 | 1581 | .#{$namespace}-icon-file-add:before { 1582 | content: '\e7e2'; 1583 | } 1584 | 1585 | .#{$namespace}-icon-file-copy-fill:before { 1586 | content: '\e8e2'; 1587 | } 1588 | 1589 | .#{$namespace}-icon-file-excel:before { 1590 | content: '\e7e3'; 1591 | } 1592 | 1593 | .#{$namespace}-icon-snippets-fill:before { 1594 | content: '\e8e3'; 1595 | } 1596 | 1597 | .#{$namespace}-icon-file-exclamation:before { 1598 | content: '\e7e4'; 1599 | } 1600 | 1601 | .#{$namespace}-icon-batchfolding-fill:before { 1602 | content: '\e8e4'; 1603 | } 1604 | 1605 | .#{$namespace}-icon-file-pdf:before { 1606 | content: '\e7e5'; 1607 | } 1608 | 1609 | .#{$namespace}-icon-reconciliation-fill:before { 1610 | content: '\e8e5'; 1611 | } 1612 | 1613 | .#{$namespace}-icon-file-image:before { 1614 | content: '\e7e6'; 1615 | } 1616 | 1617 | .#{$namespace}-icon-folder-add-fill:before { 1618 | content: '\e8e6'; 1619 | } 1620 | 1621 | .#{$namespace}-icon-file-markdown:before { 1622 | content: '\e7e7'; 1623 | } 1624 | 1625 | .#{$namespace}-icon-folder-fill:before { 1626 | content: '\e8e7'; 1627 | } 1628 | 1629 | .#{$namespace}-icon-file-unknown:before { 1630 | content: '\e7e8'; 1631 | } 1632 | 1633 | .#{$namespace}-icon-folder-open-fill:before { 1634 | content: '\e8e8'; 1635 | } 1636 | 1637 | .#{$namespace}-icon-file-ppt:before { 1638 | content: '\e7e9'; 1639 | } 1640 | 1641 | .#{$namespace}-icon-database-fill:before { 1642 | content: '\e8e9'; 1643 | } 1644 | 1645 | .#{$namespace}-icon-file-word:before { 1646 | content: '\e7ea'; 1647 | } 1648 | 1649 | .#{$namespace}-icon-container-fill:before { 1650 | content: '\e8ea'; 1651 | } 1652 | 1653 | .#{$namespace}-icon-file:before { 1654 | content: '\e7eb'; 1655 | } 1656 | 1657 | .#{$namespace}-icon-sever-fill:before { 1658 | content: '\e8eb'; 1659 | } 1660 | 1661 | .#{$namespace}-icon-file-zip:before { 1662 | content: '\e7ec'; 1663 | } 1664 | 1665 | .#{$namespace}-icon-calendar-check-fill:before { 1666 | content: '\e8ec'; 1667 | } 1668 | 1669 | .#{$namespace}-icon-file-text:before { 1670 | content: '\e7ed'; 1671 | } 1672 | 1673 | .#{$namespace}-icon-image-fill:before { 1674 | content: '\e8ed'; 1675 | } 1676 | 1677 | .#{$namespace}-icon-file-copy:before { 1678 | content: '\e7ee'; 1679 | } 1680 | 1681 | .#{$namespace}-icon-idcard-fill:before { 1682 | content: '\e8ee'; 1683 | } 1684 | 1685 | .#{$namespace}-icon-snippets:before { 1686 | content: '\e7ef'; 1687 | } 1688 | 1689 | .#{$namespace}-icon-creditcard-fill:before { 1690 | content: '\e8ef'; 1691 | } 1692 | 1693 | .#{$namespace}-icon-audit:before { 1694 | content: '\e7f0'; 1695 | } 1696 | 1697 | .#{$namespace}-icon-fund-fill:before { 1698 | content: '\e8f0'; 1699 | } 1700 | 1701 | .#{$namespace}-icon-diff:before { 1702 | content: '\e7f1'; 1703 | } 1704 | 1705 | .#{$namespace}-icon-read-fill:before { 1706 | content: '\e8f1'; 1707 | } 1708 | 1709 | .#{$namespace}-icon-batchfolding:before { 1710 | content: '\e7f2'; 1711 | } 1712 | 1713 | .#{$namespace}-icon-contacts-fill:before { 1714 | content: '\e8f2'; 1715 | } 1716 | 1717 | .#{$namespace}-icon-securityscan:before { 1718 | content: '\e7f3'; 1719 | } 1720 | 1721 | .#{$namespace}-icon-delete-fill:before { 1722 | content: '\e8f3'; 1723 | } 1724 | 1725 | .#{$namespace}-icon-propertysafety:before { 1726 | content: '\e7f4'; 1727 | } 1728 | 1729 | .#{$namespace}-icon-notification-fill:before { 1730 | content: '\e8f4'; 1731 | } 1732 | 1733 | .#{$namespace}-icon-safetycertificate:before { 1734 | content: '\e7f5'; 1735 | } 1736 | 1737 | .#{$namespace}-icon-flag-fill:before { 1738 | content: '\e8f5'; 1739 | } 1740 | 1741 | .#{$namespace}-icon-insurance:before { 1742 | content: '\e7f6'; 1743 | } 1744 | 1745 | .#{$namespace}-icon-moneycollect-fill:before { 1746 | content: '\e8f6'; 1747 | } 1748 | 1749 | .#{$namespace}-icon-alert:before { 1750 | content: '\e7f7'; 1751 | } 1752 | 1753 | .#{$namespace}-icon-medicinebox-fill:before { 1754 | content: '\e8f7'; 1755 | } 1756 | 1757 | .#{$namespace}-icon-delete:before { 1758 | content: '\e7f8'; 1759 | } 1760 | 1761 | .#{$namespace}-icon-rest-fill:before { 1762 | content: '\e8f8'; 1763 | } 1764 | 1765 | .#{$namespace}-icon-hourglass:before { 1766 | content: '\e7f9'; 1767 | } 1768 | 1769 | .#{$namespace}-icon-shopping-fill:before { 1770 | content: '\e8f9'; 1771 | } 1772 | 1773 | .#{$namespace}-icon-bulb:before { 1774 | content: '\e7fa'; 1775 | } 1776 | 1777 | .#{$namespace}-icon-skin-fill:before { 1778 | content: '\e8fa'; 1779 | } 1780 | 1781 | .#{$namespace}-icon-experiment:before { 1782 | content: '\e7fb'; 1783 | } 1784 | 1785 | .#{$namespace}-icon-video-fill:before { 1786 | content: '\e8fb'; 1787 | } 1788 | 1789 | .#{$namespace}-icon-bell:before { 1790 | content: '\e7fc'; 1791 | } 1792 | 1793 | .#{$namespace}-icon-sound-fill:before { 1794 | content: '\e8fc'; 1795 | } 1796 | 1797 | .#{$namespace}-icon-trophy:before { 1798 | content: '\e7fd'; 1799 | } 1800 | 1801 | .#{$namespace}-icon-bulb-fill:before { 1802 | content: '\e8fd'; 1803 | } 1804 | 1805 | .#{$namespace}-icon-rest:before { 1806 | content: '\e7fe'; 1807 | } 1808 | 1809 | .#{$namespace}-icon-bell-fill:before { 1810 | content: '\e8fe'; 1811 | } 1812 | 1813 | .#{$namespace}-icon-usb:before { 1814 | content: '\e7ff'; 1815 | } 1816 | 1817 | .#{$namespace}-icon-filter-fill:before { 1818 | content: '\e8ff'; 1819 | } 1820 | 1821 | .#{$namespace}-icon-skin:before { 1822 | content: '\e800'; 1823 | } 1824 | 1825 | .#{$namespace}-icon-fire-fill:before { 1826 | content: '\e900'; 1827 | } 1828 | 1829 | .#{$namespace}-icon-home:before { 1830 | content: '\e801'; 1831 | } 1832 | 1833 | .#{$namespace}-icon-funnelplot-fill:before { 1834 | content: '\e901'; 1835 | } 1836 | 1837 | .#{$namespace}-icon-bank:before { 1838 | content: '\e802'; 1839 | } 1840 | 1841 | .#{$namespace}-icon-gift-fill:before { 1842 | content: '\e902'; 1843 | } 1844 | 1845 | .#{$namespace}-icon-filter:before { 1846 | content: '\e803'; 1847 | } 1848 | 1849 | .#{$namespace}-icon-hourglass-fill:before { 1850 | content: '\e903'; 1851 | } 1852 | 1853 | .#{$namespace}-icon-funnelplot:before { 1854 | content: '\e804'; 1855 | } 1856 | 1857 | .#{$namespace}-icon-home-fill:before { 1858 | content: '\e904'; 1859 | } 1860 | 1861 | .#{$namespace}-icon-like:before { 1862 | content: '\e805'; 1863 | } 1864 | 1865 | .#{$namespace}-icon-trophy-fill:before { 1866 | content: '\e905'; 1867 | } 1868 | 1869 | .#{$namespace}-icon-unlike:before { 1870 | content: '\e806'; 1871 | } 1872 | 1873 | .#{$namespace}-icon-location-fill:before { 1874 | content: '\e906'; 1875 | } 1876 | 1877 | .#{$namespace}-icon-unlock:before { 1878 | content: '\e807'; 1879 | } 1880 | 1881 | .#{$namespace}-icon-cloud-fill:before { 1882 | content: '\e907'; 1883 | } 1884 | 1885 | .#{$namespace}-icon-lock:before { 1886 | content: '\e808'; 1887 | } 1888 | 1889 | .#{$namespace}-icon-customerservice-fill:before { 1890 | content: '\e908'; 1891 | } 1892 | 1893 | .#{$namespace}-icon-customerservice:before { 1894 | content: '\e809'; 1895 | } 1896 | 1897 | .#{$namespace}-icon-experiment-fill:before { 1898 | content: '\e909'; 1899 | } 1900 | 1901 | .#{$namespace}-icon-flag:before { 1902 | content: '\e80a'; 1903 | } 1904 | 1905 | .#{$namespace}-icon-eye-fill:before { 1906 | content: '\e90a'; 1907 | } 1908 | 1909 | .#{$namespace}-icon-moneycollect:before { 1910 | content: '\e80b'; 1911 | } 1912 | 1913 | .#{$namespace}-icon-like-fill:before { 1914 | content: '\e90b'; 1915 | } 1916 | 1917 | .#{$namespace}-icon-medicinebox:before { 1918 | content: '\e80c'; 1919 | } 1920 | 1921 | .#{$namespace}-icon-lock-fill:before { 1922 | content: '\e90c'; 1923 | } 1924 | 1925 | .#{$namespace}-icon-shop:before { 1926 | content: '\e80d'; 1927 | } 1928 | 1929 | .#{$namespace}-icon-unlike-fill:before { 1930 | content: '\e90d'; 1931 | } 1932 | 1933 | .#{$namespace}-icon-rocket:before { 1934 | content: '\e80e'; 1935 | } 1936 | 1937 | .#{$namespace}-icon-star-fill:before { 1938 | content: '\e90e'; 1939 | } 1940 | 1941 | .#{$namespace}-icon-shopping:before { 1942 | content: '\e80f'; 1943 | } 1944 | 1945 | .#{$namespace}-icon-unlock-fill:before { 1946 | content: '\e90f'; 1947 | } 1948 | 1949 | .#{$namespace}-icon-folder:before { 1950 | content: '\e810'; 1951 | } 1952 | 1953 | .#{$namespace}-icon-alert-fill:before { 1954 | content: '\e910'; 1955 | } 1956 | 1957 | .#{$namespace}-icon-folder-open:before { 1958 | content: '\e811'; 1959 | } 1960 | 1961 | .#{$namespace}-icon-api-fill:before { 1962 | content: '\e911'; 1963 | } 1964 | 1965 | .#{$namespace}-icon-folder-add:before { 1966 | content: '\e812'; 1967 | } 1968 | 1969 | .#{$namespace}-icon-highlight-fill:before { 1970 | content: '\e912'; 1971 | } 1972 | 1973 | .#{$namespace}-icon-deploymentunit:before { 1974 | content: '\e813'; 1975 | } 1976 | 1977 | .#{$namespace}-icon-phone-fill:before { 1978 | content: '\e913'; 1979 | } 1980 | 1981 | .#{$namespace}-icon-accountbook:before { 1982 | content: '\e814'; 1983 | } 1984 | 1985 | .#{$namespace}-icon-edit-fill:before { 1986 | content: '\e914'; 1987 | } 1988 | 1989 | .#{$namespace}-icon-contacts:before { 1990 | content: '\e815'; 1991 | } 1992 | 1993 | .#{$namespace}-icon-pushpin-fill:before { 1994 | content: '\e915'; 1995 | } 1996 | 1997 | .#{$namespace}-icon-carryout:before { 1998 | content: '\e816'; 1999 | } 2000 | 2001 | .#{$namespace}-icon-rocket-fill:before { 2002 | content: '\e916'; 2003 | } 2004 | 2005 | .#{$namespace}-icon-calendar-check:before { 2006 | content: '\e817'; 2007 | } 2008 | 2009 | .#{$namespace}-icon-thunderbolt-fill:before { 2010 | content: '\e917'; 2011 | } 2012 | 2013 | .#{$namespace}-icon-calendar:before { 2014 | content: '\e818'; 2015 | } 2016 | 2017 | .#{$namespace}-icon-tag-fill:before { 2018 | content: '\e918'; 2019 | } 2020 | 2021 | .#{$namespace}-icon-scan:before { 2022 | content: '\e819'; 2023 | } 2024 | 2025 | .#{$namespace}-icon-wrench-fill:before { 2026 | content: '\e919'; 2027 | } 2028 | 2029 | .#{$namespace}-icon-select:before { 2030 | content: '\e81a'; 2031 | } 2032 | 2033 | .#{$namespace}-icon-tags-fill:before { 2034 | content: '\e91a'; 2035 | } 2036 | 2037 | .#{$namespace}-icon-boxplot:before { 2038 | content: '\e81b'; 2039 | } 2040 | 2041 | .#{$namespace}-icon-bank-fill:before { 2042 | content: '\e91b'; 2043 | } 2044 | 2045 | .#{$namespace}-icon-build:before { 2046 | content: '\e81c'; 2047 | } 2048 | 2049 | .#{$namespace}-icon-camera-fill:before { 2050 | content: '\e91c'; 2051 | } 2052 | 2053 | .#{$namespace}-icon-sliders:before { 2054 | content: '\e81d'; 2055 | } 2056 | 2057 | .#{$namespace}-icon-error-fill:before { 2058 | content: '\e91d'; 2059 | } 2060 | 2061 | .#{$namespace}-icon-laptop:before { 2062 | content: '\e81e'; 2063 | } 2064 | 2065 | .#{$namespace}-icon-crown-fill:before { 2066 | content: '\e91e'; 2067 | } 2068 | 2069 | .#{$namespace}-icon-barcode:before { 2070 | content: '\e81f'; 2071 | } 2072 | 2073 | .#{$namespace}-icon-mail-fill:before { 2074 | content: '\e91f'; 2075 | } 2076 | 2077 | .#{$namespace}-icon-camera:before { 2078 | content: '\e820'; 2079 | } 2080 | 2081 | .#{$namespace}-icon-car-fill:before { 2082 | content: '\e920'; 2083 | } 2084 | 2085 | .#{$namespace}-icon-cluster:before { 2086 | content: '\e821'; 2087 | } 2088 | 2089 | .#{$namespace}-icon-printer-fill:before { 2090 | content: '\e921'; 2091 | } 2092 | 2093 | .#{$namespace}-icon-gateway:before { 2094 | content: '\e822'; 2095 | } 2096 | 2097 | .#{$namespace}-icon-shop-fill:before { 2098 | content: '\e922'; 2099 | } 2100 | 2101 | .#{$namespace}-icon-car:before { 2102 | content: '\e823'; 2103 | } 2104 | 2105 | .#{$namespace}-icon-setting-fill:before { 2106 | content: '\e923'; 2107 | } 2108 | 2109 | .#{$namespace}-icon-printer:before { 2110 | content: '\e824'; 2111 | } 2112 | 2113 | .#{$namespace}-icon-usb-fill:before { 2114 | content: '\e924'; 2115 | } 2116 | 2117 | .#{$namespace}-icon-read:before { 2118 | content: '\e825'; 2119 | } 2120 | 2121 | .#{$namespace}-icon-golden-fill:before { 2122 | content: '\e925'; 2123 | } 2124 | 2125 | .#{$namespace}-icon-cloud-server:before { 2126 | content: '\e826'; 2127 | } 2128 | 2129 | .#{$namespace}-icon-build-fill:before { 2130 | content: '\e926'; 2131 | } 2132 | 2133 | .#{$namespace}-icon-cloud-upload:before { 2134 | content: '\e827'; 2135 | } 2136 | 2137 | .#{$namespace}-icon-boxplot-fill:before { 2138 | content: '\e927'; 2139 | } 2140 | 2141 | .#{$namespace}-icon-cloud:before { 2142 | content: '\e828'; 2143 | } 2144 | 2145 | .#{$namespace}-icon-sliders-fill:before { 2146 | content: '\e928'; 2147 | } 2148 | 2149 | .#{$namespace}-icon-cloud-download:before { 2150 | content: '\e829'; 2151 | } 2152 | 2153 | .#{$namespace}-icon-alibaba:before { 2154 | content: '\e929'; 2155 | } 2156 | 2157 | .#{$namespace}-icon-cloud-sync:before { 2158 | content: '\e82a'; 2159 | } 2160 | 2161 | .#{$namespace}-icon-antdesign:before { 2162 | content: '\e92a'; 2163 | } 2164 | 2165 | .#{$namespace}-icon-video:before { 2166 | content: '\e82b'; 2167 | } 2168 | 2169 | .#{$namespace}-icon-ant-cloud:before { 2170 | content: '\e92b'; 2171 | } 2172 | 2173 | .#{$namespace}-icon-notification:before { 2174 | content: '\e82c'; 2175 | } 2176 | 2177 | .#{$namespace}-icon-behance:before { 2178 | content: '\e92c'; 2179 | } 2180 | 2181 | .#{$namespace}-icon-sound:before { 2182 | content: '\e82d'; 2183 | } 2184 | 2185 | .#{$namespace}-icon-googleplus:before { 2186 | content: '\e92d'; 2187 | } 2188 | 2189 | .#{$namespace}-icon-radarchart:before { 2190 | content: '\e82e'; 2191 | } 2192 | 2193 | .#{$namespace}-icon-medium:before { 2194 | content: '\e92e'; 2195 | } 2196 | 2197 | .#{$namespace}-icon-qrcode:before { 2198 | content: '\e82f'; 2199 | } 2200 | 2201 | .#{$namespace}-icon-google:before { 2202 | content: '\e92f'; 2203 | } 2204 | 2205 | .#{$namespace}-icon-fund:before { 2206 | content: '\e830'; 2207 | } 2208 | 2209 | .#{$namespace}-icon-ie:before { 2210 | content: '\e930'; 2211 | } 2212 | 2213 | .#{$namespace}-icon-image:before { 2214 | content: '\e831'; 2215 | } 2216 | 2217 | .#{$namespace}-icon-amazon:before { 2218 | content: '\e931'; 2219 | } 2220 | 2221 | .#{$namespace}-icon-mail:before { 2222 | content: '\e832'; 2223 | } 2224 | 2225 | .#{$namespace}-icon-slack:before { 2226 | content: '\e932'; 2227 | } 2228 | 2229 | .#{$namespace}-icon-table:before { 2230 | content: '\e833'; 2231 | } 2232 | 2233 | .#{$namespace}-icon-alipay:before { 2234 | content: '\e933'; 2235 | } 2236 | 2237 | .#{$namespace}-icon-idcard:before { 2238 | content: '\e834'; 2239 | } 2240 | 2241 | .#{$namespace}-icon-taobao:before { 2242 | content: '\e934'; 2243 | } 2244 | 2245 | .#{$namespace}-icon-creditcard:before { 2246 | content: '\e835'; 2247 | } 2248 | 2249 | .#{$namespace}-icon-zhihu:before { 2250 | content: '\e935'; 2251 | } 2252 | 2253 | .#{$namespace}-icon-heart:before { 2254 | content: '\e836'; 2255 | } 2256 | 2257 | .#{$namespace}-icon-html:before { 2258 | content: '\e936'; 2259 | } 2260 | 2261 | .#{$namespace}-icon-block:before { 2262 | content: '\e837'; 2263 | } 2264 | 2265 | .#{$namespace}-icon-linkedin:before { 2266 | content: '\e937'; 2267 | } 2268 | 2269 | .#{$namespace}-icon-error:before { 2270 | content: '\e838'; 2271 | } 2272 | 2273 | .#{$namespace}-icon-yahoo:before { 2274 | content: '\e938'; 2275 | } 2276 | 2277 | .#{$namespace}-icon-star:before { 2278 | content: '\e839'; 2279 | } 2280 | 2281 | .#{$namespace}-icon-facebook:before { 2282 | content: '\e939'; 2283 | } 2284 | 2285 | .#{$namespace}-icon-gold:before { 2286 | content: '\e83a'; 2287 | } 2288 | 2289 | .#{$namespace}-icon-skype:before { 2290 | content: '\e93a'; 2291 | } 2292 | 2293 | .#{$namespace}-icon-heatmap:before { 2294 | content: '\e83b'; 2295 | } 2296 | 2297 | .#{$namespace}-icon-codesandbox:before { 2298 | content: '\e93b'; 2299 | } 2300 | 2301 | .#{$namespace}-icon-wifi:before { 2302 | content: '\e83c'; 2303 | } 2304 | 2305 | .#{$namespace}-icon-chrome:before { 2306 | content: '\e93c'; 2307 | } 2308 | 2309 | .#{$namespace}-icon-attachment:before { 2310 | content: '\e83d'; 2311 | } 2312 | 2313 | .#{$namespace}-icon-codepen:before { 2314 | content: '\e93d'; 2315 | } 2316 | 2317 | .#{$namespace}-icon-edit:before { 2318 | content: '\e83e'; 2319 | } 2320 | 2321 | .#{$namespace}-icon-aliwangwang:before { 2322 | content: '\e93e'; 2323 | } 2324 | 2325 | .#{$namespace}-icon-key:before { 2326 | content: '\e83f'; 2327 | } 2328 | 2329 | .#{$namespace}-icon-apple:before { 2330 | content: '\e93f'; 2331 | } 2332 | 2333 | .#{$namespace}-icon-api:before { 2334 | content: '\e840'; 2335 | } 2336 | 2337 | .#{$namespace}-icon-android:before { 2338 | content: '\e940'; 2339 | } 2340 | 2341 | .#{$namespace}-icon-disconnect:before { 2342 | content: '\e841'; 2343 | } 2344 | 2345 | .#{$namespace}-icon-sketch:before { 2346 | content: '\e941'; 2347 | } 2348 | 2349 | .#{$namespace}-icon-highlight:before { 2350 | content: '\e842'; 2351 | } 2352 | 2353 | .#{$namespace}-icon-gitlab:before { 2354 | content: '\e942'; 2355 | } 2356 | 2357 | .#{$namespace}-icon-monitor:before { 2358 | content: '\e843'; 2359 | } 2360 | 2361 | .#{$namespace}-icon-dribbble:before { 2362 | content: '\e943'; 2363 | } 2364 | 2365 | .#{$namespace}-icon-link:before { 2366 | content: '\e844'; 2367 | } 2368 | 2369 | .#{$namespace}-icon-instagram:before { 2370 | content: '\e944'; 2371 | } 2372 | 2373 | .#{$namespace}-icon-man:before { 2374 | content: '\e845'; 2375 | } 2376 | 2377 | .#{$namespace}-icon-reddit:before { 2378 | content: '\e945'; 2379 | } 2380 | 2381 | .#{$namespace}-icon-percentage:before { 2382 | content: '\e846'; 2383 | } 2384 | 2385 | .#{$namespace}-icon-windows:before { 2386 | content: '\e946'; 2387 | } 2388 | 2389 | .#{$namespace}-icon-pushpin:before { 2390 | content: '\e847'; 2391 | } 2392 | 2393 | .#{$namespace}-icon-yuque:before { 2394 | content: '\e947'; 2395 | } 2396 | 2397 | .#{$namespace}-icon-phone:before { 2398 | content: '\e848'; 2399 | } 2400 | 2401 | .#{$namespace}-icon-youtube:before { 2402 | content: '\e948'; 2403 | } 2404 | 2405 | .#{$namespace}-icon-shake:before { 2406 | content: '\e849'; 2407 | } 2408 | 2409 | .#{$namespace}-icon-gitlab-fill:before { 2410 | content: '\e949'; 2411 | } 2412 | --------------------------------------------------------------------------------