Files
zeekayandGitHub 5631dbe739 decouple @hanzogui, standardize on 'pkgs/', etc (#228)
* refactor: decouple @hanzo/ui from hanzogui

  Make @hanzo/ui shadcn-only — no hanzogui/Tamagui coupling.

  - remove primitives/bases (gui/admin/svelte/vue) re-exports
  - drop @hanzogui peerDependencies + peerDependenciesMeta entries
  - add check-no-hanzogui guard, wired into build
  - fix latent NodeJS.Timeout types to keep the build green

* refactor: remove duplicate @hanzo/brand from the monorepo

  @hanzo/brand is owned by the standalone hanzoai/brand (the npm-canonical
  source); this monorepo's copy was unused and had drifted.

  - delete pkg/brand
  - add check-no-brand-pkg guard (wired into `check`) so it can't reappear

* refactor(ui): stop importing from the app; use own cn util

  pkg/ui pulled `cn` from @/lib/utils (../../app) — an inverted dependency on
  the consuming app. Point the animation components at pkg/ui's own cn and
  drop the @/app, @/registry, @/lib tsconfig path aliases.

* fix(ui): type errors; stop tracking the root lockfile

  - ModelCard: lucide-react dropped the Github icon → use Code
  - drawer: annotate DrawerTrigger/DrawerClose (radix type portability)
  - untrack root pnpm-lock.yaml; CI → --no-frozen-lockfile

* release: bump @hanzo/ui to 5.7.0

* refactor: rename pkg/ → pkgs/, merge packages/ into it

  standardize on 'pkgs/': move pkg/* and packages/* into pkgs/.
  Update workspace globs, CI, scripts, and config references accordingly.
2026-06-19 15:30:30 -10:00

73 lines
2.0 KiB
TypeScript

import { expect, test } from "vitest"
import { z } from "zod"
import { resolveTree } from "../../src/registry/api"
import { registryItemSchema } from "../../src/registry/schema"
test("resolve tree", async () => {
const index = [
{
name: "button",
dependencies: ["@radix-ui/react-slot"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "button.tsx" }],
},
{
name: "dialog",
dependencies: ["@radix-ui/react-dialog"],
registryDependencies: ["button"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "dialog.tsx" }],
},
{
name: "input",
registryDependencies: ["button"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "input.tsx" }],
},
{
name: "alert-dialog",
dependencies: ["@radix-ui/react-alert-dialog"],
registryDependencies: ["button", "dialog"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "alert-dialog.tsx" }],
},
{
name: "example-card",
type: "registry:component",
files: [{ type: "registry:component", path: "example-card.tsx" }],
registryDependencies: ["button", "dialog", "input"],
},
] satisfies z.infer<typeof registryItemSchema>[]
expect(
(await resolveTree(index, ["button"])).map((entry) => entry.name).sort()
).toEqual(["button"])
expect(
(await resolveTree(index, ["dialog"])).map((entry) => entry.name).sort()
).toEqual(["button", "dialog"])
expect(
(await resolveTree(index, ["alert-dialog", "dialog"]))
.map((entry) => entry.name)
.sort()
).toEqual(["alert-dialog", "button", "dialog"])
expect(
(await resolveTree(index, ["example-card"]))
.map((entry) => entry.name)
.sort()
).toEqual(["button", "dialog", "example-card", "input"])
expect(
(await resolveTree(index, ["foo"])).map((entry) => entry.name).sort()
).toEqual([])
expect(
(await resolveTree(index, ["button", "foo"]))
.map((entry) => entry.name)
.sort()
).toEqual(["button"])
})