+
{renderItemByType(customSection.type, item, itemClassName)}
))}
diff --git a/src/components/resume/shared/page-link.tsx b/src/components/resume/shared/page-link.tsx
index 388870709..0ef11038a 100644
--- a/src/components/resume/shared/page-link.tsx
+++ b/src/components/resume/shared/page-link.tsx
@@ -10,7 +10,7 @@ export function PageLink({ url, label, className }: Props) {
if (!url) return null;
return (
-
+
{label || url}
);
diff --git a/src/components/resume/shared/page-section.tsx b/src/components/resume/shared/page-section.tsx
index fd83f4688..02e2fd339 100644
--- a/src/components/resume/shared/page-section.tsx
+++ b/src/components/resume/shared/page-section.tsx
@@ -26,7 +26,7 @@ export function PageSection
({ type, className, children }
style={{ gridTemplateColumns: `repeat(${section.columns}, 1fr)` }}
>
{items.map((item) => (
-
+
{children(item)}
))}
diff --git a/src/components/resume/shared/page-summary.tsx b/src/components/resume/shared/page-summary.tsx
index 7f3942f36..6703b61a7 100644
--- a/src/components/resume/shared/page-summary.tsx
+++ b/src/components/resume/shared/page-summary.tsx
@@ -13,7 +13,7 @@ export function PageSummary({ className }: PageSummaryProps) {
return (
) {
diff --git a/src/components/animate-ui/components/radix/accordion.tsx b/src/components/ui/accordion.tsx
similarity index 92%
rename from src/components/animate-ui/components/radix/accordion.tsx
rename to src/components/ui/accordion.tsx
index dde08b9a7..8feddda4c 100644
--- a/src/components/animate-ui/components/radix/accordion.tsx
+++ b/src/components/ui/accordion.tsx
@@ -8,7 +8,7 @@ import {
type AccordionProps as AccordionPrimitiveProps,
AccordionTrigger as AccordionTriggerPrimitive,
type AccordionTriggerProps as AccordionTriggerPrimitiveProps,
-} from "@/components/animate-ui/primitives/radix/accordion";
+} from "@/components/primitives/accordion";
import { cn } from "@/utils/style";
type AccordionProps = AccordionPrimitiveProps;
@@ -20,7 +20,7 @@ function Accordion(props: AccordionProps) {
type AccordionItemProps = AccordionItemPrimitiveProps;
function AccordionItem({ className, ...props }: AccordionItemProps) {
- return ;
+ return ;
}
type AccordionTriggerProps = AccordionTriggerPrimitiveProps;
diff --git a/src/components/animate-ui/components/radix/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx
similarity index 96%
rename from src/components/animate-ui/components/radix/alert-dialog.tsx
rename to src/components/ui/alert-dialog.tsx
index 66321d975..ac2b7900d 100644
--- a/src/components/animate-ui/components/radix/alert-dialog.tsx
+++ b/src/components/ui/alert-dialog.tsx
@@ -1,4 +1,3 @@
-import { buttonVariants } from "@/components/animate-ui/components/buttons/button";
import {
AlertDialogAction as AlertDialogActionPrimitive,
type AlertDialogActionProps as AlertDialogActionPrimitiveProps,
@@ -21,7 +20,8 @@ import {
type AlertDialogTitleProps as AlertDialogTitlePrimitiveProps,
AlertDialogTrigger as AlertDialogTriggerPrimitive,
type AlertDialogTriggerProps as AlertDialogTriggerPrimitiveProps,
-} from "@/components/animate-ui/primitives/radix/alert-dialog";
+} from "@/components/primitives/alert-dialog";
+import { buttonVariants } from "@/components/ui/button";
import { cn } from "@/utils/style";
type AlertDialogProps = AlertDialogPrimitiveProps;
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
index c154337d1..93aad10c0 100644
--- a/src/components/ui/badge.tsx
+++ b/src/components/ui/badge.tsx
@@ -36,4 +36,4 @@ function Badge({
);
}
-export { Badge, badgeVariants };
+export { Badge };
diff --git a/src/components/ui/button-group.tsx b/src/components/ui/button-group.tsx
index 32471f7b6..0f84b4577 100644
--- a/src/components/ui/button-group.tsx
+++ b/src/components/ui/button-group.tsx
@@ -74,4 +74,4 @@ function ButtonGroupSeparator({
);
}
-export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };
+export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText };
diff --git a/src/components/animate-ui/components/buttons/button.tsx b/src/components/ui/button.tsx
similarity index 93%
rename from src/components/animate-ui/components/buttons/button.tsx
rename to src/components/ui/button.tsx
index 359c38ce7..1fa800795 100644
--- a/src/components/animate-ui/components/buttons/button.tsx
+++ b/src/components/ui/button.tsx
@@ -1,8 +1,5 @@
import { cva, type VariantProps } from "class-variance-authority";
-import {
- Button as ButtonPrimitive,
- type ButtonProps as ButtonPrimitiveProps,
-} from "@/components/animate-ui/primitives/buttons/button";
+import { Button as ButtonPrimitive, type ButtonProps as ButtonPrimitiveProps } from "@/components/primitives/button";
import { cn } from "@/utils/style";
const buttonVariants = cva(
diff --git a/src/components/ui/combobox.tsx b/src/components/ui/combobox.tsx
index 3f5187c01..d74478b06 100644
--- a/src/components/ui/combobox.tsx
+++ b/src/components/ui/combobox.tsx
@@ -1,7 +1,7 @@
import { t } from "@lingui/core/macro";
import { CaretUpDownIcon, CheckIcon } from "@phosphor-icons/react";
import * as React from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@/components/ui/command";
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
import { useControlledState } from "@/hooks/use-controlled-state";
diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx
index c0b23357b..01d9dedd6 100644
--- a/src/components/ui/command.tsx
+++ b/src/components/ui/command.tsx
@@ -1,13 +1,7 @@
import { CheckIcon, MagnifyingGlassIcon } from "@phosphor-icons/react";
import { Command as CommandPrimitive } from "cmdk";
import type * as React from "react";
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
+import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { InputGroup, InputGroupAddon } from "@/components/ui/input-group";
import { cn } from "@/utils/style";
diff --git a/src/components/animate-ui/components/radix/dialog.tsx b/src/components/ui/dialog.tsx
similarity index 98%
rename from src/components/animate-ui/components/radix/dialog.tsx
rename to src/components/ui/dialog.tsx
index 80e0e883e..c6793fda1 100644
--- a/src/components/animate-ui/components/radix/dialog.tsx
+++ b/src/components/ui/dialog.tsx
@@ -18,7 +18,7 @@ import {
type DialogTitleProps as DialogTitlePrimitiveProps,
DialogTrigger as DialogTriggerPrimitive,
type DialogTriggerProps as DialogTriggerPrimitiveProps,
-} from "@/components/animate-ui/primitives/radix/dialog";
+} from "@/components/primitives/dialog";
import { cn } from "@/utils/style";
type DialogProps = DialogPrimitiveProps;
diff --git a/src/components/animate-ui/components/radix/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx
similarity index 99%
rename from src/components/animate-ui/components/radix/dropdown-menu.tsx
rename to src/components/ui/dropdown-menu.tsx
index dc005978d..1f49eee7a 100644
--- a/src/components/animate-ui/components/radix/dropdown-menu.tsx
+++ b/src/components/ui/dropdown-menu.tsx
@@ -29,7 +29,7 @@ import {
type DropdownMenuSubTriggerProps as DropdownMenuSubTriggerPrimitiveProps,
DropdownMenuTrigger as DropdownMenuTriggerPrimitive,
type DropdownMenuTriggerProps as DropdownMenuTriggerPrimitiveProps,
-} from "@/components/animate-ui/primitives/radix/dropdown-menu";
+} from "@/components/primitives/dropdown-menu";
import { cn } from "@/utils/style";
type DropdownMenuProps = DropdownMenuPrimitiveProps;
diff --git a/src/components/ui/form.tsx b/src/components/ui/form.tsx
index 2470b46f4..351ff9e2f 100644
--- a/src/components/ui/form.tsx
+++ b/src/components/ui/form.tsx
@@ -152,4 +152,4 @@ function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
);
}
-export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };
+export { Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };
diff --git a/src/components/ui/input-group.tsx b/src/components/ui/input-group.tsx
index 157d79de6..ee5230025 100644
--- a/src/components/ui/input-group.tsx
+++ b/src/components/ui/input-group.tsx
@@ -1,6 +1,6 @@
import { cva, type VariantProps } from "class-variance-authority";
import type * as React from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea";
import { cn } from "@/utils/style";
diff --git a/src/components/ui/multiple-combobox.tsx b/src/components/ui/multiple-combobox.tsx
index e2a555c40..6dabb8702 100644
--- a/src/components/ui/multiple-combobox.tsx
+++ b/src/components/ui/multiple-combobox.tsx
@@ -1,7 +1,7 @@
import { t } from "@lingui/core/macro";
import { CaretUpDownIcon, CheckIcon } from "@phosphor-icons/react";
import * as React from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import {
Command,
CommandEmpty,
diff --git a/src/components/ui/sheet.tsx b/src/components/ui/sheet.tsx
index af478ffc4..c3ffdd089 100644
--- a/src/components/ui/sheet.tsx
+++ b/src/components/ui/sheet.tsx
@@ -1,7 +1,7 @@
import { XIcon } from "@phosphor-icons/react";
import { Dialog as SheetPrimitive } from "radix-ui";
import type * as React from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { cn } from "@/utils/style";
function Sheet({ ...props }: React.ComponentProps) {
diff --git a/src/components/ui/sidebar.tsx b/src/components/ui/sidebar.tsx
index 971b04acd..2c7f2df85 100644
--- a/src/components/ui/sidebar.tsx
+++ b/src/components/ui/sidebar.tsx
@@ -2,7 +2,7 @@ import { SidebarSimpleIcon } from "@phosphor-icons/react";
import { cva, type VariantProps } from "class-variance-authority";
import { Slot as SlotPrimitive } from "radix-ui";
import * as React from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Separator } from "@/components/ui/separator";
import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "@/components/ui/sheet";
diff --git a/src/components/animate-ui/components/radix/switch.tsx b/src/components/ui/switch.tsx
similarity index 97%
rename from src/components/animate-ui/components/radix/switch.tsx
rename to src/components/ui/switch.tsx
index e7e0487bd..d699d82a2 100644
--- a/src/components/animate-ui/components/radix/switch.tsx
+++ b/src/components/ui/switch.tsx
@@ -5,7 +5,7 @@ import {
Switch as SwitchPrimitive,
type SwitchProps as SwitchPrimitiveProps,
SwitchThumb as SwitchThumbPrimitive,
-} from "@/components/animate-ui/primitives/radix/switch";
+} from "@/components/primitives/switch";
import { cn } from "@/utils/style";
type SwitchProps = SwitchPrimitiveProps & {
diff --git a/src/components/ui/toggle.tsx b/src/components/ui/toggle.tsx
index 28a560eba..a9d9aff46 100644
--- a/src/components/ui/toggle.tsx
+++ b/src/components/ui/toggle.tsx
@@ -35,4 +35,4 @@ function Toggle({
);
}
-export { Toggle, toggleVariants };
+export { Toggle };
diff --git a/src/components/user/dropdown-menu.tsx b/src/components/user/dropdown-menu.tsx
index 26d1a95ff..48bc1e16e 100644
--- a/src/components/user/dropdown-menu.tsx
+++ b/src/components/user/dropdown-menu.tsx
@@ -4,6 +4,7 @@ import { Trans } from "@lingui/react/macro";
import { PaletteIcon, SignOutIcon, TranslateIcon } from "@phosphor-icons/react";
import { useRouter } from "@tanstack/react-router";
import { toast } from "sonner";
+import { useTheme } from "@/components/theme/provider";
import {
DropdownMenu,
DropdownMenuContent,
@@ -16,8 +17,7 @@ import {
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
-} from "@/components/animate-ui/components/radix/dropdown-menu";
-import { useTheme } from "@/components/theme/provider";
+} from "@/components/ui/dropdown-menu";
import { authClient } from "@/integrations/auth/client";
import type { AuthSession } from "@/integrations/auth/types";
import { isLocale, loadLocale, localeMap, setLocaleServerFn } from "@/utils/locale";
diff --git a/src/dialogs/api-key/create.tsx b/src/dialogs/api-key/create.tsx
index a82627bdb..c8f02e00d 100644
--- a/src/dialogs/api-key/create.tsx
+++ b/src/dialogs/api-key/create.tsx
@@ -8,15 +8,9 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useCopyToClipboard } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
+import { Button } from "@/components/ui/button";
import { Combobox } from "@/components/ui/combobox";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "@/components/ui/input-group";
diff --git a/src/dialogs/auth/change-password.tsx b/src/dialogs/auth/change-password.tsx
index 4bc81063b..63c9154ac 100644
--- a/src/dialogs/auth/change-password.tsx
+++ b/src/dialogs/auth/change-password.tsx
@@ -7,14 +7,8 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/dialogs/auth/disable-two-factor.tsx b/src/dialogs/auth/disable-two-factor.tsx
index d9249e583..233c5555a 100644
--- a/src/dialogs/auth/disable-two-factor.tsx
+++ b/src/dialogs/auth/disable-two-factor.tsx
@@ -7,14 +7,8 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/dialogs/auth/enable-two-factor.tsx b/src/dialogs/auth/enable-two-factor.tsx
index 66888de0b..b688ce5a1 100644
--- a/src/dialogs/auth/enable-two-factor.tsx
+++ b/src/dialogs/auth/enable-two-factor.tsx
@@ -11,14 +11,8 @@ import { toast } from "sonner";
import { match } from "ts-pattern";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp";
diff --git a/src/dialogs/manager.tsx b/src/dialogs/manager.tsx
index 8976a801b..a5dec6a41 100644
--- a/src/dialogs/manager.tsx
+++ b/src/dialogs/manager.tsx
@@ -1,5 +1,5 @@
import { match } from "ts-pattern";
-import { Dialog } from "@/components/animate-ui/components/radix/dialog";
+import { Dialog } from "@/components/ui/dialog";
import { CreateApiKeyDialog } from "./api-key/create";
import { ChangePasswordDialog } from "./auth/change-password";
import { DisableTwoFactorDialog } from "./auth/disable-two-factor";
diff --git a/src/dialogs/resume/import.tsx b/src/dialogs/resume/import.tsx
index ba0232ab2..eab4913a3 100644
--- a/src/dialogs/resume/import.tsx
+++ b/src/dialogs/resume/import.tsx
@@ -7,16 +7,10 @@ import { useEffect, useRef } from "react";
import { useForm, useWatch } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { Badge } from "@/components/ui/badge";
+import { Button } from "@/components/ui/button";
import { Combobox } from "@/components/ui/combobox";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Spinner } from "@/components/ui/spinner";
diff --git a/src/dialogs/resume/index.tsx b/src/dialogs/resume/index.tsx
index 4bd079e2d..5d9f3aa36 100644
--- a/src/dialogs/resume/index.tsx
+++ b/src/dialogs/resume/index.tsx
@@ -8,22 +8,16 @@ import { useEffect, useMemo } from "react";
import { useForm, useFormContext, useWatch } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
+import { ChipInput } from "@/components/input/chip-input";
+import { Button } from "@/components/ui/button";
+import { ButtonGroup } from "@/components/ui/button-group";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
-} from "@/components/animate-ui/components/radix/dropdown-menu";
-import { ChipInput } from "@/components/input/chip-input";
-import { ButtonGroup } from "@/components/ui/button-group";
+} from "@/components/ui/dropdown-menu";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText } from "@/components/ui/input-group";
diff --git a/src/dialogs/resume/sections/award.tsx b/src/dialogs/resume/sections/award.tsx
index ac79d9547..05b47ce13 100644
--- a/src/dialogs/resume/sections/award.tsx
+++ b/src/dialogs/resume/sections/award.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/certification.tsx b/src/dialogs/resume/sections/certification.tsx
index 69664a82c..e621b8445 100644
--- a/src/dialogs/resume/sections/certification.tsx
+++ b/src/dialogs/resume/sections/certification.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/custom.tsx b/src/dialogs/resume/sections/custom.tsx
index 84d56c4b4..daffb5a33 100644
--- a/src/dialogs/resume/sections/custom.tsx
+++ b/src/dialogs/resume/sections/custom.tsx
@@ -3,15 +3,9 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/education.tsx b/src/dialogs/resume/sections/education.tsx
index f43ed379e..8566b1e32 100644
--- a/src/dialogs/resume/sections/education.tsx
+++ b/src/dialogs/resume/sections/education.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/experience.tsx b/src/dialogs/resume/sections/experience.tsx
index dae971faa..62026b0c6 100644
--- a/src/dialogs/resume/sections/experience.tsx
+++ b/src/dialogs/resume/sections/experience.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/interest.tsx b/src/dialogs/resume/sections/interest.tsx
index 6711982a7..aac83c9f2 100644
--- a/src/dialogs/resume/sections/interest.tsx
+++ b/src/dialogs/resume/sections/interest.tsx
@@ -4,17 +4,11 @@ import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useMemo } from "react";
import { useForm, useFormContext, useFormState } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { ChipInput } from "@/components/input/chip-input";
import { IconPicker } from "@/components/input/icon-picker";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/language.tsx b/src/dialogs/resume/sections/language.tsx
index c37b7a3a1..0ac9cc6ac 100644
--- a/src/dialogs/resume/sections/language.tsx
+++ b/src/dialogs/resume/sections/language.tsx
@@ -4,15 +4,9 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Slider } from "@/components/ui/slider";
diff --git a/src/dialogs/resume/sections/profile.tsx b/src/dialogs/resume/sections/profile.tsx
index 99467b4be..d45119353 100644
--- a/src/dialogs/resume/sections/profile.tsx
+++ b/src/dialogs/resume/sections/profile.tsx
@@ -4,17 +4,11 @@ import { AtIcon, PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useMemo } from "react";
import { useForm, useFormContext, useFormState } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { IconPicker } from "@/components/input/icon-picker";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText } from "@/components/ui/input-group";
diff --git a/src/dialogs/resume/sections/project.tsx b/src/dialogs/resume/sections/project.tsx
index 24f2f3333..c5248601b 100644
--- a/src/dialogs/resume/sections/project.tsx
+++ b/src/dialogs/resume/sections/project.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/publication.tsx b/src/dialogs/resume/sections/publication.tsx
index c459c7732..d5c461664 100644
--- a/src/dialogs/resume/sections/publication.tsx
+++ b/src/dialogs/resume/sections/publication.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/reference.tsx b/src/dialogs/resume/sections/reference.tsx
index f5ae7a521..63699a3fd 100644
--- a/src/dialogs/resume/sections/reference.tsx
+++ b/src/dialogs/resume/sections/reference.tsx
@@ -3,16 +3,10 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/sections/skill.tsx b/src/dialogs/resume/sections/skill.tsx
index 58847a181..0d23d321c 100644
--- a/src/dialogs/resume/sections/skill.tsx
+++ b/src/dialogs/resume/sections/skill.tsx
@@ -5,17 +5,11 @@ import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useMemo } from "react";
import { useForm, useFormContext, useFormState } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { ChipInput } from "@/components/input/chip-input";
import { IconPicker } from "@/components/input/icon-picker";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Slider } from "@/components/ui/slider";
diff --git a/src/dialogs/resume/sections/volunteer.tsx b/src/dialogs/resume/sections/volunteer.tsx
index bbff320a3..ddffd1137 100644
--- a/src/dialogs/resume/sections/volunteer.tsx
+++ b/src/dialogs/resume/sections/volunteer.tsx
@@ -3,17 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { PencilSimpleLineIcon, PlusIcon } from "@phosphor-icons/react";
import { useForm, useFormContext } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { RichInput } from "@/components/input/rich-input";
import { URLInput } from "@/components/input/url-input";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import type { DialogProps } from "@/dialogs/store";
diff --git a/src/dialogs/resume/template/gallery.tsx b/src/dialogs/resume/template/gallery.tsx
index 3f7b945de..e95a5129a 100644
--- a/src/dialogs/resume/template/gallery.tsx
+++ b/src/dialogs/resume/template/gallery.tsx
@@ -2,15 +2,10 @@ import { useLingui } from "@lingui/react";
import { Trans } from "@lingui/react/macro";
import { SlideshowIcon } from "@phosphor-icons/react";
import { type RefObject, useRef } from "react";
-import {
- DialogContent,
- DialogDescription,
- DialogHeader,
- DialogTitle,
-} from "@/components/animate-ui/components/radix/dialog";
import { CometCard } from "@/components/animation/comet-card";
import { useResumeStore } from "@/components/resume/store/resume";
import { Badge } from "@/components/ui/badge";
+import { DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card";
import { ScrollArea } from "@/components/ui/scroll-area";
import { type DialogProps, useDialogStore } from "@/dialogs/store";
diff --git a/src/hooks/use-confirm.tsx b/src/hooks/use-confirm.tsx
index 3bf3137aa..1c5725ef0 100644
--- a/src/hooks/use-confirm.tsx
+++ b/src/hooks/use-confirm.tsx
@@ -8,7 +8,7 @@ import {
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
-} from "@/components/animate-ui/components/radix/alert-dialog";
+} from "@/components/ui/alert-dialog";
import { cn } from "@/utils/style";
interface ConfirmOptions {
diff --git a/src/hooks/use-prompt.tsx b/src/hooks/use-prompt.tsx
index e9a937bae..198a2ae56 100644
--- a/src/hooks/use-prompt.tsx
+++ b/src/hooks/use-prompt.tsx
@@ -9,7 +9,7 @@ import {
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
-} from "@/components/animate-ui/components/radix/alert-dialog";
+} from "@/components/ui/alert-dialog";
import { Input } from "@/components/ui/input";
import { cn } from "@/utils/style";
diff --git a/src/integrations/ai/store.ts b/src/integrations/ai/store.ts
index 58b3dce67..46412adb0 100644
--- a/src/integrations/ai/store.ts
+++ b/src/integrations/ai/store.ts
@@ -5,7 +5,7 @@ import { create } from "zustand/react";
export type AIProvider = "vercel-ai-gateway" | "openai" | "gemini" | "anthropic" | "ollama";
-export type TestStatus = "unverified" | "success" | "failure";
+type TestStatus = "unverified" | "success" | "failure";
type AIStoreState = {
enabled: boolean;
diff --git a/src/integrations/orpc/services/printer.ts b/src/integrations/orpc/services/printer.ts
index d6f9483b8..3802f309c 100644
--- a/src/integrations/orpc/services/printer.ts
+++ b/src/integrations/orpc/services/printer.ts
@@ -1,5 +1,5 @@
import type { InferSelectModel } from "drizzle-orm";
-import puppeteer, { type Browser, type ConnectOptions, type Page } from "puppeteer-core";
+import puppeteer, { type Browser, type ConnectOptions } from "puppeteer-core";
import type { schema } from "@/integrations/drizzle";
import { printMarginTemplates } from "@/schema/templates";
import { env } from "@/utils/env";
@@ -19,43 +19,23 @@ const pageDimensions = {
const SCREENSHOT_TTL = 1000 * 60 * 60; // 1 hour
-let pdfBrowser: Browser | null = null;
-let screenshotBrowser: Browser | null = null;
+let browser: Browser | null = null;
-async function getBrowser(type: "pdf" | "screenshot"): Promise {
+async function getBrowser(): Promise {
const endpoint = new URL(env.PRINTER_ENDPOINT);
const isWebSocket = endpoint.protocol.startsWith("ws");
- const connectOptions: ConnectOptions = { acceptInsecureCerts: true };
+ const connectOptions: ConnectOptions = {
+ acceptInsecureCerts: true,
+ defaultViewport: { width: 794, height: 1123 },
+ };
if (isWebSocket) connectOptions.browserWSEndpoint = env.PRINTER_ENDPOINT;
else connectOptions.browserURL = env.PRINTER_ENDPOINT;
- if (type === "screenshot") {
- if (screenshotBrowser?.connected) return screenshotBrowser;
- screenshotBrowser = await puppeteer.connect({ ...connectOptions, defaultViewport: { width: 794, height: 1123 } });
- return screenshotBrowser;
- }
-
- if (pdfBrowser?.connected) return pdfBrowser;
- pdfBrowser = await puppeteer.connect(connectOptions);
- return pdfBrowser;
-}
-
-async function interceptLocalhostRequests(page: Page) {
- await page.setRequestInterception(true);
-
- page.on("request", (request) => {
- const url = request.url();
-
- if (url.includes(env.APP_URL) && env.PRINTER_APP_URL) {
- const newUrl = url.replace(env.APP_URL, env.PRINTER_APP_URL);
- request.continue({ url: newUrl });
- return;
- }
-
- request.continue();
- });
+ if (browser?.connected) return browser;
+ browser = await puppeteer.connect(connectOptions);
+ return browser;
}
export const printerService = {
@@ -73,7 +53,7 @@ export const printerService = {
},
chromeDebug: async (): Promise => {
- const browser = await getBrowser("pdf");
+ const browser = await getBrowser();
const page = await browser.newPage();
@@ -112,14 +92,12 @@ export const printerService = {
marginY = Math.round(data.metadata.page.marginY / 0.75);
}
- const browser = await getBrowser("pdf");
+ const browser = await getBrowser();
await browser.setCookie({ name: "locale", value: locale, domain });
const page = await browser.newPage();
- if (env.APP_URL.includes("localhost")) await interceptLocalhostRequests(page);
-
await page.goto(url, { waitUntil: "networkidle0" });
const pdfBuffer = await page.pdf({
@@ -188,14 +166,12 @@ export const printerService = {
const token = generatePrinterToken(id);
const url = `${baseUrl}/printer/${id}?token=${token}`;
- const browser = await getBrowser("screenshot");
+ const browser = await getBrowser();
await browser.setCookie({ name: "locale", value: locale, domain });
const page = await browser.newPage();
- if (env.APP_URL.includes("localhost")) await interceptLocalhostRequests(page);
-
await page.goto(url, { waitUntil: "networkidle0" });
const screenshotBuffer = await page.screenshot({ type: "webp", quality: 80 });
diff --git a/src/integrations/orpc/services/resume.ts b/src/integrations/orpc/services/resume.ts
index 614e8abe8..c09dbd576 100644
--- a/src/integrations/orpc/services/resume.ts
+++ b/src/integrations/orpc/services/resume.ts
@@ -5,6 +5,7 @@ import { schema } from "@/integrations/drizzle";
import { db } from "@/integrations/drizzle/client";
import type { ResumeData } from "@/schema/resume/data";
import { defaultResumeData } from "@/schema/resume/data";
+import { env } from "@/utils/env";
import type { Locale } from "@/utils/locale";
import { hashPassword } from "@/utils/password";
import { generateId } from "@/utils/string";
@@ -146,6 +147,14 @@ export const resumeService = {
if (!resume) throw new ORPCError("NOT_FOUND");
+ // Convert picture URL to base64 data, so there's no fetching required on the client.
+ const url = resume.data.picture.url.replace(env.APP_URL, "http://localhost:3000");
+ const base64 = await fetch(url)
+ .then((res) => res.arrayBuffer())
+ .then((buffer) => Buffer.from(buffer).toString("base64"));
+
+ resume.data.picture.url = `data:image/jpeg;base64,${base64}`;
+
return resume;
},
diff --git a/src/routes/$username/$slug.tsx b/src/routes/$username/$slug.tsx
index ee25170c7..e63a56029 100644
--- a/src/routes/$username/$slug.tsx
+++ b/src/routes/$username/$slug.tsx
@@ -4,10 +4,10 @@ import { DownloadSimpleIcon } from "@phosphor-icons/react";
import { useMutation, useQuery } from "@tanstack/react-query";
import { createFileRoute, notFound, redirect } from "@tanstack/react-router";
import { useCallback, useEffect } from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { LoadingScreen } from "@/components/layout/loading-screen";
import { ResumePreview } from "@/components/resume/preview";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
import { Spinner } from "@/components/ui/spinner";
import { orpc } from "@/integrations/orpc/client";
import { downloadFromUrl } from "@/utils/file";
diff --git a/src/routes/_home/-sections/donate.tsx b/src/routes/_home/-sections/donate.tsx
index 12d6908c3..e147c5164 100644
--- a/src/routes/_home/-sections/donate.tsx
+++ b/src/routes/_home/-sections/donate.tsx
@@ -10,7 +10,7 @@ import {
WrenchIcon,
} from "@phosphor-icons/react";
import { motion } from "motion/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { cn } from "@/utils/style";
type FloatingIconProps = {
diff --git a/src/routes/_home/-sections/faq.tsx b/src/routes/_home/-sections/faq.tsx
index 5e75a29fa..108b27dbd 100644
--- a/src/routes/_home/-sections/faq.tsx
+++ b/src/routes/_home/-sections/faq.tsx
@@ -2,13 +2,8 @@ import { t } from "@lingui/core/macro";
import { Trans } from "@lingui/react/macro";
import { CaretRightIcon } from "@phosphor-icons/react";
import { motion } from "motion/react";
-import { buttonVariants } from "@/components/animate-ui/components/buttons/button";
-import {
- Accordion,
- AccordionContent,
- AccordionItem,
- AccordionTrigger,
-} from "@/components/animate-ui/components/radix/accordion";
+import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion";
+import { buttonVariants } from "@/components/ui/button";
import { cn } from "@/utils/style";
const crowdinUrl = "https://crowdin.com/project/reactive-resume";
diff --git a/src/routes/_home/-sections/footer.tsx b/src/routes/_home/-sections/footer.tsx
index c9093a843..c771ccf93 100644
--- a/src/routes/_home/-sections/footer.tsx
+++ b/src/routes/_home/-sections/footer.tsx
@@ -4,8 +4,8 @@ import type { Icon } from "@phosphor-icons/react";
import { GithubLogoIcon, LinkedinLogoIcon, XLogoIcon } from "@phosphor-icons/react";
import { motion } from "motion/react";
import { useState } from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { BrandIcon } from "@/components/ui/brand-icon";
+import { Button } from "@/components/ui/button";
import { Copyright } from "@/components/ui/copyright";
type FooterLinkItem = {
diff --git a/src/routes/_home/-sections/header.tsx b/src/routes/_home/-sections/header.tsx
index 9b44c0be3..10d72f331 100644
--- a/src/routes/_home/-sections/header.tsx
+++ b/src/routes/_home/-sections/header.tsx
@@ -3,11 +3,11 @@ import { ArrowRightIcon, TranslateIcon } from "@phosphor-icons/react";
import { Link } from "@tanstack/react-router";
import { motion, useMotionValue, useSpring } from "motion/react";
import { useEffect, useRef } from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { GithubStarsButton } from "@/components/input/github-stars-button";
import { LocaleCombobox } from "@/components/locale/combobox";
import { ThemeToggleButton } from "@/components/theme/toggle-button";
import { BrandIcon } from "@/components/ui/brand-icon";
+import { Button } from "@/components/ui/button";
import { ProductHuntBanner } from "./product-hunt-banner";
export function Header() {
diff --git a/src/routes/_home/-sections/hero.tsx b/src/routes/_home/-sections/hero.tsx
index b7c160995..ed94e8308 100644
--- a/src/routes/_home/-sections/hero.tsx
+++ b/src/routes/_home/-sections/hero.tsx
@@ -3,10 +3,10 @@ import { Trans } from "@lingui/react/macro";
import { ArrowRightIcon, BookIcon, SparkleIcon } from "@phosphor-icons/react";
import { Link } from "@tanstack/react-router";
import { motion } from "motion/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { CometCard } from "@/components/animation/comet-card";
import { Spotlight } from "@/components/animation/spotlight";
import { Badge } from "@/components/ui/badge";
+import { Button } from "@/components/ui/button";
export function Hero() {
return (
diff --git a/src/routes/auth/-components/social-auth.tsx b/src/routes/auth/-components/social-auth.tsx
index 05dc05f91..60e5c4ed3 100644
--- a/src/routes/auth/-components/social-auth.tsx
+++ b/src/routes/auth/-components/social-auth.tsx
@@ -4,7 +4,7 @@ import { FingerprintSimpleIcon, GithubLogoIcon, GoogleLogoIcon, VaultIcon } from
import { useQuery } from "@tanstack/react-query";
import { useRouter } from "@tanstack/react-router";
import { toast } from "sonner";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { authClient } from "@/integrations/auth/client";
import { orpc } from "@/integrations/orpc/client";
import { cn } from "@/utils/style";
diff --git a/src/routes/auth/forgot-password.tsx b/src/routes/auth/forgot-password.tsx
index d9750db26..4cdb7bd40 100644
--- a/src/routes/auth/forgot-password.tsx
+++ b/src/routes/auth/forgot-password.tsx
@@ -7,7 +7,7 @@ import { useState } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/auth/login.tsx b/src/routes/auth/login.tsx
index 4cb32765d..89884d6e8 100644
--- a/src/routes/auth/login.tsx
+++ b/src/routes/auth/login.tsx
@@ -8,7 +8,7 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/auth/register.tsx b/src/routes/auth/register.tsx
index 2b3e210ee..a822fc5f5 100644
--- a/src/routes/auth/register.tsx
+++ b/src/routes/auth/register.tsx
@@ -8,8 +8,8 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/auth/reset-password.tsx b/src/routes/auth/reset-password.tsx
index ec99fc4e6..8c2bc549f 100644
--- a/src/routes/auth/reset-password.tsx
+++ b/src/routes/auth/reset-password.tsx
@@ -8,7 +8,7 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/auth/resume-password.tsx b/src/routes/auth/resume-password.tsx
index 413c9a6a0..26c47dcc1 100644
--- a/src/routes/auth/resume-password.tsx
+++ b/src/routes/auth/resume-password.tsx
@@ -11,7 +11,7 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { useToggle } from "usehooks-ts";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { orpc } from "@/integrations/orpc/client";
diff --git a/src/routes/auth/verify-2fa-backup.tsx b/src/routes/auth/verify-2fa-backup.tsx
index 3e42d9437..4b41db829 100644
--- a/src/routes/auth/verify-2fa-backup.tsx
+++ b/src/routes/auth/verify-2fa-backup.tsx
@@ -7,7 +7,7 @@ import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormMessage } from "@/components/ui/form";
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "@/components/ui/input-otp";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/auth/verify-2fa.tsx b/src/routes/auth/verify-2fa.tsx
index a2008f9b7..1a98ddd5a 100644
--- a/src/routes/auth/verify-2fa.tsx
+++ b/src/routes/auth/verify-2fa.tsx
@@ -7,7 +7,7 @@ import { REGEXP_ONLY_DIGITS } from "input-otp";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormMessage } from "@/components/ui/form";
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "@/components/ui/input-otp";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/builder/$resumeId/-components/dock.tsx b/src/routes/builder/$resumeId/-components/dock.tsx
index 2084031b6..c916530fb 100644
--- a/src/routes/builder/$resumeId/-components/dock.tsx
+++ b/src/routes/builder/$resumeId/-components/dock.tsx
@@ -17,7 +17,7 @@ import { useCallback, useMemo } from "react";
import { useControls } from "react-zoom-pan-pinch";
import { toast } from "sonner";
import { useCopyToClipboard } from "usehooks-ts";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
import { authClient } from "@/integrations/auth/client";
import { orpc } from "@/integrations/orpc/client";
diff --git a/src/routes/builder/$resumeId/-components/header.tsx b/src/routes/builder/$resumeId/-components/header.tsx
index 17fb95012..c30327b02 100644
--- a/src/routes/builder/$resumeId/-components/header.tsx
+++ b/src/routes/builder/$resumeId/-components/header.tsx
@@ -13,15 +13,15 @@ import {
import { useMutation } from "@tanstack/react-query";
import { Link, useNavigate } from "@tanstack/react-router";
import { toast } from "sonner";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
-} from "@/components/animate-ui/components/radix/dropdown-menu";
-import { useResumeStore } from "@/components/resume/store/resume";
+} from "@/components/ui/dropdown-menu";
import { useDialogStore } from "@/dialogs/store";
import { useConfirm } from "@/hooks/use-confirm";
import { orpc } from "@/integrations/orpc/client";
diff --git a/src/routes/builder/$resumeId/-sidebar/left/index.tsx b/src/routes/builder/$resumeId/-sidebar/left/index.tsx
index 936bc7b49..3aa54c2b7 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/index.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/index.tsx
@@ -1,7 +1,7 @@
import { Fragment, useCallback, useRef } from "react";
import { match } from "ts-pattern";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
+import { Button } from "@/components/ui/button";
import { ScrollArea } from "@/components/ui/scroll-area";
import { Separator } from "@/components/ui/separator";
import { UserDropdownMenu } from "@/components/user/dropdown-menu";
diff --git a/src/routes/builder/$resumeId/-sidebar/left/sections/custom-fields.tsx b/src/routes/builder/$resumeId/-sidebar/left/sections/custom-fields.tsx
index 725141b65..27daeaa79 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/sections/custom-fields.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/sections/custom-fields.tsx
@@ -3,8 +3,8 @@ import { DotsSixVerticalIcon, LinkIcon, ListPlusIcon, XIcon } from "@phosphor-ic
import { Reorder, useDragControls } from "motion/react";
import { Controller, useFieldArray, useFormContext, useWatch } from "react-hook-form";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { IconPicker } from "@/components/input/icon-picker";
+import { Button } from "@/components/ui/button";
import { FormControl, FormField, FormItem } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
diff --git a/src/routes/builder/$resumeId/-sidebar/left/sections/custom.tsx b/src/routes/builder/$resumeId/-sidebar/left/sections/custom.tsx
index e4a07baed..2b0d7c830 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/sections/custom.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/sections/custom.tsx
@@ -10,6 +10,8 @@ import {
} from "@phosphor-icons/react";
import { AnimatePresence, Reorder } from "motion/react";
import { match } from "ts-pattern";
+import { useResumeStore } from "@/components/resume/store/resume";
+import { Badge } from "@/components/ui/badge";
import {
DropdownMenu,
DropdownMenuContent,
@@ -22,9 +24,7 @@ import {
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
-} from "@/components/animate-ui/components/radix/dropdown-menu";
-import { useResumeStore } from "@/components/resume/store/resume";
-import { Badge } from "@/components/ui/badge";
+} from "@/components/ui/dropdown-menu";
import { useDialogStore } from "@/dialogs/store";
import { useConfirm } from "@/hooks/use-confirm";
import type { CustomSection, CustomSectionItem as CustomSectionItemType, SectionType } from "@/schema/resume/data";
@@ -117,7 +117,7 @@ function CustomSectionContainer({ section }: { section: CustomSection }) {
{getSectionTitle(section.type)}
- {section.title}
+ {section.title}
diff --git a/src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx b/src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
index 2eb054622..022b2e001 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/sections/picture.tsx
@@ -7,9 +7,9 @@ import { useRef } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import type z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { ColorPicker } from "@/components/input/color-picker";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
import { ButtonGroup } from "@/components/ui/button-group";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
diff --git a/src/routes/builder/$resumeId/-sidebar/left/shared/section-base.tsx b/src/routes/builder/$resumeId/-sidebar/left/shared/section-base.tsx
index e23e33a99..013ba8187 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/shared/section-base.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/shared/section-base.tsx
@@ -1,12 +1,7 @@
import { CaretRightIcon } from "@phosphor-icons/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- Accordion,
- AccordionContent,
- AccordionItem,
- AccordionTrigger,
-} from "@/components/animate-ui/components/radix/accordion";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion";
+import { Button } from "@/components/ui/button";
import type { SectionType } from "@/schema/resume/data";
import { getSectionIcon, getSectionTitle, type LeftSidebarSection } from "@/utils/resume/section";
import { cn } from "@/utils/style";
diff --git a/src/routes/builder/$resumeId/-sidebar/left/shared/section-item.tsx b/src/routes/builder/$resumeId/-sidebar/left/shared/section-item.tsx
index 325d578cf..56c9186b2 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/shared/section-item.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/shared/section-item.tsx
@@ -15,7 +15,8 @@ import {
} from "@phosphor-icons/react";
import { Reorder, useDragControls } from "motion/react";
import { useMemo } from "react";
-import { Button, type ButtonProps } from "@/components/animate-ui/components/buttons/button";
+import { useResumeStore } from "@/components/resume/store/resume";
+import { Button, type ButtonProps } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
@@ -26,8 +27,7 @@ import {
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
-} from "@/components/animate-ui/components/radix/dropdown-menu";
-import { useResumeStore } from "@/components/resume/store/resume";
+} from "@/components/ui/dropdown-menu";
import { useDialogStore } from "@/dialogs/store";
import { useConfirm } from "@/hooks/use-confirm";
import type { SectionItem as SectionItemType, SectionType } from "@/schema/resume/data";
diff --git a/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx b/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
index f11b45904..b67d400e9 100644
--- a/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/left/shared/section-menu.tsx
@@ -9,7 +9,8 @@ import {
PencilSimpleLineIcon,
PlusIcon,
} from "@phosphor-icons/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
@@ -22,8 +23,7 @@ import {
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
-} from "@/components/animate-ui/components/radix/dropdown-menu";
-import { useResumeStore } from "@/components/resume/store/resume";
+} from "@/components/ui/dropdown-menu";
import { useDialogStore } from "@/dialogs/store";
import { useConfirm } from "@/hooks/use-confirm";
import { usePrompt } from "@/hooks/use-prompt";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/index.tsx b/src/routes/builder/$resumeId/-sidebar/right/index.tsx
index 913957f20..bb5e0e7e2 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/index.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/index.tsx
@@ -1,6 +1,6 @@
import { Fragment, useCallback, useRef } from "react";
import { match } from "ts-pattern";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Copyright } from "@/components/ui/copyright";
import { ScrollArea } from "@/components/ui/scroll-area";
import { Separator } from "@/components/ui/separator";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/css.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/css.tsx
index 4c3ca2e8f..c1bdd64fa 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/css.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/css.tsx
@@ -3,11 +3,11 @@ import { Trans } from "@lingui/react/macro";
import { lazy, Suspense } from "react";
import { useForm } from "react-hook-form";
import type z from "zod";
-import { Switch } from "@/components/animate-ui/components/radix/switch";
import { useResumeStore } from "@/components/resume/store/resume";
import { useTheme } from "@/components/theme/provider";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Skeleton } from "@/components/ui/skeleton";
+import { Switch } from "@/components/ui/switch";
import { metadataSchema } from "@/schema/resume/data";
import { SectionBase } from "../shared/section-base";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
index e9395fe8d..8cd531bc7 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/export.tsx
@@ -2,8 +2,8 @@ import { Trans } from "@lingui/react/macro";
import { CircleNotchIcon, FileJsIcon, FilePdfIcon } from "@phosphor-icons/react";
import { useMutation } from "@tanstack/react-query";
import { useCallback } from "react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
import { orpc } from "@/integrations/orpc/client";
import { downloadFromUrl, downloadWithAnchor, generateFilename } from "@/utils/file";
import { SectionBase } from "../shared/section-base";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
index 6dcd91767..a103a219e 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx
@@ -1,6 +1,6 @@
import { Trans } from "@lingui/react/macro";
import { HandHeartIcon } from "@phosphor-icons/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { SectionBase } from "../shared/section-base";
export function InformationSectionBuilder() {
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
index 9c355b42e..4ed81a532 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/layout/pages.tsx
@@ -16,9 +16,9 @@ import { Trans } from "@lingui/react/macro";
import { DotsSixVerticalIcon, PlusIcon, TrashIcon } from "@phosphor-icons/react";
import { type CSSProperties, forwardRef, type HTMLAttributes, useCallback, useState } from "react";
import { match } from "ts-pattern";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import { Switch } from "@/components/animate-ui/components/radix/switch";
import { useResumeStore } from "@/components/resume/store/resume";
+import { Button } from "@/components/ui/button";
+import { Switch } from "@/components/ui/switch";
import type { SectionType } from "@/schema/resume/data";
import { getSectionTitle } from "@/utils/resume/section";
import { cn } from "@/utils/style";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx
index 37c4f99f2..d4f3cdc2a 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/page.tsx
@@ -2,12 +2,12 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { Trans } from "@lingui/react/macro";
import { useForm } from "react-hook-form";
import type z from "zod";
-import { Switch } from "@/components/animate-ui/components/radix/switch";
import { getLocaleOptions } from "@/components/locale/combobox";
import { useResumeStore } from "@/components/resume/store/resume";
import { Combobox } from "@/components/ui/combobox";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText } from "@/components/ui/input-group";
+import { Switch } from "@/components/ui/switch";
import { pageSchema } from "@/schema/resume/data";
import { SectionBase } from "../shared/section-base";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/sharing.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/sharing.tsx
index 91359ef12..4d39e66cb 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/sharing.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/sharing.tsx
@@ -7,10 +7,10 @@ import { useParams } from "@tanstack/react-router";
import { useCallback, useMemo } from "react";
import { toast } from "sonner";
import { useCopyToClipboard } from "usehooks-ts";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import { Switch } from "@/components/animate-ui/components/radix/switch";
+import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
+import { Switch } from "@/components/ui/switch";
import { useConfirm } from "@/hooks/use-confirm";
import { usePrompt } from "@/hooks/use-prompt";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/statistics.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/statistics.tsx
index 38217674d..35dddbe68 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/statistics.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/statistics.tsx
@@ -3,7 +3,7 @@ import { Trans } from "@lingui/react/macro";
import { InfoIcon } from "@phosphor-icons/react";
import { useQuery } from "@tanstack/react-query";
import { useParams } from "@tanstack/react-router";
-import { Accordion, AccordionContent, AccordionItem } from "@/components/animate-ui/components/radix/accordion";
+import { Accordion, AccordionContent, AccordionItem } from "@/components/ui/accordion";
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
import { orpc } from "@/integrations/orpc/client";
import { SectionBase } from "../shared/section-base";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/sections/template.tsx b/src/routes/builder/$resumeId/-sidebar/right/sections/template.tsx
index eb1753cdc..a560b1e1d 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/sections/template.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/sections/template.tsx
@@ -1,8 +1,8 @@
import { useLingui } from "@lingui/react";
import { SwapIcon } from "@phosphor-icons/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { useResumeStore } from "@/components/resume/store/resume";
import { Badge } from "@/components/ui/badge";
+import { Button } from "@/components/ui/button";
import { templates } from "@/dialogs/resume/template/data";
import { useDialogStore } from "@/dialogs/store";
import { SectionBase } from "../shared/section-base";
diff --git a/src/routes/builder/$resumeId/-sidebar/right/shared/section-base.tsx b/src/routes/builder/$resumeId/-sidebar/right/shared/section-base.tsx
index 4492a56db..3f51cf231 100644
--- a/src/routes/builder/$resumeId/-sidebar/right/shared/section-base.tsx
+++ b/src/routes/builder/$resumeId/-sidebar/right/shared/section-base.tsx
@@ -1,11 +1,6 @@
import { CaretRightIcon } from "@phosphor-icons/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import {
- Accordion,
- AccordionContent,
- AccordionItem,
- AccordionTrigger,
-} from "@/components/animate-ui/components/radix/accordion";
+import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion";
+import { Button } from "@/components/ui/button";
import { getSectionIcon, getSectionTitle, type RightSidebarSection } from "@/utils/resume/section";
import { cn } from "@/utils/style";
import { useSectionStore } from "../../../-store/section";
diff --git a/src/routes/dashboard/settings/ai.tsx b/src/routes/dashboard/settings/ai.tsx
index 65ef16fa0..4886b2287 100644
--- a/src/routes/dashboard/settings/ai.tsx
+++ b/src/routes/dashboard/settings/ai.tsx
@@ -5,13 +5,13 @@ import { useMutation } from "@tanstack/react-query";
import { createFileRoute } from "@tanstack/react-router";
import { motion } from "motion/react";
import { useIsClient } from "usehooks-ts";
-import { Button } from "@/components/animate-ui/components/buttons/button";
-import { Switch } from "@/components/animate-ui/components/radix/switch";
+import { Button } from "@/components/ui/button";
import { Combobox, type ComboboxOption } from "@/components/ui/combobox";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Separator } from "@/components/ui/separator";
import { Spinner } from "@/components/ui/spinner";
+import { Switch } from "@/components/ui/switch";
import { type AIProvider, useAIStore } from "@/integrations/ai/store";
import { client } from "@/integrations/orpc/client";
import { cn } from "@/utils/style";
diff --git a/src/routes/dashboard/settings/api-keys.tsx b/src/routes/dashboard/settings/api-keys.tsx
index b2b193276..51c7c25c9 100644
--- a/src/routes/dashboard/settings/api-keys.tsx
+++ b/src/routes/dashboard/settings/api-keys.tsx
@@ -5,7 +5,7 @@ import { useQuery, useQueryClient } from "@tanstack/react-query";
import { createFileRoute } from "@tanstack/react-router";
import { AnimatePresence, motion } from "motion/react";
import { toast } from "sonner";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import { useDialogStore } from "@/dialogs/store";
import { useConfirm } from "@/hooks/use-confirm";
diff --git a/src/routes/dashboard/settings/authentication/-components/passkeys.tsx b/src/routes/dashboard/settings/authentication/-components/passkeys.tsx
index 724c89c6c..18a9e13da 100644
--- a/src/routes/dashboard/settings/authentication/-components/passkeys.tsx
+++ b/src/routes/dashboard/settings/authentication/-components/passkeys.tsx
@@ -5,7 +5,7 @@ import { FingerprintIcon, PlusIcon, TrashSimpleIcon } from "@phosphor-icons/reac
import { useQueryClient } from "@tanstack/react-query";
import { AnimatePresence, motion } from "motion/react";
import { toast } from "sonner";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import { useConfirm } from "@/hooks/use-confirm";
import { usePrompt } from "@/hooks/use-prompt";
diff --git a/src/routes/dashboard/settings/authentication/-components/password.tsx b/src/routes/dashboard/settings/authentication/-components/password.tsx
index 902d6f80a..f6cfadebd 100644
--- a/src/routes/dashboard/settings/authentication/-components/password.tsx
+++ b/src/routes/dashboard/settings/authentication/-components/password.tsx
@@ -4,7 +4,7 @@ import { Link, useNavigate } from "@tanstack/react-router";
import { motion } from "motion/react";
import { useCallback, useMemo } from "react";
import { match } from "ts-pattern";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { useDialogStore } from "@/dialogs/store";
import { useAuthAccounts } from "./hooks";
diff --git a/src/routes/dashboard/settings/authentication/-components/social-provider.tsx b/src/routes/dashboard/settings/authentication/-components/social-provider.tsx
index c7a829dab..2ee0cc24a 100644
--- a/src/routes/dashboard/settings/authentication/-components/social-provider.tsx
+++ b/src/routes/dashboard/settings/authentication/-components/social-provider.tsx
@@ -3,7 +3,7 @@ import { LinkBreakIcon, LinkIcon } from "@phosphor-icons/react";
import { motion } from "motion/react";
import { useCallback, useMemo } from "react";
import { match } from "ts-pattern";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import type { AuthProvider } from "@/integrations/auth/types";
import { getProviderIcon, getProviderName, useAuthAccounts, useAuthProviderActions } from "./hooks";
diff --git a/src/routes/dashboard/settings/authentication/-components/two-factor.tsx b/src/routes/dashboard/settings/authentication/-components/two-factor.tsx
index 96597ec4a..2d6317126 100644
--- a/src/routes/dashboard/settings/authentication/-components/two-factor.tsx
+++ b/src/routes/dashboard/settings/authentication/-components/two-factor.tsx
@@ -3,7 +3,7 @@ import { KeyIcon, LockOpenIcon, ToggleLeftIcon, ToggleRightIcon } from "@phospho
import { motion } from "motion/react";
import { useCallback, useMemo } from "react";
import { match } from "ts-pattern";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import { useDialogStore } from "@/dialogs/store";
import { authClient } from "@/integrations/auth/client";
diff --git a/src/routes/dashboard/settings/danger-zone.tsx b/src/routes/dashboard/settings/danger-zone.tsx
index 508851ace..1de55dbb0 100644
--- a/src/routes/dashboard/settings/danger-zone.tsx
+++ b/src/routes/dashboard/settings/danger-zone.tsx
@@ -6,7 +6,7 @@ import { createFileRoute, useNavigate } from "@tanstack/react-router";
import { motion } from "motion/react";
import { useState } from "react";
import { toast } from "sonner";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Separator } from "@/components/ui/separator";
import { useConfirm } from "@/hooks/use-confirm";
diff --git a/src/routes/dashboard/settings/preferences.tsx b/src/routes/dashboard/settings/preferences.tsx
index 24b51cc8c..0757835ce 100644
--- a/src/routes/dashboard/settings/preferences.tsx
+++ b/src/routes/dashboard/settings/preferences.tsx
@@ -3,9 +3,9 @@ import { Trans } from "@lingui/react/macro";
import { ArrowRightIcon, GearSixIcon } from "@phosphor-icons/react";
import { createFileRoute } from "@tanstack/react-router";
import { motion } from "motion/react";
-import { Button } from "@/components/animate-ui/components/buttons/button";
import { LocaleCombobox } from "@/components/locale/combobox";
import { ThemeCombobox } from "@/components/theme/combobox";
+import { Button } from "@/components/ui/button";
import { Label } from "@/components/ui/label";
import { Separator } from "@/components/ui/separator";
import { DashboardHeader } from "../-components/header";
diff --git a/src/routes/dashboard/settings/profile.tsx b/src/routes/dashboard/settings/profile.tsx
index bae0ed2c7..6d6033a95 100644
--- a/src/routes/dashboard/settings/profile.tsx
+++ b/src/routes/dashboard/settings/profile.tsx
@@ -9,7 +9,7 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { match } from "ts-pattern";
import z from "zod";
-import { Button } from "@/components/animate-ui/components/buttons/button";
+import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Separator } from "@/components/ui/separator";