diff --git a/app/(dashboard)/invoices/page.tsx b/app/(dashboard)/invoices/page.tsx
index 33484213..be32d08f 100644
--- a/app/(dashboard)/invoices/page.tsx
+++ b/app/(dashboard)/invoices/page.tsx
@@ -17,7 +17,7 @@ import { ToolbarSearch } from '@/components/ui/toolbar-search'
import { Skeleton } from '@/components/ui/skeleton'
import { Dialog, DialogContent, DialogTitle, DialogVeil } from '@/components/ui/dialog'
import { DataListEmpty } from '@/components/ui/data-list'
-import { TH_CLASS, TD_CLASS, QUIET_LINK_CLASS } from '@/components/ui/dry-table'
+import { TH_CLASS, TD_CLASS, QUIET_LINK_CLASS, CHECKBOX_REVEAL_CLASS } from '@/components/ui/dry-table'
import { FyPicker } from '@/components/common/FyPicker'
import { ContextPicker } from '@/components/common/ContextPicker'
import { SplitButton, type SplitButtonOption } from '@/components/ui/split-button'
@@ -789,10 +789,10 @@ export default function InvoicesPage() {
onCheckedChange={() => toggleSelect(invoice.id)}
aria-label={t('bulk_select_row')}
className={cn(
- 'transition-opacity duration-150',
+ 'border-foreground duration-150',
selectedIds.has(invoice.id) || selectedIds.size > 0
? 'opacity-100'
- : 'opacity-0 group-hover:opacity-100 focus-visible:opacity-100 pointer-coarse:opacity-100',
+ : CHECKBOX_REVEAL_CLASS,
)}
/>
)}
diff --git a/app/(dashboard)/orders/page.tsx b/app/(dashboard)/orders/page.tsx
index f429a754..f7f23878 100644
--- a/app/(dashboard)/orders/page.tsx
+++ b/app/(dashboard)/orders/page.tsx
@@ -19,7 +19,7 @@ import { EmptyState } from '@/components/ui/empty-state'
import { Skeleton } from '@/components/ui/skeleton'
import { useToast } from '@/components/ui/use-toast'
import { ContextPicker } from '@/components/common/ContextPicker'
-import { TH_CLASS, TD_CLASS, QUIET_LINK_CLASS } from '@/components/ui/dry-table'
+import { TH_CLASS, TD_CLASS, QUIET_LINK_CLASS, CHECKBOX_REVEAL_CLASS } from '@/components/ui/dry-table'
import { cn, formatCurrency, formatDate } from '@/lib/utils'
import { getErrorMessage, type ErrorLocale } from '@/lib/errors/get-error-message'
import { useCanWrite } from '@/lib/hooks/use-can-write'
@@ -510,10 +510,8 @@ function OrderRow({
onCheckedChange={() => onToggleSelect(order.id)}
aria-label={t('select_order_aria', { number: order.order_number })}
className={cn(
- 'absolute -left-5 top-1/2 -translate-y-1/2 transition-opacity duration-150 md:-left-6',
- isSelected
- ? 'opacity-100'
- : 'opacity-0 group-hover:opacity-100 focus-visible:opacity-100 pointer-coarse:opacity-100',
+ 'absolute -left-5 top-1/2 -translate-y-1/2 border-foreground duration-150 md:-left-6',
+ isSelected ? 'opacity-100' : CHECKBOX_REVEAL_CLASS,
)}
/>
)}
diff --git a/app/(dashboard)/pending/page.tsx b/app/(dashboard)/pending/page.tsx
index 578d004c..86ce1f5a 100644
--- a/app/(dashboard)/pending/page.tsx
+++ b/app/(dashboard)/pending/page.tsx
@@ -10,7 +10,7 @@ import { Checkbox } from '@/components/ui/checkbox'
import { DataListEmpty, DataListLoading } from '@/components/ui/data-list'
import { ContextPicker } from '@/components/common/ContextPicker'
import { SegmentedControl } from '@/components/ui/segmented-control'
-import { HOVER_REVEAL_CLASS, QUIET_LINK_CLASS } from '@/components/ui/dry-table'
+import { CHECKBOX_REVEAL_CLASS, QUIET_LINK_CLASS } from '@/components/ui/dry-table'
import {
SlideOver,
SlideOverContent,
@@ -997,7 +997,7 @@ export default function PendingOperationsPage() {
isSelected && 'bg-secondary/40',
)}
>
- {/* Hover-revealed selection checkbox (concept .cb) */}
+ {/* Always-visible selection checkbox (concept .cb) */}
e.stopPropagation()}
@@ -1008,8 +1008,8 @@ export default function PendingOperationsPage() {
onCheckedChange={() => toggleSelected(op.id)}
aria-label={t('select_operation_aria')}
className={cn(
- 'duration-150',
- isSelected ? 'opacity-100' : HOVER_REVEAL_CLASS,
+ 'border-foreground duration-150',
+ isSelected ? 'opacity-100' : CHECKBOX_REVEAL_CLASS,
)}
/>
)}
diff --git a/app/(dashboard)/supplier-invoices/page.tsx b/app/(dashboard)/supplier-invoices/page.tsx
index b26391bd..56ef41c3 100644
--- a/app/(dashboard)/supplier-invoices/page.tsx
+++ b/app/(dashboard)/supplier-invoices/page.tsx
@@ -10,7 +10,7 @@ import { Button } from '@/components/ui/button'
import { Checkbox } from '@/components/ui/checkbox'
import { ToolbarSearch } from '@/components/ui/toolbar-search'
import { DataListEmpty } from '@/components/ui/data-list'
-import { TH_CLASS, TD_CLASS, QUIET_LINK_CLASS } from '@/components/ui/dry-table'
+import { TH_CLASS, TD_CLASS, QUIET_LINK_CLASS, CHECKBOX_REVEAL_CLASS } from '@/components/ui/dry-table'
import { FyPicker } from '@/components/common/FyPicker'
import { ContextPicker } from '@/components/common/ContextPicker'
import { HelpPopover } from '@/components/ui/help-popover'
@@ -588,10 +588,10 @@ export default function SupplierInvoicesPage() {
onCheckedChange={() => toggleSelect(inv.id)}
aria-label={t('bulk_select_row')}
className={cn(
- 'transition-opacity duration-150',
+ 'border-foreground duration-150',
selectedIds.has(inv.id) || selectedIds.size > 0
? 'opacity-100'
- : 'opacity-0 group-hover:opacity-100 focus-visible:opacity-100 pointer-coarse:opacity-100',
+ : CHECKBOX_REVEAL_CLASS,
)}
/>
)}
diff --git a/components/bookkeeping/JournalEntryList.tsx b/components/bookkeeping/JournalEntryList.tsx
index 5e54a550..f7cc0dbd 100644
--- a/components/bookkeeping/JournalEntryList.tsx
+++ b/components/bookkeeping/JournalEntryList.tsx
@@ -40,6 +40,7 @@ import {
VTH_CLASS,
VTD_CLASS,
QUIET_LINK_CLASS,
+ CHECKBOX_REVEAL_CLASS,
RowFoldout,
} from '@/components/ui/dry-table'
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronRight, ChevronLeft, ChevronsLeft, ChevronsRight, Copy, Paperclip, CircleSlash, Loader2, BookOpen, X, Lock, Search, SlidersHorizontal, RotateCcw } from 'lucide-react'
@@ -1545,10 +1546,10 @@ export default function JournalEntryList({
onCheckedChange={() => toggleSelect(entry.id)}
aria-label={t('batch_select_row')}
className={cn(
- 'transition-opacity duration-150',
+ 'border-foreground duration-150',
selectedIds.has(entry.id)
? 'opacity-100'
- : 'opacity-0 group-hover:opacity-100 focus-visible:opacity-100',
+ : CHECKBOX_REVEAL_CLASS,
)}
/>
)}
diff --git a/components/extensions/general/InvoiceInboxWorkspace.tsx b/components/extensions/general/InvoiceInboxWorkspace.tsx
index 6dc9c2f1..44e631c3 100644
--- a/components/extensions/general/InvoiceInboxWorkspace.tsx
+++ b/components/extensions/general/InvoiceInboxWorkspace.tsx
@@ -48,7 +48,7 @@ import {
} from 'lucide-react'
import Link from 'next/link'
import { cn, formatCurrency, formatDate, formatDateLong } from '@/lib/utils'
-import { QUIET_LINK_CLASS } from '@/components/ui/dry-table'
+import { QUIET_LINK_CLASS, CHECKBOX_REVEAL_CLASS } from '@/components/ui/dry-table'
import { GoogleMark, MicrosoftMark } from '@/components/ui/provider-marks'
import { StartCard } from '@/components/dashboard/StartCard'
import EditKonteringDialog from '@/components/extensions/general/EditKonteringDialog'
@@ -2168,8 +2168,12 @@ function InboxRow({