- an assortment of bugfixes and improvements

- remove line numbers from generated locale files
- add .gitattributes to not display diffs of .po files
This commit is contained in:
Amruth Pillai
2026-01-25 17:49:23 +01:00
parent 3071b7dd37
commit 0c65612368
82 changed files with 46089 additions and 45609 deletions
+1 -1
View File
@@ -54,7 +54,7 @@
:where(th) {
font-weight: inherit;
text-align: left;
text-align: start;
}
:where(th, td) {
@@ -13,13 +13,13 @@ export function AwardsItem({ className, ...item }: AwardsItemProps) {
{/* Header */}
<div className="section-item-header awards-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title awards-item-title">{item.title}</strong>
<span className="section-item-metadata awards-item-date text-right">{item.date}</span>
<span className="section-item-metadata awards-item-date shrink-0 text-end">{item.date}</span>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata awards-item-awarder">{item.awarder}</span>
</div>
</div>
@@ -13,13 +13,13 @@ export function CertificationsItem({ className, ...item }: CertificationsItemPro
{/* Header */}
<div className="section-item-header certifications-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title certifications-item-title">{item.title}</strong>
<span className="section-item-metadata certifications-item-date text-right">{item.date}</span>
<span className="section-item-metadata certifications-item-date shrink-0 text-end">{item.date}</span>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata certifications-item-issuer">{item.issuer}</span>
</div>
</div>
@@ -13,17 +13,17 @@ export function EducationItem({ className, ...item }: EducationItemProps) {
{/* Header */}
<div className="section-item-header education-item-header mb-2">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title education-item-title">{item.school}</strong>
<span className="section-item-metadata education-item-degree-grade text-right">
<span className="section-item-metadata education-item-degree-grade shrink-0 text-end">
{[item.degree, item.grade].filter(Boolean).join(" • ")}
</span>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata education-item-area">{item.area}</span>
<span className="section-item-metadata education-item-location-period text-right">
<span className="section-item-metadata education-item-location-period shrink-0 text-end">
{[item.location, item.period].filter(Boolean).join(" • ")}
</span>
</div>
@@ -13,15 +13,15 @@ export function ExperienceItem({ className, ...item }: ExperienceItemProps) {
{/* Header */}
<div className="section-item-header experience-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title experience-item-title">{item.company}</strong>
<span className="section-item-metadata experience-item-location text-right">{item.location}</span>
<span className="section-item-metadata experience-item-location shrink-0 text-end">{item.location}</span>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata experience-item-position">{item.position}</span>
<span className="section-item-metadata experience-item-period text-right">{item.period}</span>
<span className="section-item-metadata experience-item-period shrink-0 text-end">{item.period}</span>
</div>
</div>
@@ -10,13 +10,15 @@ export function InterestsItem({ className, ...item }: InterestsItemProps) {
return (
<div className={cn("interests-item", className)}>
{/* Header */}
<div className="section-item-header flex items-center gap-x-1.5">
<div className="section-item-header interests-item-header flex items-center gap-x-1.5">
<PageIcon icon={item.icon} className="section-item-icon interests-item-icon" />
<strong className="section-item-title interests-item-name">{item.name}</strong>
</div>
{/* Keywords */}
<span className="section-item-keywords interests-item-keywords opacity-80">{item.keywords.join(", ")}</span>
<span className="section-item-keywords interests-item-keywords inline-block opacity-80">
{item.keywords.join(", ")}
</span>
</div>
);
}
@@ -10,7 +10,7 @@ export function LanguagesItem({ className, ...item }: LanguagesItemProps) {
return (
<div className={cn("languages-item", className)}>
{/* Header */}
<div className="section-item-header flex flex-col">
<div className="section-item-header languages-item-header flex flex-col">
{/* Row 1 */}
<strong className="section-item-title languages-item-name">{item.language}</strong>
@@ -11,7 +11,7 @@ export function ProfilesItem({ className, ...item }: ProfilesItemProps) {
return (
<div className={cn("profiles-item", className)}>
{/* Header */}
<div className="section-item-header flex items-center gap-x-1.5">
<div className="section-item-header profiles-item-header flex items-center gap-x-1.5">
<PageIcon icon={item.icon} className="section-item-icon profiles-item-icon" />
<strong className="section-item-title profiles-item-network">{item.network}</strong>
</div>
@@ -13,9 +13,9 @@ export function ProjectsItem({ className, ...item }: ProjectsItemProps) {
{/* Header */}
<div className="section-item-header projects-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title projects-item-title">{item.name}</strong>
<span className="section-item-metadata projects-item-period text-right">{item.period}</span>
<span className="section-item-metadata projects-item-period shrink-0 text-end">{item.period}</span>
</div>
</div>
@@ -13,13 +13,13 @@ export function PublicationsItem({ className, ...item }: PublicationsItemProps)
{/* Header */}
<div className="section-item-header publications-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title publications-item-title">{item.title}</strong>
<span className="section-item-metadata publications-item-date text-right">{item.date}</span>
<span className="section-item-metadata publications-item-date shrink-0 text-end">{item.date}</span>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata publications-item-publisher">{item.publisher}</span>
</div>
</div>
@@ -13,12 +13,12 @@ export function ReferencesItem({ className, ...item }: ReferencesItemProps) {
{/* Header */}
<div className="section-item-header references-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title references-item-name">{item.name}</strong>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata references-item-position">{item.position}</span>
</div>
</div>
@@ -31,9 +31,7 @@ export function ReferencesItem({ className, ...item }: ReferencesItemProps) {
{/* Footer */}
<div className="section-item-footer references-item-footer flex flex-col">
{/* Row 1 */}
<div className="flex items-center justify-between">
<span className="section-item-metadata references-item-phone">{item.phone}</span>
</div>
<span className="section-item-metadata references-item-phone inline-block">{item.phone}</span>
{/* Row 2 */}
<PageLink
@@ -17,14 +17,12 @@ export function SkillsItem({ className, ...item }: SkillsItemProps) {
</div>
{/* Proficiency */}
<div className="flex items-center justify-between">
<span className="section-item-metadata skills-item-proficiency">{item.proficiency}</span>
</div>
<span className="section-item-metadata skills-item-proficiency inline-block">{item.proficiency}</span>
{/* Keywords */}
<div className="flex items-center justify-between">
<span className="section-item-keywords skills-item-keywords opacity-80">{item.keywords.join(", ")}</span>
</div>
<span className="section-item-keywords skills-item-keywords inline-block opacity-80">
{item.keywords.join(", ")}
</span>
{/* Level */}
<PageLevel level={item.level} className="section-item-level skills-item-level" />
@@ -13,13 +13,13 @@ export function VolunteerItem({ className, ...item }: VolunteerItemProps) {
{/* Header */}
<div className="section-item-header volunteer-item-header">
{/* Row 1 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<strong className="section-item-title volunteer-item-title">{item.organization}</strong>
<span className="section-item-metadata volunteer-item-period text-right">{item.period}</span>
<span className="section-item-metadata volunteer-item-period shrink-0 text-end">{item.period}</span>
</div>
{/* Row 2 */}
<div className="flex items-center justify-between">
<div className="flex items-start justify-between gap-x-2">
<span className="section-item-metadata volunteer-item-location">{item.location}</span>
</div>
</div>
+1 -1
View File
@@ -30,7 +30,7 @@ function AccordionTrigger({ className, children, ...props }: AccordionTriggerPro
<AccordionHeaderPrimitive className="flex">
<AccordionTriggerPrimitive
className={cn(
"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left font-medium text-sm outline-none transition-all hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=closed]>svg]:rotate-0 [&[data-state=open]>svg]:rotate-90 [&[data-state=open]>svg]:transition-transform",
"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-start font-medium text-sm outline-none transition-all hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=closed]>svg]:rotate-0 [&[data-state=open]>svg]:rotate-90 [&[data-state=open]>svg]:transition-transform",
className,
)}
{...props}
+1 -1
View File
@@ -63,7 +63,7 @@ type AlertDialogHeaderProps = AlertDialogHeaderPrimitiveProps;
function AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps) {
return (
<AlertDialogHeaderPrimitive className={cn("flex flex-col gap-2 text-center sm:text-left", className)} {...props} />
<AlertDialogHeaderPrimitive className={cn("flex flex-col gap-2 text-center sm:text-start", className)} {...props} />
);
}
+1 -1
View File
@@ -3,7 +3,7 @@ import type * as React from "react";
import { cn } from "@/utils/style";
const alertVariants = cva(
"group/alert relative grid w-full gap-1 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 has-data-[slot=alert-action]:pr-18 *:[svg:not([class*='size-'])]:size-4 *:[svg]:row-span-2 *:[svg]:translate-y-1 *:[svg]:text-current",
"group/alert relative grid w-full gap-1 rounded-lg border px-4 py-3 text-start text-sm has-data-[slot=alert-action]:relative has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 has-data-[slot=alert-action]:pr-18 *:[svg:not([class*='size-'])]:size-4 *:[svg]:row-span-2 *:[svg]:translate-y-1 *:[svg]:text-current",
{
variants: {
variant: {
+3 -1
View File
@@ -67,7 +67,9 @@ function DialogContent({ className, children, ...props }: DialogContentProps) {
type DialogHeaderProps = DialogHeaderPrimitiveProps;
function DialogHeader({ className, ...props }: DialogHeaderProps) {
return <DialogHeaderPrimitive className={cn("flex flex-col gap-2 text-center sm:text-left", className)} {...props} />;
return (
<DialogHeaderPrimitive className={cn("flex flex-col gap-2 text-center sm:text-start", className)} {...props} />
);
}
type DialogFooterProps = DialogFooterPrimitiveProps;
+1 -1
View File
@@ -431,7 +431,7 @@ function SidebarMenuItem({ className, ...props }: React.ComponentProps<"li">) {
}
const sidebarMenuButtonVariants = cva(
"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-start text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
{
variants: {
variant: {