mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-28 07:04:20 +00:00
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import "server-only"
|
|
|
|
import { registryItemSchema } from "shadcn/schema"
|
|
|
|
import { BASES, getThemesForBaseColor, type BaseName } from "@/registry/config"
|
|
import {
|
|
ALLOWED_ITEM_TYPES,
|
|
EXCLUDED_ITEMS,
|
|
} from "@/app/(create)/lib/constants"
|
|
|
|
export async function getItemsForBase(base: BaseName) {
|
|
const { Index } = await import("@/registry/bases/__index__")
|
|
const index = Index[base]
|
|
|
|
if (!index) {
|
|
return []
|
|
}
|
|
|
|
return Object.values(index).filter(
|
|
(item) =>
|
|
ALLOWED_ITEM_TYPES.includes(item.type) &&
|
|
!EXCLUDED_ITEMS.includes(item.name)
|
|
)
|
|
}
|
|
|
|
export async function getBaseItem(name: string, base: BaseName) {
|
|
const { Index } = await import("@/registry/bases/__index__")
|
|
const index = Index[base]
|
|
|
|
if (!index?.[name] || EXCLUDED_ITEMS.includes(name)) {
|
|
return null
|
|
}
|
|
|
|
return registryItemSchema.parse(index[name])
|
|
}
|
|
|
|
export async function getBaseComponent(name: string, base: BaseName) {
|
|
const { Index } = await import("@/registry/bases/__index__")
|
|
const index = Index[base]
|
|
|
|
if (!index?.[name] || EXCLUDED_ITEMS.includes(name)) {
|
|
return null
|
|
}
|
|
|
|
return index[name].component
|
|
}
|
|
|
|
export async function getAllItems() {
|
|
const entries = await Promise.all(
|
|
BASES.map(async (base) => {
|
|
const items = await getItemsForBase(base.name as BaseName)
|
|
const filtered: Pick<
|
|
NonNullable<(typeof items)[number]>,
|
|
"name" | "title" | "type"
|
|
>[] = []
|
|
for (const item of items) {
|
|
if (item !== null && !/\d+$/.test(item.name)) {
|
|
filtered.push({
|
|
name: item.name,
|
|
title: item.title,
|
|
type: item.type,
|
|
})
|
|
}
|
|
}
|
|
return [base.name, filtered] as const
|
|
})
|
|
)
|
|
return Object.fromEntries(entries)
|
|
}
|
|
|
|
// Re-export for server-side use.
|
|
export { getThemesForBaseColor }
|