diff --git a/site/bun.lock b/site/bun.lock
new file mode 100644
index 0000000..4142089
--- /dev/null
+++ b/site/bun.lock
@@ -0,0 +1,613 @@
+{
+ "lockfileVersion": 1,
+ "configVersion": 0,
+ "workspaces": {
+ "": {
+ "dependencies": {
+ "@mdx-js/react": "^3.1.0",
+ "@tanstack/react-virtual": "^3.14.5",
+ "@vitejs/plugin-react": "^6.0.3",
+ "lucide-react": "^1.23.0",
+ "match-sorter": "^8.3.0",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+ "rehype-pretty-code": "^0.14.4",
+ "remark-directive": "^4.0.0",
+ "remark-gfm": "^4.0.1",
+ "shiki": "^4.3.1",
+ "vite": "^8.1.3",
+ "zod": "^4.4.3",
+ },
+ "devDependencies": {
+ "@mdx-js/rollup": "^3.1.0",
+ "@tailwindcss/postcss": "^4.3.2",
+ "@types/node": "^26.1.0",
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.49",
+ "tailwindcss": "^4.3.2",
+ "typescript": "^6.0.3",
+ },
+ },
+ },
+ "packages": {
+ "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
+
+ "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="],
+
+ "@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="],
+
+ "@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="],
+
+ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="],
+
+ "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
+
+ "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="],
+
+ "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
+
+ "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
+
+ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
+
+ "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="],
+
+ "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="],
+
+ "@mdx-js/rollup": ["@mdx-js/rollup@3.1.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", "source-map": "^0.7.0", "vfile": "^6.0.0" }, "peerDependencies": { "rollup": ">=2" } }, "sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw=="],
+
+ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="],
+
+ "@oxc-project/types": ["@oxc-project/types@0.138.0", "", {}, "sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA=="],
+
+ "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.4", "", { "os": "android", "cpu": "arm64" }, "sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw=="],
+
+ "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ=="],
+
+ "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg=="],
+
+ "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ=="],
+
+ "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.4", "", { "os": "linux", "cpu": "arm" }, "sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA=="],
+
+ "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w=="],
+
+ "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng=="],
+
+ "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg=="],
+
+ "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ=="],
+
+ "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.4", "", { "os": "linux", "cpu": "x64" }, "sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw=="],
+
+ "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.4", "", { "os": "linux", "cpu": "x64" }, "sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ=="],
+
+ "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.4", "", { "os": "none", "cpu": "arm64" }, "sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA=="],
+
+ "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.4", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg=="],
+
+ "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA=="],
+
+ "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.4", "", { "os": "win32", "cpu": "x64" }, "sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ=="],
+
+ "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="],
+
+ "@rollup/pluginutils": ["@rollup/pluginutils@5.4.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" } }, "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg=="],
+
+ "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.62.2", "", { "os": "android", "cpu": "arm" }, "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg=="],
+
+ "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.62.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw=="],
+
+ "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.62.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A=="],
+
+ "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.62.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA=="],
+
+ "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.62.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw=="],
+
+ "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.62.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg=="],
+
+ "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.62.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg=="],
+
+ "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.62.2", "", { "os": "linux", "cpu": "arm" }, "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA=="],
+
+ "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.62.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA=="],
+
+ "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.62.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ=="],
+
+ "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg=="],
+
+ "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ=="],
+
+ "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.62.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A=="],
+
+ "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.62.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w=="],
+
+ "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg=="],
+
+ "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q=="],
+
+ "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.62.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg=="],
+
+ "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.62.2", "", { "os": "linux", "cpu": "x64" }, "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A=="],
+
+ "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.62.2", "", { "os": "linux", "cpu": "x64" }, "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg=="],
+
+ "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.62.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg=="],
+
+ "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.62.2", "", { "os": "none", "cpu": "arm64" }, "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA=="],
+
+ "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.62.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg=="],
+
+ "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.62.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q=="],
+
+ "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.62.2", "", { "os": "win32", "cpu": "x64" }, "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg=="],
+
+ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.62.2", "", { "os": "win32", "cpu": "x64" }, "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA=="],
+
+ "@shikijs/core": ["@shikijs/core@4.3.1", "", { "dependencies": { "@shikijs/primitive": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA=="],
+
+ "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ=="],
+
+ "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg=="],
+
+ "@shikijs/langs": ["@shikijs/langs@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1" } }, "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ=="],
+
+ "@shikijs/primitive": ["@shikijs/primitive@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A=="],
+
+ "@shikijs/themes": ["@shikijs/themes@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1" } }, "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA=="],
+
+ "@shikijs/types": ["@shikijs/types@4.3.1", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g=="],
+
+ "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
+
+ "@tailwindcss/node": ["@tailwindcss/node@4.3.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "5.21.6", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.2" } }, "sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg=="],
+
+ "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.2", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.2", "@tailwindcss/oxide-darwin-arm64": "4.3.2", "@tailwindcss/oxide-darwin-x64": "4.3.2", "@tailwindcss/oxide-freebsd-x64": "4.3.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2", "@tailwindcss/oxide-linux-arm64-musl": "4.3.2", "@tailwindcss/oxide-linux-x64-gnu": "4.3.2", "@tailwindcss/oxide-linux-x64-musl": "4.3.2", "@tailwindcss/oxide-wasm32-wasi": "4.3.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2", "@tailwindcss/oxide-win32-x64-msvc": "4.3.2" } }, "sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag=="],
+
+ "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.2", "", { "os": "android", "cpu": "arm64" }, "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA=="],
+
+ "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w=="],
+
+ "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ=="],
+
+ "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA=="],
+
+ "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2", "", { "os": "linux", "cpu": "arm" }, "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w=="],
+
+ "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw=="],
+
+ "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA=="],
+
+ "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w=="],
+
+ "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw=="],
+
+ "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.2", "", { "cpu": "none" }, "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw=="],
+
+ "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ=="],
+
+ "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.2", "", { "os": "win32", "cpu": "x64" }, "sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ=="],
+
+ "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.2", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.2", "@tailwindcss/oxide": "4.3.2", "postcss": "^8.5.15", "tailwindcss": "4.3.2" } }, "sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g=="],
+
+ "@tanstack/react-virtual": ["@tanstack/react-virtual@3.14.5", "", { "dependencies": { "@tanstack/virtual-core": "3.17.3" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-4EKRXh7zBLkbKbFmG3AUVkircuHd+7OdT1pocJSepxtfBd3qnrJgJ5rtPkRYyo9fmyVb2+pI2xPy5oYvMLQy6A=="],
+
+ "@tanstack/virtual-core": ["@tanstack/virtual-core@3.17.3", "", {}, "sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw=="],
+
+ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="],
+
+ "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="],
+
+ "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="],
+
+ "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="],
+
+ "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
+
+ "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
+
+ "@types/mdx": ["@types/mdx@2.0.14", "", {}, "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg=="],
+
+ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="],
+
+ "@types/node": ["@types/node@26.1.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw=="],
+
+ "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="],
+
+ "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
+
+ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.2", "", {}, "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA=="],
+
+ "@vitejs/plugin-react": ["@vitejs/plugin-react@6.0.3", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler"] }, "sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg=="],
+
+ "acorn": ["acorn@8.17.0", "", { "bin": "bin/acorn" }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="],
+
+ "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
+
+ "astring": ["astring@1.9.0", "", { "bin": "bin/astring" }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="],
+
+ "autoprefixer": ["autoprefixer@10.5.2", "", { "dependencies": { "browserslist": "^4.28.4", "caniuse-lite": "^1.0.30001799", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": "bin/autoprefixer" }, "sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q=="],
+
+ "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="],
+
+ "baseline-browser-mapping": ["baseline-browser-mapping@2.10.42", "", { "bin": "dist/cli.cjs" }, "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q=="],
+
+ "browserslist": ["browserslist@4.28.4", "", { "dependencies": { "baseline-browser-mapping": "^2.10.38", "caniuse-lite": "^1.0.30001799", "electron-to-chromium": "^1.5.376", "node-releases": "^2.0.48", "update-browserslist-db": "^1.2.3" }, "bin": "cli.js" }, "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw=="],
+
+ "caniuse-lite": ["caniuse-lite@1.0.30001800", "", {}, "sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA=="],
+
+ "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
+
+ "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="],
+
+ "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="],
+
+ "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="],
+
+ "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="],
+
+ "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="],
+
+ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
+
+ "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
+
+ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+
+ "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="],
+
+ "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
+
+ "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
+
+ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="],
+
+ "electron-to-chromium": ["electron-to-chromium@1.5.387", "", {}, "sha512-TaxwufTFDufvPEoXdhwVrA3UdFWBeWGkYoJ1K8ldF1xe6gKfth6iRNS5lTQ5JPNOHdGQm8PT1QYKUqFLCiUefQ=="],
+
+ "enhanced-resolve": ["enhanced-resolve@5.21.6", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ=="],
+
+ "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
+
+ "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="],
+
+ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="],
+
+ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
+
+ "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
+
+ "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="],
+
+ "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="],
+
+ "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="],
+
+ "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="],
+
+ "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="],
+
+ "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="],
+
+ "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
+
+ "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="],
+
+ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
+
+ "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="],
+
+ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
+
+ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
+
+ "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="],
+
+ "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="],
+
+ "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="],
+
+ "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="],
+
+ "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="],
+
+ "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="],
+
+ "hast-util-to-string": ["hast-util-to-string@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A=="],
+
+ "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="],
+
+ "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="],
+
+ "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
+
+ "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="],
+
+ "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="],
+
+ "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="],
+
+ "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="],
+
+ "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="],
+
+ "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="],
+
+ "jiti": ["jiti@2.7.0", "", { "bin": "lib/jiti-cli.mjs" }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="],
+
+ "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
+
+ "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
+
+ "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
+
+ "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
+
+ "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
+
+ "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
+
+ "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
+
+ "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
+
+ "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
+
+ "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
+
+ "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
+
+ "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
+
+ "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="],
+
+ "lucide-react": ["lucide-react@1.23.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-38BpJcD0JhFosxHApP/BYsBetLpQFRoTRzEzstM/XCc3jsAG7wqaY1lgVwxiUe3xqYE+lNxo2PkCmYwXWrwwIw=="],
+
+ "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
+
+ "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="],
+
+ "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="],
+
+ "match-sorter": ["match-sorter@8.3.0", "", { "dependencies": { "@babel/runtime": "^7.23.8", "remove-accents": "0.5.0" } }, "sha512-8Py1GbZi5zsclYSFcPAH4H5xfTbeD0bOREA7qP/t8bW4MbOSlPl8sbqHOedEV7O+Bxyvxm6xs/v6BXJGe+JDNA=="],
+
+ "mdast-util-directive": ["mdast-util-directive@3.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q=="],
+
+ "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="],
+
+ "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="],
+
+ "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="],
+
+ "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="],
+
+ "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="],
+
+ "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="],
+
+ "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="],
+
+ "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="],
+
+ "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="],
+
+ "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="],
+
+ "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="],
+
+ "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="],
+
+ "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="],
+
+ "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="],
+
+ "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="],
+
+ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="],
+
+ "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="],
+
+ "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="],
+
+ "micromark-extension-directive": ["micromark-extension-directive@4.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "parse-entities": "^4.0.0" } }, "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg=="],
+
+ "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="],
+
+ "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="],
+
+ "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="],
+
+ "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="],
+
+ "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="],
+
+ "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="],
+
+ "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="],
+
+ "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="],
+
+ "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="],
+
+ "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="],
+
+ "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="],
+
+ "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="],
+
+ "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="],
+
+ "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="],
+
+ "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="],
+
+ "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="],
+
+ "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="],
+
+ "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="],
+
+ "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="],
+
+ "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="],
+
+ "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="],
+
+ "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="],
+
+ "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="],
+
+ "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="],
+
+ "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="],
+
+ "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="],
+
+ "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="],
+
+ "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="],
+
+ "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="],
+
+ "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="],
+
+ "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="],
+
+ "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="],
+
+ "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="],
+
+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
+
+ "nanoid": ["nanoid@3.3.15", "", { "bin": "bin/nanoid.cjs" }, "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA=="],
+
+ "node-releases": ["node-releases@2.0.50", "", {}, "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg=="],
+
+ "oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="],
+
+ "oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="],
+
+ "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="],
+
+ "parse-numeric-range": ["parse-numeric-range@1.3.0", "", {}, "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ=="],
+
+ "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
+
+ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
+
+ "picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="],
+
+ "postcss": ["postcss@8.5.16", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg=="],
+
+ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
+
+ "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="],
+
+ "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="],
+
+ "react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="],
+
+ "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="],
+
+ "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="],
+
+ "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="],
+
+ "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="],
+
+ "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="],
+
+ "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="],
+
+ "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="],
+
+ "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="],
+
+ "rehype-pretty-code": ["rehype-pretty-code@0.14.4", "", { "dependencies": { "@types/hast": "^3.0.4", "hast-util-to-string": "^3.0.0", "parse-numeric-range": "^1.3.0", "rehype-parse": "^9.0.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0" }, "peerDependencies": { "shiki": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" } }, "sha512-FKPkiSnTqtJHKjCwfqfQs0tXSkmcq7K3jsryZI0rpazo2kWgSYw+sk18GAhxDzKdPk004WWWZ5yiZFEUQhN4Bg=="],
+
+ "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="],
+
+ "remark-directive": ["remark-directive@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-directive": "^3.0.0", "micromark-extension-directive": "^4.0.0", "unified": "^11.0.0" } }, "sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA=="],
+
+ "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="],
+
+ "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="],
+
+ "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="],
+
+ "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="],
+
+ "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="],
+
+ "remove-accents": ["remove-accents@0.5.0", "", {}, "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A=="],
+
+ "rolldown": ["rolldown@1.1.4", "", { "dependencies": { "@oxc-project/types": "=0.138.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.4", "@rolldown/binding-darwin-arm64": "1.1.4", "@rolldown/binding-darwin-x64": "1.1.4", "@rolldown/binding-freebsd-x64": "1.1.4", "@rolldown/binding-linux-arm-gnueabihf": "1.1.4", "@rolldown/binding-linux-arm64-gnu": "1.1.4", "@rolldown/binding-linux-arm64-musl": "1.1.4", "@rolldown/binding-linux-ppc64-gnu": "1.1.4", "@rolldown/binding-linux-s390x-gnu": "1.1.4", "@rolldown/binding-linux-x64-gnu": "1.1.4", "@rolldown/binding-linux-x64-musl": "1.1.4", "@rolldown/binding-openharmony-arm64": "1.1.4", "@rolldown/binding-wasm32-wasi": "1.1.4", "@rolldown/binding-win32-arm64-msvc": "1.1.4", "@rolldown/binding-win32-x64-msvc": "1.1.4" }, "bin": "bin/cli.mjs" }, "sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA=="],
+
+ "rollup": ["rollup@4.62.2", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.62.2", "@rollup/rollup-android-arm64": "4.62.2", "@rollup/rollup-darwin-arm64": "4.62.2", "@rollup/rollup-darwin-x64": "4.62.2", "@rollup/rollup-freebsd-arm64": "4.62.2", "@rollup/rollup-freebsd-x64": "4.62.2", "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", "@rollup/rollup-linux-arm-musleabihf": "4.62.2", "@rollup/rollup-linux-arm64-gnu": "4.62.2", "@rollup/rollup-linux-arm64-musl": "4.62.2", "@rollup/rollup-linux-loong64-gnu": "4.62.2", "@rollup/rollup-linux-loong64-musl": "4.62.2", "@rollup/rollup-linux-ppc64-gnu": "4.62.2", "@rollup/rollup-linux-ppc64-musl": "4.62.2", "@rollup/rollup-linux-riscv64-gnu": "4.62.2", "@rollup/rollup-linux-riscv64-musl": "4.62.2", "@rollup/rollup-linux-s390x-gnu": "4.62.2", "@rollup/rollup-linux-x64-gnu": "4.62.2", "@rollup/rollup-linux-x64-musl": "4.62.2", "@rollup/rollup-openbsd-x64": "4.62.2", "@rollup/rollup-openharmony-arm64": "4.62.2", "@rollup/rollup-win32-arm64-msvc": "4.62.2", "@rollup/rollup-win32-ia32-msvc": "4.62.2", "@rollup/rollup-win32-x64-gnu": "4.62.2", "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA=="],
+
+ "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
+
+ "shiki": ["shiki@4.3.1", "", { "dependencies": { "@shikijs/core": "4.3.1", "@shikijs/engine-javascript": "4.3.1", "@shikijs/engine-oniguruma": "4.3.1", "@shikijs/langs": "4.3.1", "@shikijs/themes": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw=="],
+
+ "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
+
+ "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
+
+ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
+
+ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
+
+ "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="],
+
+ "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="],
+
+ "tailwindcss": ["tailwindcss@4.3.2", "", {}, "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA=="],
+
+ "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="],
+
+ "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="],
+
+ "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
+
+ "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="],
+
+ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
+
+ "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
+
+ "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
+
+ "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="],
+
+ "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="],
+
+ "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="],
+
+ "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="],
+
+ "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="],
+
+ "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="],
+
+ "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="],
+
+ "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="],
+
+ "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="],
+
+ "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="],
+
+ "vite": ["vite@8.1.3", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.16", "rolldown": "~1.1.3", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.3.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@vitejs/devtools", "esbuild", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": "bin/vite.js" }, "sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA=="],
+
+ "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="],
+
+ "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+
+ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
+
+ "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="],
+
+ "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],
+ }
+}
diff --git a/site/index.html b/site/index.html
new file mode 100644
index 0000000..fc5aecd
--- /dev/null
+++ b/site/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ Base UI Tailwind Components
+
+
+
+
+
+
+
+
+
diff --git a/site/package.json b/site/package.json
new file mode 100644
index 0000000..e9aeabd
--- /dev/null
+++ b/site/package.json
@@ -0,0 +1,33 @@
+{
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite --host 127.0.0.1",
+ "build": "tsc --noEmit && vite build",
+ "preview": "vite preview --host 127.0.0.1"
+ },
+ "dependencies": {
+ "@mdx-js/react": "^3.1.0",
+ "@tanstack/react-virtual": "^3.14.5",
+ "@vitejs/plugin-react": "^6.0.3",
+ "lucide-react": "^1.23.0",
+ "match-sorter": "^8.3.0",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+ "rehype-pretty-code": "^0.14.4",
+ "remark-directive": "^4.0.0",
+ "remark-gfm": "^4.0.1",
+ "shiki": "^4.3.1",
+ "vite": "^8.1.3",
+ "zod": "^4.4.3"
+ },
+ "devDependencies": {
+ "@mdx-js/rollup": "^3.1.0",
+ "@tailwindcss/postcss": "^4.3.2",
+ "@types/node": "^26.1.0",
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.49",
+ "tailwindcss": "^4.3.2",
+ "typescript": "^6.0.3"
+ }
+}
diff --git a/site/postcss.config.js b/site/postcss.config.js
new file mode 100644
index 0000000..14502dc
--- /dev/null
+++ b/site/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ "@tailwindcss/postcss": {},
+ autoprefixer: {},
+ },
+}
diff --git a/site/src/app.tsx b/site/src/app.tsx
new file mode 100644
index 0000000..eee33f9
--- /dev/null
+++ b/site/src/app.tsx
@@ -0,0 +1,203 @@
+import * as React from "react"
+import { Layout } from "./components/layout"
+import { mdxComponents } from "./components/mdx-components"
+import {
+ componentDocs,
+ getCurrentRoute,
+ handbookDocs,
+ overviewDocs,
+ utilityDocs,
+} from "./routes"
+
+export type Theme = "light" | "dark"
+export type TocItem = {
+ id: string
+ depth: 1 | 2 | 3
+ title: string
+}
+
+export function App() {
+ const [route, setRoute] = React.useState(getCurrentRoute)
+ const [activeHash, setActiveHash] = React.useState(() =>
+ window.location.hash.replace("#", ""),
+ )
+ const [theme, setTheme] = React.useState(() =>
+ document.documentElement.classList.contains("dark") ? "dark" : "light",
+ )
+ const [tocItems, setTocItems] = React.useState([])
+ const [activeTocIds, setActiveTocIds] = React.useState([])
+ const articleRef = React.useRef(null)
+ const docRoute = route || "overview/quick-start"
+ const activeOverviewDoc = docRoute.startsWith("overview/")
+ ? overviewDocs.find((doc) => `overview/${doc.slug}` === docRoute)
+ : undefined
+ const activeHandbookDoc = docRoute.startsWith("handbook/")
+ ? handbookDocs.find((doc) => `handbook/${doc.slug}` === docRoute)
+ : undefined
+ const activeComponentDoc = docRoute.startsWith("components/")
+ ? componentDocs.find((doc) => `components/${doc.slug}` === docRoute)
+ : undefined
+ const activeUtilityDoc = docRoute.startsWith("utils/")
+ ? utilityDocs.find((doc) => `utils/${doc.slug}` === docRoute)
+ : undefined
+ const Page =
+ activeOverviewDoc?.Component ??
+ activeHandbookDoc?.Component ??
+ activeComponentDoc?.Component ??
+ activeUtilityDoc?.Component ??
+ overviewDocs[0].Component
+ const activeDocTitle =
+ activeOverviewDoc?.title ??
+ activeHandbookDoc?.title ??
+ activeComponentDoc?.title ??
+ activeUtilityDoc?.title ??
+ overviewDocs[0].title
+ const toggleTheme = React.useCallback(() => {
+ setTheme((currentTheme) => (currentTheme === "dark" ? "light" : "dark"))
+ }, [])
+
+ React.useEffect(() => {
+ const syncLocation = () => {
+ setRoute(getCurrentRoute())
+ setActiveHash(window.location.hash.replace("#", ""))
+ }
+
+ const onPopState = () => syncLocation()
+ const onHashChange = () => syncLocation()
+ window.addEventListener("popstate", onPopState)
+ window.addEventListener("hashchange", onHashChange)
+ return () => {
+ window.removeEventListener("popstate", onPopState)
+ window.removeEventListener("hashchange", onHashChange)
+ }
+ }, [])
+
+ React.useEffect(() => {
+ window.history.scrollRestoration = "manual"
+ }, [])
+
+ React.useEffect(() => {
+ document.title = `${activeDocTitle} - Base UI Tailwind`
+ }, [activeDocTitle])
+
+ React.useLayoutEffect(() => {
+ const frame = window.requestAnimationFrame(() => {
+ if (activeHash) {
+ document.getElementById(activeHash)?.scrollIntoView({ block: "start" })
+ return
+ }
+
+ window.scrollTo({ left: 0, top: 0 })
+ })
+
+ return () => window.cancelAnimationFrame(frame)
+ }, [docRoute, activeHash])
+
+ React.useEffect(() => {
+ document.documentElement.classList.toggle("dark", theme === "dark")
+ localStorage.setItem("base-ui-tailwind-theme", theme)
+ }, [theme])
+
+ React.useEffect(() => {
+ const onKeyDown = (event: KeyboardEvent) => {
+ if (event.key.toLowerCase() !== "d" || !event.metaKey) {
+ return
+ }
+
+ event.preventDefault()
+ toggleTheme()
+ }
+
+ window.addEventListener("keydown", onKeyDown)
+ return () => window.removeEventListener("keydown", onKeyDown)
+ }, [toggleTheme])
+
+ React.useEffect(() => {
+ const headings = Array.from(
+ articleRef.current?.querySelectorAll("h1[id], h2[id], h3[id]") ??
+ [],
+ )
+ const seenIds = new Map()
+
+ setTocItems(
+ headings.map((heading) => {
+ const baseId = heading.id || "section"
+ const count = seenIds.get(baseId) ?? 0
+ seenIds.set(baseId, count + 1)
+
+ const id = count === 0 ? baseId : `${baseId}-${count + 1}`
+ if (heading.id !== id) {
+ heading.id = id
+ }
+
+ return {
+ id,
+ depth: heading.tagName === "H1" ? 1 : heading.tagName === "H3" ? 3 : 2,
+ title: heading.textContent ?? "",
+ }
+ }),
+ )
+ setActiveTocIds([])
+ }, [docRoute, Page])
+
+ React.useEffect(() => {
+ const headings = Array.from(
+ articleRef.current?.querySelectorAll("h1[id], h2[id], h3[id]") ??
+ [],
+ )
+ if (headings.length === 0) {
+ setActiveTocIds([])
+ return
+ }
+
+ const visibleIds = new Set()
+ const observer = new IntersectionObserver(
+ (entries) => {
+ for (const entry of entries) {
+ const id = entry.target.id
+ if (!id) continue
+
+ if (entry.isIntersecting) {
+ visibleIds.add(id)
+ } else {
+ visibleIds.delete(id)
+ }
+ }
+
+ setActiveTocIds(Array.from(visibleIds))
+ },
+ {
+ rootMargin: "0px 0px -15% 0px",
+ threshold: 0,
+ },
+ )
+
+ headings.forEach((heading) => observer.observe(heading))
+ return () => observer.disconnect()
+ }, [docRoute, tocItems])
+
+ function navigate(nextRoute: string, hash?: string) {
+ const nextPath = nextRoute ? `/${nextRoute}` : "/"
+ const nextUrl = hash ? `${nextPath}#${hash}` : nextPath
+
+ window.history.pushState({}, "", nextUrl)
+ setRoute(nextRoute)
+ setActiveHash(hash ?? "")
+ }
+
+ return (
+
+
+
+
+
+ )
+}
diff --git a/site/src/components/code-block.tsx b/site/src/components/code-block.tsx
new file mode 100644
index 0000000..e67980e
--- /dev/null
+++ b/site/src/components/code-block.tsx
@@ -0,0 +1,105 @@
+import * as React from "react"
+import { useExampleCodeContext, useInExampleContext } from "./example-container"
+import { cn } from "@/lib/utils"
+
+type CodeBlockProps = React.HTMLAttributes
+
+const collapsedHeight = "9rem"
+
+export function CodeBlock({ children, ...props }: CodeBlockProps) {
+ const [expanded, setExpanded] = React.useState(false)
+ const blockRef = React.useRef(null)
+ const exampleCodeContext = useExampleCodeContext()
+ const inExampleContext = useInExampleContext()
+ const isExampleCode = exampleCodeContext != null
+ const code = extractText(children)
+ const lineCount = exampleCodeContext?.lineCount ?? code.split("\n").length
+ const collapsible = isExampleCode && lineCount > 6
+
+ React.useEffect(() => {
+ setExpanded(false)
+ }, [code])
+
+ function toggleExpanded() {
+ if (expanded) {
+ setExpanded(false)
+
+ window.requestAnimationFrame(() => {
+ const preview = blockRef.current
+ ?.closest(".component-example")
+ ?.querySelector(".example-preview")
+
+ if (!preview) {
+ return
+ }
+
+ const rect = preview.getBoundingClientRect()
+ const belowViewport = rect.bottom > window.innerHeight
+ if (rect.top < 16 || belowViewport) {
+ window.scrollTo({
+ left: window.scrollX,
+ top: window.scrollY + rect.top - 16,
+ })
+ }
+ })
+ return
+ }
+
+ setExpanded(true)
+ }
+
+ return (
+
+
+ {children}
+
+ {collapsible ? (
+
+
+ {expanded ? "Hide Code" : "Show Code"}
+
+
+ ) : null}
+
+ )
+}
+
+function extractText(node: React.ReactNode): string {
+ if (typeof node === "string" || typeof node === "number") {
+ return String(node)
+ }
+
+ if (Array.isArray(node)) {
+ return node.map(extractText).join("")
+ }
+
+ if (React.isValidElement<{ children?: React.ReactNode }>(node)) {
+ return extractText(node.props.children)
+ }
+
+ return ""
+}
diff --git a/site/src/components/example-container.tsx b/site/src/components/example-container.tsx
new file mode 100644
index 0000000..61eb98d
--- /dev/null
+++ b/site/src/components/example-container.tsx
@@ -0,0 +1,61 @@
+import * as React from "react"
+
+type ExampleCodeContextValue = {
+ lineCount: number | null
+}
+
+const ExampleCodeContext = React.createContext(null)
+const InExampleContext = React.createContext(false);
+
+type ExampleContainerProps = {
+ children: React.ReactNode
+}
+
+type ExamplePreviewProps = {
+ children: React.ReactNode
+}
+
+type ExampleCodeProps = {
+ children: React.ReactNode
+ lineCount?: number | string
+}
+
+export function ExampleContainer({ children }: ExampleContainerProps) {
+ return (
+
+
+ {children}
+
+
+ )
+}
+
+export function ExamplePreview({ children }: ExamplePreviewProps) {
+ return (
+
+ {children}
+
+ )
+}
+
+export function ExampleCode({ children, lineCount }: ExampleCodeProps) {
+ const parsedLineCount =
+ typeof lineCount === "number" ? lineCount : Number.parseInt(lineCount ?? "", 10)
+ const value = Number.isFinite(parsedLineCount) ? parsedLineCount : null
+
+ return (
+
+
+ {children}
+
+
+ )
+}
+
+export function useExampleCodeContext() {
+ return React.useContext(ExampleCodeContext)
+}
+
+export function useInExampleContext() {
+ return React.useContext(InExampleContext)
+}
diff --git a/site/src/components/layout.tsx b/site/src/components/layout.tsx
new file mode 100644
index 0000000..fe741c4
--- /dev/null
+++ b/site/src/components/layout.tsx
@@ -0,0 +1,309 @@
+import { ArrowLeftIcon, ArrowRightIcon, Moon, Sun } from "lucide-react"
+import * as React from "react"
+import type { Theme, TocItem } from "../app"
+import { componentDocs, handbookDocs, overviewDocs, utilityDocs } from "../routes"
+
+type LayoutProps = {
+ activeRoute: string
+ activeHash: string
+ children: React.ReactNode
+ theme: Theme
+ activeTocIds: string[]
+ tocItems: TocItem[]
+ onNavigate: (route: string, hash?: string) => void
+ onThemeToggle: () => void
+}
+
+export function Layout({
+ activeRoute,
+ activeHash,
+ children,
+ theme,
+ activeTocIds,
+ tocItems,
+ onNavigate,
+ onThemeToggle,
+}: LayoutProps) {
+ const nextTheme = theme === "dark" ? "light" : "dark"
+ const routeLinks = React.useMemo(
+ () => sidebarGroups.flatMap((group) => group.items.filter((item) => !item.hash)),
+ [],
+ )
+ const activeRouteIndex = routeLinks.findIndex((item) => item.route === activeRoute)
+ const previousRoute = activeRouteIndex > 0 ? routeLinks[activeRouteIndex - 1] : undefined
+ const nextRoute =
+ activeRouteIndex !== -1 && activeRouteIndex < routeLinks.length - 1
+ ? routeLinks[activeRouteIndex + 1]
+ : undefined
+
+ return (
+
+
+
+
+ {children}
+
+
+
+
+
+
+ )
+}
+
+function BaseUiLogo({ className }: { className?: string }) {
+ return (
+
+
+
+ )
+}
+
+type SidebarItem = {
+ title: string
+ route: string
+ hash?: string
+ icon?: React.ComponentType<{ className?: string }>
+ status?: "stub"
+}
+
+const sidebarGroups: Array<{ title: string; items: SidebarItem[] }> = [
+ {
+ title: "Overview",
+ items: overviewDocs.map((doc, index) => ({
+ title: doc.title,
+ route: `overview/${doc.slug}`,
+ })),
+ },
+ {
+ title: "Handbook",
+ items: handbookDocs.map((doc) => ({
+ title: doc.title,
+ route: `handbook/${doc.slug}`,
+ status: doc.status,
+ })),
+ },
+ {
+ title: "Components",
+ items: componentDocs.map((doc) => ({
+ title: doc.title,
+ route: `components/${doc.slug}`,
+ status: doc.status === "stub" ? "stub" : undefined,
+ })).sort((a, b) => a.title.localeCompare(b.title)),
+ },
+ {
+ title: "Utils",
+ items: utilityDocs.map((doc) => ({
+ title: doc.title,
+ route: `utils/${doc.slug}`,
+ })),
+ },
+];
+
+function SidebarNav({
+ activeHash,
+ activeRoute,
+ onNavigate,
+}: {
+ activeHash: string
+ activeRoute: string
+ onNavigate: (route: string, hash?: string) => void
+}) {
+ return (
+
+ {sidebarGroups.map((group) => (
+
+ {group.title}
+ {group.items.map((item) => (
+
+ ))}
+
+ ))}
+
+ )
+}
+
+function NavButton({
+ active,
+ item,
+ onNavigate,
+}: {
+ active: boolean
+ item: SidebarItem
+ onNavigate: (route: string, hash?: string) => void
+}) {
+ const Icon = item.icon
+
+ return (
+ handleRouteLinkClick(event, item, onNavigate)}
+ className={navClass(active)}
+ >
+ {Icon ? : null}
+ {item.title}
+ {item.status === "stub" ? : null}
+
+ )
+}
+
+function StubBadge() {
+ return (
+
+ stub
+
+ )
+}
+
+function isSidebarItemActive(
+ item: SidebarItem,
+ activeRoute: string,
+ activeHash: string,
+) {
+ return item.route === activeRoute && (item.hash ?? "") === activeHash
+}
+
+function NavGroupLabel({ children }: { children: React.ReactNode }) {
+ return (
+
+ {children}
+
+ )
+}
+
+function navClass(active: boolean) {
+ return [
+ "flex h-7 items-center gap-2 text-left text-sm",
+ active
+ ? "bg-neutral-100 text-neutral-950 no-underline dark:bg-neutral-800 dark:text-white px-2 -mx-2 rounded-xl"
+ : "text-neutral-700 underline-offset-4 hover:underline dark:text-neutral-300",
+ ].join(" ")
+}
+
+function getRouteHref(item: Pick) {
+ return `/${item.route}${item.hash ? `#${item.hash}` : ""}`
+}
+
+function handleRouteLinkClick(
+ event: React.MouseEvent,
+ item: Pick,
+ onNavigate: (route: string, hash?: string) => void,
+) {
+ if (
+ event.defaultPrevented ||
+ event.button !== 0 ||
+ event.metaKey ||
+ event.altKey ||
+ event.ctrlKey ||
+ event.shiftKey
+ ) {
+ return
+ }
+
+ event.preventDefault()
+ onNavigate(item.route, item.hash)
+}
+
+function tocLinkClass(item: TocItem, active: boolean) {
+ return [
+ "underline-offset-4 transition-colors",
+ item.depth === 3 ? "pl-4" : "",
+ active
+ ? "font-medium text-neutral-950 dark:text-white"
+ : "text-neutral-500 hover:underline dark:text-neutral-400",
+ ]
+ .filter(Boolean)
+ .join(" ")
+}
diff --git a/site/src/components/mdx-components.tsx b/site/src/components/mdx-components.tsx
new file mode 100644
index 0000000..5cee919
--- /dev/null
+++ b/site/src/components/mdx-components.tsx
@@ -0,0 +1,124 @@
+import type { MDXComponents } from "mdx/types"
+import * as React from "react"
+import { CodeBlock } from "./code-block"
+import { ExampleCode, ExampleContainer, ExamplePreview } from "./example-container"
+
+export const mdxComponents: MDXComponents = {
+ ExampleCode,
+ ExampleContainer,
+ ExamplePreview,
+ h1: ({ children, id, ...props }) => (
+
+ {children}
+
+ ),
+ h2: ({ children, id, ...props }) => (
+
+ {children}
+
+ ),
+ h3: ({ children, id, ...props }) => (
+
+ {children}
+
+ ),
+ h4: (props) => (
+
+ ),
+ p: (props) =>
,
+ a: (props) => (
+
+ ),
+ ul: (props) => (
+
+ ),
+ ol: (props) => (
+
+ ),
+ li: (props) => ,
+ blockquote: (props) => (
+
+ ),
+ hr: (props) => ,
+ code: ({ className, ...props }) => {
+ const isCodeBlock =
+ className?.includes("language-") ||
+ props["data-language" as keyof typeof props] != null ||
+ props["data-theme" as keyof typeof props] != null
+
+ if (isCodeBlock) {
+ return
+ }
+
+ return (
+
+ )
+ },
+ pre: CodeBlock,
+ table: (props) => (
+
+ ),
+ th: (props) => (
+
+ ),
+ td: (props) => (
+
+ ),
+}
+
+function getTextContent(node: React.ReactNode): string {
+ if (typeof node === "string" || typeof node === "number") {
+ return String(node)
+ }
+
+ if (Array.isArray(node)) {
+ return node.map(getTextContent).join(" ")
+ }
+
+ if (React.isValidElement<{ children?: React.ReactNode }>(node)) {
+ return getTextContent(node.props.children)
+ }
+
+ return ""
+}
+
+function slugify(value: string) {
+ return (
+ value
+ .trim()
+ .toLowerCase()
+ .replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-")
+ .replace(/^-+|-+$/g, "") || "section"
+ )
+}
diff --git a/site/src/content/components/accordion.mdx b/site/src/content/components/accordion.mdx
new file mode 100644
index 0000000..0c1a9d3
--- /dev/null
+++ b/site/src/content/components/accordion.mdx
@@ -0,0 +1,113 @@
+# Accordion
+
+Accordion wraps Base UI's accordion primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/accordion/accordion.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Accordion from "@/components/ui/accordion"
+
+
+
+
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Accordion,
+ AccordionHeader,
+ AccordionItem,
+ AccordionPanel,
+ AccordionTrigger,
+} from "@/components/ui/accordion"
+```
+
+## Composition
+
+Use the following composition to build `Accordion`:
+
+```txt
+Accordion
+├── AccordionTrigger
+├── AccordionItem
+├── AccordionHeader
+└── AccordionPanel
+```
+
+## Examples
+
+### Open multiple panels
+
+::example{src="components/accordion/open-multiple-panels.tsx"}
+
+## API Reference
+
+Official API: [Base UI Accordion API](https://base-ui.com/react/components/accordion#api-reference).
+
+This wrapper preserves the underlying Base UI Accordion API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Accordion` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Item
+
+`Accordion.Item` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Header
+
+`Accordion.Header` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Trigger
+
+`Accordion.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Panel
+
+`Accordion.Panel` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/alert-dialog.mdx b/site/src/content/components/alert-dialog.mdx
new file mode 100644
index 0000000..06c00a6
--- /dev/null
+++ b/site/src/content/components/alert-dialog.mdx
@@ -0,0 +1,169 @@
+# Alert Dialog
+
+Alert Dialog wraps Base UI's alert dialog primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/alert-dialog/alert-dialog.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import AlertDialog from "@/components/ui/alert-dialog"
+
+
+
+
+
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ AlertDialog,
+ AlertDialogClose,
+ AlertDialogPopup,
+ AlertDialogPortal,
+ AlertDialogTrigger,
+} from "@/components/ui/alert-dialog"
+```
+
+## Composition
+
+Use the following composition to build `AlertDialog`:
+
+```txt
+AlertDialog
+├── AlertDialogTrigger
+├── AlertDialogPortal
+│ ├── AlertDialogBackdrop
+│ └── AlertDialogPopup
+├── AlertDialogClose
+├── AlertDialogDescription
+├── AlertDialogTitle
+└── AlertDialogViewport
+```
+
+## Examples
+
+### Close confirmation
+
+::example{src="components/alert-dialog/close-confirmation.tsx"}
+
+### Detached triggers
+
+::example{src="components/alert-dialog/detached-triggers.tsx"}
+
+### Controlled mode with multiple triggers
+
+::example{src="components/alert-dialog/controlled-mode-with-multiple-triggers.tsx"}
+
+## API Reference
+
+Official API: [Base UI Alert Dialog API](https://base-ui.com/react/components/alert-dialog#api-reference).
+
+This wrapper preserves the underlying Base UI Alert Dialog API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`AlertDialog` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Backdrop
+
+`AlertDialog.Backdrop` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Close
+
+`AlertDialog.Close` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Description
+
+`AlertDialog.Description` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Popup
+
+`AlertDialog.Popup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Portal
+
+`AlertDialog.Portal` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `container` | `HTMLElement \| RefObject` | `document.body` | Element that receives portal content. |
+| `keepMounted` | `boolean` | `false` | Keeps children mounted when closed. |
+| `children` | `React.ReactNode` | - | Floating content. |
+
+### Title
+
+`AlertDialog.Title` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Trigger
+
+`AlertDialog.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Viewport
+
+`AlertDialog.Viewport` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/autocomplete.mdx b/site/src/content/components/autocomplete.mdx
new file mode 100644
index 0000000..e913bff
--- /dev/null
+++ b/site/src/content/components/autocomplete.mdx
@@ -0,0 +1,385 @@
+# Autocomplete
+
+Autocomplete wraps Base UI's autocomplete primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/autocomplete/autocomplete.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Autocomplete from "@/components/ui/autocomplete"
+
+
+
+
+
+
+ No tags found.
+
+ {(tag) => {tag.value} }
+
+
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Autocomplete,
+ AutocompleteInput,
+ AutocompleteItem,
+ AutocompleteList,
+ AutocompletePopup,
+} from "@/components/ui/autocomplete"
+```
+
+## Composition
+
+Use the following composition to build `Autocomplete`:
+
+```txt
+Autocomplete
+├── AutocompleteTrigger
+├── AutocompleteInput
+├── AutocompleteGroup
+├── AutocompletePortal
+│ ├── AutocompleteBackdrop
+│ └── AutocompletePositioner
+│ └── AutocompletePopup
+│ ├── AutocompleteArrow
+│ ├── AutocompleteList
+│ ├── AutocompleteCollection
+│ ├── AutocompleteGroup
+│ ├── AutocompleteItem
+│ └── AutocompleteEmpty
+├── AutocompleteValue
+├── AutocompleteInputGroup
+├── AutocompleteIcon
+├── AutocompleteClear
+├── AutocompleteGroupLabel
+├── AutocompleteRow
+├── Autocomplete.Separator
+└── AutocompleteStatus
+```
+
+## Examples
+
+These examples mirror the usage patterns documented by Base UI for Autocomplete.
+
+### Async search
+
+Load items asynchronously while typing and render custom status content.
+
+### Inline autocomplete
+
+Autofill the input with the highlighted item while navigating with arrow keys using the `mode` prop. Accepts `aria-autocomplete` values `list`, `both`, `inline`, or `none`.
+
+### Grouped
+
+Organize related options with `` and `` to add section headings inside the popup.
+
+```tsx
+interface ProduceGroupItem {
+ value: string
+
+ items: string[]
+}
+
+const groups: ProduceGroupItem[] = [
+ {
+ value: "Fruits",
+
+ items: ["Apple", "Banana", "Orange"],
+ },
+ {
+ value: "Vegetables",
+
+ items: ["Carrot", "Lettuce", "Spinach"],
+ },
+];
+```
+
+### Fuzzy matching
+
+Use fuzzy matching to find relevant results even when the query doesn't exactly match the item text.
+
+
+### Async search
+
+::example{src="components/autocomplete/async-search.tsx"}
+
+### Inline autocomplete
+
+::example{src="components/autocomplete/inline-autocomplete.tsx"}
+
+### Grouped
+
+::example{src="components/autocomplete/grouped.tsx"}
+
+### Fuzzy matching
+
+::example{src="components/autocomplete/fuzzy-matching.tsx"}
+
+### Limit results
+
+::example{src="components/autocomplete/limit-results.tsx"}
+
+### Auto highlight
+
+::example{src="components/autocomplete/auto-highlight.tsx"}
+
+### Command palette
+
+::example{src="components/autocomplete/command-palette.tsx"}
+
+### Grid layout
+
+::example{src="components/autocomplete/grid-layout.tsx"}
+
+### Virtualized
+
+::example{src="components/autocomplete/virtualized.tsx"}
+
+## API Reference
+
+Official API: [Base UI Autocomplete API](https://base-ui.com/react/components/autocomplete#api-reference).
+
+This wrapper preserves the underlying Base UI Autocomplete API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Autocomplete` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Value
+
+`Autocomplete.Value` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Trigger
+
+`Autocomplete.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Input
+
+`Autocomplete.Input` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### InputGroup
+
+`Autocomplete.InputGroup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Icon
+
+`Autocomplete.Icon` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Clear
+
+`Autocomplete.Clear` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### List
+
+`Autocomplete.List` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Portal
+
+`Autocomplete.Portal` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `container` | `HTMLElement \| RefObject` | `document.body` | Element that receives portal content. |
+| `keepMounted` | `boolean` | `false` | Keeps children mounted when closed. |
+| `children` | `React.ReactNode` | - | Floating content. |
+
+### Backdrop
+
+`Autocomplete.Backdrop` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Positioner
+
+`Autocomplete.Positioner` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `side` | `Side` | - | Preferred side for floating content. |
+| `align` | `Align` | - | Alignment on the selected side. |
+| `sideOffset` | `number \| OffsetFunction` | `0` | Distance from the anchor. |
+| `collisionAvoidance` | `CollisionAvoidance` | - | Controls flip and shift behavior. |
+| `className` | `string \| (state) => string` | - | Classes for placement state. |
+
+### Popup
+
+`Autocomplete.Popup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Arrow
+
+`Autocomplete.Arrow` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Group
+
+`Autocomplete.Group` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### GroupLabel
+
+`Autocomplete.GroupLabel` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Item
+
+`Autocomplete.Item` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Row
+
+`Autocomplete.Row` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Collection
+
+`Autocomplete.Collection` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Empty
+
+`Autocomplete.Empty` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Separator
+
+`Autocomplete.Separator` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Status
+
+`Autocomplete.Status` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/avatar.mdx b/site/src/content/components/avatar.mdx
new file mode 100644
index 0000000..6995692
--- /dev/null
+++ b/site/src/content/components/avatar.mdx
@@ -0,0 +1,79 @@
+# Avatar
+
+Avatar wraps Base UI's avatar primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/avatar/avatar.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Avatar from "@/components/ui/avatar"
+
+
+
+ LT
+
+```
+
+### Shadcn Style
+
+```tsx
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+
+
+
+ LT
+
+```
+
+## Composition
+
+Use the following composition to build `Avatar`:
+
+```txt
+Avatar
+├── AvatarImage
+└── AvatarFallback
+```
+
+
+## API Reference
+
+Official API: [Base UI Avatar API](https://base-ui.com/react/components/avatar#api-reference).
+
+This wrapper preserves the underlying Base UI Avatar API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Avatar` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Image
+
+`Avatar.Image` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Fallback
+
+`Avatar.Fallback` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/button.mdx b/site/src/content/components/button.mdx
new file mode 100644
index 0000000..e8d8e49
--- /dev/null
+++ b/site/src/content/components/button.mdx
@@ -0,0 +1,77 @@
+# Button
+
+Button wraps Base UI's button primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/button/button.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Button from "@/components/ui/button"
+
+Save changes
+```
+
+### Shadcn Style
+
+```tsx
+import { Button } from "@/components/ui/button"
+
+Save changes
+```
+
+## Composition
+
+Use the following composition to build `Button`:
+
+```txt
+Button
+```
+
+## Examples
+
+These examples mirror the usage patterns documented by Base UI for Button.
+
+### Rendering as another tag
+
+The button can remain keyboard accessible while being rendered as another tag, such as a ``, by specifying `nativeButton={false}`.
+
+```jsx
+import Button from "@/components/ui/button"
+
+
} nativeButton={false}>
+ Button that can contain complex children
+;
+```
+
+### Rendering links as buttons
+
+The Button component enforces button semantics. `nativeButton={false}` signals that the rendered tag is not a `
`, but it must still be a tag that can receive button semantics (`role="button"`, keyboard interaction handlers). Links (``) have their own semantics and should not be rendered as buttons through the `render` prop.
+
+### Loading states
+
+For buttons that enter a loading state after being clicked, specify the `focusableWhenDisabled` prop to ensure focus remains on the button when it becomes disabled. This prevents focus from being lost and maintains the tab order.
+
+
+### Loading states
+
+::example{src="components/button/loading-states.tsx"}
+
+## API Reference
+
+Official API: [Base UI Button API](https://base-ui.com/react/components/button#api-reference).
+
+This wrapper preserves the underlying Base UI Button API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Button` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
diff --git a/site/src/content/components/checkbox-group.mdx b/site/src/content/components/checkbox-group.mdx
new file mode 100644
index 0000000..7e3366f
--- /dev/null
+++ b/site/src/content/components/checkbox-group.mdx
@@ -0,0 +1,133 @@
+# Checkbox Group
+
+Checkbox Group wraps Base UI's checkbox group primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/checkbox-group/checkbox-group.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Checkbox from "@/components/ui/checkbox"
+import CheckboxGroup from "@/components/ui/checkbox-group"
+import { Check } from "lucide-react"
+
+function ExampleCheckboxGroup() {
+ const id = React.useId()
+
+ return (
+
+ Apples
+
+
+
+
+
+
+ Fuji
+
+
+ )
+}
+```
+
+### Shadcn Style
+
+```tsx
+import { CheckboxGroup } from "@/components/ui/checkbox-group"
+
+
+```
+
+## Composition
+
+Use the following composition to build `CheckboxGroup`:
+
+```txt
+CheckboxGroup
+```
+
+## Examples
+
+These examples mirror the usage patterns documented by Base UI for Checkbox Group.
+
+### Labeling a checkbox group
+
+Label the group with `aria-labelledby` and a sibling label element:
+
+```tsx
+Allowed network protocols
+{/* ... */}
+```
+
+### Rendering as a native button
+
+By default, `` renders a `` element to support enclosing labels. Prefer rendering each checkbox as a native button when using sibling labels (`htmlFor`/`id`).
+
+```tsx
+Allowed network protocols
+
+
+ HTTP
+
+ }>
+
+
+
+
+```
+
+### Form integration
+
+Use Field and Fieldset for group labeling and form integration:
+
+```tsx
+
+```
+
+### Parent checkbox
+
+A checkbox that controls other checkboxes within a `` can be created:
+
+## API Reference
+
+Official API: [Base UI Checkbox Group API](https://base-ui.com/react/components/checkbox-group#api-reference).
+
+This wrapper preserves the underlying Base UI Checkbox Group API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`CheckboxGroup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
diff --git a/site/src/content/components/checkbox.mdx b/site/src/content/components/checkbox.mdx
new file mode 100644
index 0000000..6b6e612
--- /dev/null
+++ b/site/src/content/components/checkbox.mdx
@@ -0,0 +1,74 @@
+# Checkbox
+
+Checkbox wraps Base UI's checkbox primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/checkbox/checkbox.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Checkbox from "@/components/ui/checkbox"
+import { Check } from "lucide-react"
+
+
+
+
+
+
+
+ Enable notifications
+
+```
+
+### Shadcn Style
+
+```tsx
+import { Checkbox, CheckboxIndicator } from "@/components/ui/checkbox"
+import { Check } from "lucide-react"
+
+
+
+
+
+
+```
+
+## Composition
+
+Use the following composition to build `Checkbox`:
+
+```txt
+Checkbox
+└── CheckboxIndicator
+```
+
+
+## API Reference
+
+Official API: [Base UI Checkbox API](https://base-ui.com/react/components/checkbox#api-reference).
+
+This wrapper preserves the underlying Base UI Checkbox API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Checkbox` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Indicator
+
+`Checkbox.Indicator` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/collapsible.mdx b/site/src/content/components/collapsible.mdx
new file mode 100644
index 0000000..5b182ec
--- /dev/null
+++ b/site/src/content/components/collapsible.mdx
@@ -0,0 +1,81 @@
+# Collapsible
+
+Collapsible wraps Base UI's collapsible primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/collapsible/collapsible.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Collapsible from "@/components/ui/collapsible"
+
+
+ Recovery keys
+
+ alien-bean-pasta
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Collapsible,
+ CollapsiblePanel,
+ CollapsibleTrigger,
+} from "@/components/ui/collapsible"
+```
+
+## Composition
+
+Use the following composition to build `Collapsible`:
+
+```txt
+Collapsible
+├── CollapsibleTrigger
+└── CollapsiblePanel
+```
+
+
+## API Reference
+
+Official API: [Base UI Collapsible API](https://base-ui.com/react/components/collapsible#api-reference).
+
+This wrapper preserves the underlying Base UI Collapsible API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Collapsible` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Trigger
+
+`Collapsible.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Panel
+
+`Collapsible.Panel` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/combobox.mdx b/site/src/content/components/combobox.mdx
new file mode 100644
index 0000000..f38de29
--- /dev/null
+++ b/site/src/content/components/combobox.mdx
@@ -0,0 +1,401 @@
+# Combobox
+
+Combobox wraps Base UI's combobox primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/combobox/combobox.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Combobox from "@/components/ui/combobox"
+
+
+
+
+
+
+
+
+
+
+
+ {(item) => {item.label} }
+
+
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Combobox,
+ ComboboxInput,
+ ComboboxInputGroup,
+ ComboboxItem,
+ ComboboxList,
+ ComboboxPopup,
+} from "@/components/ui/combobox"
+```
+
+## Composition
+
+Use the following composition to build `Combobox`:
+
+```txt
+Combobox
+├── ComboboxTrigger
+├── ComboboxLabel
+├── ComboboxInput
+├── ComboboxGroup
+├── ComboboxPortal
+│ ├── ComboboxBackdrop
+│ └── ComboboxPositioner
+│ └── ComboboxPopup
+│ ├── ComboboxArrow
+│ ├── ComboboxList
+│ ├── ComboboxCollection
+│ ├── ComboboxGroup
+│ ├── ComboboxItem
+│ └── ComboboxEmpty
+├── ComboboxValue
+├── ComboboxInputGroup
+├── ComboboxIcon
+├── ComboboxGroupLabel
+├── ComboboxItemIndicator
+├── ComboboxChips
+├── ComboboxChip
+├── ComboboxChipRemove
+├── ComboboxRow
+├── ComboboxClear
+├── Combobox.Separator
+└── ComboboxStatus
+```
+
+## Examples
+
+### Multiple select
+
+::example{src="components/combobox/multiple-select.tsx"}
+
+### Input inside popup
+
+::example{src="components/combobox/input-inside-popup.tsx"}
+
+### Grouped
+
+::example{src="components/combobox/grouped.tsx"}
+
+### Async search (single)
+
+::example{src="components/combobox/async-search-single.tsx"}
+
+### Async search (multiple)
+
+::example{src="components/combobox/async-search-multiple.tsx"}
+
+### Creatable
+
+::example{src="components/combobox/creatable.tsx"}
+
+### Virtualized
+
+::example{src="components/combobox/virtualized.tsx"}
+
+## API Reference
+
+Official API: [Base UI Combobox API](https://base-ui.com/react/components/combobox#api-reference).
+
+This wrapper preserves the underlying Base UI Combobox API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Combobox` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Label
+
+`Combobox.Label` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Value
+
+`Combobox.Value` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Input
+
+`Combobox.Input` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### InputGroup
+
+`Combobox.InputGroup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Trigger
+
+`Combobox.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### List
+
+`Combobox.List` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Portal
+
+`Combobox.Portal` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `container` | `HTMLElement \| RefObject` | `document.body` | Element that receives portal content. |
+| `keepMounted` | `boolean` | `false` | Keeps children mounted when closed. |
+| `children` | `React.ReactNode` | - | Floating content. |
+
+### Backdrop
+
+`Combobox.Backdrop` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Positioner
+
+`Combobox.Positioner` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `side` | `Side` | - | Preferred side for floating content. |
+| `align` | `Align` | - | Alignment on the selected side. |
+| `sideOffset` | `number \| OffsetFunction` | `0` | Distance from the anchor. |
+| `collisionAvoidance` | `CollisionAvoidance` | - | Controls flip and shift behavior. |
+| `className` | `string \| (state) => string` | - | Classes for placement state. |
+
+### Popup
+
+`Combobox.Popup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Arrow
+
+`Combobox.Arrow` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Icon
+
+`Combobox.Icon` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Group
+
+`Combobox.Group` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### GroupLabel
+
+`Combobox.GroupLabel` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Item
+
+`Combobox.Item` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### ItemIndicator
+
+`Combobox.ItemIndicator` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Chips
+
+`Combobox.Chips` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Chip
+
+`Combobox.Chip` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### ChipRemove
+
+`Combobox.ChipRemove` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Row
+
+`Combobox.Row` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Collection
+
+`Combobox.Collection` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Empty
+
+`Combobox.Empty` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Clear
+
+`Combobox.Clear` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Separator
+
+`Combobox.Separator` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Status
+
+`Combobox.Status` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/context-menu.mdx b/site/src/content/components/context-menu.mdx
new file mode 100644
index 0000000..5e1bc0b
--- /dev/null
+++ b/site/src/content/components/context-menu.mdx
@@ -0,0 +1,229 @@
+# Context Menu
+
+A menu that appears at the pointer on right click or long press.
+
+Context Menu wraps Base UI's context menu primitive with Tailwind classes from the official Base UI example. Most menu composition patterns also apply here, but the trigger opens from context-menu gestures instead of a normal press.
+
+::example{src="components/context-menu/context-menu.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import ContextMenu from "@/components/ui/context-menu"
+
+
+ Right click here
+
+
+
+ Add to Library
+ Add to Playlist
+
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ ContextMenu,
+ ContextMenuItem,
+ ContextMenuPopup,
+ ContextMenuPortal,
+ ContextMenuPositioner,
+ ContextMenuTrigger,
+} from "@/components/ui/context-menu"
+
+
+ Right click here
+
+
+
+ Add to Library
+ Add to Playlist
+
+
+
+
+```
+
+## Composition
+
+Use the following composition to build a `ContextMenu`:
+
+```txt
+ContextMenu
+├── ContextMenuTrigger
+└── ContextMenuPortal
+ ├── ContextMenuBackdrop
+ └── ContextMenuPositioner
+ └── ContextMenuPopup
+ ├── ContextMenuArrow
+ ├── ContextMenuItem
+ ├── ContextMenuLinkItem
+ ├── ContextMenu.Separator
+ ├── ContextMenuGroup
+ │ └── ContextMenuGroupLabel
+ ├── ContextMenuRadioGroup
+ │ └── ContextMenuRadioItem
+ │ └── ContextMenuRadioItemIndicator
+ ├── ContextMenuCheckboxItem
+ │ └── ContextMenuCheckboxItemIndicator
+ └── ContextMenuSubmenuRoot
+ └── ContextMenuSubmenuTrigger
+```
+
+## Examples
+
+The official Context Menu page includes the base context menu and a nested menu example. Base UI's Menu page documents additional item patterns such as checkbox items, radio items, group labels, link items, and arrows; those same parts are exposed here for context menus.
+
+### Nested menu
+
+Create a submenu with `` inside the parent context menu. Use `` for the item that opens the nested menu.
+
+::example{src="components/context-menu/nested-menu.tsx"}
+
+## API Reference
+
+Official API: [Base UI Context Menu API](https://base-ui.com/react/components/context-menu#api-reference).
+
+This wrapper preserves the underlying Base UI Context Menu API. Props, controlled state, event details, render props, and data attributes follow the corresponding Base UI component documentation. Styled parts forward `className` and can be replaced with the `render` prop where Base UI supports it.
+
+### Root
+
+Owns the open state for a context menu.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultOpen` | `boolean` | `false` | Initial uncontrolled open state. |
+| `open` | `boolean` | - | Controlled open state. |
+| `onOpenChange` | `(open, eventDetails) => void` | - | Called when the context menu requests to open or close. |
+| `modal` | `boolean` | `true` | Whether interactions outside the menu are blocked while open. |
+| `children` | `React.ReactNode` | - | Trigger, portal, and popup parts. |
+
+### Trigger
+
+Defines the area that opens the menu on right click, context-menu key, or long press.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction. |
+| `className` | `string \| (state) => string` | - | Classes for state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the trigger element. |
+| `children` | `React.ReactNode` | - | Content that receives the context-menu gesture. |
+
+### Portal
+
+Moves floating content to the document body by default.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `container` | `HTMLElement \| RefObject` | `document.body` | Element that receives the portal content. |
+| `keepMounted` | `boolean` | `false` | Keeps portal children mounted while closed. |
+| `children` | `React.ReactNode` | - | Floating context-menu content. |
+
+Use the Base UI `CSPProvider` at the application root when portal content needs consistent clipping, z-index, and stacking behavior.
+
+### Backdrop
+
+Renders the dismissable layer behind the context menu when modal behavior is active.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the backdrop state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+
+### Positioner
+
+Positions the popup at the pointer location.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `side` | `"top" \| "right" \| "bottom" \| "left" \| "inline-start" \| "inline-end"` | `"bottom"` | Preferred side for the popup. |
+| `align` | `"start" \| "center" \| "end"` | `"center"` | Alignment on the selected side. |
+| `sideOffset` | `number \| OffsetFunction` | `0` | Distance between pointer anchor and popup. |
+| `alignOffset` | `number \| OffsetFunction` | `0` | Offset along the alignment axis. |
+| `collisionAvoidance` | `CollisionAvoidance` | - | Controls flipping and shifting when space is limited. |
+| `collisionBoundary` | `Boundary` | `"clipping-ancestors"` | Boundary used for collision detection. |
+| `className` | `string \| (state) => string` | - | Classes for placement and open state. |
+
+### Popup
+
+Contains the context-menu surface.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for open, closing, side, and alignment state. |
+| `style` | `CSSProperties \| (state) => CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the popup element. |
+| `children` | `React.ReactNode` | - | Context-menu items, groups, submenus, and arrows. |
+
+### Item and LinkItem
+
+`ContextMenu.Item` renders an action item. `ContextMenu.LinkItem` renders a navigational item.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction. |
+| `closeOnClick` | `boolean` | `true` | Controls whether selecting the item closes the menu. |
+| `nativeButton` | `boolean` | `false` | Treats a rendered native button as the semantic control. |
+| `label` | `string` | - | Text used for keyboard text navigation. |
+| `href` | `string` | - | Link target for `ContextMenu.LinkItem`. |
+| `onClick` | `(event) => void` | - | Called when the item is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for highlighted and disabled state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the item element. |
+
+Attributes include `data-highlighted` and `data-disabled`.
+
+### CheckboxItem and RadioItem
+
+Use `ContextMenu.CheckboxItem` for independent boolean options and `ContextMenu.RadioItem` inside `ContextMenu.RadioGroup` for mutually exclusive choices.
+
+| Part | Prop | Type | Default | Description |
+| --- | --- | --- | --- | --- |
+| `ContextMenu.CheckboxItem` | `checked` | `boolean` | - | Controlled checked state. |
+| `ContextMenu.CheckboxItem` | `defaultChecked` | `boolean` | `false` | Initial uncontrolled checked state. |
+| `ContextMenu.CheckboxItem` | `onCheckedChange` | `(checked, eventDetails) => void` | - | Called when checked state changes. |
+| `ContextMenu.RadioGroup` | `value` | `any` | - | Controlled selected value. |
+| `ContextMenu.RadioGroup` | `defaultValue` | `any` | - | Initial uncontrolled selected value. |
+| `ContextMenu.RadioGroup` | `onValueChange` | `(value, eventDetails) => void` | - | Called when the selected value changes. |
+| `ContextMenu.RadioItem` | `value` | `any` | - | Value selected by this radio item. |
+| `ContextMenu.RadioItem` | `disabled` | `boolean` | `false` | Prevents user interaction. |
+
+Indicators render inside `ContextMenu.CheckboxItemIndicator` and `ContextMenu.RadioItemIndicator`.
+
+### Group and Separator
+
+Use `ContextMenu.Group` and `ContextMenu.GroupLabel` to label related choices. Use `ContextMenu.Separator` to visually separate item groups.
+
+| Part | Prop | Type | Default | Description |
+| --- | --- | --- | --- | --- |
+| `ContextMenu.Group` | `children` | `React.ReactNode` | - | Related menu items. |
+| `ContextMenu.GroupLabel` | `children` | `React.ReactNode` | - | Accessible label for the group. |
+| `ContextMenu.Separator` | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | Visual separator orientation. |
+| `ContextMenu.Separator` | `className` | `string` | - | Classes for the separator element. |
+
+### SubmenuRoot and SubmenuTrigger
+
+Create nested context menus with `ContextMenu.SubmenuRoot` and open them with `ContextMenu.SubmenuTrigger`.
+
+| Part | Prop | Type | Default | Description |
+| --- | --- | --- | --- | --- |
+| `ContextMenu.SubmenuRoot` | `defaultOpen` | `boolean` | `false` | Initial uncontrolled submenu open state. |
+| `ContextMenu.SubmenuRoot` | `open` | `boolean` | - | Controlled submenu open state. |
+| `ContextMenu.SubmenuRoot` | `onOpenChange` | `(open, eventDetails) => void` | - | Called when the submenu requests to open or close. |
+| `ContextMenu.SubmenuTrigger` | `disabled` | `boolean` | `false` | Prevents opening the submenu. |
+| `ContextMenu.SubmenuTrigger` | `className` | `string \| (state) => string` | - | Classes for highlighted, open, and disabled state. |
+
+### Arrow
+
+Visually connects the popup to the pointer location.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for side and alignment state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the arrow element. |
diff --git a/site/src/content/components/dialog.mdx b/site/src/content/components/dialog.mdx
new file mode 100644
index 0000000..52d4161
--- /dev/null
+++ b/site/src/content/components/dialog.mdx
@@ -0,0 +1,270 @@
+# Dialog
+
+Dialog is split into styled parts that mirror Base UI anatomy. The named `DialogContent` component composes `Portal`, `Backdrop`, and `Popup`.
+
+::example{src="components/dialog/dialog.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Dialog from "@/components/ui/dialog"
+
+
+ Open
+
+
+
+ Notifications
+ You are all caught up. Good job!
+ Close
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Dialog,
+ DialogClose,
+ DialogContent,
+ DialogDescription,
+ DialogTitle,
+ DialogTrigger,
+} from "@/components/ui/dialog"
+
+
+ Open
+
+ Notifications
+ You are all caught up. Good job!
+ Close
+
+
+```
+
+## Composition
+
+Use the following composition to build `Dialog`:
+
+```txt
+Dialog
+├── DialogTrigger
+├── DialogPortal
+│ ├── DialogBackdrop
+│ └── DialogPopup
+├── DialogClose
+├── DialogDescription
+├── DialogViewport
+└── DialogTitle
+```
+
+## Examples
+
+These examples mirror the usage patterns documented by Base UI for Dialog.
+
+### State
+
+By default, Dialog is an uncontrolled component that manages its own state.
+
+```tsx
+
+ Open
+
+
+ Example dialog
+ Close
+
+
+
+```
+
+### Open from a menu
+
+In order to open a dialog using a menu, control the dialog state and open it imperatively using the `onClick` handler on the menu item.
+
+```tsx
+import * as React from "react"
+import Dialog from "@/components/ui/dialog"
+import Menu from "@/components/ui/menu"
+
+function ExampleMenu() {
+ const [dialogOpen, setDialogOpen] = React.useState(false)
+
+ return (
+
+
+ Open menu
+
+
+
+
+ {/* Open the dialog when the menu item is clicked */}
+ setDialogOpen(true)}>Open dialog
+
+
+
+
+
+
+ {/* Control the dialog state */}
+
+
+
+
+
+ {/* prettier-ignore */}
+ {/* Rest of the dialog */}
+
+
+
+
+ )
+}
+```
+
+### Nested dialogs
+
+You can nest dialogs within one another normally.
+
+### Close confirmation
+
+This example shows a nested confirmation dialog that opens if the text entered in the parent dialog is going to be discarded.
+
+
+### Nested dialogs
+
+::example{src="components/dialog/nested-dialogs.tsx"}
+
+### Close confirmation
+
+::example{src="components/dialog/close-confirmation.tsx"}
+
+### Outside scroll dialog
+
+::example{src="components/dialog/outside-scroll-dialog.tsx"}
+
+### Inside scroll dialog
+
+::example{src="components/dialog/inside-scroll-dialog.tsx"}
+
+### Placing elements outside the popup
+
+::example{src="components/dialog/placing-elements-outside-the-popup.tsx"}
+
+### Detached triggers
+
+::example{src="components/dialog/detached-triggers.tsx"}
+
+### Controlled mode with multiple triggers
+
+::example{src="components/dialog/controlled-mode-with-multiple-triggers.tsx"}
+
+## API Reference
+
+Official API: [Base UI Dialog API](https://base-ui.com/react/components/dialog#api-reference).
+
+This wrapper preserves the underlying Base UI Dialog API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Backdrop
+
+`Dialog.Backdrop` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Close
+
+`Dialog.Close` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Description
+
+`Dialog.Description` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Popup
+
+`Dialog.Popup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Portal
+
+`Dialog.Portal` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `container` | `HTMLElement \| RefObject` | `document.body` | Element that receives portal content. |
+| `keepMounted` | `boolean` | `false` | Keeps children mounted when closed. |
+| `children` | `React.ReactNode` | - | Floating content. |
+
+### Root
+
+`Dialog` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Viewport
+
+`Dialog.Viewport` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Title
+
+`Dialog.Title` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Trigger
+
+`Dialog.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
diff --git a/site/src/content/components/drawer.mdx b/site/src/content/components/drawer.mdx
new file mode 100644
index 0000000..9ca092b
--- /dev/null
+++ b/site/src/content/components/drawer.mdx
@@ -0,0 +1,277 @@
+# Drawer
+
+Drawer wraps Base UI's drawer primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/drawer/drawer.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Drawer from "@/components/ui/drawer"
+
+
+ Open drawer
+
+
+
+
+
+ Drawer
+ This is a drawer.
+ Close
+
+
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Drawer,
+ DrawerClose,
+ DrawerContent,
+ DrawerPopup,
+ DrawerTrigger,
+} from "@/components/ui/drawer"
+```
+
+## Composition
+
+Use the following composition to build `Drawer`:
+
+```txt
+Drawer
+├── DrawerTrigger
+├── DrawerPortal
+│ ├── DrawerBackdrop
+│ └── DrawerPopup
+├── DrawerClose
+├── DrawerContent
+├── DrawerDescription
+├── DrawerIndent
+├── DrawerIndentBackground
+├── DrawerProvider
+├── DrawerSwipeArea
+├── DrawerTitle
+├── DrawerViewport
+└── DrawerVirtualKeyboardProvider
+```
+
+## Examples
+
+### Position
+
+::example{src="components/drawer/position.tsx"}
+
+### Nested drawers
+
+::example{src="components/drawer/nested-drawers.tsx"}
+
+### Snap points
+
+::example{src="components/drawer/snap-points.tsx"}
+
+### Virtual keyboard aware
+
+::example{src="components/drawer/virtual-keyboard-aware.tsx"}
+
+### Indent effect
+
+::example{src="components/drawer/indent-effect.tsx"}
+
+### Non-modal
+
+::example{src="components/drawer/non-modal.tsx"}
+
+### Mobile navigation
+
+::example{src="components/drawer/mobile-navigation.tsx"}
+
+### Swipe to open
+
+::example{src="components/drawer/swipe-to-open.tsx"}
+
+### Close confirmation
+
+::example{src="components/drawer/close-confirmation.tsx"}
+
+### Action sheet with separate destructive action
+
+::example{src="components/drawer/action-sheet-with-separate-destructive-action.tsx"}
+
+## API Reference
+
+Official API: [Base UI Drawer API](https://base-ui.com/react/components/drawer#api-reference).
+
+This wrapper preserves the underlying Base UI Drawer API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Backdrop
+
+`Drawer.Backdrop` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Close
+
+`Drawer.Close` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Content
+
+`Drawer.Content` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Description
+
+`Drawer.Description` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Indent
+
+`Drawer.Indent` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### IndentBackground
+
+`Drawer.IndentBackground` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Popup
+
+`Drawer.Popup` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Portal
+
+`Drawer.Portal` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `container` | `HTMLElement \| RefObject` | `document.body` | Element that receives portal content. |
+| `keepMounted` | `boolean` | `false` | Keeps children mounted when closed. |
+| `children` | `React.ReactNode` | - | Floating content. |
+
+### Provider
+
+`Drawer.Provider` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Root
+
+`Drawer` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### SwipeArea
+
+`Drawer.SwipeArea` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Title
+
+`Drawer.Title` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Trigger
+
+`Drawer.Trigger` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
+
+### Viewport
+
+`Drawer.Viewport` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### VirtualKeyboardProvider
+
+`Drawer.VirtualKeyboardProvider` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/field.mdx b/site/src/content/components/field.mdx
new file mode 100644
index 0000000..449dfcd
--- /dev/null
+++ b/site/src/content/components/field.mdx
@@ -0,0 +1,131 @@
+# Field
+
+Field wraps Base UI's field primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/field/field.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Field from "@/components/ui/field"
+
+
+ Name
+
+ Please enter your name
+ Visible on your profile
+
+```
+
+### Shadcn Style
+
+```tsx
+import {
+ Field,
+ FieldControl,
+ FieldDescription,
+ FieldError,
+ FieldLabel,
+} from "@/components/ui/field"
+```
+
+## Composition
+
+Use the following composition to build `Field`:
+
+```txt
+Field
+├── FieldLabel
+├── FieldControl
+├── FieldError
+├── FieldDescription
+├── FieldValidity
+└── FieldItem
+```
+
+
+## API Reference
+
+Official API: [Base UI Field API](https://base-ui.com/react/components/field#api-reference).
+
+This wrapper preserves the underlying Base UI Field API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Field` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Label
+
+`Field.Label` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Error
+
+`Field.Error` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Description
+
+`Field.Description` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Control
+
+`Field.Control` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Validity
+
+`Field.Validity` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
+
+### Item
+
+`Field.Item` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `disabled` | `boolean` | `false` | Prevents user interaction when supported. |
+| `onClick` | `function` | - | Called when the element is pressed. |
+| `className` | `string \| (state) => string` | - | Classes for interactive state. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element. |
+| `children` | `React.ReactNode` | - | Visible content. |
diff --git a/site/src/content/components/fieldset.mdx b/site/src/content/components/fieldset.mdx
new file mode 100644
index 0000000..2259874
--- /dev/null
+++ b/site/src/content/components/fieldset.mdx
@@ -0,0 +1,66 @@
+# Fieldset
+
+Fieldset wraps Base UI's fieldset primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/fieldset/fieldset.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Field from "@/components/ui/field"
+import Fieldset from "@/components/ui/fieldset"
+
+
+ Billing details
+
+ Company
+
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import { Fieldset, FieldsetLegend } from "@/components/ui/fieldset"
+```
+
+## Composition
+
+Use the following composition to build `Fieldset`:
+
+```txt
+Fieldset
+└── FieldsetLegend
+```
+
+
+## API Reference
+
+Official API: [Base UI Fieldset API](https://base-ui.com/react/components/fieldset#api-reference).
+
+This wrapper preserves the underlying Base UI Fieldset API. Styled parts forward `className`, `style`, and `render` where Base UI supports them.
+
+### Root
+
+`Fieldset` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultValue` / `defaultOpen` | `any` | - | Initial uncontrolled value or open state when supported. |
+| `value` / `open` | `any` | - | Controlled value or open state when supported. |
+| `onValueChange` / `onOpenChange` | `function` | - | Called when controlled state changes. |
+| `children` | `React.ReactNode` | - | Child parts rendered inside the root. |
+
+### Legend
+
+`Fieldset.Legend` exposes the corresponding Base UI part with the wrapper's Tailwind styles.
+
+| Prop | Type | Default | Description |
+| --- | --- | --- | --- |
+| `className` | `string \| (state) => string` | - | Classes for the part state. |
+| `style` | `React.CSSProperties \| (state) => React.CSSProperties` | - | Inline style or state-based style. |
+| `render` | `ReactElement \| (props, state) => ReactElement` | - | Replaces the rendered element when supported. |
+| `children` | `React.ReactNode` | - | Child content when the part accepts children. |
diff --git a/site/src/content/components/form.mdx b/site/src/content/components/form.mdx
new file mode 100644
index 0000000..e7f9795
--- /dev/null
+++ b/site/src/content/components/form.mdx
@@ -0,0 +1,95 @@
+# Form
+
+Form wraps Base UI's form primitive with the Tailwind classes from the official Base UI example.
+
+::example{src="components/form/form.tsx"}
+
+## Anatomy
+
+### Base UI Style
+
+```tsx
+import Field from "@/components/ui/field"
+import Form from "@/components/ui/form"
+
+
+```
+
+### Shadcn Style
+
+```tsx
+import { Form } from "@/components/ui/form"
+```
+
+## Composition
+
+Use the following composition to build `Form`:
+
+```txt
+Form
+```
+
+## Examples
+
+These examples mirror the usage patterns documented by Base UI for Form.
+
+### Submit with a Server Function
+
+Forms using `useActionState` can be submitted with a Server Function instead of `onSubmit`.
+
+### Submit form values as a JavaScript object
+
+You can use `onFormSubmit` instead of the native `onSubmit` to access form values as a JavaScript object. This is useful when you need to transform the values before submission, or integrate with 3rd party APIs.
+
+```tsx
+