temp
This commit is contained in:
66
libs/registry/.gitignore
vendored
Normal file
66
libs/registry/.gitignore
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
node_modules
|
||||
|
||||
# mac
|
||||
.DS_Store
|
||||
|
||||
.env*
|
||||
!.env*example
|
||||
|
||||
/dist
|
||||
# build
|
||||
/build
|
||||
|
||||
/logs
|
||||
|
||||
.turbo
|
||||
|
||||
/pack-dist
|
||||
|
||||
# astro
|
||||
.astro
|
||||
|
||||
# next
|
||||
.next
|
||||
|
||||
# nuxt
|
||||
.nuxt
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
# vuepress
|
||||
.vuepress/dist
|
||||
|
||||
# coverage
|
||||
coverage/
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
|
||||
# debug logs
|
||||
*.log
|
||||
*.tmp
|
||||
|
||||
# vscode
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
# idea
|
||||
.idea
|
||||
|
||||
# system
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# temp files
|
||||
*.tmp
|
||||
*.temp
|
||||
|
||||
# local development
|
||||
*.local
|
||||
|
||||
public/r
|
||||
3
libs/registry/.npmrc
Normal file
3
libs/registry/.npmrc
Normal file
@@ -0,0 +1,3 @@
|
||||
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
|
||||
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
|
||||
ignore-workspace-root-check=true
|
||||
3
libs/registry/.vscode/settings.json
vendored
Normal file
3
libs/registry/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"tailwindCSS.classFunctions": ["cva", "cx"]
|
||||
}
|
||||
28
libs/registry/astro.config.mjs
Normal file
28
libs/registry/astro.config.mjs
Normal file
@@ -0,0 +1,28 @@
|
||||
// astro.config.mjs
|
||||
|
||||
import { defineConfig } from 'astro/config';
|
||||
import mdx from '@astrojs/mdx';
|
||||
import react from '@astrojs/react';
|
||||
// import sitemap from '@astrojs/sitemap';
|
||||
import pkgs from './package.json';
|
||||
import tailwindcss from '@tailwindcss/vite';
|
||||
|
||||
const isDev = process.env.NODE_ENV === 'development';
|
||||
export default defineConfig({
|
||||
// ...
|
||||
// site: 'https://kevisual.xiongxiao.me/root/astro/',
|
||||
base: isDev ? undefined : pkgs.basename,
|
||||
integrations: [
|
||||
mdx(),
|
||||
react(), //
|
||||
// sitemap(), // sitemap must be site has a domain
|
||||
],
|
||||
|
||||
vite: {
|
||||
plugins: [tailwindcss()],
|
||||
define: {
|
||||
BASE_NAME: JSON.stringify(pkgs.basename),
|
||||
DEV_SERVER: JSON.stringify(isDev),
|
||||
},
|
||||
},
|
||||
});
|
||||
21
libs/registry/components.json
Normal file
21
libs/registry/components.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://ui.shadcn.com/schema.json",
|
||||
"style": "new-york",
|
||||
"rsc": false,
|
||||
"tsx": true,
|
||||
"tailwind": {
|
||||
"config": "",
|
||||
"css": "src/styles/global.css",
|
||||
"baseColor": "neutral",
|
||||
"cssVariables": true,
|
||||
"prefix": ""
|
||||
},
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/lib/utils",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/lib",
|
||||
"hooks": "@/hooks"
|
||||
},
|
||||
"iconLibrary": "lucide"
|
||||
}
|
||||
41
libs/registry/package.json
Normal file
41
libs/registry/package.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "@kevisual/registry",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"build:registry": "pnpm dlx shadcn@latest build"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)",
|
||||
"license": "MIT",
|
||||
"packageManager": "pnpm@10.10.0",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"@astrojs/mdx": "^4.2.6",
|
||||
"@astrojs/react": "^4.2.7",
|
||||
"@kevisual/types": "^0.0.10",
|
||||
"@tailwindcss/vite": "^4.1.6",
|
||||
"@types/react": "^19.1.3",
|
||||
"astro": "^5.7.12",
|
||||
"tailwindcss": "^4.1.6",
|
||||
"tw-animate-css": "^1.2.9"
|
||||
},
|
||||
"dependencies": {
|
||||
"@inlang/paraglide-js": "^2.0.12",
|
||||
"@inlang/paraglide-js-adapter-vite": "^1.2.40",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"i18next": "^25.1.2",
|
||||
"i18next-browser-languagedetector": "^8.1.0",
|
||||
"lucide-react": "^0.509.0",
|
||||
"react": "^19.1.0",
|
||||
"react-dom": "^19.1.0",
|
||||
"react-i18next": "^15.5.1",
|
||||
"react-toastify": "^11.0.5",
|
||||
"tailwind-merge": "^3.2.0"
|
||||
}
|
||||
}
|
||||
32
libs/registry/registry.json
Normal file
32
libs/registry/registry.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"$schema": "https://ui.shadcn.com/schema/registry.json",
|
||||
"name": "shadcn",
|
||||
"homepage": "https://ui.shadcn.com",
|
||||
"items": [
|
||||
{
|
||||
"name": "hello-world",
|
||||
"type": "registry:block",
|
||||
"title": "Hello World",
|
||||
"description": "A simple hello world component.",
|
||||
"files": [
|
||||
{
|
||||
"path": "registry/hello-world/hello-world.tsx",
|
||||
"type": "registry:component"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "basename",
|
||||
"type": "registry:file",
|
||||
"title": "Basename",
|
||||
"description": "The basename for the router.",
|
||||
"files": [
|
||||
{
|
||||
"path": "registry/modules/basename.ts",
|
||||
"type": "registry:file",
|
||||
"target": "src/modules/basename.ts"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
27
libs/registry/registry/astro/i18n/index.tsx
Normal file
27
libs/registry/registry/astro/i18n/index.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import i18n from 'i18next';
|
||||
import { initReactI18next } from 'react-i18next';
|
||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||
|
||||
// 导入你的翻译资源
|
||||
import enTranslation from './locales/en/translation.json';
|
||||
import zhTranslation from './locales/zh/translation.json';
|
||||
|
||||
i18n
|
||||
.use(LanguageDetector)
|
||||
.use(initReactI18next)
|
||||
.init({
|
||||
resources: {
|
||||
en: {
|
||||
translation: enTranslation,
|
||||
},
|
||||
zh: {
|
||||
translation: zhTranslation,
|
||||
},
|
||||
},
|
||||
fallbackLng: 'en',
|
||||
interpolation: {
|
||||
escapeValue: false, // React 已经处理了转义
|
||||
},
|
||||
});
|
||||
|
||||
export default i18n;
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"welcome": "Welcome to our site",
|
||||
"about": "About us"
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"welcome": "Welcome to our site",
|
||||
"about": "About us"
|
||||
}
|
||||
45
libs/registry/registry/button/button.tsx
Normal file
45
libs/registry/registry/button/button.tsx
Normal file
@@ -0,0 +1,45 @@
|
||||
import React from 'react';
|
||||
import { cva, type VariantProps } from 'class-variance-authority';
|
||||
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
|
||||
const button = cva('button', {
|
||||
variants: {
|
||||
intent: {
|
||||
primary: ['bg-blue-500', 'text-white', 'border-transparent'],
|
||||
secondary: ['bg-white', 'text-gray-800', 'border-gray-400'],
|
||||
},
|
||||
size: {
|
||||
small: ['text-sm', 'py-1', 'px-2'],
|
||||
medium: ['text-base', 'py-2', 'px-4'],
|
||||
},
|
||||
disabled: {
|
||||
false: null,
|
||||
true: ['opacity-50', 'cursor-not-allowed'],
|
||||
},
|
||||
},
|
||||
compoundVariants: [
|
||||
{
|
||||
intent: 'primary',
|
||||
disabled: false,
|
||||
class: 'hover:bg-blue-600',
|
||||
},
|
||||
{
|
||||
intent: 'secondary',
|
||||
disabled: false,
|
||||
class: 'hover:bg-gray-100',
|
||||
},
|
||||
{ intent: 'primary', size: 'medium', class: 'uppercase' },
|
||||
],
|
||||
defaultVariants: {
|
||||
disabled: false,
|
||||
intent: 'primary',
|
||||
size: 'medium',
|
||||
},
|
||||
});
|
||||
|
||||
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'disabled'>, VariantProps<typeof button> {}
|
||||
|
||||
export const Button: React.FC<ButtonProps> = ({ className, intent, size, disabled, ...props }) => (
|
||||
<button className={twMerge('cursor-pointer', button({ intent, size, disabled, className }))} disabled={disabled || undefined} {...props} />
|
||||
);
|
||||
36
libs/registry/registry/card/card.tsx
Normal file
36
libs/registry/registry/card/card.tsx
Normal file
@@ -0,0 +1,36 @@
|
||||
// components/card.ts
|
||||
import type { VariantProps } from "class-variance-authority";
|
||||
import { cva, cx } from "class-variance-authority";
|
||||
|
||||
/**
|
||||
* Box
|
||||
*/
|
||||
export type BoxProps = VariantProps<typeof box>;
|
||||
export const box = cva(["box", "box-border"], {
|
||||
variants: {
|
||||
margin: { 0: "m-0", 2: "m-2", 4: "m-4", 8: "m-8" },
|
||||
padding: { 0: "p-0", 2: "p-2", 4: "p-4", 8: "p-8" },
|
||||
},
|
||||
defaultVariants: {
|
||||
margin: 0,
|
||||
padding: 0,
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Card
|
||||
*/
|
||||
type CardBaseProps = VariantProps<typeof cardBase>;
|
||||
const cardBase = cva(["card", "border-solid", "border-slate-300", "rounded"], {
|
||||
variants: {
|
||||
shadow: {
|
||||
md: "drop-shadow-md",
|
||||
lg: "drop-shadow-lg",
|
||||
xl: "drop-shadow-xl",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export interface CardProps extends BoxProps, CardBaseProps {}
|
||||
export const card = ({ margin, padding, shadow }: CardProps = {}) =>
|
||||
cx(box({ margin, padding }), cardBase({ shadow }));
|
||||
3
libs/registry/registry/hello-world/hello-world.tsx
Normal file
3
libs/registry/registry/hello-world/hello-world.tsx
Normal file
@@ -0,0 +1,3 @@
|
||||
export const HelloWorld = () => {
|
||||
return <div>Hello Wrold</div>;
|
||||
};
|
||||
1
libs/registry/registry/modules/basename.ts
Normal file
1
libs/registry/registry/modules/basename.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const basename = DEV_SERVER ? '' : '/root/center';
|
||||
13
libs/registry/registry/modules/toast/Provider.tsx
Normal file
13
libs/registry/registry/modules/toast/Provider.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { ToastContainer } from 'react-toastify';
|
||||
|
||||
type ToastProviderProps = {
|
||||
children?: React.ReactNode;
|
||||
};
|
||||
export const ToastProvider = ({ children }: ToastProviderProps) => {
|
||||
return (
|
||||
<>
|
||||
{children}
|
||||
<ToastContainer />
|
||||
</>
|
||||
);
|
||||
};
|
||||
42
libs/registry/registry/modules/toast/ToastLogin.tsx
Normal file
42
libs/registry/registry/modules/toast/ToastLogin.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
import { toast } from 'react-toastify';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
// Custom message component
|
||||
const LoginMessage = (props: ToastLoginProps) => {
|
||||
const { t } = useTranslation();
|
||||
const handleClick = () => {
|
||||
const currentUrl = window.location.href;
|
||||
const redirect = encodeURIComponent(props?.redirectUrl || currentUrl);
|
||||
const loginUrl = props?.loginUrl || '/user/login/';
|
||||
const newUrl = location.origin + loginUrl + '?redirect=' + redirect;
|
||||
window.open(newUrl, '_self');
|
||||
};
|
||||
|
||||
return (
|
||||
<div className='msg-container' onClick={handleClick} style={{ cursor: 'pointer' }}>
|
||||
<p className='msg-title'>{t('Please login')}</p>
|
||||
<p className='msg-description'>{t('Click here to go to the login page.')}</p>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
type ToastLoginProps = {
|
||||
/**
|
||||
* 登录页面地址, /user/login
|
||||
*/
|
||||
loginUrl?: string;
|
||||
/**
|
||||
* 登录成功后跳转的地址, 默认是当前页面
|
||||
*/
|
||||
redirectUrl?: string;
|
||||
};
|
||||
/**
|
||||
* 登录提示
|
||||
* @param props
|
||||
* @example
|
||||
* toastLogin({
|
||||
* loginUrl: '/user/login/',
|
||||
* redirectUrl: window.location.href,
|
||||
* });
|
||||
*/
|
||||
export const toastLogin = (props: ToastLoginProps = {}) => {
|
||||
toast.info(<LoginMessage {...props} />);
|
||||
};
|
||||
27
libs/registry/src/components/Switch.tsx
Normal file
27
libs/registry/src/components/Switch.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// src/components/LanguageSwitcher.tsx
|
||||
"use client";
|
||||
import * as m from "@/paraglide/messages";
|
||||
import { setLanguageTag, languageTag } from "@/paraglide/runtime";
|
||||
|
||||
export function LanguageSwitcher() {
|
||||
return (
|
||||
<div>
|
||||
<h1>{m.welcome()}</h1>
|
||||
<p>{m.about()}</p>
|
||||
|
||||
<button
|
||||
onClick={() => setLanguageTag("en")}
|
||||
disabled={languageTag() === "en"}
|
||||
>
|
||||
English
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={() => setLanguageTag("zh")}
|
||||
disabled={languageTag() === "zh"}
|
||||
>
|
||||
中文
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
6
libs/registry/src/lib/utils.ts
Normal file
6
libs/registry/src/lib/utils.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { clsx, type ClassValue } from "clsx"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
}
|
||||
16
libs/registry/src/modules/demo/ShowLogin.tsx
Normal file
16
libs/registry/src/modules/demo/ShowLogin.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
import { toastLogin } from '@/registry/modules/toast/ToastLogin';
|
||||
import { ToastProvider } from '@/registry/modules/toast/Provider';
|
||||
import { Button } from '@/registry/button/button';
|
||||
export const ShowLogin = () => {
|
||||
return (
|
||||
<ToastProvider>
|
||||
<Button
|
||||
onClick={() => {
|
||||
toastLogin();
|
||||
console.log('clicked');
|
||||
}}>
|
||||
Click me
|
||||
</Button>
|
||||
</ToastProvider>
|
||||
);
|
||||
};
|
||||
8
libs/registry/src/pages/index.astro
Normal file
8
libs/registry/src/pages/index.astro
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
import '../styles/global.css';
|
||||
import '@/registry/astro/i18n'; // 初始化i18n
|
||||
import { ShowLogin } from '@/modules/demo/ShowLogin';
|
||||
---
|
||||
|
||||
<h1 class='text-4xl'>Registry</h1>
|
||||
<ShowLogin client:load />
|
||||
10
libs/registry/src/pages/shadcn/index.mdx
Normal file
10
libs/registry/src/pages/shadcn/index.mdx
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
---
|
||||
|
||||
# Download shadcn
|
||||
|
||||
```sh
|
||||
|
||||
pnpm dlx shadcn@latest add http://localhost:4321/r/basename.json
|
||||
|
||||
```
|
||||
119
libs/registry/src/styles/global.css
Normal file
119
libs/registry/src/styles/global.css
Normal file
@@ -0,0 +1,119 @@
|
||||
@import 'tailwindcss';
|
||||
@import "tw-animate-css";
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@theme inline {
|
||||
--radius-sm: calc(var(--radius) - 4px);
|
||||
--radius-md: calc(var(--radius) - 2px);
|
||||
--radius-lg: var(--radius);
|
||||
--radius-xl: calc(var(--radius) + 4px);
|
||||
--color-background: var(--background);
|
||||
--color-foreground: var(--foreground);
|
||||
--color-card: var(--card);
|
||||
--color-card-foreground: var(--card-foreground);
|
||||
--color-popover: var(--popover);
|
||||
--color-popover-foreground: var(--popover-foreground);
|
||||
--color-primary: var(--primary);
|
||||
--color-primary-foreground: var(--primary-foreground);
|
||||
--color-secondary: var(--secondary);
|
||||
--color-secondary-foreground: var(--secondary-foreground);
|
||||
--color-muted: var(--muted);
|
||||
--color-muted-foreground: var(--muted-foreground);
|
||||
--color-accent: var(--accent);
|
||||
--color-accent-foreground: var(--accent-foreground);
|
||||
--color-destructive: var(--destructive);
|
||||
--color-border: var(--border);
|
||||
--color-input: var(--input);
|
||||
--color-ring: var(--ring);
|
||||
--color-chart-1: var(--chart-1);
|
||||
--color-chart-2: var(--chart-2);
|
||||
--color-chart-3: var(--chart-3);
|
||||
--color-chart-4: var(--chart-4);
|
||||
--color-chart-5: var(--chart-5);
|
||||
--color-sidebar: var(--sidebar);
|
||||
--color-sidebar-foreground: var(--sidebar-foreground);
|
||||
--color-sidebar-primary: var(--sidebar-primary);
|
||||
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
||||
--color-sidebar-accent: var(--sidebar-accent);
|
||||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
||||
--color-sidebar-border: var(--sidebar-border);
|
||||
--color-sidebar-ring: var(--sidebar-ring);
|
||||
}
|
||||
|
||||
:root {
|
||||
--radius: 0.625rem;
|
||||
--background: oklch(1 0 0);
|
||||
--foreground: oklch(0.145 0 0);
|
||||
--card: oklch(1 0 0);
|
||||
--card-foreground: oklch(0.145 0 0);
|
||||
--popover: oklch(1 0 0);
|
||||
--popover-foreground: oklch(0.145 0 0);
|
||||
--primary: oklch(0.205 0 0);
|
||||
--primary-foreground: oklch(0.985 0 0);
|
||||
--secondary: oklch(0.97 0 0);
|
||||
--secondary-foreground: oklch(0.205 0 0);
|
||||
--muted: oklch(0.97 0 0);
|
||||
--muted-foreground: oklch(0.556 0 0);
|
||||
--accent: oklch(0.97 0 0);
|
||||
--accent-foreground: oklch(0.205 0 0);
|
||||
--destructive: oklch(0.577 0.245 27.325);
|
||||
--border: oklch(0.922 0 0);
|
||||
--input: oklch(0.922 0 0);
|
||||
--ring: oklch(0.708 0 0);
|
||||
--chart-1: oklch(0.646 0.222 41.116);
|
||||
--chart-2: oklch(0.6 0.118 184.704);
|
||||
--chart-3: oklch(0.398 0.07 227.392);
|
||||
--chart-4: oklch(0.828 0.189 84.429);
|
||||
--chart-5: oklch(0.769 0.188 70.08);
|
||||
--sidebar: oklch(0.985 0 0);
|
||||
--sidebar-foreground: oklch(0.145 0 0);
|
||||
--sidebar-primary: oklch(0.205 0 0);
|
||||
--sidebar-primary-foreground: oklch(0.985 0 0);
|
||||
--sidebar-accent: oklch(0.97 0 0);
|
||||
--sidebar-accent-foreground: oklch(0.205 0 0);
|
||||
--sidebar-border: oklch(0.922 0 0);
|
||||
--sidebar-ring: oklch(0.708 0 0);
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: oklch(0.145 0 0);
|
||||
--foreground: oklch(0.985 0 0);
|
||||
--card: oklch(0.205 0 0);
|
||||
--card-foreground: oklch(0.985 0 0);
|
||||
--popover: oklch(0.205 0 0);
|
||||
--popover-foreground: oklch(0.985 0 0);
|
||||
--primary: oklch(0.922 0 0);
|
||||
--primary-foreground: oklch(0.205 0 0);
|
||||
--secondary: oklch(0.269 0 0);
|
||||
--secondary-foreground: oklch(0.985 0 0);
|
||||
--muted: oklch(0.269 0 0);
|
||||
--muted-foreground: oklch(0.708 0 0);
|
||||
--accent: oklch(0.269 0 0);
|
||||
--accent-foreground: oklch(0.985 0 0);
|
||||
--destructive: oklch(0.704 0.191 22.216);
|
||||
--border: oklch(1 0 0 / 10%);
|
||||
--input: oklch(1 0 0 / 15%);
|
||||
--ring: oklch(0.556 0 0);
|
||||
--chart-1: oklch(0.488 0.243 264.376);
|
||||
--chart-2: oklch(0.696 0.17 162.48);
|
||||
--chart-3: oklch(0.769 0.188 70.08);
|
||||
--chart-4: oklch(0.627 0.265 303.9);
|
||||
--chart-5: oklch(0.645 0.246 16.439);
|
||||
--sidebar: oklch(0.205 0 0);
|
||||
--sidebar-foreground: oklch(0.985 0 0);
|
||||
--sidebar-primary: oklch(0.488 0.243 264.376);
|
||||
--sidebar-primary-foreground: oklch(0.985 0 0);
|
||||
--sidebar-accent: oklch(0.269 0 0);
|
||||
--sidebar-accent-foreground: oklch(0.985 0 0);
|
||||
--sidebar-border: oklch(1 0 0 / 10%);
|
||||
--sidebar-ring: oklch(0.556 0 0);
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border outline-ring/50;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
||||
22
libs/registry/tsconfig.json
Normal file
22
libs/registry/tsconfig.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"extends": "@kevisual/types/json/frontend.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"typeRoots": [
|
||||
"./node_modules/@types",
|
||||
"./node_modules/@kevisual"
|
||||
],
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
],
|
||||
"@/registry/*": [
|
||||
"registry/*"
|
||||
]
|
||||
},
|
||||
},
|
||||
"include": [
|
||||
"src/**/*",
|
||||
"registry/**/*"
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user