@withmata/blueprints 0.3.1 → 0.3.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/.claude/skills/blueprint-catalog/SKILL.md +13 -2
- package/.claude/skills/scaffold-env/SKILL.md +222 -0
- package/.claude/skills/scaffold-tailwind/SKILL.md +177 -0
- package/.claude/skills/scaffold-ui/SKILL.md +206 -0
- package/blueprints/features/env-t3/BLUEPRINT.md +332 -0
- package/blueprints/features/env-t3/files/nextjs/.env.example +17 -0
- package/blueprints/features/env-t3/files/nextjs/.env.local +0 -0
- package/blueprints/features/env-t3/files/nextjs/env/client.ts +13 -0
- package/blueprints/features/env-t3/files/nextjs/env/server.ts +12 -0
- package/blueprints/features/env-t3/files/server/.env.example +14 -0
- package/blueprints/features/env-t3/files/server/.env.local +0 -0
- package/blueprints/features/env-t3/files/server/env.ts +17 -0
- package/blueprints/features/tailwind-v4/BLUEPRINT.md +262 -12
- package/blueprints/features/tailwind-v4/files/tailwind-config/package.json +20 -0
- package/blueprints/features/tailwind-v4/files/tailwind-config/shared-styles.css +131 -0
- package/blueprints/features/ui-shared-components/BLUEPRINT.md +350 -13
- package/blueprints/features/ui-shared-components/files/ui/components.json +21 -0
- package/blueprints/features/ui-shared-components/files/ui/package.json +42 -0
- package/blueprints/features/ui-shared-components/files/ui/styles/globals.css +2 -0
- package/blueprints/features/ui-shared-components/files/ui/tsconfig.json +9 -0
- package/blueprints/features/ui-shared-components/files/ui/utils/cn.ts +6 -0
- package/blueprints/features/ui-shared-components/files/ui/utils/cva.ts +4 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -6,30 +6,367 @@ Feature
|
|
|
6
6
|
|
|
7
7
|
## Status
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Complete.
|
|
10
10
|
|
|
11
11
|
## Problem
|
|
12
12
|
|
|
13
|
-
Sharing UI components across multiple apps in a
|
|
14
|
-
|
|
15
|
-
## Intended Scope
|
|
16
|
-
|
|
17
|
-
- `packages/ui/` workspace package with shadcn/ui setup
|
|
18
|
-
- Component export pattern via barrel `index.ts`
|
|
19
|
-
- Consuming shared components from `apps/web/` and other apps
|
|
20
|
-
- Integration with the shared Tailwind config from `config/tailwind-config/`
|
|
21
|
-
- Component generation workflow (shadcn CLI adapted for monorepo)
|
|
22
|
-
- Storybook setup (optional)
|
|
13
|
+
Sharing UI components across multiple apps in a monorepo requires careful package structure, export patterns, and styling integration. Without a standard setup, teams duplicate components, fight build tooling issues, and waste time wiring shadcn/ui to work in a workspace package. This blueprint creates a `packages/ui/` package with path-based exports, shadcn CLI compatibility, and proper Tailwind style integration.
|
|
23
14
|
|
|
24
15
|
## Blueprint Dependencies
|
|
25
16
|
|
|
26
17
|
| Blueprint | Type | Why |
|
|
27
18
|
|-----------|------|-----|
|
|
28
|
-
| `features/tailwind-v4` | required | UI components depend on design tokens and theme setup
|
|
29
|
-
| `foundation/monorepo-turbo` | recommended | Provides workspace structure, TypeScript config, and package conventions. Without it, the
|
|
19
|
+
| `features/tailwind-v4` | required | UI components depend on design tokens and theme setup. Without it, components lack consistent styling. |
|
|
20
|
+
| `foundation/monorepo-turbo` | recommended | Provides workspace structure, TypeScript config, and package conventions. Without it, the UI package is created as a local directory. |
|
|
30
21
|
|
|
31
22
|
### If `tailwind-v4` is not installed
|
|
32
23
|
|
|
33
24
|
The scaffold command should ask: "UI components need the Tailwind design system. Install tailwind-v4 first? (Y/n)"
|
|
34
25
|
|
|
35
26
|
If declined, scaffold with basic Tailwind defaults and warn about missing design tokens.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Architecture
|
|
31
|
+
|
|
32
|
+
### Core Pattern
|
|
33
|
+
|
|
34
|
+
The UI package is a workspace package (`packages/ui/`) that exports components, utilities, styles, and icons via **path-based exports** in `package.json`. Consuming apps import directly from specific paths (`@scope/ui/components/ui/button`) rather than through barrel re-exports. This enables better tree-shaking and clearer dependency graphs.
|
|
35
|
+
|
|
36
|
+
Components use shadcn/ui conventions: Radix UI primitives for accessibility, `class-variance-authority` for variant management, and the `cn()` utility for class merging.
|
|
37
|
+
|
|
38
|
+
### Key Decisions
|
|
39
|
+
|
|
40
|
+
- **Path-based exports** (required) — Instead of `import { Button } from "@scope/ui"`, use `import { Button } from "@scope/ui/components/ui/button"`. This avoids barrel export issues, enables per-component tree-shaking, and makes dependencies explicit. Package.json uses wildcard exports (`"./components/*": "./components/*.tsx"`).
|
|
41
|
+
|
|
42
|
+
- **Subpath imports with `#` prefix** (required) — Internal imports within the UI package use Node.js subpath imports (`#components/ui/button`). This provides clean paths without TypeScript path aliases and works natively with Node.js module resolution.
|
|
43
|
+
|
|
44
|
+
- **shadcn CLI compatibility** (required) — The `components.json` file configures shadcn to generate components in the correct locations within the UI package. Run `pnpm dlx shadcn@latest add <component>` from `packages/ui/` to add new components.
|
|
45
|
+
|
|
46
|
+
- **No build step** (required) — The UI package exports TypeScript source directly (`.tsx` files). Consuming Next.js apps transpile via their own bundler. This eliminates a build step and enables hot module replacement for components during development.
|
|
47
|
+
|
|
48
|
+
- **`cn()` utility** (required) — Combines `clsx` for conditional classes and `tailwind-merge` for deduplication. Every component should use `cn()` for className composition. Located at `utils/cn.ts`.
|
|
49
|
+
|
|
50
|
+
- **CVA for variants** (recommended) — `class-variance-authority` for defining component variants (size, color, style). Re-exported from `utils/cva.ts` for consistency.
|
|
51
|
+
|
|
52
|
+
- **Separate `icons/` directory** (recommended) — SVG icons and brand logos in their own directory with path-based exports (`@scope/ui/icons/Logo`). Keeps component imports clean.
|
|
53
|
+
|
|
54
|
+
- **Styles exported as CSS** (required) — The UI package exports its `styles/globals.css` which imports the tailwind-config. Consuming apps import this via `@import "{{SCOPE}}/ui/styles"` in their own `globals.css`.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Hard Requirements vs Recommended Defaults
|
|
59
|
+
|
|
60
|
+
**Hard requirements:**
|
|
61
|
+
- Path-based exports (no barrel re-exports for components)
|
|
62
|
+
- shadcn/ui CLI compatibility (`components.json`)
|
|
63
|
+
- `cn()` utility using clsx + tailwind-merge
|
|
64
|
+
- TypeScript source exports (no build step)
|
|
65
|
+
- Styles import chain through tailwind-config
|
|
66
|
+
|
|
67
|
+
**Recommended defaults — ask during scaffolding:**
|
|
68
|
+
|
|
69
|
+
| Choice | Recommended | Alternatives |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| shadcn style | `"new-york"` | `"default"` or any shadcn style |
|
|
72
|
+
| Icon library | `"lucide"` | `"phosphor"`, `"radix"`, or custom |
|
|
73
|
+
| Include CVA utility | Yes | No |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Dependencies
|
|
78
|
+
|
|
79
|
+
### npm packages
|
|
80
|
+
|
|
81
|
+
**packages/ui:**
|
|
82
|
+
| Package | Version | Purpose |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| `{{SCOPE}}/tailwind-config` | `workspace:*` | Shared design tokens |
|
|
85
|
+
| `@radix-ui/react-slot` | ^1.2 | Polymorphic component support (asChild pattern) |
|
|
86
|
+
| `class-variance-authority` | ^0.7 | Component variant management |
|
|
87
|
+
| `clsx` | ^2.1 | Conditional className utility |
|
|
88
|
+
| `tailwind-merge` | ^3 | Smart Tailwind class deduplication |
|
|
89
|
+
| `tw-animate-css` | ^1 | Animation classes |
|
|
90
|
+
| `react` | ^19 | React |
|
|
91
|
+
| `react-dom` | ^19 | React DOM |
|
|
92
|
+
| `shadcn` | ^3 | Component generation CLI |
|
|
93
|
+
|
|
94
|
+
**packages/ui (dev):**
|
|
95
|
+
| Package | Version | Purpose |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| `{{SCOPE}}/typescript-config` | `workspace:*` | Shared TypeScript config |
|
|
98
|
+
| `@tailwindcss/postcss` | ^4 | PostCSS plugin |
|
|
99
|
+
| `tailwindcss` | ^4 | Tailwind CSS |
|
|
100
|
+
| `typescript` | ^5.9 | TypeScript compiler |
|
|
101
|
+
| `@types/react` | ^19 | React type definitions |
|
|
102
|
+
| `@types/react-dom` | ^19 | React DOM type definitions |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Monorepo Wiring
|
|
107
|
+
|
|
108
|
+
### UI Package (`packages/ui/`)
|
|
109
|
+
|
|
110
|
+
**`package.json` exports:**
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"exports": {
|
|
114
|
+
"./components/*": "./components/*.tsx",
|
|
115
|
+
"./components/ui/*": "./components/ui/*.tsx",
|
|
116
|
+
"./utils/*": "./utils/*.ts",
|
|
117
|
+
"./styles": "./styles/globals.css",
|
|
118
|
+
"./icons/*": "./icons/*.tsx",
|
|
119
|
+
"./icons/logos/*": "./icons/logos/*.tsx"
|
|
120
|
+
},
|
|
121
|
+
"imports": {
|
|
122
|
+
"#components/*": "./components/*.tsx",
|
|
123
|
+
"#components/ui/*": "./components/ui/*.tsx",
|
|
124
|
+
"#utils/*": "./utils/*.ts",
|
|
125
|
+
"#hooks/*": "./hooks/*.ts",
|
|
126
|
+
"#types/*": "./types/*.ts"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**File structure:**
|
|
132
|
+
```
|
|
133
|
+
packages/ui/
|
|
134
|
+
├── components/
|
|
135
|
+
│ └── ui/ # shadcn-generated components go here
|
|
136
|
+
├── icons/
|
|
137
|
+
│ └── logos/ # Brand logos (SVG as React components)
|
|
138
|
+
├── styles/
|
|
139
|
+
│ └── globals.css # Imports tailwind-config
|
|
140
|
+
├── utils/
|
|
141
|
+
│ ├── cn.ts # Class merging utility
|
|
142
|
+
│ └── cva.ts # CVA re-export
|
|
143
|
+
├── components.json # shadcn CLI config
|
|
144
|
+
├── package.json # Exports, imports, deps
|
|
145
|
+
└── tsconfig.json # Extends shared react-library config
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Consuming App (`apps/web/`)
|
|
149
|
+
|
|
150
|
+
**`app/globals.css` (updated):**
|
|
151
|
+
```css
|
|
152
|
+
@import "tailwindcss";
|
|
153
|
+
@import "{{SCOPE}}/tailwind-config";
|
|
154
|
+
@import "{{SCOPE}}/ui/styles";
|
|
155
|
+
@plugin "@tailwindcss/typography";
|
|
156
|
+
|
|
157
|
+
@source "../../../packages/ui";
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The `@source` directive tells Tailwind to scan the UI package for classes. The relative path must point from the consuming app to `packages/ui/`.
|
|
161
|
+
|
|
162
|
+
**Usage in components:**
|
|
163
|
+
```typescript
|
|
164
|
+
import { Button } from "{{SCOPE}}/ui/components/ui/button";
|
|
165
|
+
import { cn } from "{{SCOPE}}/ui/utils/cn";
|
|
166
|
+
import { Logo } from "{{SCOPE}}/ui/icons/logos/Logo";
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Single-Repo Adaptation
|
|
172
|
+
|
|
173
|
+
For standalone applications without a monorepo, UI components live alongside the app code.
|
|
174
|
+
|
|
175
|
+
### Path Mapping
|
|
176
|
+
|
|
177
|
+
| Aspect | Monorepo | Single-Repo |
|
|
178
|
+
|--------|----------|-------------|
|
|
179
|
+
| UI code location | `packages/ui/` (workspace package) | `src/ui/` or `src/components/` |
|
|
180
|
+
| Import pattern | `import { x } from "@scope/ui/components/ui/button"` | `import { x } from "@/ui/components/ui/button"` |
|
|
181
|
+
| Package dependencies | `workspace:*` protocol | Direct — packages at root `package.json` |
|
|
182
|
+
| TypeScript config | Extends `@scope/typescript-config/react-library.json` | Inherits from root `tsconfig.json` |
|
|
183
|
+
| Styles import | `@import "{{SCOPE}}/ui/styles"` in consuming app | Not needed (same bundle) |
|
|
184
|
+
| `@source` directive | Required (cross-package scanning) | Not needed (same project) |
|
|
185
|
+
| shadcn CLI | Run from `packages/ui/` | Run from project root |
|
|
186
|
+
|
|
187
|
+
### What Stays the Same
|
|
188
|
+
|
|
189
|
+
- Path-based exports pattern (via `package.json` exports or TypeScript paths)
|
|
190
|
+
- `cn()` utility and CVA pattern
|
|
191
|
+
- `components.json` for shadcn CLI
|
|
192
|
+
- Component file organization (`components/ui/`, `icons/`, `utils/`)
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## File Manifest
|
|
197
|
+
|
|
198
|
+
| File | Purpose | Monorepo Target | Single-Repo Target |
|
|
199
|
+
|---|---|---|---|
|
|
200
|
+
| `files/ui/styles/globals.css` | UI package styles (imports tailwind-config) | `packages/ui/styles/globals.css` | `src/ui/styles/globals.css` |
|
|
201
|
+
| `files/ui/utils/cn.ts` | Class merging utility (clsx + tailwind-merge) | `packages/ui/utils/cn.ts` | `src/ui/utils/cn.ts` |
|
|
202
|
+
| `files/ui/utils/cva.ts` | CVA re-export for component variants | `packages/ui/utils/cva.ts` | `src/ui/utils/cva.ts` |
|
|
203
|
+
| `files/ui/components.json` | shadcn CLI configuration | `packages/ui/components.json` | `components.json` (project root) |
|
|
204
|
+
| `files/ui/package.json` | Package config with exports, imports, deps | `packages/ui/package.json` | N/A (use root `package.json`) |
|
|
205
|
+
| `files/ui/tsconfig.json` | TypeScript config extending shared base | `packages/ui/tsconfig.json` | N/A (use root `tsconfig.json`) |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Integration Steps
|
|
210
|
+
|
|
211
|
+
### Phase 1: Package Setup
|
|
212
|
+
|
|
213
|
+
1. Create `packages/ui/` directory
|
|
214
|
+
2. Copy `package.json` — replace `{{SCOPE}}`
|
|
215
|
+
3. Copy `tsconfig.json` — replace `{{SCOPE}}`
|
|
216
|
+
4. Copy `components.json`
|
|
217
|
+
|
|
218
|
+
### Phase 2: Utilities and Styles
|
|
219
|
+
|
|
220
|
+
5. Create `utils/` directory
|
|
221
|
+
6. Copy `cn.ts`
|
|
222
|
+
7. Copy `cva.ts`
|
|
223
|
+
8. Create `styles/` directory
|
|
224
|
+
9. Copy `globals.css` — replace `{{SCOPE}}`
|
|
225
|
+
|
|
226
|
+
### Phase 3: Directory Structure
|
|
227
|
+
|
|
228
|
+
10. Create `components/ui/` directory (empty — shadcn will populate it)
|
|
229
|
+
11. Create `icons/` directory (empty — user adds brand assets)
|
|
230
|
+
12. Create `icons/logos/` directory
|
|
231
|
+
|
|
232
|
+
### Phase 4: Consuming App Integration
|
|
233
|
+
|
|
234
|
+
13. Update `apps/web/app/globals.css`:
|
|
235
|
+
- Add `@import "{{SCOPE}}/ui/styles";` after the tailwind-config import
|
|
236
|
+
- Add `@plugin "@tailwindcss/typography";`
|
|
237
|
+
- Add `@source "../../../packages/ui";` (compute relative path based on app location)
|
|
238
|
+
14. Verify `pnpm-workspace.yaml` includes `packages/*`
|
|
239
|
+
|
|
240
|
+
### Phase 5: Dependency Installation
|
|
241
|
+
|
|
242
|
+
15. Run `pnpm install` to wire workspace dependencies
|
|
243
|
+
16. Verify no peer dependency warnings
|
|
244
|
+
|
|
245
|
+
### Phase 6: Verification
|
|
246
|
+
|
|
247
|
+
17. Run `pnpm dev` — no CSS/import errors
|
|
248
|
+
18. Try adding a shadcn component: `cd packages/ui && pnpm dlx shadcn@latest add button`
|
|
249
|
+
19. Import and use the button in `apps/web/` — verify it renders with correct styles
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Adding Components
|
|
254
|
+
|
|
255
|
+
After initial scaffolding, add shadcn/ui components:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# From packages/ui/
|
|
259
|
+
pnpm dlx shadcn@latest add button
|
|
260
|
+
pnpm dlx shadcn@latest add card
|
|
261
|
+
pnpm dlx shadcn@latest add input
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Components are generated in `components/ui/` and immediately available to consuming apps via path-based exports.
|
|
265
|
+
|
|
266
|
+
### Custom Components
|
|
267
|
+
|
|
268
|
+
For non-shadcn components, create files in `components/`:
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
// packages/ui/components/feature-card.tsx
|
|
272
|
+
import { cn } from "#utils/cn";
|
|
273
|
+
|
|
274
|
+
interface FeatureCardProps {
|
|
275
|
+
title: string;
|
|
276
|
+
className?: string;
|
|
277
|
+
children: React.ReactNode;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export function FeatureCard({ title, className, children }: FeatureCardProps) {
|
|
281
|
+
return (
|
|
282
|
+
<div className={cn("rounded-lg border p-6", className)}>
|
|
283
|
+
<h3 className="text-lg font-semibold">{title}</h3>
|
|
284
|
+
{children}
|
|
285
|
+
</div>
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Import in consuming apps: `import { FeatureCard } from "@scope/ui/components/feature-card";`
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Maintenance Hooks
|
|
295
|
+
|
|
296
|
+
### Component & Style Hooks
|
|
297
|
+
|
|
298
|
+
| When you... | Then do... | Why |
|
|
299
|
+
|---|---|---|
|
|
300
|
+
| Add a shadcn component | Run `pnpm dlx shadcn@latest add <name>` from `packages/ui/` | Generates in the correct location with proper aliases |
|
|
301
|
+
| Add a new app that uses UI | Add `@import "{{SCOPE}}/ui/styles"` and `@source` directive to the app's `globals.css` | New apps don't automatically see UI package classes |
|
|
302
|
+
| Add a new export directory | Add it to both `exports` and `imports` in `packages/ui/package.json` | Missing exports = import errors in consuming apps |
|
|
303
|
+
| Modify component variants | Update CVA definitions and ensure `cn()` is used for className composition | Inconsistent class merging = broken styles |
|
|
304
|
+
| Add an icon | Place in `icons/` or `icons/logos/` — export is automatic via wildcard | Follows the path-based export convention |
|
|
305
|
+
|
|
306
|
+
### Condensed Rules for project rules file
|
|
307
|
+
|
|
308
|
+
```markdown
|
|
309
|
+
### ui-shared-components maintenance
|
|
310
|
+
- Add shadcn components via `pnpm dlx shadcn@latest add <name>` from packages/ui/
|
|
311
|
+
- Use cn() for all className composition — never concatenate class strings manually
|
|
312
|
+
- Internal imports use #prefix (#components/ui/button); cross-package imports use @scope/ui/components/ui/button
|
|
313
|
+
- After adding a new export directory: add to both exports and imports in packages/ui/package.json
|
|
314
|
+
- After adding a new consuming app: add @import and @source directive to the app's globals.css
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## What's Configurable
|
|
320
|
+
|
|
321
|
+
- shadcn style (`new-york`, `default`, or custom)
|
|
322
|
+
- Icon library (`lucide`, `phosphor`, `radix`)
|
|
323
|
+
- Which consuming apps get the globals.css update
|
|
324
|
+
- Additional export directories
|
|
325
|
+
|
|
326
|
+
## What's Opinionated
|
|
327
|
+
|
|
328
|
+
- **Path-based exports** — no barrel re-exports for components
|
|
329
|
+
- **No build step** — exports TypeScript source, consuming apps transpile
|
|
330
|
+
- **shadcn/ui conventions** — `components.json`, `cn()`, CVA variants
|
|
331
|
+
- **`#` subpath imports** — internal package imports use Node.js subpath imports
|
|
332
|
+
- **Flat component structure** — `components/ui/` for shadcn, `components/` for custom, `icons/` for assets
|
|
333
|
+
|
|
334
|
+
## Project Context Output
|
|
335
|
+
|
|
336
|
+
Appends to `.project-context.md` under `## Installed Blueprints`:
|
|
337
|
+
|
|
338
|
+
```yaml
|
|
339
|
+
### ui-shared-components
|
|
340
|
+
blueprint: ui-shared-components
|
|
341
|
+
choices:
|
|
342
|
+
shadcn_style: new-york
|
|
343
|
+
icon_library: lucide
|
|
344
|
+
include_cva: true
|
|
345
|
+
files_created:
|
|
346
|
+
- packages/ui/package.json
|
|
347
|
+
- packages/ui/tsconfig.json
|
|
348
|
+
- packages/ui/components.json
|
|
349
|
+
- packages/ui/styles/globals.css
|
|
350
|
+
- packages/ui/utils/cn.ts
|
|
351
|
+
- packages/ui/utils/cva.ts
|
|
352
|
+
globals_css_updated:
|
|
353
|
+
- apps/web/app/globals.css
|
|
354
|
+
packages_added:
|
|
355
|
+
- "@radix-ui/react-slot"
|
|
356
|
+
- class-variance-authority
|
|
357
|
+
- clsx
|
|
358
|
+
- tailwind-merge
|
|
359
|
+
- tw-animate-css
|
|
360
|
+
- shadcn
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## References
|
|
366
|
+
|
|
367
|
+
- **shadcn/ui Docs:** https://ui.shadcn.com/docs
|
|
368
|
+
- **shadcn/ui Monorepo Guide:** https://ui.shadcn.com/docs/monorepo
|
|
369
|
+
- **Tailwind CSS v4:** https://tailwindcss.com/docs
|
|
370
|
+
- **Class Variance Authority:** https://cva.style/docs
|
|
371
|
+
- **Node.js Subpath Imports:** https://nodejs.org/api/packages.html#subpath-imports
|
|
372
|
+
- **Radix UI Primitives:** https://www.radix-ui.com/primitives
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "new-york",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "styles/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"iconLibrary": "lucide",
|
|
14
|
+
"aliases": {
|
|
15
|
+
"components": "#components",
|
|
16
|
+
"utils": "#utils",
|
|
17
|
+
"ui": "#components/ui",
|
|
18
|
+
"lib": "#utils",
|
|
19
|
+
"hooks": "#hooks"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{SCOPE}}/ui",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"ui:add": "pnpm dlx shadcn@latest add"
|
|
7
|
+
},
|
|
8
|
+
"imports": {
|
|
9
|
+
"#components/*": "./components/*.tsx",
|
|
10
|
+
"#components/ui/*": "./components/ui/*.tsx",
|
|
11
|
+
"#utils/*": "./utils/*.ts",
|
|
12
|
+
"#hooks/*": "./hooks/*.ts",
|
|
13
|
+
"#types/*": "./types/*.ts"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
"./components/*": "./components/*.tsx",
|
|
17
|
+
"./components/ui/*": "./components/ui/*.tsx",
|
|
18
|
+
"./utils/*": "./utils/*.ts",
|
|
19
|
+
"./styles": "./styles/globals.css",
|
|
20
|
+
"./icons/*": "./icons/*.tsx",
|
|
21
|
+
"./icons/logos/*": "./icons/logos/*.tsx"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"{{SCOPE}}/tailwind-config": "workspace:*",
|
|
25
|
+
"@radix-ui/react-slot": "^1.2",
|
|
26
|
+
"class-variance-authority": "^0.7",
|
|
27
|
+
"clsx": "^2.1",
|
|
28
|
+
"react": "^19",
|
|
29
|
+
"react-dom": "^19",
|
|
30
|
+
"shadcn": "^3",
|
|
31
|
+
"tailwind-merge": "^3",
|
|
32
|
+
"tw-animate-css": "^1"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"{{SCOPE}}/typescript-config": "workspace:*",
|
|
36
|
+
"@tailwindcss/postcss": "^4",
|
|
37
|
+
"@types/react": "^19",
|
|
38
|
+
"@types/react-dom": "^19",
|
|
39
|
+
"tailwindcss": "^4",
|
|
40
|
+
"typescript": "^5.9"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/dist/index.js
CHANGED