diff --git a/.changeset/gentle-toes-stand.md b/.changeset/gentle-toes-stand.md
new file mode 100644
index 000000000..6bb959959
--- /dev/null
+++ b/.changeset/gentle-toes-stand.md
@@ -0,0 +1,5 @@
+---
+'@tszhong0411/prettier-plugin-package-json': major
+---
+
+- Migrate from `tsup` to `rslib`
diff --git a/.changeset/spicy-tigers-stay.md b/.changeset/spicy-tigers-stay.md
new file mode 100644
index 000000000..03eaa3597
--- /dev/null
+++ b/.changeset/spicy-tigers-stay.md
@@ -0,0 +1,26 @@
+---
+'@tszhong0411/ui': major
+---
+
+- Migrate from `tsup` to `rslib`
+- Update the image in aspect ratio demo
+- Update to latest styles of shadcn/ui
+- Update to `cva` beta
+- Update introduction in docs
+- Update code style from `? : null` to `&& `
+- Update to use oklch colors.
+- Update to divide long tailwindcss classes into multiple lines
+- Update `` to use shadcn-table
+- Add Ark UI badges
+- Add `Chart`, `Calendar`, `Sortable`
+- Add `data-slot` attribute to components
+- Replace `` with ``
+- Replace `` with `sr-only`
+- Remove `` and ``
+- Remove unnecessary `size-4` classes.
+- Remove `` which is using `@ark-ui/react`
+- Remove `` which is using `@ark-ui/react`
+- Remove `` which is using `@ark-ui/react`
+- Remove ``
+- Rename `toaster` to `sonner`
+- Rename `getAvatarAbbreviation()` to `getAbbreviation()`
diff --git a/.changeset/stupid-tires-repeat.md b/.changeset/stupid-tires-repeat.md
new file mode 100644
index 000000000..a53ecbd03
--- /dev/null
+++ b/.changeset/stupid-tires-repeat.md
@@ -0,0 +1,6 @@
+---
+'@tszhong0411/utils': major
+---
+
+- Migrate from `tsup` to `rslib`
+- Add `get-abbreviation` utility function
diff --git a/.changeset/tame-wolves-drive.md b/.changeset/tame-wolves-drive.md
new file mode 100644
index 000000000..e024196bc
--- /dev/null
+++ b/.changeset/tame-wolves-drive.md
@@ -0,0 +1,5 @@
+---
+'@tszhong0411/prettier-config': major
+---
+
+- Migrate from `tsup` to `rslib`
diff --git a/.changeset/whole-trains-hang.md b/.changeset/whole-trains-hang.md
new file mode 100644
index 000000000..8836cffdb
--- /dev/null
+++ b/.changeset/whole-trains-hang.md
@@ -0,0 +1,6 @@
+---
+'@tszhong0411/eslint-config': major
+---
+
+- Migrate from `tsup` to `rslib`
+- Remove `eslint-plugin-tailwindcss` completely
diff --git a/.changeset/witty-symbols-ring.md b/.changeset/witty-symbols-ring.md
new file mode 100644
index 000000000..5d4df7a18
--- /dev/null
+++ b/.changeset/witty-symbols-ring.md
@@ -0,0 +1,5 @@
+---
+'@tszhong0411/tsconfig': major
+---
+
+- Update package.json
diff --git a/.cspell.json b/.cspell.json
index 3ae035ddb..f1f2d8fbc 100644
--- a/.cspell.json
+++ b/.cspell.json
@@ -11,6 +11,7 @@
"aceternity",
"airpods",
"anishde",
+ "beamer",
"benoit",
"bentogrids",
"bradlc",
@@ -35,6 +36,7 @@
"honghong",
"honghongme",
"iina",
+ "ilike",
"innerhtml",
"jahir",
"joshwcomeau",
@@ -60,6 +62,8 @@
"nums",
"nuqs",
"nuxt",
+ "oklab",
+ "oklch",
"oliveira",
"orbstack",
"paralleldrive",
@@ -71,6 +75,9 @@
"reactquery",
"rharkor",
"rmiz",
+ "rsbuild",
+ "rslib",
+ "rtishchev",
"sadman",
"sakib",
"sameorigin",
@@ -94,6 +101,7 @@
"usehooks",
"vaul",
"velite",
+ "vitaly",
"vocs",
"wakatime",
"zenorocha"
diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml
index 6e73530a9..ade2d44fe 100644
--- a/.github/actions/setup/action.yml
+++ b/.github/actions/setup/action.yml
@@ -27,7 +27,7 @@ runs:
${{ runner.os }}-pnpm-store-
- name: Cache for Turbo
- uses: rharkor/caching-for-turbo@v1.5
+ uses: rharkor/caching-for-turbo@v1.8
- name: Install dependencies
shell: bash
diff --git a/apps/docs/next.config.ts b/apps/docs/next.config.ts
index cf9541c04..329244e4a 100644
--- a/apps/docs/next.config.ts
+++ b/apps/docs/next.config.ts
@@ -44,8 +44,8 @@ const config: NextConfig = {
async redirects() {
return [
{
- source: '/ui/components',
- destination: '/ui/components/accordion',
+ source: '/ui',
+ destination: '/ui/accordion',
permanent: true
}
]
diff --git a/apps/docs/package.json b/apps/docs/package.json
index e74f6c1ab..517e3346b 100644
--- a/apps/docs/package.json
+++ b/apps/docs/package.json
@@ -17,17 +17,21 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
+ "@faker-js/faker": "^9.7.0",
"@hookform/resolvers": "^5.0.1",
- "@tanstack/react-table": "^8.21.2",
+ "@tanstack/react-table": "^8.21.3",
"@tszhong0411/ui": "workspace:*",
"@tszhong0411/utils": "workspace:*",
- "class-variance-authority": "^0.7.1",
+ "cva": "^1.0.0-beta.3",
+ "date-fns": "^4.1.0",
"geist": "^1.3.1",
"hast-util-to-jsx-runtime": "^2.3.6",
- "lucide-react": "^0.487.0",
+ "lucide-react": "^0.511.0",
"next": "^15.3.0",
"next-themes": "^0.4.6",
+ "nuqs": "^2.4.1",
"react": "^19.1.0",
+ "react-day-picker": "8.10.1",
"react-dom": "^19.1.0",
"react-hook-form": "^7.55.0",
"recharts": "^2.15.2",
diff --git a/apps/docs/src/app/(main)/[[...slug]]/link-badges.tsx b/apps/docs/src/app/(main)/[[...slug]]/link-badges.tsx
index 637a9c920..e92e84510 100644
--- a/apps/docs/src/app/(main)/[[...slug]]/link-badges.tsx
+++ b/apps/docs/src/app/(main)/[[...slug]]/link-badges.tsx
@@ -11,18 +11,18 @@ const LinkBadges = (props: Doc['link'] = {}) => {
return (
- {doc ? (
+ {doc && (
Docs
- ) : null}
- {api ? (
+ )}
+ {api && (
API Reference
- ) : null}
+ )}
)
}
diff --git a/apps/docs/src/app/(main)/[[...slug]]/page.tsx b/apps/docs/src/app/(main)/[[...slug]]/page.tsx
index 13970e8f0..6f10eb4ec 100644
--- a/apps/docs/src/app/(main)/[[...slug]]/page.tsx
+++ b/apps/docs/src/app/(main)/[[...slug]]/page.tsx
@@ -2,6 +2,7 @@ import type { Metadata, ResolvingMetadata } from 'next'
import { allDocs } from 'content-collections'
import { notFound } from 'next/navigation'
+import { Suspense } from 'react'
import Mdx from '@/components/mdx'
@@ -85,9 +86,11 @@ const Page = async (props: PageProps) => {
{title}
{description}
- {hasLinks ?
: null}
+ {hasLinks &&
}
-
+
+
+
diff --git a/apps/docs/src/app/layout.tsx b/apps/docs/src/app/layout.tsx
index 6d1a21361..e472afc68 100644
--- a/apps/docs/src/app/layout.tsx
+++ b/apps/docs/src/app/layout.tsx
@@ -5,6 +5,7 @@ import '@/styles/globals.css'
import { cn } from '@tszhong0411/utils'
import { GeistMono } from 'geist/font/mono'
import { GeistSans } from 'geist/font/sans'
+import { NuqsAdapter } from 'nuqs/adapters/next/app'
import { SITE_DESCRIPTION, SITE_KEYWORDS, SITE_TITLE, SITE_URL } from '@/lib/constants'
@@ -113,12 +114,14 @@ const Layout = (props: LayoutProps) => {
suppressHydrationWarning
>
-
- {/* eslint-disable-next-line @eslint-react/dom/no-unknown-property -- custom attribute */}
-
- {children}
-
-
+
+
+ {/* eslint-disable-next-line @eslint-react/dom/no-unknown-property -- custom attribute */}
+
+ {children}
+
+
+