build: add gen-entry.ts

This commit is contained in:
Quicy
2026-01-15 11:18:29 +08:00
parent e7500e5a12
commit 10920dc32c
11 changed files with 154 additions and 53 deletions
+2 -1
View File
@@ -38,5 +38,6 @@
"@algolia/client-search" "@algolia/client-search"
] ]
} }
} },
"packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67"
} }
+5 -5
View File
@@ -10,11 +10,11 @@
"prefix": "" "prefix": ""
}, },
"aliases": { "aliases": {
"components": "@/components", "components": "src/components",
"composables": "@/composables", "composables": "src/composables",
"utils": "@/lib/utils", "utils": "src/lib/utils",
"ui": "@/components", "ui": "src/components",
"lib": "@/lib" "lib": "src/lib"
}, },
"iconLibrary": "lucide" "iconLibrary": "lucide"
} }
+43
View File
@@ -0,0 +1,43 @@
import fs from 'fs'
import path from 'path'
const rootDir = path.resolve(import.meta.dirname, '../src')
const readDir = path.resolve(rootDir, './components')
const outputDir = path.resolve(rootDir, './index.ts')
async function readDirName(){
const pathList:Awaited<string[]> = await new Promise((resolve, reject) => {
fs.readdir(readDir, (err, data) => {
if (err) {
reject(err)
}
resolve(data)
})
})
return pathList
}
async function writeExportFile(pathList: string[]) {
const pathListStr = pathList.map(fileName => {
return `export * from './components/${fileName}/index'`
})
await new Promise((resolve, reject) => {
fs.writeFile(outputDir, pathListStr.join('\r\n'), (err) => {
if (err) {
reject(err)
}
resolve(undefined)
})
})
}
async function generate() {
try {
const list = await readDirName()
writeExportFile(list)
} catch(error) {
console.error(error)
}
}
generate()
@@ -0,0 +1,19 @@
<script setup lang="ts">
import type { CollapsibleRootEmits, CollapsibleRootProps } from "reka-ui"
import { CollapsibleRoot, useForwardPropsEmits } from "reka-ui"
const props = defineProps<CollapsibleRootProps>()
const emits = defineEmits<CollapsibleRootEmits>()
const forwarded = useForwardPropsEmits(props, emits)
</script>
<template>
<CollapsibleRoot
v-slot="slotProps"
data-slot="collapsible"
v-bind="forwarded"
>
<slot v-bind="slotProps" />
</CollapsibleRoot>
</template>
@@ -0,0 +1,15 @@
<script setup lang="ts">
import type { CollapsibleContentProps } from "reka-ui"
import { CollapsibleContent } from "reka-ui"
const props = defineProps<CollapsibleContentProps>()
</script>
<template>
<CollapsibleContent
data-slot="collapsible-content"
v-bind="props"
>
<slot />
</CollapsibleContent>
</template>
@@ -0,0 +1,15 @@
<script setup lang="ts">
import type { CollapsibleTriggerProps } from "reka-ui"
import { CollapsibleTrigger } from "reka-ui"
const props = defineProps<CollapsibleTriggerProps>()
</script>
<template>
<CollapsibleTrigger
data-slot="collapsible-trigger"
v-bind="props"
>
<slot />
</CollapsibleTrigger>
</template>
@@ -0,0 +1,3 @@
export { default as Collapsible } from './Collapsible.vue'
export { default as CollapsibleContent } from './CollapsibleContent.vue'
export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue'
+29 -30
View File
@@ -1,30 +1,29 @@
// Generated by scripts/gen-entry.ts. Do not edit manually. export * from './components/alert/index'
export * from './components/avatar/index'
export * from './components/alert/index' export * from './components/badge/index'
export * from './components/avatar/index' export * from './components/button/index'
export * from './components/badge/index' export * from './components/button-group/index'
export * from './components/button/index' export * from './components/card/index'
export * from './components/button-group/index' export * from './components/checkbox/index'
export * from './components/card/index' export * from './components/collapsible/index'
export * from './components/checkbox/index' export * from './components/combobox/index'
export * from './components/combobox/index' export * from './components/context-menu/index'
export * from './components/context-menu/index' export * from './components/dialog/index'
export * from './components/dialog/index' export * from './components/dropdown-menu/index'
export * from './components/dropdown-menu/index' export * from './components/input/index'
export * from './components/input/index' export * from './components/input-group/index'
export * from './components/input-group/index' export * from './components/kbd/index'
export * from './components/kbd/index' export * from './components/label/index'
export * from './components/label/index' export * from './components/radio-group/index'
export * from './components/radio-group/index' export * from './components/select/index'
export * from './components/select/index' export * from './components/separator/index'
export * from './components/separator/index' export * from './components/sheet/index'
export * from './components/sheet/index' export * from './components/sidebar/index'
export * from './components/sidebar/index' export * from './components/skeleton/index'
export * from './components/skeleton/index' export * from './components/slider/index'
export * from './components/slider/index' export * from './components/sonner/index'
export * from './components/sonner/index' export * from './components/spinner/index'
export * from './components/spinner/index' export * from './components/switch/index'
export * from './components/switch/index' export * from './components/tabs/index'
export * from './components/tabs/index' export * from './components/textarea/index'
export * from './components/textarea/index' export * from './components/tooltip/index'
export * from './components/tooltip/index'
@@ -1,13 +1,15 @@
<template> <template>
<section> <SidebarInset>
<h1 @click="open=!open"> <SidebarTrigger class="-ml-1" />
<h1 @click="open = !open">
<!-- 主体 --> <!-- 主体 -->
</h1> </h1>
</section> </SidebarInset>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { inject } from 'vue' import { inject } from 'vue'
import { SidebarTrigger, SidebarInset } from '@memoh/ui'
const open=inject('sideBarIsOpen') const open = inject('sideBarIsOpen')
</script> </script>
+9 -10
View File
@@ -30,7 +30,7 @@
</SidebarHeader> </SidebarHeader>
<SidebarContent> <SidebarContent>
<SidebarGroup> <SidebarGroup>
<SidebarGroupLabel class="text-base"> <SidebarGroupLabel>
对话操作 对话操作
</SidebarGroupLabel> </SidebarGroupLabel>
<SidebarGroupContent> <SidebarGroupContent>
@@ -39,17 +39,15 @@
v-for="sidebarItem in sidebarInfo" v-for="sidebarItem in sidebarInfo"
:key="sidebarItem.title" :key="sidebarItem.title"
> >
<SidebarMenuButton <CollapsibleTrigger as-child>
as-child <SidebarMenuButton>
>
<section class="flex">
<svg-icon <svg-icon
type="mdi" type="mdi"
:path="sidebarItem.icon" :path="sidebarItem.icon"
/> />
<span>{{ sidebarItem.title }}</span> <span>{{ sidebarItem.title }}</span>
</section> </SidebarMenuButton>
</SidebarMenuButton> </CollapsibleTrigger>
</SidebarMenuItem> </SidebarMenuItem>
</SidebarMenu> </SidebarMenu>
</SidebarGroupContent> </SidebarGroupContent>
@@ -74,11 +72,12 @@ import {
SidebarMenuButton, SidebarMenuButton,
SidebarMenuItem, SidebarMenuItem,
SidebarProvider, SidebarProvider,
SidebarRail, SidebarRail,
} from '@memoh/ui' } from '@memoh/ui'
import { reactive, inject } from 'vue' import { reactive, inject } from 'vue'
import SvgIcon from '@jamescoyle/vue-icon' import SvgIcon from '@jamescoyle/vue-icon'
import { mdiCogOutline, mdiChatOutline, mdiCogBox, mdiListBox } from '@mdi/js' import { mdiRobot, mdiChatOutline, mdiCogBox, mdiListBox } from '@mdi/js'
const open=inject('sideBarIsOpen') const open=inject('sideBarIsOpen')
@@ -90,7 +89,7 @@ const sidebarInfo = reactive([{
}, { }, {
title: '模型配置', title: '模型配置',
path: '/', path: '/',
icon: mdiCogOutline icon: mdiRobot
}, { }, {
title: '环境设置', title: '环境设置',
path: '/', path: '/',
+7 -2
View File
@@ -1,7 +1,12 @@
<template> <template>
<section class="flex"> <section class="flex">
<slot name="sidebar" /> <sidebar-provider>
<slot name="main" /> <slot name="sidebar" />
<slot name="main" />
</sidebar-provider>
</section> </section>
</template> </template>
<script setup lang="ts">
import { SidebarProvider } from '@memoh/ui'
</script>