Skip to content

Commit 0a637df

Browse files
committedSep 22, 2024
fix(*): move back to PNPM
1 parent 3703c72 commit 0a637df

29 files changed

+10726
-93
lines changed
 

‎.github/workflows/release.yml

+11-2
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,23 @@ jobs:
1919
with:
2020
bun-version: latest
2121

22+
- name: Setup PNPM
23+
uses: pnpm/action-setup@v4
24+
25+
- name: Setup Node
26+
uses: actions/setup-node@v4
27+
with:
28+
node-version: 20
29+
cache: "pnpm"
30+
2231
- name: Install Dependencies
23-
run: bun install
32+
run: pnpm install
2433

2534
- name: Create Release PR or Publish to NPM
2635
id: changesets
2736
uses: changesets/action@v1
2837
with:
29-
publish: bun run release
38+
publish: pnpm run build && changeset publish
3039
env:
3140
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3241
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

‎.github/workflows/tests.yml

+9-6
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ jobs:
1212
runs-on: ubuntu-latest
1313
steps:
1414
- uses: actions/checkout@v4
15-
- name: Setup bun
16-
uses: oven-sh/setup-bun@v2
15+
- name: Setup PNPM
16+
uses: pnpm/action-setup@v4
17+
- name: Setup Node
18+
uses: actions/setup-node@v4
1719
with:
18-
bun-version: latest
20+
node-version: 20
21+
cache: "pnpm"
1922
- name: Install dependencies
20-
run: bun install --frozen-lockfile
23+
run: pnpm install --frozen-lockfile
2124
- name: Build packages
22-
run: bun run build --filter='!www'
25+
run: pnpm run build --filter='!www'
2326
- name: Running tests
24-
run: bun test
27+
run: pnpm test

‎.tool-versions

-2
This file was deleted.

‎bun.lockb

-451 KB
Binary file not shown.

‎bunfig.toml

-2
This file was deleted.

‎package.json

+10-8
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
"type": "module",
66
"private": true,
77
"scripts": {
8-
"release": "turbo run build && changeset publish",
98
"build": "turbo run build",
109
"dev": "turbo run dev",
10+
"test": "vitest",
1111
"clean": "rimraf -g packages/**/dist www/**/.vercel packages/**/.turbo www/**/.turbo www/**/.astro",
1212
"preview": "turbo run preview",
1313
"check": "turbo run check",
14-
"www": "bun --filter www run",
15-
"postinstall": "bun run build --filter='@atmx-org/*'",
16-
"cli": "bun --filter cli run",
17-
"common": "bun --filter common run"
14+
"www": "pnpm --filter www run",
15+
"cli": "pnpm --filter cli run",
16+
"common": "pnpm --filter common run"
1817
},
1918
"workspaces": [
2019
"packages/*",
@@ -24,12 +23,15 @@
2423
"devDependencies": {
2524
"@changesets/cli": "^2.27.8",
2625
"@types/node": "^22.5.5",
26+
"happy-dom": "^15.7.4",
2727
"prettier": "^3.3.3",
2828
"prettier-plugin-astro": "^0.14.1",
2929
"prettier-plugin-tailwindcss": "^0.6.6",
3030
"turbo": "^2.1.2",
31-
"typescript": "^5.6.2"
31+
"typescript": "^5.6.2",
32+
"vite-tsconfig-paths": "^5.0.1",
33+
"vitest": "^2.1.1"
3234
},
33-
"packageManager": "bun@1.1.26",
34-
"license": "MIT"
35+
"license": "MIT",
36+
"packageManager": "pnpm@9.11.0+sha512.0a203ffaed5a3f63242cd064c8fb5892366c103e328079318f78062f24ea8c9d50bc6a47aa3567cabefd824d170e78fa2745ed1f16b132e16436146b7688f19b"
3537
}

‎packages/cli/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
},
99
"scripts": {
1010
"build": "tsup --env.NODE_ENV production",
11+
"test": "vitest",
1112
"dev": "cross-env NODE_ENV=development tsup --watch",
12-
"generate-schema": "tsx scripts/generate-schema.ts"
13+
"generate-schema": "tsx scripts/generate-schema.ts",
14+
"prepare": "pnpm run build"
1315
},
1416
"keywords": [
1517
"atmx",

‎packages/cli/src/transformers/transform-imports.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { it } from "bun:test";
1+
import { it } from "vitest";
22

33
import { createSourceFile } from "@atmx-org/common";
44
import { parseConfig } from "@/config/parse-config.ts";

‎packages/common/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
],
1515
"scripts": {
1616
"build": "tsup --env.NODE_ENV production",
17-
"dev": "tsup --watch"
17+
"dev": "tsup --watch",
18+
"prepare": "pnpm run build"
1819
},
1920
"devDependencies": {
2021
"@types/babel__core": "^7.20.5",

‎packages/common/src/transformers/transform-imports.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expect, test } from "bun:test";
1+
import { expect, test } from "vitest";
22

33
import { transformImports } from "./transform-imports.ts";
44
import { createSourceFile } from "@/utils/ast.ts";

‎packages/registry-tools/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
],
1616
"scripts": {
1717
"build": "tsup --env.NODE_ENV production",
18-
"dev": "tsup --watch"
18+
"dev": "tsup --watch",
19+
"test": "vitest"
1920
},
2021
"author": "Tyler Nickerson",
2122
"license": "MIT",

‎packages/registry-tools/src/extractors/extract-dependencies.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expect, test } from "bun:test";
1+
import { expect, test } from "vitest";
22

33
import { createSourceFile } from "@atmx-org/common";
44

‎packages/registry-tools/src/extractors/extract-docs.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expect, test } from "bun:test";
1+
import { expect, test } from "vitest";
22

33
import type { SnippetType } from "@atmx-org/common";
44

‎packages/registry/package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
"./*": "./src/*"
88
},
99
"scripts": {
10-
"check": "tsc --noEmit"
10+
"check": "tsc --noEmit",
11+
"test": "vitest"
1112
},
1213
"license": "MIT",
1314
"devDependencies": {
14-
"@happy-dom/global-registrator": "^15.7.4",
1515
"@testing-library/dom": "^10.4.0",
1616
"@testing-library/react": "^16.0.1",
1717
"@types/bun": "^1.1.10",
@@ -24,7 +24,6 @@
2424
"svelte": "^4.2.19",
2525
"tinyspy": "^3.0.2",
2626
"typescript": "^5.6.2",
27-
"vite-tsconfig-paths": "^5.0.1",
28-
"@sinonjs/fake-timers": "^13.0.2"
27+
"vite-tsconfig-paths": "^5.0.1"
2928
}
3029
}

‎packages/registry/src/actions/async/lazyload.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {
22
describe,
33
beforeAll,
4-
jest,
4+
vi,
55
beforeEach,
66
afterEach,
77
it,
88
expect,
9-
} from "bun:test";
9+
} from "vitest";
1010

1111
// Needed for r e a s o n s
1212
// https://github.com/vitest-dev/vitest/issues/6104
@@ -19,8 +19,8 @@ describe("lazyload", function () {
1919
let action: ReturnType<typeof lazyload>;
2020
let intersectionObserverConstructorSpy: SpyImpl;
2121

22-
const observeFake = jest.fn();
23-
const unobserveFake = jest.fn();
22+
const observeFake = vi.fn();
23+
const unobserveFake = vi.fn();
2424

2525
beforeAll(function () {
2626
setupIntersectionObserverMock({

‎packages/registry/src/actions/interaction/click-outside.test.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {
22
expect,
33
describe,
4-
jest,
4+
vi,
55
beforeAll,
66
afterAll,
77
afterEach,
88
it,
9-
} from "bun:test";
9+
} from "vitest";
1010

1111
import { clickOutside } from "./click-outside.ts";
1212

@@ -32,28 +32,28 @@ describe("clickOutside", function () {
3232
});
3333

3434
it("calls callback on outside click", function () {
35-
const cb = jest.fn();
35+
const cb = vi.fn();
3636
action = clickOutside(element, { enabled: true, cb });
3737
sibling.click();
3838
expect(cb).toHaveBeenCalledTimes(1);
3939
});
4040

4141
it("does not call callback when disabled", function () {
42-
const cb = jest.fn();
42+
const cb = vi.fn();
4343
action = clickOutside(element, { enabled: false, cb });
4444
sibling.click();
4545
expect(cb).not.toHaveBeenCalled();
4646
});
4747

4848
it("does not call callback when element clicked", function () {
49-
const cb = jest.fn();
49+
const cb = vi.fn();
5050
action = clickOutside(element, { enabled: true, cb });
5151
element.click();
5252
expect(cb).not.toHaveBeenCalled();
5353
});
5454

5555
it("updates parameters", function () {
56-
const cb = jest.fn();
56+
const cb = vi.fn();
5757
action = clickOutside(element, { enabled: true, cb });
5858
action?.update?.({ enabled: false, cb });
5959
sibling.click();

‎packages/registry/src/actions/interaction/hotkey.test.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import {
22
expect,
33
describe,
44
beforeAll,
5-
jest,
5+
vi,
66
afterAll,
77
afterEach,
88
it,
9-
} from "bun:test";
9+
} from "vitest";
1010

1111
import { hotkey } from "./hotkey.ts";
1212

@@ -30,14 +30,14 @@ describe("hotkey", function () {
3030
});
3131

3232
it("calls callback when callback provided", function () {
33-
const callback = jest.fn();
33+
const callback = vi.fn();
3434
action = hotkey(element, { code: spaceKeyCode, callback });
3535
dispatchKeydownEvent({ code: spaceKeyCode });
3636
expect(callback).toHaveBeenCalledTimes(1);
3737
});
3838

3939
it("clicks node when callback not provided", function () {
40-
const callback = jest.fn();
40+
const callback = vi.fn();
4141
action = hotkey(element, { code: spaceKeyCode });
4242
element.addEventListener("click", callback);
4343
dispatchKeydownEvent({ code: spaceKeyCode });
@@ -46,36 +46,36 @@ describe("hotkey", function () {
4646
});
4747

4848
it("does not call callback when different key pressed", function () {
49-
const callback = jest.fn();
49+
const callback = vi.fn();
5050
action = hotkey(element, { code: spaceKeyCode, callback });
5151
dispatchKeydownEvent({ code: "KeyA" });
5252
expect(callback).not.toHaveBeenCalled();
5353
});
5454

5555
it("handles alt key", function () {
56-
const callback = jest.fn();
56+
const callback = vi.fn();
5757
action = hotkey(element, { code: spaceKeyCode, callback, alt: true });
5858
dispatchKeydownEvent({ code: spaceKeyCode, altKey: true });
5959
expect(callback).toHaveBeenCalledTimes(1);
6060
});
6161

6262
it("handles shift key", function () {
63-
const callback = jest.fn();
63+
const callback = vi.fn();
6464
action = hotkey(element, { code: spaceKeyCode, callback, shift: true });
6565
dispatchKeydownEvent({ code: spaceKeyCode, shiftKey: true });
6666
expect(callback).toHaveBeenCalledTimes(1);
6767
});
6868

6969
it("handles ctrl and meta key", function () {
70-
const callback = jest.fn();
70+
const callback = vi.fn();
7171
action = hotkey(element, { code: spaceKeyCode, callback, control: true });
7272
dispatchKeydownEvent({ code: spaceKeyCode, ctrlKey: true });
7373
dispatchKeydownEvent({ code: spaceKeyCode, metaKey: true });
7474
expect(callback).toHaveBeenCalledTimes(2);
7575
});
7676

7777
it("updates key code", function () {
78-
const callback = jest.fn();
78+
const callback = vi.fn();
7979
action = hotkey(element, { code: spaceKeyCode, callback });
8080
action?.update?.({ code: "KeyA", callback });
8181
dispatchKeydownEvent({ code: "KeyA" });
@@ -84,7 +84,7 @@ describe("hotkey", function () {
8484
});
8585

8686
it("does not fire callback when it is inactive", function () {
87-
const callback = jest.fn();
87+
const callback = vi.fn();
8888
action = hotkey(element, { code: spaceKeyCode, callback });
8989
dispatchKeydownEvent({ code: spaceKeyCode });
9090
action?.update?.({ active: false, code: spaceKeyCode, callback });

‎packages/registry/src/actions/interaction/longpress.test.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,31 @@ import {
22
describe,
33
beforeAll,
44
afterEach,
5-
jest,
5+
vi,
66
it,
77
afterAll,
88
expect,
9-
} from "bun:test";
10-
11-
import { install, type InstalledClock } from "@sinonjs/fake-timers";
9+
type VitestUtils,
10+
} from "vitest";
1211

1312
import { longpress } from "./longpress.ts";
1413

1514
describe("longpress", function () {
1615
let element: HTMLElement;
17-
let cb = jest.fn();
16+
let cb = vi.fn();
1817
let action: ReturnType<typeof longpress>;
19-
let clock: InstalledClock;
18+
let clock: VitestUtils;
2019

2120
beforeAll(function () {
2221
element = document.createElement("div");
2322
element.addEventListener("longpress", cb);
2423
document.body.appendChild(element);
25-
clock = install();
24+
clock = vi.useFakeTimers();
2625
});
2726

2827
afterAll(() => {
2928
element.remove();
30-
clock.uninstall();
29+
clock.useRealTimers();
3130
});
3231

3332
afterEach(() => {
@@ -39,15 +38,15 @@ describe("longpress", function () {
3938
const duration = 10;
4039
action = longpress(element, duration);
4140
element.dispatchEvent(new window.MouseEvent("mousedown"));
42-
clock.tick(duration);
41+
clock.advanceTimersByTime(duration);
4342
element.dispatchEvent(new window.MouseEvent("mouseup"));
4443
expect(cb).toHaveBeenCalledTimes(1);
4544
});
4645

4746
it("does not dispatch longpress event when mousedown less than duration", function () {
4847
action = longpress(element, 100);
4948
element.dispatchEvent(new window.MouseEvent("mousedown"));
50-
clock.tick(10);
49+
clock.advanceTimersByTime(10);
5150
element.dispatchEvent(new window.MouseEvent("mouseup"));
5251
expect(cb).not.toHaveBeenCalled();
5352
});
@@ -57,7 +56,7 @@ describe("longpress", function () {
5756
action = longpress(element, 500);
5857
action?.update?.(newDuration);
5958
element.dispatchEvent(new window.MouseEvent("mousedown"));
60-
clock.tick(newDuration);
59+
clock.advanceTimersByTime(newDuration);
6160
element.dispatchEvent(new window.MouseEvent("mouseup"));
6261
expect(cb).toHaveBeenCalledTimes(1);
6362
});

‎packages/registry/src/actions/interaction/pannable.test.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {
22
describe,
3-
jest,
3+
vi,
44
beforeAll,
55
afterEach,
66
it,
77
afterAll,
88
expect,
9-
} from "bun:test";
9+
} from "vitest";
1010

1111
import { pannable } from "./pannable.ts";
1212

@@ -30,9 +30,9 @@ describe("pannable", function () {
3030
it("dispatches pan events", function () {
3131
action = pannable(element);
3232

33-
const panstartCb = jest.fn();
34-
const panmoveCb = jest.fn();
35-
const panendCb = jest.fn();
33+
const panstartCb = vi.fn();
34+
const panmoveCb = vi.fn();
35+
const panendCb = vi.fn();
3636

3737
element.addEventListener("panstart", panstartCb);
3838
element.addEventListener("panmove", panmoveCb);

‎packages/registry/src/helpers/filesystem/path-exists.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import { join } from "node:path";
88

9-
import { beforeEach, afterEach, it, describe, expect } from "bun:test";
9+
import { beforeEach, afterEach, it, describe, expect } from "vitest";
1010
import { tmpdir } from "node:os";
1111

1212
import { rimraf } from "@/helpers/filesystem/rimraf.ts";

‎packages/registry/src/helpers/filesystem/rimraf.test.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { join } from "node:path";
33
import { randomBytes } from "node:crypto";
44
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
55

6-
import { describe, beforeEach, it, expect, afterEach } from "bun:test";
6+
import { describe, beforeEach, it, expect, afterEach } from "vitest";
77

88
import { empty } from "@/helpers/filesystem/empty.ts";
99
import { rimraf } from "@/helpers/filesystem/rimraf.ts";
@@ -54,33 +54,33 @@ describe("remove", () => {
5454

5555
describe("+ remove()", () => {
5656
it("should delete an empty directory", async () => {
57-
expect(existsSync(TEST_DIR)).toBeTrue();
57+
expect(existsSync(TEST_DIR)).toBeTruthy();
5858
await rimraf(TEST_DIR);
59-
expect(existsSync(TEST_DIR)).toBeFalse();
59+
expect(existsSync(TEST_DIR)).toBeFalsy;
6060
});
6161

6262
it("should delete a directory full of directories and files", async () => {
6363
buildFixtureDir();
64-
expect(existsSync(TEST_DIR)).toBeTrue();
64+
expect(existsSync(TEST_DIR)).toBeTruthy();
6565
await rimraf(TEST_DIR);
66-
expect(existsSync(TEST_DIR)).toBeFalse();
66+
expect(existsSync(TEST_DIR)).toBeFalsy;
6767
});
6868

6969
it("should delete a file", async () => {
7070
const file = join(TEST_DIR, "file");
7171

7272
writeFileSync(file, "hello");
73-
expect(existsSync(file)).toBeTrue();
73+
expect(existsSync(file)).toBeTruthy();
7474
await rimraf(file);
75-
expect(existsSync(file)).toBeFalse();
75+
expect(existsSync(file)).toBeFalsy;
7676
});
7777

7878
it("should delete without a callback", async () => {
7979
const file = join(TEST_DIR, "file");
8080

8181
writeFileSync(file, "hello");
8282

83-
expect(existsSync(file)).toBeTrue();
83+
expect(existsSync(file)).toBeTruthy();
8484

8585
let existsChecker = setInterval(async () => {
8686
const exists = await pathExists(file);
@@ -105,13 +105,13 @@ describe("remove", () => {
105105

106106
writeFileSync(wrongFile, "yo");
107107

108-
expect(existsSync(file)).toBeTrue();
109-
expect(existsSync(wrongFile)).toBeTrue();
108+
expect(existsSync(file)).toBeTruthy();
109+
expect(existsSync(wrongFile)).toBeTruthy();
110110

111111
await rimraf(file);
112112

113-
expect(existsSync(file)).toBeFalse();
114-
expect(existsSync(wrongFile)).toBeTrue();
113+
expect(existsSync(file)).toBeFalsy();
114+
expect(existsSync(wrongFile)).toBeTruthy();
115115
});
116116

117117
it("shouldn’t delete glob matches when file doesn’t exist", async () => {
@@ -121,13 +121,13 @@ describe("remove", () => {
121121

122122
writeFileSync(wrongFile, "yo");
123123

124-
expect(existsSync(nonexistentFile)).toBeFalse();
125-
expect(existsSync(wrongFile)).toBeTrue();
124+
expect(existsSync(nonexistentFile)).toBeFalsy;
125+
expect(existsSync(wrongFile)).toBeTruthy();
126126

127127
await rimraf(nonexistentFile);
128128

129-
expect(existsSync(nonexistentFile)).toBeFalse();
130-
expect(existsSync(wrongFile)).toBeTrue();
129+
expect(existsSync(nonexistentFile)).toBeFalsy;
130+
expect(existsSync(wrongFile)).toBeTruthy();
131131
});
132132
});
133133
});

‎packages/registry/src/hooks/state/use-counter.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { it, expect, describe, spyOn } from "bun:test";
1+
import { it, expect, describe, vi } from "vitest";
22
import { act, renderHook } from "@testing-library/react";
33

44
import { useCounter } from "./use-counter.ts";
@@ -150,7 +150,7 @@ it("should not exceed min value", () => {
150150

151151
describe("should `console.error` on unexpected inputs", () => {
152152
it("if the min is greater than than the max", () => {
153-
const spy = spyOn(console, "error").mockImplementation(() => {});
153+
const spy = vi.spyOn(console, "error").mockImplementation(() => {});
154154

155155
expect(() => {
156156
setUp(10, 3, 5);

‎pnpm-lock.yaml

+10,607
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎pnpm-workspace.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
packages:
2+
- "packages/*"
3+
- "www"
4+
- "examples/*"

‎tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"skipLibCheck": true, /* Skip type checking all .d.ts files. */
1212
"baseUrl": ".",
1313
"paths": {
14-
"@/*": ["src/*", "../../node_modules/@atmx-org/registry/src/*"]
14+
"@/*": ["src/*", "./node_modules/@atmx-org/registry/src/*"]
1515
}
1616
}
1717
}

‎turbo.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"outputs": ["dist/**", ".vercel/**", ".astro/**"]
1010
},
1111
"test": {
12-
"dependsOn": ["^test", "@atmx-org/registry#check"]
12+
"dependsOn": ["@atmx-org/registry#check"]
1313
},
1414
"check": {
1515
"outputs": [".astro/**"]

‎vitest.config.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
import { defineConfig } from "vitest/config";
3+
4+
import paths from 'vite-tsconfig-paths';
5+
6+
export default defineConfig({
7+
plugins: [paths()],
8+
test: {
9+
environment: "happy-dom",
10+
},
11+
});

‎www/.tool-versions

-1
This file was deleted.

‎www/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@
99
"preview": "astro preview",
1010
"astro": "astro",
1111
"check": "astro check",
12-
"ui": "shadcn-ui"
12+
"ui": "shadcn"
1313
},
1414
"private": true,
1515
"dependencies": {
1616
"@astrojs/mdx": "^3.1.4",
1717
"@astrojs/starlight": "^0.27.0",
18+
"@astrojs/starlight-tailwind": "^2.0.3",
1819
"@atmx-org/common": "workspace:*",
1920
"@atmx-org/registry": "workspace:*",
2021
"@atmx-org/registry-tools": "workspace:*",
21-
"@astrojs/starlight-tailwind": "^2.0.3",
2222
"@babel/core": "^7.25.2",
2323
"@babel/preset-typescript": "^7.24.7",
2424
"@babel/traverse": "^7.25.4",
@@ -50,7 +50,8 @@
5050
"shiki": "^1.14.1",
5151
"tailwind-merge": "^2.5.2",
5252
"ts-morph": "^23.0.0",
53-
"typescript": "^5.5.4"
53+
"typescript": "^5.5.4",
54+
"valibot": "^0.41.0"
5455
},
5556
"devDependencies": {
5657
"@astrojs/check": "^0.9.3",
@@ -65,7 +66,6 @@
6566
"@types/node": "^22.2.0",
6667
"@types/react": "^18.3.4",
6768
"@types/react-dom": "^18.3.0",
68-
"shadcn-ui": "^0.9.0",
6969
"tailwindcss": "^3.4.10",
7070
"tailwindcss-animate": "^1.0.7",
7171
"unplugin-icons": "^0.19.2"

0 commit comments

Comments
 (0)
Please sign in to comment.