mirror of
				https://github.com/antd-tiny-vue/antd-tiny-vue.git
				synced 2025-10-31 08:41:45 +08:00 
			
		
		
		
	feat: add locale
This commit is contained in:
		
							
								
								
									
										42
									
								
								.vitepress/config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.vitepress/config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| import { fileURLToPath } from 'url' | ||||
| import { resolve } from 'path' | ||||
| import { defineConfig } from 'vitepress' | ||||
| import vueJsxPlugin from '@vitejs/plugin-vue-jsx' | ||||
| import VitePluginVitepressDemo from 'vite-plugin-vitepress-demo' | ||||
| import getEnUSConfig from './config/en-US' | ||||
| import getZhCNConfig from './config/zh-CN' | ||||
| import { getRewrites } from './config/rewrites' | ||||
| const baseSrc = fileURLToPath(new URL('./', import.meta.url)) | ||||
|  | ||||
| export default defineConfig({ | ||||
|   rewrites: getRewrites(), | ||||
|   mpa: true, | ||||
|   lang: 'en-US', | ||||
|   locales: { | ||||
|     'zh-CN': { | ||||
|       lang: 'zh-CN', | ||||
|       title: 'vue3组件库站点', | ||||
|       label: '简体中文', | ||||
|       description: 'vue3组件库站点', | ||||
|       themeConfig: getZhCNConfig() | ||||
|     }, | ||||
|     root: { | ||||
|       lang: 'en-US', | ||||
|       title: 'vue3 component library site', | ||||
|       label: 'English', | ||||
|       description: 'vue3 component library site', | ||||
|       themeConfig: getEnUSConfig() | ||||
|     } | ||||
|   }, | ||||
|   vite: { | ||||
|     plugins: [vueJsxPlugin(), VitePluginVitepressDemo()], | ||||
|     resolve: { | ||||
|       alias: { | ||||
|         'antd-tiny-vue': resolve(baseSrc, '../components') | ||||
|       } | ||||
|     }, | ||||
|     server: { | ||||
|       port: 1199 | ||||
|     } | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										9
									
								
								.vitepress/config/en-US/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.vitepress/config/en-US/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| import type { DefaultTheme } from 'vitepress' | ||||
| import { getNav } from './nav' | ||||
| import { getSidebar } from './sidebar' | ||||
|  | ||||
| export default (): DefaultTheme.Config => ({ | ||||
|   nav: getNav(), | ||||
|   sidebar: getSidebar(), | ||||
|   i18nRouting: true | ||||
| }) | ||||
| @@ -3,7 +3,7 @@ import type { DefaultTheme } from 'vitepress' | ||||
| export const getNav = (): DefaultTheme.NavItem[] => { | ||||
|   return [ | ||||
|     { | ||||
|       text: '组件', | ||||
|       text: 'Components', | ||||
|       link: '/components/' | ||||
|     } | ||||
|   ] | ||||
							
								
								
									
										18
									
								
								.vitepress/config/en-US/sidebar.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.vitepress/config/en-US/sidebar.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| import type { DefaultTheme } from 'vitepress' | ||||
|  | ||||
| const componentsDir = `/components/` | ||||
|  | ||||
| export const getSidebar = (): DefaultTheme.Sidebar => { | ||||
|   return { | ||||
|     '/components/': [ | ||||
|       { | ||||
|         text: 'Button', | ||||
|         link: `${componentsDir}button/` | ||||
|       }, | ||||
|       { | ||||
|         text: 'ConfigProvider', | ||||
|         link: `${componentsDir}config-provider/` | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| } | ||||
							
								
								
									
										9
									
								
								.vitepress/config/rewrites.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.vitepress/config/rewrites.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| export const getRewrites = (): Record<string, string> => { | ||||
|   return { | ||||
|     'site/index.md': 'index.md', | ||||
|     'site/index.zh-CN.md': 'zh-CN/index.md', | ||||
|     'site/components/index.md': 'components/index.md', | ||||
|     'site/components/index.zh-CN.md': 'zh-CN/components/index.md', | ||||
|     'components/:btn/index.zh-CN.md': 'zh-CN/components/:btn/index.md' | ||||
|   } | ||||
| } | ||||
							
								
								
									
										9
									
								
								.vitepress/config/zh-CN/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.vitepress/config/zh-CN/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| import type { DefaultTheme } from 'vitepress' | ||||
| import { getNav } from './nav' | ||||
| import { getSidebar } from './sidebar' | ||||
|  | ||||
| export default (): DefaultTheme.Config => ({ | ||||
|   nav: getNav(), | ||||
|   sidebar: getSidebar(), | ||||
|   i18nRouting: true | ||||
| }) | ||||
							
								
								
									
										10
									
								
								.vitepress/config/zh-CN/nav.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.vitepress/config/zh-CN/nav.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| import type { DefaultTheme } from 'vitepress' | ||||
|  | ||||
| export const getNav = (): DefaultTheme.NavItem[] => { | ||||
|   return [ | ||||
|     { | ||||
|       text: '组件', | ||||
|       link: '/zh-CN/components/' | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										17
									
								
								.vitepress/config/zh-CN/sidebar.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.vitepress/config/zh-CN/sidebar.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| import type { DefaultTheme } from 'vitepress' | ||||
| const componentsDir = `/zh-CN/components/` | ||||
|  | ||||
| export const getSidebar = (): DefaultTheme.Sidebar => { | ||||
|   return { | ||||
|     '/zh-CN/components/': [ | ||||
|       { | ||||
|         text: 'Button 按钮', | ||||
|         link: `${componentsDir}button/` | ||||
|       }, | ||||
|       { | ||||
|         text: 'ConfigProvider', | ||||
|         link: `${componentsDir}config-provider/` | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| } | ||||
| @@ -1,6 +1,12 @@ | ||||
| import { computed, defineComponent, onMounted, shallowRef } from 'vue' | ||||
| import { tryOnBeforeUnmount } from '@vueuse/core' | ||||
| import { classNames, filterEmpty, getSlotsProps, runEvent, useState } from '@v-c/utils' | ||||
| import { | ||||
|   classNames, | ||||
|   filterEmpty, | ||||
|   getSlotsProps, | ||||
|   runEvent, | ||||
|   useState | ||||
| } from '@v-c/utils' | ||||
| import { useProviderConfigState } from '../config-provider/context' | ||||
| import warning from '../_util/warning' | ||||
| import Wave from '../_util/wave' | ||||
| @@ -24,7 +30,7 @@ function getLoadingConfig(loading: ButtonProps['loading']): LoadingConfigType { | ||||
|   } | ||||
|  | ||||
|   return { | ||||
|     loading: !!loading, | ||||
|     loading, | ||||
|     delay: 0 | ||||
|   } | ||||
| } | ||||
| @@ -37,11 +43,15 @@ const Button = defineComponent({ | ||||
|     ...buttonProps | ||||
|   }, | ||||
|   setup(props, { slots, attrs }) { | ||||
|     const { getPrefixCls, autoInsertSpaceInButton, direction } = useProviderConfigState() | ||||
|     const { getPrefixCls, autoInsertSpaceInButton, direction } = | ||||
|       useProviderConfigState() | ||||
|     const prefixCls = computed(() => getPrefixCls('btn', props.prefixCls)) | ||||
|     const [wrapSSR, hashId] = useStyle(prefixCls) | ||||
|     const size = useSize(props) | ||||
|     const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction) | ||||
|     const { compactSize, compactItemClassnames } = useCompactItemContext( | ||||
|       prefixCls, | ||||
|       direction | ||||
|     ) | ||||
|     const sizeCls = computed(() => { | ||||
|       const sizeClassNameMap = { large: 'lg', small: 'sm', middle: undefined } | ||||
|       const sizeFullname = compactSize?.value || size.value | ||||
| @@ -54,7 +64,9 @@ const Button = defineComponent({ | ||||
|       return getLoadingConfig(props.loading) | ||||
|     }) | ||||
|  | ||||
|     const [innerLoading, setLoading] = useState<Loading>(loadingOrDelay.value.loading) | ||||
|     const [innerLoading, setLoading] = useState<Loading>( | ||||
|       loadingOrDelay.value.loading | ||||
|     ) | ||||
|     const [hasTwoCNChar, setHasTwoCNChar] = useState(false) | ||||
|  | ||||
|     let delayTimer: number | null = null | ||||
| @@ -95,9 +107,17 @@ const Button = defineComponent({ | ||||
|  | ||||
|       const icon = getSlotsProps(slots, props, 'icon') | ||||
|  | ||||
|       warning(!(typeof icon === 'string' && icon.length > 2), 'Button', `\`icon\` is using ReactNode instead of string naming in v4. Please check \`${icon}\` at https://ant.design/components/icon`) | ||||
|       warning( | ||||
|         !(typeof icon === 'string' && icon.length > 2), | ||||
|         'Button', | ||||
|         `\`icon\` is using ReactNode instead of string naming in v4. Please check \`${icon}\` at https://ant.design/components/icon` | ||||
|       ) | ||||
|  | ||||
|       warning(!(ghost && isUnBorderedButtonType(type)), 'Button', "`link` or `text` button can't be a `ghost` button.") | ||||
|       warning( | ||||
|         !(ghost && isUnBorderedButtonType(type)), | ||||
|         'Button', | ||||
|         "`link` or `text` button can't be a `ghost` button." | ||||
|       ) | ||||
|     } | ||||
|  | ||||
|     return () => { | ||||
| @@ -105,7 +125,11 @@ const Button = defineComponent({ | ||||
|       const icon = getSlotsProps(slots, props, 'icon') | ||||
|       const children = filterEmpty(slots.default?.()) | ||||
|       const isNeedInserted = () => { | ||||
|         return children.length === 1 && !slots.icon && isUnBorderedButtonType(props.type) | ||||
|         return ( | ||||
|           children.length === 1 && | ||||
|           !slots.icon && | ||||
|           isUnBorderedButtonType(props.type) | ||||
|         ) | ||||
|       } | ||||
|  | ||||
|       const fixTwoCNChar = () => { | ||||
| @@ -137,10 +161,13 @@ const Button = defineComponent({ | ||||
|           [`${prefixCls.value}-${shape}`]: shape !== 'default' && shape, | ||||
|           [`${prefixCls.value}-${type}`]: type, | ||||
|           [`${prefixCls.value}-${sizeCls.value}`]: sizeCls.value, | ||||
|           [`${prefixCls.value}-icon-only`]: !children && children !== 0 && !!iconType, | ||||
|           [`${prefixCls.value}-background-ghost`]: ghost && !isUnBorderedButtonType(type), | ||||
|           [`${prefixCls.value}-icon-only`]: | ||||
|             !children && children !== 0 && !!iconType, | ||||
|           [`${prefixCls.value}-background-ghost`]: | ||||
|             ghost && !isUnBorderedButtonType(type), | ||||
|           [`${prefixCls.value}-loading`]: innerLoading.value, | ||||
|           [`${prefixCls.value}-two-chinese-chars`]: hasTwoCNChar.value && autoInsertSpace && !innerLoading.value, | ||||
|           [`${prefixCls.value}-two-chinese-chars`]: | ||||
|             hasTwoCNChar.value && autoInsertSpace && !innerLoading.value, | ||||
|           [`${prefixCls.value}-block`]: block, | ||||
|           [`${prefixCls.value}-dangerous`]: !!danger, | ||||
|           [`${prefixCls.value}-rtl`]: direction.value === 'rtl', | ||||
| @@ -167,11 +194,7 @@ const Button = defineComponent({ | ||||
|         ) | ||||
|       } | ||||
|       let buttonNode = ( | ||||
|         <button | ||||
|           {...attrs} | ||||
|           onClick={handleClick} | ||||
|           class={classes} | ||||
|         > | ||||
|         <button {...attrs} onClick={handleClick} class={classes}> | ||||
|           {children} | ||||
|         </button> | ||||
|       ) | ||||
|   | ||||
							
								
								
									
										21
									
								
								components/button/demos/basic.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								components/button/demos/basic.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| <docs lang="zh-CN"> | ||||
| --- | ||||
| title: 基础用法 | ||||
| --- | ||||
|  | ||||
| 基础用法测试 | ||||
| </docs> | ||||
|  | ||||
| <docs lang="en-US"> | ||||
| --- | ||||
| title: Basic Usage | ||||
| --- | ||||
|  | ||||
| Basic Usage Test | ||||
| </docs> | ||||
|  | ||||
| <script lang="ts" setup></script> | ||||
|  | ||||
| <template> | ||||
|   <div>Test</div> | ||||
| </template> | ||||
							
								
								
									
										4
									
								
								components/button/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								components/button/index.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| # Button | ||||
|  | ||||
|  | ||||
| <demo src="./demos/basic.vue"></demo> | ||||
							
								
								
									
										4
									
								
								components/button/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								components/button/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| # 按钮 | ||||
|  | ||||
|  | ||||
| <demo src="./demos/basic.vue"></demo> | ||||
							
								
								
									
										1
									
								
								components/config-provider/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								components/config-provider/index.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| # ConfigProvider | ||||
							
								
								
									
										1
									
								
								components/config-provider/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								components/config-provider/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| # ConfigProvider  全局配置 | ||||
| @@ -1,5 +1,6 @@ | ||||
| import type { App } from 'vue' | ||||
| import * as components from './components' | ||||
| import version from './version' | ||||
|  | ||||
| export default { | ||||
|   install(app: App) { | ||||
| @@ -9,5 +10,6 @@ export default { | ||||
|         app.use(component) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   }, | ||||
|   version | ||||
| } | ||||
|   | ||||
							
								
								
									
										20
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,11 +1,18 @@ | ||||
| { | ||||
|   "name": "antd-tiny-vue", | ||||
|   "version": "1.0.0", | ||||
|   "description": "", | ||||
|   "keywords": [], | ||||
|   "description": "this is a tiny antd components for vue3", | ||||
|   "keywords": [ | ||||
|     "antd", | ||||
|     "ant-design-vue", | ||||
|     "ant-design", | ||||
|     "vue3", | ||||
|     "vue3-components", | ||||
|     "components" | ||||
|   ], | ||||
|   "license": "MIT", | ||||
|   "author": "aibayanyu", | ||||
|   "main": "index.js", | ||||
|   "main": "dist/index.js", | ||||
|   "scripts": { | ||||
|     "test": "vitest", | ||||
|     "prepare": "husky install", | ||||
| @@ -24,7 +31,7 @@ | ||||
|   "devDependencies": { | ||||
|     "@commitlint/cli": "^17.5.0", | ||||
|     "@commitlint/config-conventional": "^17.4.4", | ||||
|     "@mistjs/eslint-config-vue-jsx": "^0.0.3", | ||||
|     "@mistjs/eslint-config-vue-jsx": "^0.0.7", | ||||
|     "@mistjs/tsconfig": "^1.0.0", | ||||
|     "@mistjs/tsconfig-vue": "^0.0.3", | ||||
|     "@types/node": "^18.15.10", | ||||
| @@ -34,9 +41,10 @@ | ||||
|     "lint-staged": "^13.2.0", | ||||
|     "prettier": "^2.8.7", | ||||
|     "typescript": "^4.9.5", | ||||
|     "unbuild": "^1.1.2", | ||||
|     "vite": "^4.2.1", | ||||
|     "vite-plugin-vitepress-demo": "2.0.0-alpha.8", | ||||
|     "vitepress": "1.0.0-alpha.63", | ||||
|     "vite-plugin-vitepress-demo": "2.0.0-beta.28", | ||||
|     "vitepress": "1.0.0-alpha.69", | ||||
|     "vitest": "^0.28.5" | ||||
|   }, | ||||
|   "pnpm": { | ||||
|   | ||||
							
								
								
									
										2070
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2070
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,33 +0,0 @@ | ||||
| import { fileURLToPath } from 'url' | ||||
| import { resolve } from 'path' | ||||
| import { defineConfig } from 'vitepress' | ||||
| import vueJsxPlugin from '@vitejs/plugin-vue-jsx' | ||||
| import { VitePluginVitepressDemo } from 'vite-plugin-vitepress-demo' | ||||
| import { getNav } from './config/nav' | ||||
| import { getSidebar } from './config/sidebar' | ||||
| import { getRewrites } from './config/rewrites' | ||||
| const baseSrc = fileURLToPath(new URL('./', import.meta.url)) | ||||
|  | ||||
| export default defineConfig({ | ||||
|   title: 'vue3组件库站点', | ||||
|   rewrites: getRewrites(), | ||||
|   srcExclude: ['**/node_modules/**', '**/demos/**', '**/tests/**', '**/README.md'], | ||||
|   mpa: true, | ||||
|   themeConfig: { | ||||
|     nav: getNav(), | ||||
|     sidebar: getSidebar() | ||||
|   }, | ||||
|   vite: { | ||||
|     plugins: [ | ||||
|       vueJsxPlugin(), | ||||
|       VitePluginVitepressDemo({ | ||||
|         glob: ['**/demos/**/*.vue'] | ||||
|       }) | ||||
|     ], | ||||
|     resolve: { | ||||
|       alias: { | ||||
|         'antd-tiny-vue': resolve(baseSrc, '../../components') | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
| @@ -1,5 +0,0 @@ | ||||
| export const getRewrites = (): Record<string, string> => { | ||||
|   return { | ||||
|     // '/site/index.md': '/index.md' | ||||
|   } | ||||
| } | ||||
| @@ -1,12 +0,0 @@ | ||||
| import type { DefaultTheme } from 'vitepress' | ||||
|  | ||||
| export const getSidebar = (): DefaultTheme.Sidebar => { | ||||
|   return { | ||||
|     '/components/': [ | ||||
|       { | ||||
|         text: 'Button 按钮', | ||||
|         link: '/components/button/' | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| } | ||||
							
								
								
									
										1
									
								
								site/components/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								site/components/index.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| # Components | ||||
							
								
								
									
										1
									
								
								site/components/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								site/components/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| # 组件 | ||||
| @@ -10,7 +10,7 @@ hero: | ||||
|   tagline: Simple, powerful, and performant. Meet the modern SSG framework you've always wanted. | ||||
|   actions: | ||||
|     - theme: brand | ||||
|       text: 组件 | ||||
|       text: Components | ||||
|       link: /components/ | ||||
|     - theme: alt | ||||
|       text: View on GitHub | ||||
|   | ||||
							
								
								
									
										28
									
								
								site/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								site/index.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| --- | ||||
| layout: home | ||||
|  | ||||
| title: Antd Tiny Vue | ||||
| titleTemplate: Vite & Vue Powered Static Site Generator | ||||
|  | ||||
| hero: | ||||
|   name: Antd Tiny Vue | ||||
|   text: Vite & Vue Powered Static Site Generator | ||||
|   tagline: Simple, powerful, and performant. Meet the modern SSG framework you've always wanted. | ||||
|   actions: | ||||
|     - theme: brand | ||||
|       text: 组件 | ||||
|       link: /zh-CN/components/ | ||||
|     - theme: alt | ||||
|       text: View on GitHub | ||||
|       link: https://github.com/antd-tiny-vue/antd-tiny-vue | ||||
|  | ||||
| features: | ||||
|   - title: "Vite: The DX that can't be beat" | ||||
|     details: Feel the speed of Vite. Instant server start and lightning fast HMR that stays fast regardless of the app size. | ||||
|   - title: Designed to be simplicity first | ||||
|     details: With Markdown-centered content, it's built to help you focus on writing and deployed with minimum configuration. | ||||
|   - title: Power of Vue meets Markdown | ||||
|     details: Enhance your content with all the features of Vue in Markdown, while being able to customize your site with Vue. | ||||
|   - title: Fully static yet still dynamic | ||||
|     details: Go wild with true SSG + SPA architecture. Static on page load, but engage users with 100% interactivity from there. | ||||
| --- | ||||
		Reference in New Issue
	
	Block a user