snapshot of https://github.com/shadcn-ui/ui.git (main, 2026-09-15; blobs > 131072B omitted)
This commit is contained in:
73
apps/v4/app/(app)/(create)/lib/api.ts
Normal file
73
apps/v4/app/(app)/(create)/lib/api.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import "server-only"
|
||||
|
||||
import { registryItemSchema } from "shadcn/schema"
|
||||
|
||||
import { BASES, getThemesForBaseColor, type BaseName } from "@/registry/config"
|
||||
import {
|
||||
ALLOWED_ITEM_TYPES,
|
||||
EXCLUDED_ITEMS,
|
||||
} from "@/app/(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
|
||||
}
|
||||
|
||||
const { getComponent } = await import("@/registry/bases/__components__")
|
||||
return getComponent(base, name) ?? null
|
||||
}
|
||||
|
||||
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 }
|
||||
Reference in New Issue
Block a user