@sylix/coworker 2.0.11 → 2.0.14

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.
Files changed (169) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +22 -4
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  5. package/dist/core/CoWorkerAgent.js +6 -3
  6. package/dist/core/CoWorkerAgent.js.map +1 -1
  7. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  8. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  9. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  10. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  11. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  12. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  13. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  14. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  15. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  16. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  17. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  18. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  19. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  20. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  21. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  22. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  23. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  24. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  25. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  26. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  27. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  28. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  29. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  30. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  31. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  32. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  33. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  34. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  35. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  36. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  37. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  38. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  39. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  40. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  41. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  42. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  43. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  44. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  45. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  46. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  47. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  48. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  49. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  50. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  51. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  52. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  53. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  54. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  55. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  56. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  57. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  58. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  59. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  60. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  61. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  62. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  63. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  64. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  65. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  66. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  67. package/dist/skills/defaults/database/postgresql.md +202 -0
  68. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  69. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  70. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  71. package/dist/skills/defaults/devops/cicd.md +314 -0
  72. package/dist/skills/defaults/devops/cloud.md +263 -0
  73. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  74. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  75. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  76. package/dist/skills/defaults/devops/docker.md +281 -0
  77. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  78. package/dist/skills/defaults/devops/github-actions.md +311 -0
  79. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  80. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  81. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  82. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  83. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  84. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  85. package/dist/skills/defaults/devops/observability.md +243 -0
  86. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  87. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  88. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  89. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  90. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  91. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  92. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  93. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  94. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  95. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  96. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  97. package/dist/skills/defaults/frontend/javascript.md +311 -0
  98. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  99. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  100. package/dist/skills/defaults/frontend/react.md +345 -0
  101. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  102. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  103. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  104. package/dist/skills/defaults/frontend/typescript.md +334 -0
  105. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  106. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  107. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  108. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  109. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  110. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  111. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  112. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  113. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  114. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  115. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  116. package/dist/skills/defaults/kubernetes/security.md +337 -0
  117. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  118. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  119. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  120. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  121. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  122. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  123. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  124. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  125. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  126. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  127. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  128. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  129. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  130. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  131. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  132. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  133. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  134. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  135. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  136. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  137. package/dist/skills/defaults/security/auditor.md +168 -0
  138. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  139. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  140. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  141. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  142. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  143. package/dist/skills/defaults/security/security.md +313 -0
  144. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  145. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  146. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  147. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  148. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  149. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  150. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  151. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  152. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  153. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  154. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  155. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  156. package/dist/skills/defaults/testing/testing.md +332 -0
  157. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  158. package/dist/skills/defaults/workflows/track-management.md +592 -0
  159. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  160. package/dist/skills/index.d.ts +11 -0
  161. package/dist/skills/index.d.ts.map +1 -0
  162. package/dist/skills/index.js +129 -0
  163. package/dist/skills/index.js.map +1 -0
  164. package/dist/utils/character.js +4 -4
  165. package/dist/utils/character.js.map +1 -1
  166. package/dist/utils/inputbar.d.ts.map +1 -1
  167. package/dist/utils/inputbar.js +7 -0
  168. package/dist/utils/inputbar.js.map +1 -1
  169. package/package.json +1 -1
@@ -0,0 +1,337 @@
1
+ ---
2
+ name: tailwind-design-system
3
+ description: Build scalable design systems with Tailwind CSS v4, design tokens, component libraries, and responsive patterns. Use when creating component libraries, implementing design systems, or standardizing UI patterns.
4
+ ---
5
+
6
+ # Tailwind Design System (v4)
7
+
8
+ Build production-ready design systems with Tailwind CSS v4, including CSS-first configuration, design tokens, component variants, responsive patterns, and accessibility.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Creating a component library with Tailwind v4
13
+ - Implementing design tokens and theming with CSS-first configuration
14
+ - Building responsive and accessible components
15
+ - Standardizing UI patterns across a codebase
16
+ - Migrating from Tailwind v3 to v4
17
+ - Setting up dark mode with native CSS features
18
+
19
+ ## Key v4 Changes
20
+
21
+ | v3 Pattern | v4 Pattern |
22
+ | ------------------------------------- | --------------------------------------------------------------------- |
23
+ | `tailwind.config.ts` | `@theme` in CSS |
24
+ | `@tailwind base/components/utilities` | `@import "tailwindcss"` |
25
+ | `darkMode: "class"` | `@custom-variant dark (&:where(.dark, .dark *))` |
26
+ | `theme.extend.colors` | `@theme { --color-*: value }` |
27
+ | `require("tailwindcss-animate")` | CSS `@keyframes` in `@theme` + `@starting-style` |
28
+
29
+ ## Quick Start
30
+
31
+ ```css
32
+ /* app.css - Tailwind v4 CSS-first configuration */
33
+ @import "tailwindcss";
34
+
35
+ /* Define your theme with @theme */
36
+ @theme {
37
+ /* Semantic color tokens using OKLCH */
38
+ --color-background: oklch(100% 0 0);
39
+ --color-foreground: oklch(14.5% 0.025 264);
40
+
41
+ --color-primary: oklch(14.5% 0.025 264);
42
+ --color-primary-foreground: oklch(98% 0.01 264);
43
+
44
+ --color-secondary: oklch(96% 0.01 264);
45
+ --color-muted: oklch(96% 0.01 264);
46
+ --color-destructive: oklch(53% 0.22 27);
47
+
48
+ --color-border: oklch(91% 0.01 264);
49
+ --radius-sm: 0.25rem;
50
+ --radius-md: 0.375rem;
51
+ --radius-lg: 0.5rem;
52
+
53
+ --animate-fade-in: fade-in 0.2s ease-out;
54
+
55
+ @keyframes fade-in {
56
+ from { opacity: 0; }
57
+ to { opacity: 1; }
58
+ }
59
+ }
60
+
61
+ /* Dark mode variant */
62
+ @custom-variant dark (&:where(.dark, .dark *));
63
+
64
+ .dark {
65
+ --color-background: oklch(14.5% 0.025 264);
66
+ --color-foreground: oklch(98% 0.01 264);
67
+ --color-primary: oklch(98% 0.01 264);
68
+ }
69
+ ```
70
+
71
+ ## Core Concepts
72
+
73
+ ### 1. Design Token Hierarchy
74
+
75
+ ```
76
+ Brand Tokens (abstract)
77
+ └── Semantic Tokens (purpose)
78
+ └── Component Tokens (specific)
79
+
80
+ Example:
81
+ oklch(45% 0.2 260) → --color-primary → bg-primary
82
+ ```
83
+
84
+ ## Patterns
85
+
86
+ ### Pattern 1: CVA (Class Variance Authority) Components
87
+
88
+ ```typescript
89
+ import { Slot } from '@radix-ui/react-slot'
90
+ import { cva, type VariantProps } from 'class-variance-authority'
91
+
92
+ const buttonVariants = cva(
93
+ 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
94
+ {
95
+ variants: {
96
+ variant: {
97
+ default: 'bg-primary text-primary-foreground hover:bg-primary/90',
98
+ destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
99
+ outline: 'border border-border bg-background hover:bg-accent',
100
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
101
+ ghost: 'hover:bg-accent hover:text-accent-foreground',
102
+ link: 'text-primary underline-offset-4 hover:underline',
103
+ },
104
+ size: {
105
+ default: 'h-10 px-4 py-2',
106
+ sm: 'h-9 rounded-md px-3',
107
+ lg: 'h-11 rounded-md px-8',
108
+ icon: 'size-10',
109
+ },
110
+ },
111
+ defaultVariants: {
112
+ variant: 'default',
113
+ size: 'default',
114
+ },
115
+ }
116
+ )
117
+
118
+ export interface ButtonProps
119
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
120
+ VariantProps<typeof buttonVariants> {
121
+ asChild?: boolean
122
+ }
123
+
124
+ export function Button({ className, variant, size, asChild = false, ...props }: ButtonProps) {
125
+ const Comp = asChild ? Slot : 'button'
126
+ return <Comp className={buttonVariants({ variant, size, className })} {...props} />
127
+ }
128
+
129
+ // Usage
130
+ <Button variant="destructive" size="lg">Delete</Button>
131
+ <Button asChild><Link href="/home">Home</Link></Button>
132
+ ```
133
+
134
+ ### Pattern 2: Compound Components
135
+
136
+ ```typescript
137
+ export function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
138
+ return (
139
+ <div
140
+ className="rounded-lg border border-border bg-card text-card-foreground shadow-sm"
141
+ {...props}
142
+ />
143
+ )
144
+ }
145
+
146
+ export function CardHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
147
+ return <div className="flex flex-col space-y-1.5 p-6" {...props} />
148
+ }
149
+
150
+ export function CardTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {
151
+ return <h3 className="text-2xl font-semibold leading-none tracking-tight" {...props} />
152
+ }
153
+
154
+ export function CardDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {
155
+ return <p className="text-sm text-muted-foreground" {...props} />
156
+ }
157
+
158
+ export function CardContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
159
+ return <div className="p-6 pt-0" {...props} />
160
+ }
161
+
162
+ // Usage
163
+ <Card>
164
+ <CardHeader>
165
+ <CardTitle>Account</CardTitle>
166
+ <CardDescription>Manage your account settings</CardDescription>
167
+ </CardHeader>
168
+ <CardContent>
169
+ <form>...</form>
170
+ </CardContent>
171
+ </Card>
172
+ ```
173
+
174
+ ### Pattern 3: Form Components
175
+
176
+ ```typescript
177
+ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
178
+ error?: string
179
+ }
180
+
181
+ export function Input({ className, type, error, ...props }: InputProps) {
182
+ return (
183
+ <div className="relative">
184
+ <input
185
+ type={type}
186
+ className={cn(
187
+ 'flex h-10 w-full rounded-md border border-border bg-background px-3 py-2 text-sm',
188
+ 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
189
+ 'disabled:cursor-not-allowed disabled:opacity-50',
190
+ error && 'border-destructive focus-visible:ring-destructive',
191
+ className
192
+ )}
193
+ aria-invalid={!!error}
194
+ {...props}
195
+ />
196
+ {error && (
197
+ <p className="mt-1 text-sm text-destructive" role="alert">
198
+ {error}
199
+ </p>
200
+ )}
201
+ </div>
202
+ )
203
+ }
204
+ ```
205
+
206
+ ### Pattern 4: Responsive Grid System
207
+
208
+ ```typescript
209
+ const gridVariants = cva('grid', {
210
+ variants: {
211
+ cols: {
212
+ 1: 'grid-cols-1',
213
+ 2: 'grid-cols-1 sm:grid-cols-2',
214
+ 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',
215
+ 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
216
+ },
217
+ gap: {
218
+ sm: 'gap-2',
219
+ md: 'gap-4',
220
+ lg: 'gap-6',
221
+ },
222
+ },
223
+ defaultVariants: {
224
+ cols: 3,
225
+ gap: 'md',
226
+ },
227
+ })
228
+
229
+ export function Grid({ className, cols, gap, ...props }: GridProps) {
230
+ return <div className={gridVariants({ cols, gap, className })} {...props} />
231
+ }
232
+
233
+ // Usage
234
+ <Grid cols={4} gap="lg">
235
+ {products.map((product) => (
236
+ <ProductCard key={product.id} product={product} />
237
+ ))}
238
+ </Grid>
239
+ ```
240
+
241
+ ### Pattern 5: Native CSS Animations (v4)
242
+
243
+ ```css
244
+ @theme {
245
+ --animate-dialog-in: dialog-fade-in 0.2s ease-out;
246
+ }
247
+
248
+ @keyframes dialog-fade-in {
249
+ from {
250
+ opacity: 0;
251
+ transform: scale(0.95);
252
+ }
253
+ to {
254
+ opacity: 1;
255
+ transform: scale(1);
256
+ }
257
+ }
258
+
259
+ /* Native popover animations using @starting-style */
260
+ [popover] {
261
+ transition: opacity 0.2s, transform 0.2s, display 0.2s allow-discrete;
262
+ opacity: 0;
263
+ transform: scale(0.95);
264
+ }
265
+
266
+ [popover]:popover-open {
267
+ opacity: 1;
268
+ transform: scale(1);
269
+ }
270
+
271
+ @starting-style {
272
+ [popover]:popover-open {
273
+ opacity: 0;
274
+ transform: scale(0.95);
275
+ }
276
+ }
277
+ ```
278
+
279
+ ### Pattern 6: Dark Mode with CSS (v4)
280
+
281
+ ```typescript
282
+ export function ThemeToggle() {
283
+ const { resolvedTheme, setTheme } = useTheme()
284
+
285
+ return (
286
+ <Button
287
+ variant="ghost"
288
+ size="icon"
289
+ onClick={() => setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')}
290
+ >
291
+ <Sun className="size-5 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
292
+ <Moon className="absolute size-5 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
293
+ <span className="sr-only">Toggle theme</span>
294
+ </Button>
295
+ )
296
+ }
297
+ ```
298
+
299
+ ## Utility Functions
300
+
301
+ ```typescript
302
+ import { type ClassValue, clsx } from "clsx";
303
+ import { twMerge } from "tailwind-merge";
304
+
305
+ export function cn(...inputs: ClassValue[]) {
306
+ return twMerge(clsx(inputs));
307
+ }
308
+ ```
309
+
310
+ ## v3 to v4 Migration Checklist
311
+
312
+ - [ ] Replace `tailwind.config.ts` with CSS `@theme` block
313
+ - [ ] Change `@tailwind base/components/utilities` to `@import "tailwindcss"`
314
+ - [ ] Move color definitions to `@theme { --color-*: value }`
315
+ - [ ] Replace `darkMode: "class"` with `@custom-variant dark`
316
+ - [ ] Move `@keyframes` inside `@theme` blocks
317
+ - [ ] Replace `require("tailwindcss-animate")` with native CSS animations
318
+ - [ ] Update `h-10 w-10` to `size-10` (new utility)
319
+ - [ ] Consider OKLCH colors for better color perception
320
+ - [ ] Replace custom plugins with `@utility` directives
321
+
322
+ ## Best Practices
323
+
324
+ ### Do's
325
+
326
+ - **Use `@theme` blocks** - CSS-first configuration is v4's core pattern
327
+ - **Use OKLCH colors** - Better perceptual uniformity than HSL
328
+ - **Compose with CVA** - Type-safe variants
329
+ - **Use semantic tokens** - `bg-primary` not `bg-blue-500`
330
+ - **Add accessibility** - ARIA attributes, focus states
331
+
332
+ ### Don'ts
333
+
334
+ - **Don't use `tailwind.config.ts`** - Use CSS `@theme` instead
335
+ - **Don't use `@tailwind` directives** - Use `@import "tailwindcss"`
336
+ - **Don't hardcode colors** - Use semantic tokens
337
+ - **Don't forget dark mode** - Test both themes