pembaruan tanggal
This commit is contained in:
138
public/README.md
Normal file
138
public/README.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Bun React Template Starter
|
||||
|
||||
This template is a starting point for building modern full-stack web applications using Bun, React, ElysiaJS, and Prisma. This project is designed to provide a fast, efficient, and structured development experience with a cutting-edge technology stack.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Super-Fast Runtime**: Built on top of [Bun](https://bun.sh/), a high-performance JavaScript runtime.
|
||||
- **End-to-End Typesafe Backend**: Utilizes [ElysiaJS](https://elysiajs.com/) for a type-safe API from the backend to the frontend.
|
||||
- **Automatic API Documentation**: Comes with [Elysia Swagger](https://elysiajs.com/plugins/swagger) to automatically generate interactive API documentation.
|
||||
- **Modern Frontend**: A feature-rich and customizable user interface using [React](https://react.dev/) and [Mantine UI](https://mantine.dev/).
|
||||
- **Easy Database Access**: Integrated with [Prisma](https://www.prisma.io/) as an ORM for intuitive and secure database interactions.
|
||||
- **Clear Project Structure**: Logical file and folder organization to facilitate easy navigation and development.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Runtime**: Bun
|
||||
- **Backend**:
|
||||
- **Framework**: ElysiaJS
|
||||
- **ElysiaJS Modules**:
|
||||
- `@elysiajs/cors`: Manages Cross-Origin Resource Sharing policies.
|
||||
- `@elysiajs/jwt`: JSON Web Token-based authentication.
|
||||
- `@elysiajs/swagger`: Creates API documentation (Swagger/OpenAPI).
|
||||
- `@elysiajs/eden`: A typesafe RPC-like client to connect the frontend with the Elysia API.
|
||||
- **Frontend**:
|
||||
- **Library**: React
|
||||
- **UI Framework**: Mantine
|
||||
- **Routing**: React Router
|
||||
- **Data Fetching**: SWR
|
||||
- **Database**:
|
||||
- **ORM**: Prisma
|
||||
- **Supported Databases**: PostgreSQL (default), MySQL, SQLite, etc.
|
||||
- **Language**: TypeScript
|
||||
|
||||
## Getting Started
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/bun-react-template-starter.git
|
||||
cd bun-react-template-starter
|
||||
```
|
||||
|
||||
### 2. Install Dependencies
|
||||
|
||||
Ensure you have [Bun](https://bun.sh/docs/installation) installed. Then, run the following command:
|
||||
|
||||
```bash
|
||||
bun install
|
||||
```
|
||||
|
||||
### 3. Configure Environment Variables
|
||||
|
||||
Copy the `.env.example` file to `.env` and customize the values.
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Fill in your `.env` file similar to the example below:
|
||||
|
||||
```
|
||||
DATABASE_URL="postgresql://user:password@host:port/database?schema=public"
|
||||
JWT_SECRET=a_super_long_and_secure_secret
|
||||
BUN_PUBLIC_BASE_URL=http://localhost:3000
|
||||
PORT=3000
|
||||
```
|
||||
|
||||
After that, create TypeScript type declarations for your environment variables with the provided script:
|
||||
|
||||
```bash
|
||||
bun run generate:env
|
||||
```
|
||||
|
||||
This command will generate a `types/env.d.ts` file based on your `.env`.
|
||||
|
||||
### 4. Database Preparation
|
||||
|
||||
Make sure your PostgreSQL database server is running. Then, apply the Prisma schema to your database:
|
||||
|
||||
```bash
|
||||
bunx prisma db push
|
||||
```
|
||||
|
||||
You can also seed the database with initial data using the following script:
|
||||
|
||||
```bash
|
||||
bun run seed
|
||||
```
|
||||
|
||||
### 5. Running the Development Server
|
||||
|
||||
```bash
|
||||
bun run dev
|
||||
```
|
||||
|
||||
The application will be running at `http://localhost:3000`. The server supports hot-reloading, so changes in the code will be reflected instantly without needing a manual restart.
|
||||
|
||||
### 6. Accessing API Documentation (Swagger)
|
||||
|
||||
Once the server is running, you can access the automatically generated API documentation at:
|
||||
|
||||
`http://localhost:3000/swagger`
|
||||
|
||||
## Available Scripts
|
||||
|
||||
- `bun run dev`: Runs the development server with hot-reloading.
|
||||
- `bun run build`: Builds the frontend application for production into the `dist` directory.
|
||||
- `bun run start`: Runs the application in production mode.
|
||||
- `bun run seed`: Executes the database seeding script located in `prisma/seed.ts`.
|
||||
- `bun run generate:route`: A utility to create new route files in the backend.
|
||||
- `bun run generate:env`: Generates a type definition file (`.d.ts`) from the variables in `.env`.
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
/
|
||||
├── bin/ # Utility scripts (generators)
|
||||
├── prisma/ # Database schema, migrations, and seed
|
||||
├── src/ # Main source code
|
||||
│ ├── App.tsx # Root application component
|
||||
│ ├── clientRoutes.ts # Route definitions for the frontend
|
||||
│ ├── frontend.tsx # Entry point for client-side rendering (React)
|
||||
│ ├── index.css # Global CSS file
|
||||
│ ├── index.html # Main HTML template
|
||||
│ ├── index.tsx # Main entry point for the app (server and client)
|
||||
│ ├── components/ # Reusable React components
|
||||
│ ├── lib/ # Shared libraries/helpers (e.g., apiFetch)
|
||||
│ ├── pages/ # React page components
|
||||
│ └── server/ # Backend code (ElysiaJS)
|
||||
│ ├── lib/ # Server-specific libraries (e.g., prisma client)
|
||||
│ ├── middlewares/ # Middleware for the API
|
||||
│ └── routes/ # API route files
|
||||
└── types/ # TypeScript type definitions
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are highly welcome! Please feel free to create a pull request to add features, fix bugs, or improve the documentation.
|
||||
205
public/unocss.css
Normal file
205
public/unocss.css
Normal file
@@ -0,0 +1,205 @@
|
||||
/* layer: preflights */
|
||||
*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}
|
||||
/* layer: shortcuts */
|
||||
.container{width:100%;}
|
||||
@media (min-width: 640px){
|
||||
.container{max-width:640px;}
|
||||
}
|
||||
@media (min-width: 768px){
|
||||
.container{max-width:768px;}
|
||||
}
|
||||
@media (min-width: 1024px){
|
||||
.container{max-width:1024px;}
|
||||
}
|
||||
@media (min-width: 1280px){
|
||||
.container{max-width:1280px;}
|
||||
}
|
||||
@media (min-width: 1536px){
|
||||
.container{max-width:1536px;}
|
||||
}
|
||||
/* layer: default */
|
||||
.visible{visibility:visible;}
|
||||
.sticky{position:sticky;}
|
||||
.static{position:static;}
|
||||
.top-0{top:0;}
|
||||
.z-50{z-index:50;}
|
||||
[order~="\32 "]{order:2;}
|
||||
[order~="\33 "]{order:3;}
|
||||
[order~="\34 "]{order:4;}
|
||||
.grid{display:grid;}
|
||||
.grid-cols-2,
|
||||
[cols~="\32 "]{grid-template-columns:repeat(2,minmax(0,1fr));}
|
||||
.grid-cols-7,
|
||||
[cols~="\37 "]{grid-template-columns:repeat(7,minmax(0,1fr));}
|
||||
[cols~="\34 "]{grid-template-columns:repeat(4,minmax(0,1fr));}
|
||||
.mx-auto{margin-left:auto;margin-right:auto;}
|
||||
.mb-2{margin-bottom:0.5rem;}
|
||||
.mb-3{margin-bottom:0.75rem;}
|
||||
.mb-4{margin-bottom:1rem;}
|
||||
.mb-6{margin-bottom:1.5rem;}
|
||||
.mt-10{margin-top:2.5rem;}
|
||||
.mt-2{margin-top:0.5rem;}
|
||||
.mt-3{margin-top:0.75rem;}
|
||||
.mt-4{margin-top:1rem;}
|
||||
.mt-7{margin-top:1.75rem;}
|
||||
[mb~="lg"]{margin-bottom:1.125rem;}
|
||||
[mb~="sm"]{margin-bottom:0.875rem;}
|
||||
[mt~="sm"]{margin-top:0.875rem;}
|
||||
.inline-block{display:inline-block;}
|
||||
.hidden{display:none;}
|
||||
[size~="\31 6"]{width:4rem;height:4rem;}
|
||||
[size~="\31 rem"]{width:1rem;height:1rem;}
|
||||
[size~="\32 2"]{width:5.5rem;height:5.5rem;}
|
||||
[size~="\32 rem"]{width:2rem;height:2rem;}
|
||||
[size~="\34 20"]{width:105rem;height:105rem;}
|
||||
[size~="\36 rem"]{width:6rem;height:6rem;}
|
||||
[size~="lg"]{width:32rem;height:32rem;}
|
||||
[size~="md"]{width:28rem;height:28rem;}
|
||||
[size~="sm"]{width:24rem;height:24rem;}
|
||||
[size~="xl"]{width:36rem;height:36rem;}
|
||||
[size~="xs"]{width:20rem;height:20rem;}
|
||||
.h-11{height:2.75rem;}
|
||||
.h1{height:0.25rem;}
|
||||
.h2{height:0.5rem;}
|
||||
.h3{height:0.75rem;}
|
||||
.max-w-\[1200px\]{max-width:1200px;}
|
||||
.max-w-2xl{max-width:42rem;}
|
||||
.max-w-xl{max-width:36rem;}
|
||||
.min-h-screen{min-height:100vh;}
|
||||
.w-11{width:2.75rem;}
|
||||
[h~="\31 00\%"]{height:100%;}
|
||||
[w~="\31 00"]{width:25rem;}
|
||||
[w~="\31 00\%"]{width:100%;}
|
||||
[w~="\32 00"]{width:50rem;}
|
||||
.flex{display:flex;}
|
||||
.grow,
|
||||
[grow=""]{flex-grow:1;}
|
||||
.flex-wrap{flex-wrap:wrap;}
|
||||
.hover\:-translate-y-2:hover{--un-translate-y:-0.5rem;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
|
||||
.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
|
||||
.place-items-center{place-items:center;}
|
||||
.items-center{align-items:center;}
|
||||
[justify~="end"]{justify-content:flex-end;}
|
||||
[justify~="center"]{justify-content:center;}
|
||||
.justify-between{justify-content:space-between;}
|
||||
.gap-1{gap:0.25rem;}
|
||||
.gap-2,
|
||||
[gap~="\32 "]{gap:0.5rem;}
|
||||
.gap-3,
|
||||
[gap~="xs"]{gap:0.75rem;}
|
||||
.gap-4{gap:1rem;}
|
||||
.gap-5,
|
||||
[gap~="xl"]{gap:1.25rem;}
|
||||
.gap-8{gap:2rem;}
|
||||
[gap~="\30 "]{gap:0;}
|
||||
[gap~="\32 0"]{gap:5rem;}
|
||||
[gap~="\36 "]{gap:1.5rem;}
|
||||
[gap~="\37 0"]{gap:17.5rem;}
|
||||
[gap~="lg"]{gap:1.125rem;}
|
||||
[gap~="sm"]{gap:0.875rem;}
|
||||
.overflow-x-hidden{overflow-x:hidden;}
|
||||
.b,
|
||||
.border{border-width:1px;}
|
||||
.border-b{border-bottom-width:1px;}
|
||||
.border-t{border-top-width:1px;}
|
||||
.border-red-500\/20{border-color:rgb(239 68 68 / 0.2);}
|
||||
.border-white\/10{border-color:rgb(255 255 255 / 0.1);}
|
||||
.border-white\/15{border-color:rgb(255 255 255 / 0.15);}
|
||||
.rounded-2xl{border-radius:1rem;}
|
||||
.rounded-full{border-radius:9999px;}
|
||||
.rounded-lg{border-radius:0.5rem;}
|
||||
.rounded-xl{border-radius:0.75rem;}
|
||||
.bg-\[linear-gradient\(180deg\,rgba\(7\,10\,20\,0\.6\)\,rgba\(7\,10\,20\,0\.35\)\)\]{background-image:linear-gradient(180deg,rgba(7,10,20,0.6),rgba(7,10,20,0.35));}
|
||||
.bg-\[radial-gradient\(1000px_400px_at_90\%_90\%\,rgba\(79\,70\,229\,0\.10\)\,transparent_8\%\)\]{background-image:radial-gradient(1000px 400px at 90% 90%,rgba(79,70,229,0.10),transparent 8%);}
|
||||
.bg-\[radial-gradient\(1200px_600px_at_10\%_10\%\,rgba\(124\,58\,237\,0\.12\)\,transparent_8\%\)\]{background-image:radial-gradient(1200px 600px at 10% 10%,rgba(124,58,237,0.12),transparent 8%);}
|
||||
.bg-cyan-600{--un-bg-opacity:1;background-color:rgb(8 145 178 / var(--un-bg-opacity)) /* #0891b2 */;}
|
||||
.bg-red-900\/30{background-color:rgb(127 29 29 / 0.3) /* #7f1d1d */;}
|
||||
.bg-white\/5{background-color:rgb(255 255 255 / 0.05) /* #fff */;}
|
||||
[bg~="gray"]{--un-bg-opacity:1;background-color:rgb(156 163 175 / var(--un-bg-opacity)) /* #9ca3af */;}
|
||||
.hover\:bg-white\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}
|
||||
.from-\[\#071024\]{--un-gradient-from-position:0%;--un-gradient-from:rgb(7 16 36 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(7 16 36 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.from-indigo-600{--un-gradient-from-position:0%;--un-gradient-from:rgb(79 70 229 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(79 70 229 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.from-transparent{--un-gradient-from-position:0%;--un-gradient-from:transparent var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.from-white\/5{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / 0.05) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.via-\[\#071229\]{--un-gradient-via-position:50%;--un-gradient-to:rgb(7 18 41 / 0);--un-gradient-stops:var(--un-gradient-from), rgb(7 18 41 / var(--un-via-opacity, 1)) var(--un-gradient-via-position), var(--un-gradient-to);}
|
||||
.to-\[\#08162f\]{--un-gradient-to-position:100%;--un-gradient-to:rgb(8 22 47 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}
|
||||
.to-black\/25{--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0.25) var(--un-gradient-to-position);}
|
||||
.to-violet-600{--un-gradient-to-position:100%;--un-gradient-to:rgb(124 58 237 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}
|
||||
.to-white\/0{--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);}
|
||||
.bg-gradient-to-b{--un-gradient-shape:to bottom in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}
|
||||
.bg-gradient-to-br{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}
|
||||
.bg-gradient-to-r{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}
|
||||
[stroke~="\31 \.3"]{stroke-width:1.3px;}
|
||||
.p-3{padding:0.75rem;}
|
||||
.p-5{padding:1.25rem;}
|
||||
[p~="sm"]{padding:0.875rem;}
|
||||
.px-2{padding-left:0.5rem;padding-right:0.5rem;}
|
||||
.px-3{padding-left:0.75rem;padding-right:0.75rem;}
|
||||
.px-4,
|
||||
[px=""]{padding-left:1rem;padding-right:1rem;}
|
||||
.px-5{padding-left:1.25rem;padding-right:1.25rem;}
|
||||
.py-1{padding-top:0.25rem;padding-bottom:0.25rem;}
|
||||
.py-10{padding-top:2.5rem;padding-bottom:2.5rem;}
|
||||
.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}
|
||||
.py-20{padding-top:5rem;padding-bottom:5rem;}
|
||||
.py-24{padding-top:6rem;padding-bottom:6rem;}
|
||||
.py-3{padding-top:0.75rem;padding-bottom:0.75rem;}
|
||||
[px~="sm"]{padding-left:0.875rem;padding-right:0.875rem;}
|
||||
[py~="\38 0"]{padding-top:20rem;padding-bottom:20rem;}
|
||||
[py~="lg"]{padding-top:1.125rem;padding-bottom:1.125rem;}
|
||||
.pb-20{padding-bottom:5rem;}
|
||||
.text-center{text-align:center;}
|
||||
.text-right{text-align:right;}
|
||||
.text-\[12px\]{font-size:12px;}
|
||||
.text-\[13px\]{font-size:13px;}
|
||||
.text-\[14px\]{font-size:14px;}
|
||||
.text-\[15px\]{font-size:15px;}
|
||||
.text-\[16px\]{font-size:16px;}
|
||||
.text-\[18px\]{font-size:18px;}
|
||||
.text-\[22px\]{font-size:22px;}
|
||||
.text-3xl{font-size:1.875rem;line-height:2.25rem;}
|
||||
.text-4xl{font-size:2.25rem;line-height:2.5rem;}
|
||||
.text-indigo-100{--un-text-opacity:1;color:rgb(224 231 255 / var(--un-text-opacity)) /* #e0e7ff */;}
|
||||
.text-red-200{--un-text-opacity:1;color:rgb(254 202 202 / var(--un-text-opacity)) /* #fecaca */;}
|
||||
.text-slate-200{--un-text-opacity:1;color:rgb(226 232 240 / var(--un-text-opacity)) /* #e2e8f0 */;}
|
||||
.text-slate-400{--un-text-opacity:1;color:rgb(148 163 184 / var(--un-text-opacity)) /* #94a3b8 */;}
|
||||
.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity)) /* #fff */;}
|
||||
[c~="blue"],
|
||||
[color~="blue"]{--un-text-opacity:1;color:rgb(96 165 250 / var(--un-text-opacity)) /* #60a5fa */;}
|
||||
[c~="dark"]{--un-text-opacity:1;color:rgb(34 34 34 / var(--un-text-opacity)) /* #222222 */;}
|
||||
[c~="red"],
|
||||
[color~="red"]{--un-text-opacity:1;color:rgb(248 113 113 / var(--un-text-opacity)) /* #f87171 */;}
|
||||
[color~="cyan"]{--un-text-opacity:1;color:rgb(34 211 238 / var(--un-text-opacity)) /* #22d3ee */;}
|
||||
[color~="gray"]{--un-text-opacity:1;color:rgb(156 163 175 / var(--un-text-opacity)) /* #9ca3af */;}
|
||||
[color~="green"]{--un-text-opacity:1;color:rgb(74 222 128 / var(--un-text-opacity)) /* #4ade80 */;}
|
||||
[color~="orange"]{--un-text-opacity:1;color:rgb(251 146 60 / var(--un-text-opacity)) /* #fb923c */;}
|
||||
.font-bold,
|
||||
[fw~="\37 00"]{font-weight:700;}
|
||||
.font-extrabold{font-weight:800;}
|
||||
.font-semibold,
|
||||
[fw~="\36 00"]{font-weight:600;}
|
||||
[fw~="\35 00"]{font-weight:500;}
|
||||
.leading-tight{line-height:1.25;}
|
||||
.capitalize{text-transform:capitalize;}
|
||||
.opacity-70{opacity:0.7;}
|
||||
.opacity-75{opacity:0.75;}
|
||||
.opacity-80{opacity:0.8;}
|
||||
.opacity-85{opacity:0.85;}
|
||||
.opacity-90{opacity:0.9;}
|
||||
.opacity-95{opacity:0.95;}
|
||||
.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
.shadow-xl{--un-shadow:var(--un-shadow-inset) 0 20px 25px -5px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 8px 10px -6px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
[shadow~="md"]{--un-shadow:var(--un-shadow-inset) 0 4px 6px -1px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 2px 4px -2px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
[shadow~="sm"]{--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color, rgb(0 0 0 / 0.05));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
.hover\:shadow-2xl:hover{--un-shadow:var(--un-shadow-inset) 0 25px 50px -12px var(--un-shadow-color, rgb(0 0 0 / 0.25));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
.outline{outline-style:solid;}
|
||||
.backdrop-blur-md{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}
|
||||
.backdrop-filter{-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}
|
||||
.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
|
||||
.ease{transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);}
|
||||
@media (min-width: 768px){
|
||||
.md\:grid-cols-\[1fr_420px\]{grid-template-columns:1fr 420px;}
|
||||
.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
|
||||
.md\:flex{display:flex;}
|
||||
.md\:text-5xl{font-size:3rem;line-height:1;}
|
||||
}
|
||||
Reference in New Issue
Block a user