mirror of
https://github.com/hanzoai/shadcn.git
synced 2026-11-02 13:07:46 +00:00
Squash merge of shadcn-ui/ui main branch into hanzo/ui, bringing in: - [email protected] through [email protected] releases - New apps/v4 directory structure - Registry system improvements and MCP server - Framework support (Vue, Svelte, React Native) - New templates (vite-app, monorepo-next, laravel) - Zod 4 compatibility (scoped override for zod@>4) - Test fixture corrections for alias resolution All 867 merge conflicts resolved preserving Hanzo customizations. 1020/1020 shadcn tests pass.
40 lines
998 B
TypeScript
40 lines
998 B
TypeScript
import { debounce, useQueryState } from "nuqs"
|
|
|
|
import globalRegistries from "@/registry/directory.json"
|
|
|
|
const normalizeQuery = (query: string) =>
|
|
query.toLowerCase().replaceAll(" ", "").replaceAll("@", "")
|
|
|
|
function finderFn<T extends (typeof globalRegistries)[0]>(
|
|
registry: T,
|
|
query: string
|
|
) {
|
|
const normalizedName = normalizeQuery(registry.name)
|
|
const normalizedDecription = normalizeQuery(registry.description)
|
|
const normalizedQuery = normalizeQuery(query)
|
|
|
|
return (
|
|
normalizedName.includes(normalizedQuery) ||
|
|
normalizedDecription.includes(normalizedQuery)
|
|
)
|
|
}
|
|
|
|
const searchDirectory = (query: string | null) => {
|
|
if (!query) return globalRegistries
|
|
|
|
return globalRegistries.filter((registry) => finderFn(registry, query))
|
|
}
|
|
|
|
export const useSearchRegistry = () => {
|
|
const [query, setQuery] = useQueryState("q", {
|
|
defaultValue: "",
|
|
limitUrlUpdates: debounce(250),
|
|
})
|
|
|
|
return {
|
|
query,
|
|
registries: searchDirectory(query),
|
|
setQuery,
|
|
}
|
|
}
|