diff --git a/packages/docs/plugins/injectDemoAndApi.ts b/packages/docs/plugins/injectDemoAndApi.ts
index 54ffd40eb65ed5200795a93ff4b96142940ed3dc..c5e2b1bae33df565c14bc14e0fcd80e2df12c242 100644
--- a/packages/docs/plugins/injectDemoAndApi.ts
+++ b/packages/docs/plugins/injectDemoAndApi.ts
@@ -48,7 +48,7 @@ export function injectDemoAndApi(): Plugin {
path: demoFile,
all: 'autoInjectUsage'
});
- return ``;
+ return ``;
}
}
return match;
diff --git a/packages/docs/scripts/generateApi.ts b/packages/docs/scripts/generateApi.ts
index f2e00ab1cf15d3c20bce4318ab75a9e3f6c36928..8759d400c06268d651bad772f46248dac7e8402b 100644
--- a/packages/docs/scripts/generateApi.ts
+++ b/packages/docs/scripts/generateApi.ts
@@ -147,27 +147,26 @@ glob('*/O*.vue', { cwd: srcDir, posix: true }).then((files) => {
const apiMdPath = join(fullPath, `../__docs__/${pathMath[1]}-api.${lang}.md`);
let mdContent = `### ${pathMath[1]}`;
// props
- if (meta.props.length) {
+ const selfProps = meta.props.filter((prop) => !prop.global);
+ if (selfProps.length) {
const tableHeader = {
'zh-CN': ['属性名', '类型', '默认值', '必填', '说明', '其它'],
'en-US': ['Prop Name', 'Type', 'Default', 'Required', 'Description', 'Other'],
};
const excludeTag = ['default', 'zh-CN', 'en-US'];
- let propsData = meta.props
- .filter((prop) => !prop.global)
- .map((prop) => {
- return [
- prop.name,
- prop.type,
- prop.default || prop.tags.find((tag) => tag.name === 'default')?.text || '',
- prop.required ? '🗸' : '',
- prop.tags.find((tag) => tag.name === lang)?.text || prop.description || '',
- prop.tags
- .filter((tag) => !excludeTag.includes(tag.name))
- .map((tag) => `^[${tag.name}]${tag.text ? `\`${tag.text}\`` : ''}`)
- .join(' '),
- ];
- });
+ let propsData = selfProps.map((prop) => {
+ return [
+ prop.name,
+ prop.type,
+ prop.default || prop.tags.find((tag) => tag.name === 'default')?.text || '',
+ prop.required ? '🗸' : '',
+ prop.tags.find((tag) => tag.name === lang)?.text || prop.description || '',
+ prop.tags
+ .filter((tag) => !excludeTag.includes(tag.name))
+ .map((tag) => `^[${tag.name}]${tag.text ? `\`${tag.text}\`` : ''}`)
+ .join(' '),
+ ];
+ });
propsData.unshift(tableHeader[lang]);
propsData = cleanTableData(propsData);
mdContent = `${mdContent}\n\n#### props\n\n${markdownTable(propsData)}`;
diff --git a/packages/docs/src/assets/style/markdown.scss b/packages/docs/src/assets/style/markdown.scss
index e74021a64db047dcf5854ea7aa057c83182ec58a..58a1309ace12169f3e3e45aa40f71e5f774d7242 100644
--- a/packages/docs/src/assets/style/markdown.scss
+++ b/packages/docs/src/assets/style/markdown.scss
@@ -5,11 +5,11 @@
background-color: var(--o-color-control1-light);
}
-[data-o-theme$='light'] span {
+[data-o-theme$='light'] pre span {
color: var(--shiki-light);
}
-[data-o-theme$='dark'] span {
+[data-o-theme$='dark'] pre span {
color: var(--shiki-dark);
}
p + .code-container {
diff --git a/packages/docs/src/components/DemoUsage.vue b/packages/docs/src/components/DemoUsage.vue
index 947c64ada7ed101a6b631100d8553cba6840f394..ae94c22a3ca94c51b2cb6b41c913feeb59de4d5e 100644
--- a/packages/docs/src/components/DemoUsage.vue
+++ b/packages/docs/src/components/DemoUsage.vue
@@ -1,5 +1,5 @@
@@ -295,7 +323,8 @@ Demo.__docs = docs;
border-left: none;
}
}
-:deep(.checkbox-group), :deep(.radio-group) {
+:deep(.checkbox-group),
+:deep(.radio-group) {
display: flex;
flex-wrap: wrap;
margin-bottom: var(--o3-gap-3);
diff --git a/packages/docs/src/main.ts b/packages/docs/src/main.ts
index 1be80bd97398e75914ac59384f42789696704cfb..d2a82c5608857f23702d4719711994ff46c15e3a 100644
--- a/packages/docs/src/main.ts
+++ b/packages/docs/src/main.ts
@@ -35,4 +35,7 @@ Object.entries(Opendesign).forEach(([name, value]) => {
app.component(name, value as any);
}
});
+// 某些组件有问题,需要手动注册
+app.component('OCarouselItem', Opendesign.OCarouselItem);
+app.component('OToggle', Opendesign.OToggle);
app.mount('#app');
diff --git a/packages/docs/vite.config.ts b/packages/docs/vite.config.ts
index eeab8be2e9c63374ca994c15990982dd8ed2de18..888ba4740534cc941494a94661381ba83ec5eda6 100644
--- a/packages/docs/vite.config.ts
+++ b/packages/docs/vite.config.ts
@@ -11,7 +11,6 @@ import generateComponentRouter from './plugins/generateComponentRouter';
// https://vitejs.dev/config/
export default defineConfig({
- base: './',
build: {
target: ['chrome74'],
outDir: './dist',
diff --git a/packages/opendesign/src/_demo/types.ts b/packages/opendesign/src/_demo/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..065ab65308bfb63bf7542b0c233293f8cad30e20
--- /dev/null
+++ b/packages/opendesign/src/_demo/types.ts
@@ -0,0 +1,67 @@
+export type DocDemoSchema =
+ | {
+ type: 'boolean';
+ default?: boolean;
+ label?: string;
+ }
+ | {
+ type: 'list';
+ list: Array;
+ default?: string | number;
+ label?: string;
+ }
+ | {
+ type: 'string';
+ default?: string;
+ label?: string;
+ }
+ | {
+ type: 'textarea';
+ default?: string;
+ label?: string;
+ row?: number;
+ }
+ | {
+ type: 'number';
+ step?: number;
+ min?: number;
+ max?: number;
+ default?: number;
+ label?: string;
+ }
+ | {
+ type: 'radio';
+ default?: string | number;
+ list: Array;
+ };
+
+export type DocDemoState = T extends Record
+ ? {
+ [key in keyof T]: T[key] extends {
+ type: 'list';
+ list: Array;
+ }
+ ? U
+ : T[key] extends {
+ type: 'radio';
+ list: Array;
+ }
+ ? U
+ : T[key] extends {
+ type: 'boolean';
+ }
+ ? boolean
+ : T[key] extends {
+ type: 'number';
+ }
+ ? number
+ : T[key] extends {
+ type: 'string';
+ }
+ ? string
+ : never;
+ }
+ : T;
+
+export type DocDemoTemplate = ((props: DocDemoState) => string) | string;
+export type DocDemoStyle = ((props: DocDemoState) => string) | string;