fix(mobile): check for responsiveness, add scrollarea support

This commit is contained in:
Amruth Pillai
2023-11-14 11:43:28 +01:00
parent 6303071410
commit 888b4db0bb
40 changed files with 491 additions and 397 deletions

View File

@ -19,8 +19,9 @@ export const ArtboardPage = () => {
webfontloader.load({
google: { families: [fontString] },
active: () => {
const width = window.document.body.offsetWidth;
const height = window.document.body.offsetHeight;
const message = { type: "PAGE_LOADED", payload: { height } };
const message = { type: "PAGE_LOADED", payload: { width, height } };
window.postMessage(message, "*");
},
});

View File

@ -490,7 +490,7 @@ export const Azurill = ({ columns, isFirstPage = false }: TemplateProps) => {
{isFirstPage && <Header />}
<div className="grid grid-cols-3 gap-x-4">
<div className="sidebar group col-span-1 space-y-4">
<div className="sidebar group space-y-4">
{sidebar.map((section) => (
<Fragment key={section}>{mapSectionToComponent(section)}</Fragment>
))}

View File

@ -79,7 +79,7 @@ const Summary = () => {
return (
<section id={section.id} className="grid grid-cols-5 border-t pt-2.5">
<div className="col-span-1">
<div>
<h4 className="text-base font-bold">{section.name}</h4>
</div>
@ -153,7 +153,7 @@ const Section = <T,>({
return (
<section id={section.id} className="grid grid-cols-5 border-t pt-2.5">
<div className="col-span-1">
<div>
<h4 className="text-base font-bold">{section.name}</h4>
</div>

View File

@ -503,7 +503,7 @@ export const Chikorita = ({ columns, isFirstPage = false }: TemplateProps) => {
))}
</div>
<div className="sidebar group col-span-1 space-y-4 text-background">
<div className="sidebar group space-y-4 text-background">
{sidebar.map((section) => (
<Fragment key={section}>{mapSectionToComponent(section)}</Fragment>
))}
@ -511,7 +511,7 @@ export const Chikorita = ({ columns, isFirstPage = false }: TemplateProps) => {
</div>
<div className="absolute inset-0 grid grid-cols-3" style={{ top: -margin }}>
<div className="col-span-1 col-start-3 ml-2 bg-primary"></div>
<div className="col-start-3 ml-2 bg-primary"></div>
</div>
</div>
);

View File

@ -30,7 +30,7 @@ const Header = () => {
return (
<div className="relative z-20 grid grid-cols-3 space-x-4">
<div className="col-span-1 mx-auto">
<div className="mx-auto">
<Picture />
</div>
@ -530,7 +530,7 @@ export const Ditto = ({ columns, isFirstPage = false }: TemplateProps) => {
{isFirstPage && <Header />}
<div className="grid grid-cols-3 space-x-4">
<div className="sidebar group col-span-1 space-y-4">
<div className="sidebar group space-y-4">
{sidebar.map((section) => (
<Fragment key={section}>{mapSectionToComponent(section)}</Fragment>
))}

View File

@ -526,7 +526,7 @@ export const Pikachu = ({ columns, isFirstPage = false }: TemplateProps) => {
return (
<div className="space-y-4">
<div className="grid grid-cols-3 space-x-6">
<div className="sidebar group col-span-1 space-y-4">
<div className="sidebar group space-y-4">
{isFirstPage && <Picture className="w-full !max-w-none" />}
{sidebar.map((section) => (

View File

@ -32,7 +32,7 @@ export const BuilderHeader = () => {
<div
style={{ left: `${leftPanelSize}%`, right: `${rightPanelSize}%` }}
className={cn(
"fixed inset-x-0 top-0 z-[100] h-16 bg-secondary-accent/50 backdrop-blur-lg lg:z-20",
"fixed inset-x-0 top-0 z-[60] h-16 bg-secondary-accent/50 backdrop-blur-lg lg:z-20",
!isDragging && "transition-[left,right]",
)}
>

View File

@ -50,19 +50,17 @@ export const BuilderToolbar = () => {
return (
<motion.div
initial={{ opacity: 0, bottom: -64 }}
whileHover={{ opacity: 1, bottom: 0 }}
animate={{ opacity: 0.3, bottom: -28 }}
className="fixed inset-x-0 mx-auto pb-4 pt-6 text-center"
whileHover={{ opacity: 1, bottom: 0 }}
className="fixed inset-x-0 mx-auto hidden pb-4 pt-6 text-center md:block"
>
<div className="inline-flex items-center justify-center rounded-full bg-background px-4 shadow-xl">
{/* Undo */}
<Tooltip content={t`Undo`}>
<Button size="icon" variant="ghost" className="rounded-none" onClick={() => undo()}>
<ArrowCounterClockwise />
</Button>
</Tooltip>
{/* Redo */}
<Tooltip content={t`Redo`}>
<Button size="icon" variant="ghost" className="rounded-none" onClick={() => redo()}>
<ArrowClockwise />
@ -97,7 +95,6 @@ export const BuilderToolbar = () => {
<Separator orientation="vertical" className="h-9" />
{/* Toggle Page Break Line */}
<Tooltip content={t`Toggle Page Break Line`}>
<Toggle
className="rounded-none"
@ -110,7 +107,6 @@ export const BuilderToolbar = () => {
</Toggle>
</Tooltip>
{/* Toggle Page Numbers */}
<Tooltip content={t`Toggle Page Numbers`}>
<Toggle
className="rounded-none"
@ -125,15 +121,13 @@ export const BuilderToolbar = () => {
<Separator orientation="vertical" className="h-9" />
{/* Copy Link to Resume */}
<Tooltip content={t`Copy Link to Resume`}>
<Button size="icon" variant="ghost" className="rounded-none" disabled={!isPublic}>
<LinkSimple />
</Button>
</Tooltip>
{/* Download PDF */}
<Tooltip content={t`Download PDF`}>
<Tooltip content={t`Export as PDF`}>
<Button
size="icon"
variant="ghost"

View File

@ -75,7 +75,7 @@ export const BuilderLayout = () => {
<Sheet open={sheet.left.open} onOpenChange={sheet.left.setOpen}>
<SheetContent
side="left"
className="p-0 sm:max-w-xl"
className="top-16 p-0 sm:max-w-xl"
showClose={false}
onOpenAutoFocus={onOpenAutoFocus}
>

View File

@ -35,7 +35,7 @@ export const AwardsDialog = () => {
name="title"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t({ message: "Title", context: "Name of the Award" })}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const AwardsDialog = () => {
name="awarder"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Awarder`}</FormLabel>
<FormControl>
<Input {...field} />
@ -63,7 +63,7 @@ export const AwardsDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input
@ -83,7 +83,7 @@ export const AwardsDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -97,7 +97,7 @@ export const AwardsDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -35,7 +35,7 @@ export const CertificationsDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t({ message: "Name", context: "Name of the Certification" })}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const CertificationsDialog = () => {
name="issuer"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Issuer`}</FormLabel>
<FormControl>
<Input {...field} />
@ -63,7 +63,7 @@ export const CertificationsDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} placeholder={t`March 2023`} />
@ -77,7 +77,7 @@ export const CertificationsDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} placeholder="https://udemy.com/certificate/UC-..." />
@ -91,7 +91,7 @@ export const CertificationsDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -49,7 +49,7 @@ export const CustomSectionDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Name`}</FormLabel>
<FormControl>
<Input {...field} />
@ -63,7 +63,7 @@ export const CustomSectionDialog = () => {
name="description"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Description`}</FormLabel>
<FormControl>
<Input {...field} />
@ -77,7 +77,7 @@ export const CustomSectionDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} />
@ -91,7 +91,7 @@ export const CustomSectionDialog = () => {
name="location"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Location`}</FormLabel>
<FormControl>
<Input {...field} />
@ -105,7 +105,7 @@ export const CustomSectionDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -119,7 +119,7 @@ export const CustomSectionDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput
@ -140,7 +140,7 @@ export const CustomSectionDialog = () => {
name="keywords"
control={form.control}
render={({ field }) => (
<div className="col-span-2 space-y-3">
<div className="space-y-3 sm:col-span-2">
<FormItem>
<FormLabel>{t`Keywords`}</FormLabel>
<FormControl>

View File

@ -35,7 +35,7 @@ export const EducationDialog = () => {
name="institution"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Institution`}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const EducationDialog = () => {
name="studyType"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>
{t({
message: "Type of Study",
@ -68,7 +68,7 @@ export const EducationDialog = () => {
name="area"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>
{t({
message: "Area of Study",
@ -87,7 +87,7 @@ export const EducationDialog = () => {
name="score"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>
{t({
message: "Score",
@ -106,7 +106,7 @@ export const EducationDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} placeholder={t`March 2023 - Present`} />
@ -120,7 +120,7 @@ export const EducationDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -134,7 +134,7 @@ export const EducationDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -35,7 +35,7 @@ export const ExperienceDialog = () => {
name="company"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Company`}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const ExperienceDialog = () => {
name="position"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>
{t({
message: "Position",
@ -68,7 +68,7 @@ export const ExperienceDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} placeholder={t`March 2023 - Present`} />
@ -82,7 +82,7 @@ export const ExperienceDialog = () => {
name="location"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Location`}</FormLabel>
<FormControl>
<Input {...field} />
@ -96,7 +96,7 @@ export const ExperienceDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -110,7 +110,7 @@ export const ExperienceDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -33,7 +33,7 @@ export const LanguagesDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Name`}</FormLabel>
<FormControl>
<Input {...field} />
@ -47,7 +47,7 @@ export const LanguagesDialog = () => {
name="fluency"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Fluency`}</FormLabel>
<FormControl>
<Input {...field} />
@ -61,7 +61,7 @@ export const LanguagesDialog = () => {
name="fluencyLevel"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Fluency (CEFR)`}</FormLabel>
<FormControl className="py-2">
<div className="flex items-center gap-x-4">

View File

@ -35,7 +35,7 @@ export const ProfilesDialog = () => {
name="network"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Network`}</FormLabel>
<FormControl>
{/* eslint-disable-next-line lingui/no-unlocalized-strings */}
@ -50,7 +50,7 @@ export const ProfilesDialog = () => {
name="username"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Username`}</FormLabel>
<FormControl>
<Input {...field} placeholder="john.doe" />
@ -64,7 +64,7 @@ export const ProfilesDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} placeholder="https://linkedin.com/in/johndoe" />
@ -78,7 +78,7 @@ export const ProfilesDialog = () => {
name="icon"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel htmlFor="iconSlug">{t`Icon`}</FormLabel>
<FormControl>
<div className="flex items-center gap-x-2">

View File

@ -40,7 +40,7 @@ export const ProjectsDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Name`}</FormLabel>
<FormControl>
<Input {...field} />
@ -54,7 +54,7 @@ export const ProjectsDialog = () => {
name="description"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Description`}</FormLabel>
<FormControl>
<Input {...field} />
@ -68,7 +68,7 @@ export const ProjectsDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} placeholder={t`March 2023 - Present`} />
@ -82,7 +82,7 @@ export const ProjectsDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} placeholder="https://rxresu.me" />
@ -96,7 +96,7 @@ export const ProjectsDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput
@ -117,7 +117,7 @@ export const ProjectsDialog = () => {
name="keywords"
control={form.control}
render={({ field }) => (
<div className="col-span-2 space-y-3">
<div className="space-y-3 sm:col-span-2">
<FormItem>
<FormLabel>{t`Keywords`}</FormLabel>
<FormControl>

View File

@ -35,7 +35,7 @@ export const PublicationsDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Name`}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const PublicationsDialog = () => {
name="publisher"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Publisher`}</FormLabel>
<FormControl>
<Input {...field} />
@ -63,7 +63,7 @@ export const PublicationsDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} placeholder={t`March 2023`} />
@ -77,7 +77,7 @@ export const PublicationsDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -91,7 +91,7 @@ export const PublicationsDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -35,7 +35,7 @@ export const ReferencesDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Name`}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const ReferencesDialog = () => {
name="description"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Description`}</FormLabel>
<FormControl>
<Input {...field} />
@ -63,7 +63,7 @@ export const ReferencesDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -77,7 +77,7 @@ export const ReferencesDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -37,7 +37,7 @@ export const SkillsDialog = () => {
name="name"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Name`}</FormLabel>
<FormControl>
<Input {...field} />
@ -51,7 +51,7 @@ export const SkillsDialog = () => {
name="description"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Description`}</FormLabel>
<FormControl>
<Input {...field} />
@ -65,7 +65,7 @@ export const SkillsDialog = () => {
name="level"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Level`}</FormLabel>
<FormControl className="py-2">
<div className="flex items-center gap-x-4">
@ -90,7 +90,7 @@ export const SkillsDialog = () => {
name="keywords"
control={form.control}
render={({ field }) => (
<div className="col-span-2 space-y-3">
<div className="space-y-3 sm:col-span-2">
<FormItem>
<FormLabel>{t`Keywords`}</FormLabel>
<FormControl>

View File

@ -35,7 +35,7 @@ export const VolunteerDialog = () => {
name="organization"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Organization`}</FormLabel>
<FormControl>
<Input {...field} />
@ -49,7 +49,7 @@ export const VolunteerDialog = () => {
name="position"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Position`}</FormLabel>
<FormControl>
<Input {...field} />
@ -63,7 +63,7 @@ export const VolunteerDialog = () => {
name="date"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Date`}</FormLabel>
<FormControl>
<Input {...field} placeholder={t`March 2023 - Present`} />
@ -77,7 +77,7 @@ export const VolunteerDialog = () => {
name="location"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1">
<FormItem>
<FormLabel>{t`Location`}</FormLabel>
<FormControl>
<Input {...field} />
@ -91,7 +91,7 @@ export const VolunteerDialog = () => {
name="url"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Website`}</FormLabel>
<FormControl>
<URLInput {...field} />
@ -105,7 +105,7 @@ export const VolunteerDialog = () => {
name="summary"
control={form.control}
render={({ field }) => (
<FormItem className="col-span-1 sm:col-span-2">
<FormItem className="sm:col-span-2">
<FormLabel>{t`Summary`}</FormLabel>
<FormControl>
<RichInput

View File

@ -42,7 +42,7 @@ export const LeftSidebar = () => {
};
return (
<div className="flex bg-secondary-accent/30 pt-16 lg:pt-0">
<div className="flex bg-secondary-accent/30">
<div className="hidden basis-12 flex-col items-center justify-between bg-secondary-accent/30 py-4 sm:flex">
<Button asChild size="icon" variant="ghost" className="h-8 w-8 rounded-full">
<Link to="/dashboard">

View File

@ -88,7 +88,7 @@ export const BasicsSection = () => {
/>
</div>
<CustomFieldsSection className="col-span-2" />
<CustomFieldsSection className="sm:col-span-2" />
</main>
</section>
);

View File

@ -32,20 +32,13 @@ export const CustomField = ({ field, onChange, onRemove }: CustomFieldProps) =>
<div className="flex items-end justify-between space-x-2">
<Button
size="icon"
variant="ghost"
variant="link"
className="shrink-0"
onPointerDown={(event) => controls.start(event)}
>
<DotsSixVertical />
</Button>
{/* <Input
placeholder={t`Icon`}
value={field.icon}
className="!ml-0"
onChange={(event) => handleChange("icon", event.target.value)}
/> */}
<Input
placeholder={t`Name`}
value={field.name}
@ -61,7 +54,7 @@ export const CustomField = ({ field, onChange, onRemove }: CustomFieldProps) =>
<Button
size="icon"
variant="ghost"
variant="link"
className="!ml-0 shrink-0"
onClick={() => onRemove(field.id)}
>

View File

@ -69,9 +69,7 @@ export const PictureOptions = () => {
return (
<div className="flex flex-col gap-y-5">
<div className="grid grid-cols-3 items-center gap-x-6">
<Label htmlFor="picture.size" className="col-span-1">
{t`Size (in px)`}
</Label>
<Label htmlFor="picture.size">{t`Size (in px)`}</Label>
<Input
type="number"
id="picture.size"
@ -85,9 +83,7 @@ export const PictureOptions = () => {
</div>
<div className="grid grid-cols-3 items-center gap-x-6">
<Label htmlFor="picture.aspectRatio" className="col-span-1">
{t`Aspect Ratio`}
</Label>
<Label htmlFor="picture.aspectRatio">{t`Aspect Ratio`}</Label>
<div className="col-span-2 flex items-center justify-between">
<ToggleGroup
type="single"
@ -130,9 +126,7 @@ export const PictureOptions = () => {
</div>
<div className="grid grid-cols-3 items-center gap-x-6">
<Label htmlFor="picture.borderRadius" className="col-span-1">
{t`Border Radius`}
</Label>
<Label htmlFor="picture.borderRadius">{t`Border Radius`}</Label>
<div className="col-span-2 flex items-center justify-between">
<ToggleGroup
type="single"
@ -176,7 +170,7 @@ export const PictureOptions = () => {
<div>
<div className="grid grid-cols-3 items-start gap-x-6">
<div className="col-span-1">
<div>
<Label>{t`Effects`}</Label>
</div>
<div className="col-span-2 space-y-4">

View File

@ -108,7 +108,7 @@ export const SectionDialog = <T extends SectionItem>({
if (isDelete) {
return (
<AlertDialog open={isOpen} onOpenChange={close}>
<AlertDialogContent>
<AlertDialogContent className="z-[70]">
<Form {...form}>
<form>
<AlertDialogHeader>
@ -133,9 +133,9 @@ export const SectionDialog = <T extends SectionItem>({
return (
<Dialog open={isOpen} onOpenChange={close}>
<DialogContent>
<DialogContent className="z-[70]">
<Form {...form}>
<form className="space-y-4" onSubmit={form.handleSubmit(onSubmit)}>
<form className="space-y-6" onSubmit={form.handleSubmit(onSubmit)}>
<DialogHeader>
<DialogTitle>
<div className="flex items-center space-x-2.5">

View File

@ -64,7 +64,7 @@ export const SectionListItem = ({
!isDragging && "hover:bg-secondary",
)}
>
<DotsSixVertical size={12} />
<DotsSixVertical weight="bold" size={12} />
</div>
{/* List Item */}
@ -80,7 +80,7 @@ export const SectionListItem = ({
{description && <p className="text-xs leading-relaxed opacity-50">{description}</p>}
</div>
</DropdownMenuTrigger>
<DropdownMenuContent align="center" side="left" sideOffset={-16}>
<DropdownMenuContent>
<DropdownMenuCheckboxItem checked={visible} onCheckedChange={onToggleVisibility}>
<span className="-ml-0.5">{t`Visible`}</span>
</DropdownMenuCheckboxItem>

View File

@ -11,7 +11,7 @@ export const DashboardLayout = () => {
return (
<div>
<div className="sticky top-0 z-50 flex items-center justify-between p-4 lg:hidden">
<div className="sticky top-0 z-50 flex items-center justify-between p-4 pb-0 lg:hidden">
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<Button size="icon" variant="ghost" className="bg-background">

View File

@ -1,6 +1,6 @@
import { t } from "@lingui/macro";
import { List, SquaresFour } from "@phosphor-icons/react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@reactive-resume/ui";
import { ScrollArea, Tabs, TabsContent, TabsList, TabsTrigger } from "@reactive-resume/ui";
import { motion } from "framer-motion";
import { useState } from "react";
import { Helmet } from "react-helmet-async";
@ -21,7 +21,11 @@ export const ResumesPage = () => {
</title>
</Helmet>
<Tabs value={layout} onValueChange={(value) => setLayout(value as Layout)}>
<Tabs
value={layout}
onValueChange={(value) => setLayout(value as Layout)}
className="space-y-4"
>
<div className="flex items-center justify-between">
<motion.h1
initial={{ opacity: 0, x: -50 }}
@ -43,14 +47,14 @@ export const ResumesPage = () => {
</TabsList>
</div>
<div className="mt-12 md:mt-8">
<ScrollArea className="h-[calc(100vh-140px)] lg:h-[calc(100vh-88px)]">
<TabsContent value="grid">
<GridView />
</TabsContent>
<TabsContent value="list">
<ListView />
</TabsContent>
</div>
</ScrollArea>
</Tabs>
</>
);

View File

@ -1,5 +1,5 @@
import { t } from "@lingui/macro";
import { Separator } from "@reactive-resume/ui";
import { ScrollArea, Separator } from "@reactive-resume/ui";
import { motion } from "framer-motion";
import { Helmet } from "react-helmet-async";
@ -17,7 +17,7 @@ export const SettingsPage = () => (
</title>
</Helmet>
<div className="max-w-2xl space-y-8 pb-12">
<div className="max-w-2xl space-y-4">
<motion.h1
initial={{ opacity: 0, x: -50 }}
animate={{ opacity: 1, x: 0 }}
@ -26,15 +26,19 @@ export const SettingsPage = () => (
{t`Settings`}
</motion.h1>
<AccountSettings />
<Separator />
<SecuritySettings />
<Separator />
<ProfileSettings />
<Separator />
<OpenAISettings />
<Separator />
<DangerZoneSettings />
<ScrollArea hideScrollbar className="h-[calc(100vh-140px)] lg:h-[calc(100vh-88px)]">
<div className="space-y-6">
<AccountSettings />
<Separator />
<SecuritySettings />
<Separator />
<ProfileSettings />
<Separator />
<OpenAISettings />
<Separator />
<DangerZoneSettings />
</div>
</ScrollArea>
</div>
</>
);

View File

@ -7,10 +7,10 @@ import { Logo } from "@/client/components/logo";
import { ThemeSwitch } from "@/client/components/theme-switch";
export const Footer = () => (
<footer className="fixed inset-x-0 bottom-0 -z-50 h-[400px] bg-background">
<footer className="bg-background">
<Separator />
<div className="container grid py-6 sm:grid-cols-3 lg:grid-cols-4">
<div className="container grid py-12 sm:grid-cols-3 lg:grid-cols-4">
<div className="flex flex-col gap-y-2">
<Logo size={96} className="-ml-2" />
@ -24,7 +24,7 @@ export const Footer = () => (
</div>
<div className="relative col-start-4">
<div className="absolute bottom-0 right-0 space-x-2">
<div className="absolute bottom-0 right-0 lg:space-x-2">
<LocaleSwitch />
<ThemeSwitch />
</div>

View File

@ -1,12 +1,13 @@
import { ScrollArea } from "@reactive-resume/ui";
import { Outlet } from "react-router-dom";
import { Footer } from "./components/footer";
import { Header } from "./components/header";
export const HomeLayout = () => (
<>
<ScrollArea orientation="vertical" className="h-screen">
<Header />
<Outlet />
<Footer />
</>
</ScrollArea>
);

View File

@ -12,7 +12,7 @@ import { SupportSection } from "./sections/support";
import { TestimonialsSection } from "./sections/testimonials";
export const HomePage = () => (
<main className="relative isolate mb-[400px] overflow-hidden bg-background">
<main className="relative isolate bg-background">
<Helmet>
<title>
{t`Reactive Resume`} - {t`A free and open-source resume builder`}

View File

@ -226,32 +226,31 @@ const Question5 = () => (
</AccordionItem>
);
export const FAQSection = () => {
return (
<section id="faq" className="container relative py-24 sm:py-32">
<div className="grid gap-12 lg:grid-cols-3">
<div className="col-span-1 space-y-6">
<h2 className="text-3xl font-bold">Frequently Asked Questions</h2>
export const FAQSection = () => (
<section id="faq" className="container relative py-24 sm:py-32">
<div className="grid gap-12 lg:grid-cols-3">
<div className="space-y-6">
<h2 className="text-4xl font-bold">Frequently Asked Questions</h2>
<p className="text-base leading-loose">
Here are some questions I often get asked about Reactive Resume.
</p>
<p className="text-base leading-loose">
Here are some questions I often get asked about Reactive Resume.
</p>
<p className="text-sm leading-loose">
Unfortunately, this section is available only in English, as I do not want to burden
translators with having to translate these large paragraphs of text.
</p>
</div>
<div className="col-span-2">
<Accordion collapsible type="single">
<Question1 />
<Question2 />
<Question3 />
<Question4 />
<Question5 />
</Accordion>
</div>
<p className="text-sm leading-loose">
Unfortunately, this section is available only in English, as I do not want to burden
translators with having to translate these large paragraphs of text.
</p>
</div>
</section>
);
};
<div className="col-span-2">
<Accordion collapsible type="single">
<Question1 />
<Question2 />
<Question3 />
<Question4 />
<Question5 />
</Accordion>
</div>
</div>
</section>
);

View File

@ -1,4 +1,4 @@
import { t } from "@lingui/macro";
import { t, Trans } from "@lingui/macro";
import { motion } from "framer-motion";
const resumes = [
@ -13,9 +13,17 @@ export const SampleResumesSection = () => (
<div className="container flex flex-col gap-12 lg:min-h-[600px] lg:flex-row lg:items-start">
<div className="space-y-4 lg:mt-16 lg:basis-96">
<h2 className="text-4xl font-bold">{t`Sample Resumes`}</h2>
<p className="text-base leading-relaxed">
{t`Have a look at some of the resume created to showcase the templates available on Reactive Resume. They also serve some great examples to help guide the creation of your own resume.`}
</p>
<Trans>
<p className="leading-relaxed">
Have a look at some of the resume created to showcase the templates available on
Reactive Resume.
</p>
<p className="leading-relaxed">
They could also serve as examples to help guide the creation of your next resume.
</p>
</Trans>
</div>
<div className="w-full overflow-hidden lg:absolute lg:right-0 lg:max-w-[55%]">

View File

@ -38,6 +38,7 @@ export const PublicResumePage = () => {
if (event.origin !== window.location.origin) return;
if (event.data.type === "PAGE_LOADED") {
frameRef.current.width = event.data.payload.width;
frameRef.current.height = event.data.payload.height;
frameRef.current.contentWindow.removeEventListener("message", handleMessage);
}
@ -65,8 +66,9 @@ export const PublicResumePage = () => {
<iframe
title={title}
ref={frameRef}
scrolling="no"
src="/artboard/preview"
style={{ width: `${pageSizeMap[format].width}mm` }}
style={{ width: `${pageSizeMap[format].width}mm`, overflow: "hidden" }}
/>
</div>