ui8kit 0.0.8 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +213 -0
- package/css/dist/semantic/alert.css +11 -0
- package/css/dist/semantic/article.css +59 -0
- package/css/dist/semantic/avatar.css +11 -0
- package/css/dist/semantic/badge.css +19 -0
- package/css/dist/semantic/breadcrumb.css +23 -0
- package/css/dist/semantic/button.css +39 -0
- package/css/dist/semantic/card.css +43 -0
- package/css/dist/semantic/index.css +19 -0
- package/css/dist/semantic/input.css +3 -0
- package/css/dist/semantic/label.css +3 -0
- package/css/dist/semantic/link.css +39 -0
- package/css/dist/semantic/main.css +3 -0
- package/css/dist/semantic/markup.css +23 -0
- package/css/dist/semantic/nav.css +63 -0
- package/css/dist/semantic/pagination.css +11 -0
- package/css/dist/semantic/section.css +43 -0
- package/css/dist/semantic/sheet.css +35 -0
- package/css/dist/semantic/skeleton.css +3 -0
- package/css/dist/semantic/table.css +31 -0
- package/css/dist/semantic/textarea.css +3 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
## Semantic Components Integration Guide
|
|
2
|
+
|
|
3
|
+
### CLI Installation (Recommended)
|
|
4
|
+
|
|
5
|
+
The semantic registry extends utility components with enhanced styling and behavior. Follow these steps:
|
|
6
|
+
|
|
7
|
+
#### 1. Initialize Base Registry (Required)
|
|
8
|
+
```bash
|
|
9
|
+
# Initialize utility registry first (foundation requirement)
|
|
10
|
+
npx buildy-ui@latest init
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
#### 2. Initialize Semantic Registry
|
|
14
|
+
```bash
|
|
15
|
+
# Initialize semantic registry
|
|
16
|
+
npx buildy-ui@latest init --registry semantic
|
|
17
|
+
|
|
18
|
+
# Skip prompts and use defaults
|
|
19
|
+
npx buildy-ui@latest init --yes --registry semantic
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
#### 3. Add Semantic Components
|
|
23
|
+
```bash
|
|
24
|
+
# Add specific semantic components
|
|
25
|
+
npx buildy-ui@latest add button card --registry semantic
|
|
26
|
+
npx buildy-ui@latest add input --registry semantic
|
|
27
|
+
|
|
28
|
+
# Install ALL semantic components at once
|
|
29
|
+
npx buildy-ui@latest add --all --registry semantic
|
|
30
|
+
|
|
31
|
+
# Preview what would be installed
|
|
32
|
+
npx buildy-ui@latest add --all --dry-run --registry semantic
|
|
33
|
+
|
|
34
|
+
# Force overwrite existing files
|
|
35
|
+
npx buildy-ui@latest add button --force --registry semantic
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Project Structure After Installation
|
|
39
|
+
```
|
|
40
|
+
semantic/
|
|
41
|
+
├── ui/ # Semantic UI components
|
|
42
|
+
├── blocks/ # Semantic blocks
|
|
43
|
+
├── components/ # Semantic components
|
|
44
|
+
├── templates/ # Semantic templates
|
|
45
|
+
└── buildy.config.json
|
|
46
|
+
|
|
47
|
+
utility/ # Base registry (required)
|
|
48
|
+
├── ui/
|
|
49
|
+
├── blocks/
|
|
50
|
+
└── buildy.config.json
|
|
51
|
+
|
|
52
|
+
lib/ # Shared utilities
|
|
53
|
+
└── utils.ts
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## CSS Integration with Tailwind (PROD Mode)
|
|
57
|
+
|
|
58
|
+
### Package Installation (Recommended for Tailwind projects)
|
|
59
|
+
|
|
60
|
+
Since semantic CSS files contain Tailwind directives (`@apply`), they must be processed during build time:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Install the CSS package
|
|
64
|
+
npm install ui8kit
|
|
65
|
+
# or
|
|
66
|
+
yarn add ui8kit
|
|
67
|
+
# or
|
|
68
|
+
pnpm add ui8kit
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Import in your CSS/SCSS files
|
|
72
|
+
|
|
73
|
+
```css
|
|
74
|
+
/* Import all semantic styles */
|
|
75
|
+
@import "ui8kit/css/dist/semantic/index.css";
|
|
76
|
+
|
|
77
|
+
/* Or import individual components */
|
|
78
|
+
@import "ui8kit/css/dist/semantic/button.css";
|
|
79
|
+
@import "ui8kit/css/dist/semantic/card.css";
|
|
80
|
+
@import "ui8kit/css/dist/semantic/input.css";
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Why Package Installation is Required
|
|
84
|
+
|
|
85
|
+
Semantic CSS files contain Tailwind directives that need compilation:
|
|
86
|
+
|
|
87
|
+
```css
|
|
88
|
+
/* Example from button.css */
|
|
89
|
+
.button-default {
|
|
90
|
+
@apply bg-primary text-primary-foreground shadow-xs hover:bg-primary/90;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.button-destructive {
|
|
94
|
+
@apply bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90;
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### CDN vs Package Comparison
|
|
99
|
+
|
|
100
|
+
| Method | Use Case | Tailwind Directives | Build Required |
|
|
101
|
+
|--------|----------|-------------------|----------------|
|
|
102
|
+
| **Package** | Production projects | ✅ Supported | ✅ Required |
|
|
103
|
+
| **CDN** | Quick prototyping | ❌ Pre-compiled only | ❌ Not required |
|
|
104
|
+
|
|
105
|
+
### Integration with Tailwind Config
|
|
106
|
+
|
|
107
|
+
Add the package path to your `tailwind.config.js` for proper purging:
|
|
108
|
+
|
|
109
|
+
```js
|
|
110
|
+
/** @type {import('tailwindcss').Config} */
|
|
111
|
+
module.exports = {
|
|
112
|
+
content: [
|
|
113
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
114
|
+
"./node_modules/ui8kit/**/*.{js,ts,jsx,tsx}", // Add this line
|
|
115
|
+
],
|
|
116
|
+
// ... rest of your config
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Note**: CDN links with `@import` URLs will remain as external references and won't be processed by Tailwind's build system.
|
|
121
|
+
|
|
122
|
+
### CDN Integration (only DEV Mode)
|
|
123
|
+
|
|
124
|
+
For projects that prefer CDN over CLI installation:
|
|
125
|
+
|
|
126
|
+
#### Full Semantic Stylesheet
|
|
127
|
+
```html
|
|
128
|
+
<!-- Load complete semantic components -->
|
|
129
|
+
<link rel="stylesheet" href="https://unpkg.com/ui8kit@1.0.1/css/dist/semantic/index.css">
|
|
130
|
+
<!-- OR -->
|
|
131
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ui8kit@latest/css/dist/semantic/index.css">
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### Individual Component Stylesheets
|
|
135
|
+
```html
|
|
136
|
+
<!-- Load only specific components you need -->
|
|
137
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ui8kit@latest/css/dist/semantic/button.css">
|
|
138
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ui8kit@latest/css/dist/semantic/card.css">
|
|
139
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ui8kit@latest/css/dist/semantic/input.css">
|
|
140
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ui8kit@latest/css/dist/semantic/alert.css">
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Available Individual Components
|
|
144
|
+
- `button.css` - Enhanced button styles
|
|
145
|
+
- `card.css` - Card component layouts
|
|
146
|
+
- `input.css` - Form input styling
|
|
147
|
+
- `alert.css` - Alert and notification styles
|
|
148
|
+
- `badge.css` - Badge and label components
|
|
149
|
+
- `avatar.css` - User avatar components
|
|
150
|
+
- `table.css` - Data table styling
|
|
151
|
+
- `pagination.css` - Navigation pagination
|
|
152
|
+
- `breadcrumb.css` - Navigation breadcrumbs
|
|
153
|
+
- `skeleton.css` - Loading skeleton states
|
|
154
|
+
|
|
155
|
+
### Usage Examples
|
|
156
|
+
|
|
157
|
+
#### With CLI Installation
|
|
158
|
+
```jsx
|
|
159
|
+
// After CLI installation, components are available via aliases
|
|
160
|
+
import { Button } from '@/semantic/ui/button'
|
|
161
|
+
import { Card } from '@/semantic/ui/card'
|
|
162
|
+
|
|
163
|
+
function App() {
|
|
164
|
+
return (
|
|
165
|
+
<Card>
|
|
166
|
+
<Button variant="semantic">Semantic Button</Button>
|
|
167
|
+
</Card>
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
#### With CDN Integration
|
|
173
|
+
```html
|
|
174
|
+
<!DOCTYPE html>
|
|
175
|
+
<html>
|
|
176
|
+
<head>
|
|
177
|
+
<!-- Load semantic styles -->
|
|
178
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ui8kit@latest/css/dist/semantic/index.css">
|
|
179
|
+
</head>
|
|
180
|
+
<body>
|
|
181
|
+
<!-- Use semantic classes directly -->
|
|
182
|
+
<div class="semantic-card">
|
|
183
|
+
<button class="semantic-btn semantic-btn-primary">
|
|
184
|
+
Semantic Button
|
|
185
|
+
</button>
|
|
186
|
+
</div>
|
|
187
|
+
</body>
|
|
188
|
+
</html>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Registry Dependencies
|
|
192
|
+
|
|
193
|
+
**Important**: Semantic registry requires utility registry as foundation:
|
|
194
|
+
- ✅ Utility registry must be initialized first
|
|
195
|
+
- ✅ Components must exist in utility before installing in semantic
|
|
196
|
+
- ❌ Cannot use semantic registry without utility base
|
|
197
|
+
|
|
198
|
+
### Performance Considerations
|
|
199
|
+
|
|
200
|
+
**CLI Method**:
|
|
201
|
+
- ✅ Tree-shaking friendly
|
|
202
|
+
- ✅ Only includes used components
|
|
203
|
+
- ✅ TypeScript support
|
|
204
|
+
- ✅ Local development workflow
|
|
205
|
+
|
|
206
|
+
**CDN Method**:
|
|
207
|
+
- ✅ No build step required
|
|
208
|
+
- ✅ Instant integration
|
|
209
|
+
- ✅ Cacheable across projects
|
|
210
|
+
- ⚠️ Individual files = multiple HTTP requests
|
|
211
|
+
- ⚠️ Full bundle may include unused styles
|
|
212
|
+
|
|
213
|
+
Choose CLI for development projects, CDN for quick prototyping or static sites.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
.alert {
|
|
2
|
+
@apply relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.alert-default {
|
|
6
|
+
@apply bg-card text-card-foreground;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.alert-destructive {
|
|
10
|
+
@apply text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90;
|
|
11
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
.article {
|
|
2
|
+
@apply bg-card text-card-foreground flex flex-col gap-6 rounded-md border shadow-sm;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.article-header {
|
|
6
|
+
@apply flex flex-col gap-2 px-6 mt-4;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.article-title {
|
|
10
|
+
@apply text-2xl font-bold mb-4;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.article-meta {
|
|
14
|
+
@apply flex flex-wrap items-center gap-3 text-sm text-muted-foreground;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.article-time {
|
|
18
|
+
@apply text-sm text-muted-foreground;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.article-author {
|
|
22
|
+
@apply text-sm not-italic;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.article-figure {
|
|
26
|
+
@apply overflow-hidden;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.article-image {
|
|
30
|
+
@apply aspect-video w-full object-cover rounded-t-md;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.article-figcaption {
|
|
34
|
+
@apply mt-2 text-center text-sm text-muted-foreground;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.article-content {
|
|
38
|
+
@apply max-w-none px-6 py-4;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.article-blockquote {
|
|
42
|
+
@apply border-l-4 border-muted pl-4 italic;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.article-footer {
|
|
46
|
+
@apply flex items-center justify-between px-6 py-4;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.article-tags {
|
|
50
|
+
@apply flex flex-wrap gap-2;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.article-tag {
|
|
54
|
+
@apply inline-flex items-center rounded-full border bg-muted px-2.5 py-0.5 text-xs font-semibold;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.article-actions {
|
|
58
|
+
@apply flex items-center gap-2;
|
|
59
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.badge {
|
|
2
|
+
@apply inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.badge-default {
|
|
6
|
+
@apply border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.badge-secondary {
|
|
10
|
+
@apply border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.badge-destructive {
|
|
14
|
+
@apply border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.badge-outline {
|
|
18
|
+
@apply text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground;
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
.breadcrumb-list {
|
|
2
|
+
@apply text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.breadcrumb-item {
|
|
6
|
+
@apply inline-flex items-center gap-1.5;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.breadcrumb-link {
|
|
10
|
+
@apply hover:text-foreground transition-colors;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.breadcrumb-page {
|
|
14
|
+
@apply text-foreground font-normal;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.breadcrumb-separator {
|
|
18
|
+
@apply [&>svg]:size-3.5;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.breadcrumb-ellipsis {
|
|
22
|
+
@apply flex size-9 items-center justify-center;
|
|
23
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.button {
|
|
2
|
+
@apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive; @apply h-9 px-4 py-2 has-[>svg]:px-3;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.button-default {
|
|
6
|
+
@apply bg-primary text-primary-foreground shadow-xs hover:bg-primary/90;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.button-destructive {
|
|
10
|
+
@apply bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.button-outline {
|
|
14
|
+
@apply border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.button-secondary {
|
|
18
|
+
@apply bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.button-ghost {
|
|
22
|
+
@apply hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.button-link {
|
|
26
|
+
@apply text-primary underline-offset-4 hover:underline;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.button-sm {
|
|
30
|
+
@apply h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.button-lg {
|
|
34
|
+
@apply h-10 rounded-md px-6 has-[>svg]:px-4;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.button-icon {
|
|
38
|
+
@apply size-9;
|
|
39
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.card {
|
|
2
|
+
@apply bg-card text-card-foreground flex flex-col gap-6 rounded-md border shadow-sm;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.card-header {
|
|
6
|
+
@apply @container/card-header grid-rows-[auto_auto] grid auto-rows-min items-start gap-1.5 mt-4 px-6 has-[data-slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.card-title {
|
|
10
|
+
@apply leading-none font-bold text-xl mb-2;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.card-description {
|
|
14
|
+
@apply text-muted-foreground text-sm mb-4;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.card-action {
|
|
18
|
+
@apply col-start-2 row-span-2 row-start-1 self-start justify-self-end;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.article-meta {
|
|
22
|
+
@apply flex flex-wrap items-center gap-3 text-sm text-muted-foreground;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.article-figure {
|
|
26
|
+
@apply overflow-hidden;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.article-image {
|
|
30
|
+
@apply aspect-video w-full object-cover rounded-t-md;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.article-figcaption {
|
|
34
|
+
@apply mt-2 text-center text-sm text-muted-foreground;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.card-content {
|
|
38
|
+
@apply px-6 py-4;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.card-footer {
|
|
42
|
+
@apply flex items-center px-6 [.border-t]:pt-6;
|
|
43
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@import "./label.css";
|
|
2
|
+
@import "./card.css";
|
|
3
|
+
@import "./sheet.css";
|
|
4
|
+
@import "./section.css";
|
|
5
|
+
@import "./nav.css";
|
|
6
|
+
@import "./markup.css";
|
|
7
|
+
@import "./main.css";
|
|
8
|
+
@import "./article.css";
|
|
9
|
+
@import "./alert.css";
|
|
10
|
+
@import "./badge.css";
|
|
11
|
+
@import "./button.css";
|
|
12
|
+
@import "./link.css";
|
|
13
|
+
@import "./avatar.css";
|
|
14
|
+
@import "./breadcrumb.css";
|
|
15
|
+
@import "./input.css";
|
|
16
|
+
@import "./pagination.css";
|
|
17
|
+
@import "./skeleton.css";
|
|
18
|
+
@import "./table.css";
|
|
19
|
+
@import "./textarea.css";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
.input {
|
|
2
|
+
@apply file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm;
|
|
3
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.link {
|
|
2
|
+
@apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive; @apply h-9 px-4 py-2 has-[>svg]:px-3;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.link-default {
|
|
6
|
+
@apply bg-primary text-primary-foreground shadow-xs hover:bg-primary/90;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.link-destructive {
|
|
10
|
+
@apply bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.link-outline {
|
|
14
|
+
@apply border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.link-secondary {
|
|
18
|
+
@apply bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.link-ghost {
|
|
22
|
+
@apply hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.link-link {
|
|
26
|
+
@apply text-primary underline-offset-4 hover:underline;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.link-sm {
|
|
30
|
+
@apply h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.link-lg {
|
|
34
|
+
@apply h-10 rounded-md px-6 has-[>svg]:px-4;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.link-icon {
|
|
38
|
+
@apply size-9;
|
|
39
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
.h1 {
|
|
2
|
+
@apply text-3xl font-bold mb-4;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.h2 {
|
|
6
|
+
@apply text-2xl font-bold mb-4;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.h3 {
|
|
10
|
+
@apply text-xl font-bold;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.h4 {
|
|
14
|
+
@apply text-xl font-bold;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.h5 {
|
|
18
|
+
@apply text-lg font-bold;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.h6 {
|
|
22
|
+
@apply text-base font-bold;
|
|
23
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
.nav {
|
|
2
|
+
@apply hidden lg:flex items-center space-x-1;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.nav-layout {
|
|
6
|
+
@apply relative;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.nav-bar {
|
|
10
|
+
@apply sticky top-0 z-50 w-full border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.nav-list {
|
|
14
|
+
@apply flex items-center space-x-1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.nav-item {
|
|
18
|
+
@apply relative;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.nav-link {
|
|
22
|
+
@apply inline-flex items-center px-3 py-2 text-sm font-medium rounded-md transition-colors hover:bg-accent hover:text-accent-foreground data-[active=true]:bg-accent data-[active=true]:text-accent-foreground;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.nav-dropdown {
|
|
26
|
+
@apply relative;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.nav-dropdown-content {
|
|
30
|
+
@apply absolute top-full left-0 mt-1 w-48 rounded-md bg-popover border border-border shadow-lg z-50 origin-top-left;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.nav-dropdown-item {
|
|
34
|
+
@apply block px-4 py-2 text-sm text-popover-foreground transition-colors hover:bg-accent hover:text-accent-foreground;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.nav-trigger {
|
|
38
|
+
@apply lg:hidden inline-flex items-center justify-center p-2 rounded-md text-foreground hover:bg-accent hover:text-accent-foreground focus:outline-none focus:ring-2 focus:ring-ring cursor-pointer;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.nav-mobile {
|
|
42
|
+
@apply fixed inset-0 z-50 lg:hidden opacity-0 invisible -translate-y-full transition-all duration-300 ease-out peer-checked:opacity-100 peer-checked:visible peer-checked:translate-y-0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.nav-mobile-list {
|
|
46
|
+
@apply space-y-1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.nav-mobile-link {
|
|
50
|
+
@apply flex items-center w-full px-3 py-3 text-base font-medium rounded-md transition-colors hover:bg-accent hover:text-accent-foreground data-[active=true]:bg-accent data-[active=true]:text-accent-foreground;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.nav-mobile-dropdown-item {
|
|
54
|
+
@apply block px-3 py-2 text-sm rounded-md transition-colors hover:bg-accent hover:text-accent-foreground;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.nav-group {
|
|
58
|
+
@apply py-2;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.nav-group-buttons {
|
|
62
|
+
@apply flex items-center space-x-2;
|
|
63
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.section {
|
|
2
|
+
@apply w-full py-6 md:py-12 lg:py-18;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.container {
|
|
6
|
+
@apply container mx-auto px-4 md:px-6 lg:px-8;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.full-width {
|
|
10
|
+
@apply w-full;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.section-header {
|
|
14
|
+
@apply w-full py-6 md:py-12 lg:py-18;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.section-title {
|
|
18
|
+
@apply text-3xl font-bold mb-4;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.section-description {
|
|
22
|
+
@apply text-secondary-foreground mb-4;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.section-footer {
|
|
26
|
+
@apply py-8;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.section-content {
|
|
30
|
+
@apply w-full;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.row {
|
|
34
|
+
@apply flex flex-wrap -mx-4;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.col {
|
|
38
|
+
@apply w-full px-4;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.grid {
|
|
42
|
+
@apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6;
|
|
43
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
.sheet-trigger {
|
|
2
|
+
@apply inline-flex md:hidden items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all h-9 p-2 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground cursor-pointer;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sheet-content {
|
|
6
|
+
@apply fixed inset-y-0 left-0 z-50 w-full max-w-sm bg-background shadow-lg border-r transform -translate-x-full transition-transform duration-300 ease-out peer-checked:translate-x-0 flex flex-col overflow-hidden;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.sheet-overlay {
|
|
10
|
+
@apply fixed inset-0 z-40 bg-black/50 backdrop-blur-sm opacity-0 invisible transition-all duration-300 ease-out peer-checked:opacity-100 peer-checked:visible peer-checked:pointer-events-auto transform-gpu cursor-pointer;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.sheet-header {
|
|
14
|
+
@apply flex flex-col space-y-2 p-6;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.sheet-body {
|
|
18
|
+
@apply flex-1 overflow-y-auto p-6;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sheet-footer {
|
|
22
|
+
@apply mt-auto flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 p-6;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sheet-title {
|
|
26
|
+
@apply text-lg font-semibold text-foreground;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.sheet-description {
|
|
30
|
+
@apply text-sm text-muted-foreground;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sheet-close {
|
|
34
|
+
@apply inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring cursor-pointer;
|
|
35
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
.table {
|
|
2
|
+
@apply w-full caption-bottom text-sm;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.table-header {
|
|
6
|
+
@apply [&_tr]:border-b;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.table-body {
|
|
10
|
+
@apply [&_tr:last-child]:border-0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.table-footer {
|
|
14
|
+
@apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.table-row {
|
|
18
|
+
@apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.table-head {
|
|
22
|
+
@apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.table-cell {
|
|
26
|
+
@apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.table-caption {
|
|
30
|
+
@apply text-muted-foreground mt-4 text-sm;
|
|
31
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
.textarea {
|
|
2
|
+
@apply border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm;
|
|
3
|
+
}
|
package/package.json
CHANGED