feat(deps): Tailwind 3 → 4 + swap tailwindcss-animate for tw-animate-css
Ran the official @tailwindcss/upgrade tool: - tailwind.config.ts → @theme directive in globals.css - @tailwind base/components/utilities → @import 'tailwindcss' - postcss.config switched from tailwindcss + autoprefixer to @tailwindcss/postcss (autoprefixer baked in) - focus-visible:outline-none → focus-visible:outline-hidden (the v3 utility was a footgun — outline still showed in forced-colors mode) Reverted the migration tool's over-zealous variant="outline" → variant="outline-solid" rename on CVA prop values; that rename was meant for the Tailwind `outline:` utility, not our Button/Badge component variants. Swapped tailwindcss-animate (v3-style JS plugin) for tw-animate-css (v4-native @import). Same utility surface (animate-spin, animate-in, etc.), one fewer JS plugin in the bundle. Fixed the upgrade tool's malformed dark variant (@custom-variant dark (&:is(class *)) — `class` was being parsed as a tag) to canonical &:where(.dark, .dark *). Verified: tsc 0 errors, eslint 0 errors (16 pre-existing warnings), vitest 1315/1315, next build clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -200,7 +200,7 @@ export default function DocumensoSettingsPage() {
|
||||
<ul className="space-y-1.5">
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -211,7 +211,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -222,7 +222,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -233,7 +233,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -245,7 +245,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -260,7 +260,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -271,7 +271,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
@@ -283,7 +283,7 @@ export default function DocumensoSettingsPage() {
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<CheckCircle2
|
||||
className="mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-600"
|
||||
className="mt-0.5 h-4 w-4 shrink-0 text-emerald-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span>
|
||||
|
||||
@@ -179,7 +179,7 @@ export default function ErrorEventDetailPage() {
|
||||
<KV label="Name" value={event.errorName ?? '—'} mono />
|
||||
<div>
|
||||
<p className="text-xs text-muted-foreground">Message</p>
|
||||
<p className="mt-0.5 font-mono whitespace-pre-wrap break-words">
|
||||
<p className="mt-0.5 font-mono whitespace-pre-wrap wrap-break-word">
|
||||
{event.errorMessage ?? '—'}
|
||||
</p>
|
||||
</div>
|
||||
@@ -195,7 +195,7 @@ export default function ErrorEventDetailPage() {
|
||||
<Copy className="mr-1.5 h-3 w-3" /> Copy
|
||||
</Button>
|
||||
</div>
|
||||
<pre className="mt-1 max-h-96 overflow-auto rounded bg-muted p-2 text-xs font-mono whitespace-pre-wrap break-words">
|
||||
<pre className="mt-1 max-h-96 overflow-auto rounded bg-muted p-2 text-xs font-mono whitespace-pre-wrap wrap-break-word">
|
||||
{event.errorStack}
|
||||
</pre>
|
||||
</div>
|
||||
@@ -211,7 +211,7 @@ export default function ErrorEventDetailPage() {
|
||||
</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<pre className="max-h-64 overflow-auto rounded bg-muted p-2 text-xs font-mono whitespace-pre-wrap break-words">
|
||||
<pre className="max-h-64 overflow-auto rounded bg-muted p-2 text-xs font-mono whitespace-pre-wrap wrap-break-word">
|
||||
{event.requestBodyExcerpt}
|
||||
</pre>
|
||||
</CardContent>
|
||||
|
||||
@@ -165,7 +165,7 @@ export default function InvoicesPage() {
|
||||
|
||||
{/* Delete confirmation */}
|
||||
{deleteTarget && (
|
||||
<div className="fixed inset-0 bg-background/80 backdrop-blur-sm z-50 flex items-center justify-center">
|
||||
<div className="fixed inset-0 bg-background/80 backdrop-blur-xs z-50 flex items-center justify-center">
|
||||
<div className="bg-background border rounded-lg shadow-lg p-6 max-w-sm w-full space-y-4">
|
||||
<h3 className="font-semibold">Delete Invoice?</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
|
||||
Reference in New Issue
Block a user