mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-15 07:17:00 +10:00
- simplify imports
- update translations - convert image to base64 before sending to printer - update development docs
This commit is contained in:
+1
-4
@@ -15,12 +15,9 @@
|
||||
"menuAccent": "subtle",
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/utils",
|
||||
"utils": "@/utils/style",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/utils",
|
||||
"hooks": "@/hooks"
|
||||
},
|
||||
"registries": {
|
||||
"@animate-ui": "https://animate-ui.com/r/{name}.json"
|
||||
}
|
||||
}
|
||||
|
||||
+3
-5
@@ -2,7 +2,7 @@ name: reactive_resume
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
image: postgres:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: postgres
|
||||
@@ -24,10 +24,8 @@ services:
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4000:3000"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
environment:
|
||||
- QUEUED=10
|
||||
- QUEUED=30
|
||||
- HEALTH=true
|
||||
- CONCURRENT=20
|
||||
- TOKEN=1234567890
|
||||
@@ -95,6 +93,6 @@ services:
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
mailpit_data:
|
||||
postgres_data:
|
||||
seaweedfs_data:
|
||||
mailpit_data:
|
||||
|
||||
+3
-6
@@ -2,7 +2,7 @@ name: reactive_resume
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
image: postgres:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: postgres
|
||||
@@ -20,15 +20,12 @@ services:
|
||||
browserless:
|
||||
image: ghcr.io/browserless/chromium:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4000:3000"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
environment:
|
||||
- QUEUED=10
|
||||
- QUEUED=30
|
||||
- HEALTH=true
|
||||
- CONCURRENT=20
|
||||
- TOKEN=1234567890
|
||||
- EXTERNAL=http://localhost:4000
|
||||
healthcheck:
|
||||
test:
|
||||
["CMD", "curl", "-f", "http://localhost:3000/pressure?token=1234567890"]
|
||||
|
||||
@@ -66,6 +66,10 @@ This guide walks you through setting up Reactive Resume for local development. W
|
||||
# Server
|
||||
APP_URL=http://localhost:3000
|
||||
|
||||
# Printer (required for local development)
|
||||
PRINTER_APP_URL=http://host.docker.internal:3000
|
||||
PRINTER_ENDPOINT=ws://localhost:4000?token=1234567890
|
||||
|
||||
# Database
|
||||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres
|
||||
|
||||
@@ -79,9 +83,6 @@ This guide walks you through setting up Reactive Resume for local development. W
|
||||
S3_BUCKET=reactive-resume
|
||||
S3_FORCE_PATH_STYLE=true
|
||||
|
||||
# PDF Printer (required for local development)
|
||||
PRINTER_APP_URL=http://host.docker.internal:3000
|
||||
|
||||
# Email (Mailpit for local development)
|
||||
SMTP_HOST=localhost
|
||||
SMTP_PORT=1025
|
||||
@@ -135,8 +136,6 @@ Here are the most commonly used scripts during development:
|
||||
|---------|-------------|
|
||||
| `pnpm run db:generate` | Generate migration files from schema changes |
|
||||
| `pnpm run db:migrate` | Apply pending migrations |
|
||||
| `pnpm run db:push` | Push schema changes directly (dev only) |
|
||||
| `pnpm run db:pull` | Pull schema from existing database |
|
||||
| `pnpm run db:studio` | Open Drizzle Studio (database GUI) |
|
||||
|
||||
### Internationalization
|
||||
@@ -149,7 +148,7 @@ Here are the most commonly used scripts during development:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `pnpm run docs` | Start the Mintlify docs development server |
|
||||
| `pnpm run docs:dev` | Start the Mintlify docs development server |
|
||||
|
||||
---
|
||||
|
||||
@@ -323,30 +322,6 @@ pnpm run typecheck
|
||||
pnpm run typecheck
|
||||
```
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Uploaded images not appearing in PDF exports">
|
||||
When running in development mode (Docker services + app on host), images you upload to your resume may not appear in PDF exports. This is because the printer service runs inside Docker and cannot access URLs that resolve to `localhost` on your host machine.
|
||||
|
||||
**Why this happens:**
|
||||
|
||||
The app running on your host uploads images to SeaweedFS (S3 storage) using `localhost:8333`. When the printer tries to fetch these images to render the PDF, it cannot resolve `localhost` the same way your host machine does — they're on different networks.
|
||||
|
||||
**Solutions:**
|
||||
|
||||
1. **Run the entire stack in Docker** (recommended for testing PDF exports):
|
||||
|
||||
Use the production `compose.yml` instead of `compose.dev.yml` to run all services, including the app, on the same Docker network:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
This ensures all services can communicate with each other seamlessly.
|
||||
|
||||
2. **Use publicly accessible images**:
|
||||
|
||||
If you need to test PDF exports while developing on the host, use images hosted on publicly accessible URLs (e.g., images already hosted online) instead of uploading local files. The printer service can fetch these without network issues.
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
---
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
"tailwind": { "entry": ["src/styles.css"] },
|
||||
"project": ["src/**/*.{js,jsx,ts,tsx,mdx,css}"],
|
||||
"ignoreBinaries": ["mint"],
|
||||
"ignoreDependencies": ["npm-check-updates", "node-addon-api", "node-gyp"],
|
||||
"ignore": ["src/schema/**/*.ts", "src/routeTree.gen.ts"]
|
||||
"ignoreDependencies": ["npm-check-updates", "reflect-metadata", "node-addon-api", "node-gyp"],
|
||||
"ignore": ["src/schema/**/*.ts", "src/components/**/*.{ts,tsx}", "src/routeTree.gen.ts"]
|
||||
}
|
||||
|
||||
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+242
-242
File diff suppressed because it is too large
Load Diff
+14
-13
@@ -22,17 +22,18 @@
|
||||
"db:push": "drizzle-kit push",
|
||||
"db:studio": "drizzle-kit studio",
|
||||
"dev": "vite dev",
|
||||
"preview": "vite preview",
|
||||
"docs:dev": "cd docs && npx mint dev",
|
||||
"knip": "knip",
|
||||
"lingui:extract": "lingui extract --clean --overwrite",
|
||||
"lint": "biome check --write .",
|
||||
"start": "node -r reflect-metadata .output/server/index.mjs",
|
||||
"start": "node .output/server/index.mjs",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ai-sdk/anthropic": "^3.0.18",
|
||||
"@ai-sdk/google": "^3.0.10",
|
||||
"@ai-sdk/openai": "^3.0.14",
|
||||
"@ai-sdk/anthropic": "^3.0.19",
|
||||
"@ai-sdk/google": "^3.0.11",
|
||||
"@ai-sdk/openai": "^3.0.15",
|
||||
"@aws-sdk/client-s3": "^3.972.0",
|
||||
"@better-auth/core": "1.5.0-beta.9",
|
||||
"@better-auth/passkey": "1.5.0-beta.9",
|
||||
@@ -55,18 +56,18 @@
|
||||
"@sindresorhus/slugify": "^3.0.0",
|
||||
"@t3-oss/env-core": "^0.13.10",
|
||||
"@tanstack/react-query": "5.90.19",
|
||||
"@tanstack/react-router": "^1.154.5",
|
||||
"@tanstack/react-router-ssr-query": "^1.154.5",
|
||||
"@tanstack/react-start": "^1.154.5",
|
||||
"@tanstack/zod-adapter": "^1.154.5",
|
||||
"@tanstack/react-router": "^1.154.7",
|
||||
"@tanstack/react-router-ssr-query": "^1.154.7",
|
||||
"@tanstack/react-start": "^1.154.7",
|
||||
"@tanstack/zod-adapter": "^1.154.7",
|
||||
"@tiptap/extension-highlight": "^3.16.0",
|
||||
"@tiptap/extension-table": "^3.16.0",
|
||||
"@tiptap/extension-text-align": "^3.16.0",
|
||||
"@tiptap/pm": "^3.16.0",
|
||||
"@tiptap/react": "^3.16.0",
|
||||
"@tiptap/starter-kit": "^3.16.0",
|
||||
"ai": "^6.0.44",
|
||||
"ai-sdk-ollama": "^3.1.1",
|
||||
"ai": "^6.0.46",
|
||||
"ai-sdk-ollama": "^3.2.0",
|
||||
"bcrypt": "^6.0.0",
|
||||
"better-auth": "1.5.0-beta.9",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
@@ -80,10 +81,10 @@
|
||||
"input-otp": "^1.4.2",
|
||||
"js-cookie": "^3.0.5",
|
||||
"monaco-editor": "^0.55.1",
|
||||
"motion": "^12.28.1",
|
||||
"motion": "^12.29.0",
|
||||
"nodemailer": "^7.0.12",
|
||||
"pg": "^8.17.2",
|
||||
"puppeteer-core": "^24.35.0",
|
||||
"puppeteer-core": "^24.36.0",
|
||||
"qrcode.react": "^4.2.0",
|
||||
"radix-ui": "^1.4.3",
|
||||
"react": "^19.2.3",
|
||||
@@ -116,7 +117,7 @@
|
||||
"@tailwindcss/vite": "^4.1.18",
|
||||
"@types/bcrypt": "^6.0.0",
|
||||
"@types/js-cookie": "^3.0.6",
|
||||
"@types/node": "^25.0.9",
|
||||
"@types/node": "^25.0.10",
|
||||
"@types/nodemailer": "^7.0.5",
|
||||
"@types/pg": "^8.16.0",
|
||||
"@types/react": "^19.2.9",
|
||||
|
||||
Generated
+231
-247
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,7 @@
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { useRef } from "react";
|
||||
import { useHotkeys } from "react-hotkeys-hook";
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogDescription,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
} from "@/components/animate-ui/components/radix/dialog";
|
||||
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog";
|
||||
import { Command, CommandEmpty, CommandInput, CommandList } from "../ui/command";
|
||||
import { NavigationCommandGroup } from "./pages/navigation";
|
||||
import { PreferencesCommandGroup } from "./pages/preferences";
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { EyedropperIcon } from "@phosphor-icons/react";
|
||||
import { Slider as SliderPrimitive, Slot as SlotPrimitive } from "radix-ui";
|
||||
import * as React from "react";
|
||||
import { Button } from "@/components/animate-ui/components/buttons/button";
|
||||
import { VisuallyHiddenInput } from "@/components/input/visually-hidden-input";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
|
||||
import {
|
||||
@@ -826,6 +826,4 @@ export {
|
||||
ColorPickerSwatch as Swatch,
|
||||
ColorPickerEyeDropper as EyeDropper,
|
||||
ColorPickerInput as Input,
|
||||
//
|
||||
useColorPickerStore as useColorPicker,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { GithubLogoIcon, StarIcon } from "@phosphor-icons/react";
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { Button } from "@/components/animate-ui/components/buttons/button";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { orpc } from "@/integrations/orpc/client";
|
||||
import { CountUp } from "../animation/count-up";
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { ProhibitIcon } from "@phosphor-icons/react";
|
||||
import Fuse from "fuse.js";
|
||||
import { memo, useCallback, useMemo, useState } from "react";
|
||||
import { type CellComponentProps, Grid } from "react-window";
|
||||
import { Button } from "@/components/animate-ui/components/buttons/button";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { type IconName, icons } from "@/schema/icons";
|
||||
import { cn } from "@/utils/style";
|
||||
import { Input } from "../ui/input";
|
||||
|
||||
@@ -52,7 +52,7 @@ import { useMemo } from "react";
|
||||
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 {
|
||||
DropdownMenu,
|
||||
DropdownMenuCheckboxItem,
|
||||
@@ -60,7 +60,7 @@ import {
|
||||
DropdownMenuItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
} from "@/components/animate-ui/components/radix/dropdown-menu";
|
||||
} from "@/components/ui/dropdown-menu";
|
||||
import { usePrompt } from "@/hooks/use-prompt";
|
||||
import { isRTL } from "@/utils/locale";
|
||||
import { sanitizeHtml } from "@/utils/sanitize";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { ArrowClockwiseIcon, WarningIcon } from "@phosphor-icons/react";
|
||||
import type { ErrorComponentProps } from "@tanstack/react-router";
|
||||
import { Button } from "@/components/animate-ui/components/buttons/button";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Alert, AlertDescription, AlertTitle } from "../ui/alert";
|
||||
import { BrandIcon } from "../ui/brand-icon";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { ArrowLeftIcon, WarningIcon } from "@phosphor-icons/react";
|
||||
import { Link, type NotFoundRouteProps } from "@tanstack/react-router";
|
||||
import { Button } from "@/components/animate-ui/components/buttons/button";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Alert, AlertDescription, AlertTitle } from "../ui/alert";
|
||||
import { BrandIcon } from "../ui/brand-icon";
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import type z from "zod";
|
||||
import { levelDesignSchema } from "@/schema/resume/data";
|
||||
import { Combobox, type ComboboxProps } from "../ui/combobox";
|
||||
|
||||
export type LevelType = z.infer<typeof levelDesignSchema>["type"];
|
||||
type LevelType = z.infer<typeof levelDesignSchema>["type"];
|
||||
|
||||
type LevelTypeComboboxProps = Omit<ComboboxProps, "options">;
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { type HTMLMotionProps, motion } from "motion/react";
|
||||
import { Slot, type WithAsChild } from "@/components/animate-ui/primitives/animate/slot";
|
||||
import { Slot, type WithAsChild } from "@/components/primitives/slot";
|
||||
|
||||
type ButtonProps = WithAsChild<
|
||||
Omit<HTMLMotionProps<"button">, "children"> & {
|
||||
@@ -178,9 +178,7 @@ export function getSectionComponent(
|
||||
if (visibleItems.length === 0) return null;
|
||||
|
||||
return (
|
||||
<section
|
||||
className={cn(`page-section page-section-custom page-section-${id} wrap-break-word`, sectionClassName)}
|
||||
>
|
||||
<section className={cn(`page-section page-section-custom page-section-${id}`, sectionClassName)}>
|
||||
<h6 className="mb-1 text-(--page-primary-color)">{customSection.title}</h6>
|
||||
|
||||
<div
|
||||
@@ -188,10 +186,7 @@ export function getSectionComponent(
|
||||
style={{ gridTemplateColumns: `repeat(${customSection.columns}, 1fr)` }}
|
||||
>
|
||||
{visibleItems.map((item) => (
|
||||
<div
|
||||
key={item.id}
|
||||
className={cn(`section-item section-item-${customSection.type} wrap-break-word *:space-y-1`)}
|
||||
>
|
||||
<div key={item.id} className={cn(`section-item section-item-${customSection.type} *:space-y-1`)}>
|
||||
{renderItemByType(customSection.type, item, itemClassName)}
|
||||
</div>
|
||||
))}
|
||||
|
||||
@@ -10,7 +10,7 @@ export function PageLink({ url, label, className }: Props) {
|
||||
if (!url) return null;
|
||||
|
||||
return (
|
||||
<a href={url} target="_blank" rel="noopener noreferrer" className={cn("block truncate", className)}>
|
||||
<a href={url} target="_blank" rel="noopener noreferrer" className={cn("inline-block text-wrap", className)}>
|
||||
{label || url}
|
||||
</a>
|
||||
);
|
||||
|
||||
@@ -26,7 +26,7 @@ export function PageSection<T extends SectionType>({ type, className, children }
|
||||
style={{ gridTemplateColumns: `repeat(${section.columns}, 1fr)` }}
|
||||
>
|
||||
{items.map((item) => (
|
||||
<div key={item.id} className={cn(`section-item section-item-${type} wrap-break-word *:space-y-1`)}>
|
||||
<div key={item.id} className={cn(`section-item section-item-${type} *:space-y-1`)}>
|
||||
{children(item)}
|
||||
</div>
|
||||
))}
|
||||
|
||||
@@ -13,7 +13,7 @@ export function PageSummary({ className }: PageSummaryProps) {
|
||||
return (
|
||||
<section
|
||||
className={cn(
|
||||
"page-section page-section-summary wrap-break-word",
|
||||
"page-section page-section-summary",
|
||||
section.hidden && "hidden",
|
||||
section.content === "" && "hidden",
|
||||
className,
|
||||
|
||||
@@ -2,7 +2,7 @@ import { t } from "@lingui/core/macro";
|
||||
import { MoonIcon, SunIcon } from "@phosphor-icons/react";
|
||||
import { useCallback, useRef } from "react";
|
||||
import { flushSync } from "react-dom";
|
||||
import { Button } from "@/components/animate-ui/components/buttons/button";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { useTheme } from "./provider";
|
||||
|
||||
export function ThemeToggleButton(props: React.ComponentProps<typeof Button>) {
|
||||
|
||||
+2
-2
@@ -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 <AccordionItemPrimitive className={cn("border-b last:border-b-0", className)} {...props} />;
|
||||
return <AccordionItemPrimitive className={cn(className)} {...props} />;
|
||||
}
|
||||
|
||||
type AccordionTriggerProps = AccordionTriggerPrimitiveProps;
|
||||
+2
-2
@@ -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;
|
||||
@@ -36,4 +36,4 @@ function Badge({
|
||||
);
|
||||
}
|
||||
|
||||
export { Badge, badgeVariants };
|
||||
export { Badge };
|
||||
|
||||
@@ -74,4 +74,4 @@ function ButtonGroupSeparator({
|
||||
);
|
||||
}
|
||||
|
||||
export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };
|
||||
export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText };
|
||||
|
||||
+1
-4
@@ -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(
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
+1
-1
@@ -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;
|
||||
+1
-1
@@ -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;
|
||||
@@ -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 };
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<typeof SheetPrimitive.Root>) {
|
||||
|
||||
@@ -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";
|
||||
|
||||
+1
-1
@@ -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 & {
|
||||
@@ -35,4 +35,4 @@ function Toggle({
|
||||
);
|
||||
}
|
||||
|
||||
export { Toggle, toggleVariants };
|
||||
export { Toggle };
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user