remove banner on mobile/tablet devices

This commit is contained in:
Amruth Pillai
2024-03-25 15:08:39 +01:00
parent 890875ad9d
commit f6c2ae7504
19 changed files with 726 additions and 798 deletions

6
.ncurc.json Normal file
View File

@ -0,0 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/raineorshine/npm-check-updates/main/src/types/RunOptions.json",
"upgrade": true,
"install": "always",
"reject": ["@nestjs-modules/mailer"]
}

View File

@ -198,7 +198,7 @@ const Section = <T,>({
{url !== undefined && <Link url={url} />}
</div>
<div className="absolute inset-y-0 -left-px border-l-[4px] border-primary group-[.sidebar]:hidden" />
<div className="absolute inset-y-0 -left-px border-l-4 border-primary group-[.sidebar]:hidden" />
</div>
{summary !== undefined && !isEmptyString(summary) && (

View File

@ -12,13 +12,13 @@ import {
FormMessage,
Input,
} from "@reactive-resume/ui";
import { ControllerRenderProps, useForm } from "react-hook-form";
import { useCallback } from "react";
import { useForm } from "react-hook-form";
import { useDebounceValue } from "usehooks-ts";
import { z } from "zod";
import { SectionDialog } from "../sections/shared/section-dialog";
import { URLInput } from "../sections/shared/url-input";
import { useDebounceValue } from "usehooks-ts";
import { useCallback } from "react";
const formSchema = profileSchema;
@ -30,7 +30,7 @@ export const ProfilesDialog = () => {
resolver: zodResolver(formSchema),
});
const [iconSrc, setIconSrc] = useDebounceValue("", 400)
const [iconSrc, setIconSrc] = useDebounceValue("", 400);
const handleIconChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {
if (event.target.value === "") {
@ -40,8 +40,6 @@ export const ProfilesDialog = () => {
}
}, []);
return (
<SectionDialog<FormValues> id="profiles" form={form} defaultValues={defaultProfile}>
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
@ -97,17 +95,17 @@ export const ProfilesDialog = () => {
<FormControl>
<div className="flex items-center gap-x-2">
<Avatar className="size-8 bg-white">
{iconSrc && (
<AvatarImage
className="p-1.5"
src={iconSrc}
/>
)}
{iconSrc && <AvatarImage className="p-1.5" src={iconSrc} />}
</Avatar>
<Input {...field} id="iconSlug" placeholder="linkedin" onChange={(event) => {
field.onChange(event)
handleIconChange(event)
}} />
<Input
{...field}
id="iconSlug"
placeholder="linkedin"
onChange={(event) => {
field.onChange(event);
handleIconChange(event);
}}
/>
</div>
</FormControl>
<FormMessage />

View File

@ -3,21 +3,20 @@
import { HandHeart } from "@phosphor-icons/react";
import { motion } from "framer-motion";
export const DonationBanner = () => {
return (
<a href="https://opencollective.com/Reactive-Resume" target="_blank" rel="noreferrer">
<motion.div
whileHover={{ height: 48 }}
initial={{ opacity: 0, y: -50, height: 32 }}
animate={{ opacity: 1, y: 0, transition: { duration: 0.3 } }}
className="flex w-screen items-center justify-center gap-x-2 bg-zinc-800 text-xs font-bold leading-relaxed text-zinc-50"
>
<HandHeart weight="bold" size={14} className="shrink-0" />
<span>
If this project has helped you, please consider donating to Reactive Resume as we're
running out of server resources with the increasing number of users.
</span>
</motion.div>
</a>
);
};
export const DonationBanner = () => (
<motion.a
target="_blank"
rel="noreferrer"
href="https://opencollective.com/Reactive-Resume"
whileHover={{ height: 48 }}
initial={{ opacity: 0, y: -50, height: 32 }}
animate={{ opacity: 1, y: 0, transition: { duration: 0.3 } }}
className="hidden w-screen items-center justify-center gap-x-2 bg-zinc-800 text-xs font-bold leading-relaxed text-zinc-50 lg:flex"
>
<HandHeart weight="bold" size={14} className="shrink-0" />
<span>
If this project has helped you, please consider donating to Reactive Resume as we're running
out of server resources with the increasing number of users.
</span>
</motion.a>
);

View File

@ -44,7 +44,6 @@ export default defineConfig({
test: {
globals: true,
environment: "jsdom",
cache: { dir: "../../node_modules/.vitest" },
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},

View File

@ -9,7 +9,6 @@ export default defineConfig({
test: {
globals: true,
environment: "jsdom",
cache: { dir: "../../node_modules/.vitest" },
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},
});

View File

@ -33,9 +33,6 @@ export default defineConfig({
test: {
globals: true,
cache: {
dir: "../../node_modules/.vitest",
},
environment: "jsdom",
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},

View File

@ -9,7 +9,6 @@ export default defineConfig({
test: {
globals: true,
environment: "jsdom",
cache: { dir: "../../node_modules/.vitest" },
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},
});

View File

@ -9,7 +9,6 @@ export default defineConfig({
test: {
globals: true,
environment: "jsdom",
cache: { dir: "../../node_modules/.vitest" },
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},
});

View File

@ -44,7 +44,7 @@ export const ContextMenuSubContent = forwardRef<
<ContextMenuPrimitive.SubContent
ref={ref}
className={cn(
"z-50 max-h-[var(--radix-context-menu-content-available-height)] w-[var(--radix-context-menu-trigger-width)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border bg-background p-1 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
"z-50 max-h-[var(--radix-context-menu-content-available-height)] w-[var(--radix-context-menu-trigger-width)] min-w-32 origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border bg-background p-1 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}
{...props}
@ -61,7 +61,7 @@ export const ContextMenuContent = forwardRef<
<ContextMenuPrimitive.Content
ref={ref}
className={cn(
"z-50 max-h-[var(--radix-context-menu-content-available-height)] w-[var(--radix-context-menu-trigger-width)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border bg-background p-1 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
"z-50 max-h-[var(--radix-context-menu-content-available-height)] w-[var(--radix-context-menu-trigger-width)] min-w-32 origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border bg-background p-1 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}
{...props}

View File

@ -45,7 +45,7 @@ export const DropdownMenuSubContent = forwardRef<
<DropdownMenuPrimitive.SubContent
ref={ref}
className={cn(
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-background p-1 text-foreground shadow-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
"z-50 min-w-32 overflow-hidden rounded-md border bg-background p-1 text-foreground shadow-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}
{...props}
@ -64,7 +64,7 @@ export const DropdownMenuContent = forwardRef<
ref={ref}
sideOffset={sideOffset}
className={cn(
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-background p-1 text-foreground shadow-sm",
"z-50 min-w-32 overflow-hidden rounded-md border bg-background p-1 text-foreground shadow-sm",
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}

View File

@ -46,8 +46,8 @@ export const ScrollBar = forwardRef<
orientation={orientation}
className={cn(
"flex touch-none select-none transition-colors",
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
orientation === "horizontal" && "h-2.5 border-t border-t-transparent p-[1px]",
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-px",
orientation === "horizontal" && "h-2.5 border-t border-t-transparent p-px",
className,
)}
{...props}

View File

@ -38,7 +38,7 @@ export const SelectContent = forwardRef<
<SelectPrimitive.Content
ref={ref}
className={cn(
"relative z-50 min-w-[8rem] overflow-hidden rounded border border-border bg-background text-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
"relative z-50 min-w-32 overflow-hidden rounded border border-border bg-background text-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
position === "popper" &&
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
className,

View File

@ -12,7 +12,7 @@ export const Separator = forwardRef<
orientation={orientation}
className={cn(
"shrink-0 bg-border",
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
className,
)}
{...props}

View File

@ -35,8 +35,8 @@ export const KeyboardShortcut = ({
return (
<span
className={cn(
"ml-auto scale-0 text-xs tracking-widest opacity-0 transition-[opacity]",
value && "scale-100 opacity-60",
"ml-auto text-xs tracking-widest transition-opacity",
value ? "scale-100 opacity-60" : "scale-0 opacity-0",
className,
)}
{...props}

View File

@ -38,7 +38,6 @@ export default defineConfig({
test: {
globals: true,
environment: "jsdom",
cache: { dir: "../../node_modules/.vitest" },
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},
});

View File

@ -9,7 +9,6 @@ export default defineConfig({
test: {
globals: true,
environment: "jsdom",
cache: { dir: "../../node_modules/.vitest" },
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
},
});

View File

@ -1,7 +1,7 @@
{
"name": "@reactive-resume/source",
"description": "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
"version": "4.0.9",
"version": "4.0.10",
"license": "MIT",
"private": true,
"author": {
@ -15,7 +15,7 @@
},
"scripts": {
"dev": "nx run-many -t serve",
"test": "nx run-many -t test",
"test": "pnpm vitest run",
"prebuild": "pnpm prisma:generate",
"build": "nx run-many -t build",
"prestart": "pnpm prisma:migrate",
@ -73,7 +73,7 @@
"@types/passport-github2": "^1.2.9",
"@types/passport-google-oauth20": "^2.0.14",
"@types/passport-local": "^1.0.38",
"@types/react": "18.2.67",
"@types/react": "18.2.70",
"@types/react-dom": "18.2.22",
"@types/react-is": "18.2.4",
"@types/retry": "^0.12.5",
@ -110,7 +110,7 @@
"ts-jest": "^29.1.2",
"ts-node": "10.9.2",
"typescript": "~5.4.3",
"vite": "~5.2.2",
"vite": "~5.2.6",
"vite-plugin-dts": "~3.7.3",
"vitest": "~1.4.0"
},
@ -125,10 +125,10 @@
"@lingui/detect-locale": "^4.7.1",
"@lingui/macro": "^4.7.1",
"@lingui/react": "^4.7.1",
"@nestjs-modules/mailer": "^1.10.3",
"@nestjs-modules/mailer": "1.10.3",
"@nestjs/axios": "^3.0.2",
"@nestjs/common": "^10.3.5",
"@nestjs/config": "^3.2.0",
"@nestjs/config": "^3.2.1",
"@nestjs/core": "^10.3.5",
"@nestjs/jwt": "^10.2.0",
"@nestjs/passport": "^10.0.3",
@ -167,7 +167,7 @@
"@songkeys/nestjs-redis": "^10.0.0",
"@songkeys/nestjs-redis-health": "^10.0.0",
"@swc/helpers": "~0.5.7",
"@tanstack/react-query": "^5.28.6",
"@tanstack/react-query": "^5.28.8",
"@tiptap/extension-highlight": "2.2.4",
"@tiptap/extension-image": "2.2.4",
"@tiptap/extension-link": "2.2.4",
@ -213,7 +213,7 @@
"passport-local": "^1.0.0",
"pdf-lib": "^1.17.1",
"prisma": "^5.11.0",
"puppeteer": "^22.6.0",
"puppeteer": "^22.6.1",
"qrcode.react": "^3.1.0",
"react": "18.2.0",
"react-colorful": "^5.6.1",
@ -221,21 +221,21 @@
"react-helmet-async": "^2.0.4",
"react-hook-form": "^7.51.1",
"react-parallax-tilt": "^1.7.217",
"react-resizable-panels": "^2.0.13",
"react-resizable-panels": "^2.0.16",
"react-router-dom": "6.22.3",
"react-zoom-pan-pinch": "^3.4.3",
"reflect-metadata": "^0.2.1",
"rxjs": "^7.8.1",
"sharp": "^0.33.2",
"sharp": "^0.33.3",
"tailwind-merge": "^2.2.2",
"tslib": "^2.6.2",
"unique-names-generator": "^4.7.1",
"use-breakpoint": "^4.0.1",
"use-keyboard-shortcut": "^1.1.6",
"usehooks-ts": "^3.0.1",
"usehooks-ts": "^3.0.2",
"webfontloader": "^1.6.28",
"zod": "^3.22.4",
"zod-to-json-schema": "^3.22.4",
"zod-to-json-schema": "^3.22.5",
"zundo": "^2.1.0",
"zustand": "^4.5.2"
},

1398
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff