temp
This commit is contained in:
parent
1d10cf5888
commit
b4c367b799
67
.gitignore
vendored
67
.gitignore
vendored
@ -1,9 +1,64 @@
|
|||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
.pnpm-debug.log
|
# mac
|
||||||
.vscode
|
|
||||||
dist
|
|
||||||
build
|
|
||||||
.env
|
|
||||||
|
|
||||||
.DS_Store
|
.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
|
4
.npmrc
4
.npmrc
@ -1,2 +1,2 @@
|
|||||||
@abearxiong:registry=https://npm.pkg.github.com
|
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
|
||||||
@kevisual:registry=https://npm.xiongxiao.me
|
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"tailwindCSS.classFunctions": ["cva", "cx"]
|
||||||
|
}
|
3
apps/.vscode/settings.json
vendored
Normal file
3
apps/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"tailwindCSS.classFunctions": ["cva", "cx"]
|
||||||
|
}
|
66
apps/demo/.gitignore
vendored
Normal file
66
apps/demo/.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
apps/demo/.npmrc
Normal file
3
apps/demo/.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
|
28
apps/demo/astro.config.mjs
Normal file
28
apps/demo/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
apps/demo/components.json
Normal file
21
apps/demo/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"
|
||||||
|
}
|
35
apps/demo/package.json
Normal file
35
apps/demo/package.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "demo",
|
||||||
|
"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",
|
||||||
|
"tailwind-merge": "^3.2.0",
|
||||||
|
"tw-animate-css": "^1.2.9"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"class-variance-authority": "^0.7.1",
|
||||||
|
"clsx": "^2.1.1",
|
||||||
|
"lucide-react": "^0.509.0",
|
||||||
|
"react": "^19.1.0",
|
||||||
|
"react-dom": "^19.1.0"
|
||||||
|
}
|
||||||
|
}
|
6
apps/demo/src/lib/utils.ts
Normal file
6
apps/demo/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))
|
||||||
|
}
|
1
apps/demo/src/modules/basename.ts
Normal file
1
apps/demo/src/modules/basename.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export const basename = DEV_SERVER ? '' : '/root/center';
|
4
apps/demo/src/pages/index.astro
Normal file
4
apps/demo/src/pages/index.astro
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
import '../styles/global.css'
|
||||||
|
---
|
||||||
|
index
|
120
apps/demo/src/styles/global.css
Normal file
120
apps/demo/src/styles/global.css
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
@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
apps/demo/tsconfig.json
Normal file
22
apps/demo/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/**/*"
|
||||||
|
],
|
||||||
|
}
|
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/**/*"
|
||||||
|
],
|
||||||
|
}
|
@ -11,7 +11,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"packageManager": "pnpm@10.10.0",
|
"packageManager": "pnpm@10.10.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"react": "^18.3.1",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^18.3.1"
|
"react-dom": "^19.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
2
packages/codemirror/.npmrc
Normal file
2
packages/codemirror/.npmrc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
|
||||||
|
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
|
19
packages/codemirror/dist/editor.d.ts
vendored
Normal file
19
packages/codemirror/dist/editor.d.ts
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { EditorView } from 'codemirror';
|
||||||
|
declare let editor: EditorView;
|
||||||
|
type CreateOpts = {
|
||||||
|
jsx?: boolean;
|
||||||
|
typescript?: boolean;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* 创建单例
|
||||||
|
* @param el
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
declare const createEditorInstance: (el?: HTMLDivElement, opts?: CreateOpts) => EditorView;
|
||||||
|
/**
|
||||||
|
* 每次都创建新的实例
|
||||||
|
* @param el
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare const createEditor: (el: HTMLDivElement, opts?: CreateOpts) => EditorView;
|
||||||
|
export { editor, createEditorInstance };
|
27136
packages/codemirror/dist/editor.js
vendored
Normal file
27136
packages/codemirror/dist/editor.js
vendored
Normal file
File diff suppressed because one or more lines are too long
15
packages/codemirror/dist/editor.json.d.ts
vendored
Normal file
15
packages/codemirror/dist/editor.json.d.ts
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { EditorView } from 'codemirror';
|
||||||
|
declare let editor: EditorView;
|
||||||
|
/**
|
||||||
|
* 创建单例
|
||||||
|
* @param el
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
declare const createEditorInstance: (el?: HTMLDivElement) => EditorView;
|
||||||
|
/**
|
||||||
|
* 每次都创建新的实例
|
||||||
|
* @param el
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare const createEditor: (el: HTMLDivElement) => EditorView;
|
||||||
|
export { editor, createEditorInstance };
|
26271
packages/codemirror/dist/editor.json.js
vendored
Normal file
26271
packages/codemirror/dist/editor.json.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
# kevisual codemirror
|
# kevisual codemirror
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
|
import { createEditorInstance } from '@kevisual/codemirror';
|
||||||
const editor = createEditorInstance(ref.current!, { typescript: false });
|
const editor = createEditorInstance(ref.current!, { typescript: false });
|
||||||
editor.dom.style.height = '100%';
|
|
||||||
```
|
```
|
||||||
|
@ -1 +1,2 @@
|
|||||||
@build:registry=https://npm.xiongxiao.me
|
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
|
||||||
|
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
|
40
packages/tailwind/css/card.css
Normal file
40
packages/tailwind/css/card.css
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
@import 'tailwindcss';
|
||||||
|
|
||||||
|
@utility {
|
||||||
|
.btn {
|
||||||
|
@apply bg-blue-500 text-white font-bold py-2 px-4 rounded;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
@apply bg-white shadow-md rounded-lg p-4;
|
||||||
|
.card-title {
|
||||||
|
@apply text-lg font-bold;
|
||||||
|
}
|
||||||
|
.card-subtitle {
|
||||||
|
@apply text-sm text-gray-500;
|
||||||
|
}
|
||||||
|
.card-description {
|
||||||
|
@apply text-gray-700 break-words;
|
||||||
|
}
|
||||||
|
.card-code {
|
||||||
|
@apply bg-gray-100 p-2;
|
||||||
|
}
|
||||||
|
.card-body {
|
||||||
|
@apply text-gray-700;
|
||||||
|
}
|
||||||
|
.card-key {
|
||||||
|
@apply text-xs text-gray-400;
|
||||||
|
}
|
||||||
|
.card-footer {
|
||||||
|
@apply text-sm text-gray-500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@utilities {
|
||||||
|
.layout-menu {
|
||||||
|
@apply bg-gray-900 p-2 text-white flex justify-between h-12;
|
||||||
|
}
|
||||||
|
.bg-custom-blue {
|
||||||
|
background-color: #3490dc;
|
||||||
|
}
|
||||||
|
}
|
@ -1,15 +1,23 @@
|
|||||||
@tailwind base;
|
@import 'tailwindcss';
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
|
||||||
|
|
||||||
@layer base {
|
@theme {
|
||||||
html,
|
--color-primary: #ffc107;
|
||||||
body {
|
--color-secondary: #ffa000;
|
||||||
width: 100%;
|
--color-text-primary: #000000;
|
||||||
height: 100%;
|
--color-text-secondary: #000000;
|
||||||
font-size: 16px;
|
--color-success: #28a745;
|
||||||
font-family: 'Montserrat', sans-serif;
|
--color-scrollbar-thumb: #999999;
|
||||||
}
|
--color-scrollbar-track: rgba(0, 0, 0, 0.1);
|
||||||
|
--color-scrollbar-thumb-hover: #666666;
|
||||||
|
--scrollbar-color: #ffc107; /* 滚动条颜色 */
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
font-size: 16px;
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
h1 {
|
h1 {
|
||||||
@apply text-2xl font-bold;
|
@apply text-2xl font-bold;
|
||||||
}
|
}
|
||||||
@ -20,42 +28,60 @@
|
|||||||
@apply text-lg font-bold;
|
@apply text-lg font-bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* font-family */
|
||||||
@layer components {
|
@utility font-family-mon {
|
||||||
.btn {
|
font-family: 'Montserrat', sans-serif;
|
||||||
@apply bg-blue-500 text-white font-bold py-2 px-4 rounded;
|
}
|
||||||
}
|
@utility font-family-rob {
|
||||||
.card {
|
font-family: 'Roboto', sans-serif;
|
||||||
@apply bg-white shadow-md rounded-lg p-4;
|
}
|
||||||
.card-title {
|
@utility font-family-int {
|
||||||
@apply text-lg font-bold;
|
font-family: 'Inter', sans-serif;
|
||||||
}
|
}
|
||||||
.card-subtitle {
|
@utility font-family-orb {
|
||||||
@apply text-sm text-gray-500;
|
font-family: 'Orbitron', sans-serif;
|
||||||
}
|
}
|
||||||
.card-description {
|
@utility font-family-din {
|
||||||
@apply text-gray-700 break-words;
|
font-family: 'DIN', sans-serif;
|
||||||
}
|
|
||||||
.card-code {
|
|
||||||
@apply bg-gray-100 p-2;
|
|
||||||
}
|
|
||||||
.card-body {
|
|
||||||
@apply text-gray-700;
|
|
||||||
}
|
|
||||||
.card-key {
|
|
||||||
@apply text-xs text-gray-400;
|
|
||||||
}
|
|
||||||
.card-footer {
|
|
||||||
@apply text-sm text-gray-500;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer utilities {
|
@utility flex-row-center {
|
||||||
.layout-menu {
|
@apply flex flex-row items-center justify-center;
|
||||||
@apply bg-gray-900 p-2 text-white flex justify-between h-12;
|
}
|
||||||
|
@utility flex-col-center {
|
||||||
|
@apply flex flex-col items-center justify-center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility scrollbar {
|
||||||
|
overflow: auto;
|
||||||
|
/* 整个滚动条 */
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 3px;
|
||||||
|
height: 3px;
|
||||||
}
|
}
|
||||||
.bg-custom-blue {
|
&::-webkit-scrollbar-track {
|
||||||
background-color: #3490dc;
|
background-color: var(--color-scrollbar-track);
|
||||||
|
}
|
||||||
|
/* 滚动条有滑块的轨道部分 */
|
||||||
|
&::-webkit-scrollbar-track-piece {
|
||||||
|
background-color: transparent;
|
||||||
|
border-radius: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 滚动条滑块(竖向:vertical 横向:horizontal) */
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: var(--color-scrollbar-thumb);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 滚动条滑块hover */
|
||||||
|
&::-webkit-scrollbar-thumb:hover {
|
||||||
|
background-color: var(--color-scrollbar-thumb-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 同时有垂直和水平滚动条时交汇的部分 */
|
||||||
|
&::-webkit-scrollbar-corner {
|
||||||
|
display: block; /* 修复交汇时出现的白块 */
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
@tailwind components;
|
@import 'tailwindcss';
|
||||||
|
|
||||||
@layer components {
|
@utility {
|
||||||
.loading {
|
.loading {
|
||||||
@apply w-full h-full flex justify-center items-center;
|
@apply w-full h-full flex justify-center items-center;
|
||||||
> div {
|
> div {
|
||||||
@ -11,3 +11,4 @@
|
|||||||
@apply w-4 h-4 border-t-2 border-b-2 rounded-full animate-spin;
|
@apply w-4 h-4 border-t-2 border-b-2 rounded-full animate-spin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
.scrollbar {
|
@import 'tailwindcss';
|
||||||
|
@utility .scrollbar {
|
||||||
/* 整个滚动条 */
|
/* 整个滚动条 */
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
width: 3px;
|
width: 3px;
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
@import "./css/globals.css";
|
@import "./css/globals.css";
|
||||||
@import "./css/loading.css";
|
@import "./css/loading.css";
|
||||||
@import "./css/scrollbar.css"
|
/* @import "./css/scrollbar.css" */
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@build/tailwind",
|
"name": "@kevisual/tailwind",
|
||||||
"version": "1.0.2-alpha-2",
|
"version": "1.0.3",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "plugin/index.js",
|
"main": "plugin/index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
@ -15,39 +15,38 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@abearxiong/ui": "0.0.1-alpha.0",
|
|
||||||
"@kevisual/codemirror": "workspace:^",
|
"@kevisual/codemirror": "workspace:^",
|
||||||
"@kevisual/ui": "workspace:^",
|
"@kevisual/ui": "workspace:^",
|
||||||
"antd": "^5.20.6",
|
"antd": "^5.25.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"immer": "^10.1.1",
|
"immer": "^10.1.1",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"nanoid": "^5.0.7",
|
"nanoid": "^5.1.5",
|
||||||
"react": "^18.3.1",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^19.1.0",
|
||||||
"react-router": "^6.26.2",
|
"react-router": "^7.6.0",
|
||||||
"react-router-dom": "^6.26.2",
|
"react-router-dom": "^7.6.0",
|
||||||
"react-toastify": "^10.0.5",
|
"react-toastify": "^11.0.5",
|
||||||
"zustand": "^4.5.5"
|
"zustand": "^5.0.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.10.0",
|
"@eslint/js": "^9.26.0",
|
||||||
"@tailwindcss/aspect-ratio": "^0.4.2",
|
"@tailwindcss/aspect-ratio": "^0.4.2",
|
||||||
"@tailwindcss/typography": "^0.5.15",
|
"@tailwindcss/typography": "^0.5.16",
|
||||||
"@types/node": "^22.5.5",
|
"@types/node": "^22.15.17",
|
||||||
"@types/react": "^18.3.8",
|
"@types/react": "^19.1.3",
|
||||||
"@types/react-dom": "^18.3.0",
|
"@types/react-dom": "^19.1.3",
|
||||||
"@vitejs/plugin-react": "^4.3.1",
|
"@vitejs/plugin-react": "^4.4.1",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.21",
|
||||||
"eslint": "^9.10.0",
|
"eslint": "^9.26.0",
|
||||||
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.12",
|
"eslint-plugin-react-refresh": "^0.4.20",
|
||||||
"globals": "^15.9.0",
|
"globals": "^16.1.0",
|
||||||
"tailwind-merge": "^2.5.2",
|
"tailwind-merge": "^3.2.0",
|
||||||
"tailwindcss": "^3.4.12",
|
"tailwindcss": "^4.1.6",
|
||||||
"tailwindcss-animate": "^1.0.7",
|
"tailwindcss-animate": "^1.0.7",
|
||||||
"typescript": "^5.6.2",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.6.0",
|
"typescript-eslint": "^8.32.0",
|
||||||
"vite": "^5.4.6"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import { createEditorInstance } from '@kevisual/codemirror/dist/editor.json';
|
import { createEditorInstance } from '@kevisual/codemirror/json';
|
||||||
import { useEffect, useRef } from 'react';
|
import { useEffect, useRef } from 'react';
|
||||||
export const App = () => {
|
export const App = () => {
|
||||||
const ref = useRef<HTMLDivElement>(null);
|
const ref = useRef<HTMLDivElement>(null);
|
||||||
|
@ -11,7 +11,6 @@ export const App = ({ typescript }: AppProps) => {
|
|||||||
}, []);
|
}, []);
|
||||||
const init = () => {
|
const init = () => {
|
||||||
const editor = createEditorInstance(ref.current!, { typescript });
|
const editor = createEditorInstance(ref.current!, { typescript });
|
||||||
editor.dom.style.height = '100%';
|
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className='h-full w-full bg-gray-400'>
|
<div className='h-full w-full bg-gray-400'>
|
||||||
|
@ -21,24 +21,23 @@
|
|||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "abearxiong",
|
"author": "abearxiong",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@emotion/serialize": "^1.3.2",
|
"@emotion/serialize": "^1.3.3",
|
||||||
"@rollup/plugin-commonjs": "^28.0.1",
|
"@rollup/plugin-commonjs": "^28.0.3",
|
||||||
"@rollup/plugin-node-resolve": "^15.3.0",
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||||
"@rollup/plugin-terser": "^0.4.4",
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
"@rollup/plugin-typescript": "^12.1.1",
|
"@rollup/plugin-typescript": "^12.1.2",
|
||||||
"@types/postcss-import": "^14.0.3",
|
"@types/postcss-import": "^14.0.3",
|
||||||
"@types/react": "^18.3.12",
|
"@types/react": "^19.1.3",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.21",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"cssnano": "^7.0.6",
|
"cssnano": "^7.0.7",
|
||||||
"immer": "^10.1.1",
|
"immer": "^10.1.1",
|
||||||
"nanoid": "^5.0.8",
|
"nanoid": "^5.1.5",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"rollup": "^4.24.3",
|
"rollup": "^4.40.2",
|
||||||
"rollup-plugin-postcss": "^4.0.2",
|
"rollup-plugin-postcss": "^4.0.2",
|
||||||
"typescript": "^5.6.3",
|
"typescript": "^5.8.3",
|
||||||
"zustand": "5.0.1",
|
"zustand": "5.0.4"
|
||||||
"@kevisual/system-ui": "^0.0.2"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dayjs": "^1.11.13",
|
"dayjs": "^1.11.13",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@build/vite",
|
"name": "@kevisual/vite",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
@ -17,22 +17,22 @@
|
|||||||
"src"
|
"src"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-commonjs": "^28.0.1",
|
"@rollup/plugin-commonjs": "^28.0.3",
|
||||||
"@rollup/plugin-node-resolve": "^15.3.0",
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||||
"@rollup/plugin-terser": "^0.4.4",
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
"@rollup/plugin-typescript": "^12.1.1",
|
"@rollup/plugin-typescript": "^12.1.2",
|
||||||
"@types/postcss-import": "^14.0.3",
|
"@types/postcss-import": "^14.0.3",
|
||||||
"@types/react": "^18.3.12",
|
"@types/react": "^19.1.3",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.21",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"cssnano": "^7.0.6",
|
"cssnano": "^7.0.7",
|
||||||
"immer": "^10.1.1",
|
"immer": "^10.1.1",
|
||||||
"nanoid": "^5.0.8",
|
"nanoid": "^5.1.5",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"rollup": "^4.24.3",
|
"rollup": "^4.40.2",
|
||||||
"rollup-plugin-dts": "^6.1.1",
|
"rollup-plugin-dts": "^6.2.1",
|
||||||
"rollup-plugin-postcss": "^4.0.2",
|
"rollup-plugin-postcss": "^4.0.2",
|
||||||
"typescript": "^5.6.3",
|
"typescript": "^5.8.3",
|
||||||
"vite": "^5.4.6"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
8802
pnpm-lock.yaml
generated
8802
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -1,2 +1,5 @@
|
|||||||
packages:
|
packages:
|
||||||
- 'packages/*'
|
- 'submodules/*'
|
||||||
|
- 'packages/*'
|
||||||
|
- 'apps/*'
|
||||||
|
- 'libs/*'
|
@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "ES2020",
|
|
||||||
"useDefineForClassFields": true,
|
|
||||||
"lib": [
|
|
||||||
"ES2020",
|
|
||||||
"DOM",
|
|
||||||
"DOM.Iterable"
|
|
||||||
],
|
|
||||||
"module": "ESNext",
|
|
||||||
"skipLibCheck": true,
|
|
||||||
/* Bundler mode */
|
|
||||||
"moduleResolution": "bundler",
|
|
||||||
"allowImportingTsExtensions": true,
|
|
||||||
"isolatedModules": true,
|
|
||||||
"moduleDetection": "force",
|
|
||||||
"noEmit": true,
|
|
||||||
"jsx": "react-jsx",
|
|
||||||
"baseUrl": "./",
|
|
||||||
"types": [],
|
|
||||||
"paths": {
|
|
||||||
"@/*": [
|
|
||||||
"src/*"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
/* Linting */
|
|
||||||
"strict": true,
|
|
||||||
"noImplicitAny": false,
|
|
||||||
"noUnusedLocals": false,
|
|
||||||
"noUnusedParameters": false,
|
|
||||||
"noFallthroughCasesInSwitch": true
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"src",
|
|
||||||
]
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user