|
3 月之前 | |
---|---|---|
.. | ||
lib | 5 月之前 | |
README.md | 5 月之前 | |
build.mjs | 5 月之前 | |
index.ts | 5 月之前 | |
package.json | 3 月之前 | |
tsconfig.json | 5 月之前 |
This package provides components that make up the UI.
First, move to the page you want to use.
cd pages/options
Add the following to the dependencies in package.json
.
{
"dependencies": {
"@extension/ui": "workspace:*"
}
}
Then, run pnpm install
.
pnpm install
Add the following to the tailwind.config.ts
file.
import baseConfig from '@extension/tailwindcss-config';
import { withUI } from '@extension/ui';
export default withUI({
...baseConfig,
content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
});
Add the following to the index.tsx
file.
import '@extension/ui/dist/global.css';
Add the following to the lib/components/index.ts
file.
export * from './Button';
Add the following to the lib/components/Button.tsx
file.
import { ComponentPropsWithoutRef } from 'react';
import { cn } from '../utils';
export type ButtonProps = {
theme?: 'light' | 'dark';
} & ComponentPropsWithoutRef<'button'>;
export function Button({ theme, className, children, ...props }: ButtonProps) {
return (
<button
className={cn(
className,
'mt-4 py-1 px-4 rounded shadow hover:scale-105',
theme === 'light' ? 'bg-white text-black' : 'bg-black text-white',
)}
{...props}>
{children}
</button>
);
}
import { Button } from '@extension/ui';
export default function ToggleButton() {
const [theme, setTheme] = useState<'light' | 'dark'>('light');
const toggle = () => {
setTheme(theme === 'light' ? 'dark' : 'light');
};
return (
<Button theme={theme} onClick={toggle}>
Toggle
</Button>
);
}
Modify the tailwind.config.ts
file to make global style changes to the package.
Modify the css variable in the ui/lib/global.css
code to change the css variable of the package.
You can refer to the this manual guide
Create a file named components.json
in the packages/ui
directory with the following content:
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "default",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "lib/global.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/lib/components",
"utils": "@/lib/utils",
"ui": "@/lib/components/ui",
"lib": "@/lib"
}
}
Run the following command from the root of your project:
pnpm add tailwindcss-animate class-variance-authority -F ui
withUI.ts
in lib
folderThis configuration file is from the manual guide. You can refer to the manual guide to modify the configuration file. (Configure tailwind.config.js
)
import deepmerge from 'deepmerge';
import type { Config } from 'tailwindcss/types/config';
import { fontFamily } from 'tailwindcss/defaultTheme';
import tailwindAnimate from 'tailwindcss-animate';
export function withUI(tailwindConfig: Config): Config {
return deepmerge(
shadcnConfig,
deepmerge(tailwindConfig, {
content: ['./node_modules/@extension/ui/lib/**/*.{tsx,ts,js,jsx}'],
}),
);
}
const shadcnConfig = {
darkMode: ['class'],
theme: {
container: {
center: true,
padding: '2rem',
screens: {
'2xl': '1400px',
},
},
extend: {
colors: {
border: 'hsl(var(--border))',
input: 'hsl(var(--input))',
ring: 'hsl(var(--ring))',
background: 'hsl(var(--background))',
foreground: 'hsl(var(--foreground))',
primary: {
DEFAULT: 'hsl(var(--primary))',
foreground: 'hsl(var(--primary-foreground))',
},
secondary: {
DEFAULT: 'hsl(var(--secondary))',
foreground: 'hsl(var(--secondary-foreground))',
},
destructive: {
DEFAULT: 'hsl(var(--destructive))',
foreground: 'hsl(var(--destructive-foreground))',
},
muted: {
DEFAULT: 'hsl(var(--muted))',
foreground: 'hsl(var(--muted-foreground))',
},
accent: {
DEFAULT: 'hsl(var(--accent))',
foreground: 'hsl(var(--accent-foreground))',
},
popover: {
DEFAULT: 'hsl(var(--popover))',
foreground: 'hsl(var(--popover-foreground))',
},
card: {
DEFAULT: 'hsl(var(--card))',
foreground: 'hsl(var(--card-foreground))',
},
},
borderRadius: {
lg: `var(--radius)`,
md: `calc(var(--radius) - 2px)`,
sm: 'calc(var(--radius) - 4px)',
},
fontFamily: {
sans: ['var(--font-sans)', ...fontFamily.sans],
},
keyframes: {
'accordion-down': {
from: { height: '0' },
to: { height: 'var(--radix-accordion-content-height)' },
},
'accordion-up': {
from: { height: 'var(--radix-accordion-content-height)' },
to: { height: '0' },
},
},
animation: {
'accordion-down': 'accordion-down 0.2s ease-out',
'accordion-up': 'accordion-up 0.2s ease-out',
},
},
},
plugins: [tailwindAnimate],
};
global.css
in lib
folderThis configuration also comes from the manual guide. You can refer to the manual guide to modify the configuration file. (Configure styles
)
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 47.4% 11.2%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--card: 0 0% 100%;
--card-foreground: 222.2 47.4% 11.2%;
--primary: 222.2 47.4% 11.2%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 100% 50%;
--destructive-foreground: 210 40% 98%;
--ring: 215 20.2% 65.1%;
--radius: 0.5rem;
}
.dark {
--background: 224 71% 4%;
--foreground: 213 31% 91%;
--muted: 223 47% 11%;
--muted-foreground: 215.4 16.3% 56.9%;
--accent: 216 34% 17%;
--accent-foreground: 210 40% 98%;
--popover: 224 71% 4%;
--popover-foreground: 215 20.2% 65.1%;
--border: 216 34% 17%;
--input: 216 34% 17%;
--card: 224 71% 4%;
--card-foreground: 213 31% 91%;
--primary: 210 40% 98%;
--primary-foreground: 222.2 47.4% 1.2%;
--secondary: 222.2 47.4% 11.2%;
--secondary-foreground: 210 40% 98%;
--destructive: 0 63% 31%;
--destructive-foreground: 210 40% 98%;
--ring: 216 34% 17%;
--radius: 0.5rem;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
font-feature-settings: "rlig" 1, "calt" 1;
}
}
Finally, run this command from the root of your project to add the button component:
pnpm dlx shadcn@latest add button -c ./packages/ui
This will add the shadcn button component to your UI package.
Remember to adjust any paths or package names if your project structure differs from the assumed layout in this guide.
Make the index.ts
file in the components/ui
directory export the button component:
export * from './button';
Edit the index.ts
file in the packages/ui
directory to export the shadcn ui component:
// export * from './lib/components'; // remove this line: duplicated button component
export * from './lib/components/ui';