feat: add ReferenceCards component and update pnpm workspace build configuration
This commit is contained in:
@@ -1,64 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import Image from "next/image";
|
|
||||||
|
|
||||||
export interface CustomTestimonialCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
||||||
quote: string;
|
|
||||||
author: string;
|
|
||||||
role?: string;
|
|
||||||
avatar?: string;
|
|
||||||
rating?: number;
|
|
||||||
lineClamp?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const CustomTestimonialCard = React.forwardRef<HTMLDivElement, CustomTestimonialCardProps>(
|
|
||||||
({ quote, author, role, avatar, rating, lineClamp, className, ...props }, ref) => {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
ref={ref}
|
|
||||||
className={`flex flex-col p-6 bg-white border border-neutral-200 rounded-2xl shadow-sm transition-shadow ${className || ""}`}
|
|
||||||
{...props}
|
|
||||||
>
|
|
||||||
<div className="flex-1">
|
|
||||||
{rating && (
|
|
||||||
<div className="flex gap-1 mb-4 text-yellow-400">
|
|
||||||
{Array.from({ length: 5 }).map((_, i) => (
|
|
||||||
<svg
|
|
||||||
key={i}
|
|
||||||
className={`w-5 h-5 ${i < rating ? "fill-current" : "text-neutral-200 fill-current"}`}
|
|
||||||
viewBox="0 0 20 20"
|
|
||||||
>
|
|
||||||
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
|
|
||||||
</svg>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<p className={`text-neutral-700 italic leading-relaxed ${lineClamp ? "line-clamp-4" : ""}`}>
|
|
||||||
"{quote}"
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="flex items-center gap-4 mt-6">
|
|
||||||
{avatar ? (
|
|
||||||
<Image
|
|
||||||
src={avatar}
|
|
||||||
alt={author}
|
|
||||||
width={48}
|
|
||||||
height={48}
|
|
||||||
className="rounded-full object-cover w-12 h-12"
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
<div className="w-12 h-12 rounded-full bg-neutral-200 flex items-center justify-center text-neutral-500 font-bold">
|
|
||||||
{author.charAt(0)}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<div className="flex flex-col">
|
|
||||||
<span className="font-semibold text-neutral-900">{author}</span>
|
|
||||||
{role && <span className="text-sm text-neutral-500">{role}</span>}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
CustomTestimonialCard.displayName = "CustomTestimonialCard";
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import { CustomTestimonialCard } from "@/components/custom-testimonial-card";
|
import { TestimonialCard } from "poyraz-ui/molecules";
|
||||||
import { REFERENCES } from "@/data/references";
|
import { REFERENCES } from "@/data/references";
|
||||||
import { useLocale } from "next-intl";
|
import { useLocale } from "next-intl";
|
||||||
import { getLocalizedValue } from "@/lib/locale";
|
import { getLocalizedValue } from "@/lib/locale";
|
||||||
@@ -17,14 +17,15 @@ export function ReferenceCards({ className, cardClassName, lineClamp }: Referenc
|
|||||||
<div className={className}>
|
<div className={className}>
|
||||||
{REFERENCES.map((item) => {
|
{REFERENCES.map((item) => {
|
||||||
const card = (
|
const card = (
|
||||||
<CustomTestimonialCard
|
<TestimonialCard
|
||||||
quote={getLocalizedValue(item.quote, locale)}
|
quote={getLocalizedValue(item.quote, locale)}
|
||||||
author={item.author}
|
author={item.author}
|
||||||
role={getLocalizedValue(item.role, locale)}
|
role={getLocalizedValue(item.role, locale)}
|
||||||
avatar={item.avatar}
|
avatar={item.avatar}
|
||||||
rating={item.rating}
|
rating={item.rating}
|
||||||
lineClamp={lineClamp}
|
className={`flex flex-col h-full rounded-sm [&>*:last-child]:mt-auto ${
|
||||||
className={`h-full ${cardClassName || "w-70 shrink-0"}`}
|
lineClamp ? "[&>*:first-child]:line-clamp-4" : ""
|
||||||
|
} ${cardClassName || "w-70 shrink-0"}`}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -8,3 +8,11 @@ onlyBuiltDependencies:
|
|||||||
ignoredBuiltDependencies:
|
ignoredBuiltDependencies:
|
||||||
- sharp
|
- sharp
|
||||||
- unrs-resolver
|
- unrs-resolver
|
||||||
|
|
||||||
|
allowBuilds:
|
||||||
|
'@parcel/watcher': set this to true or false
|
||||||
|
'@swc/core': set this to true or false
|
||||||
|
electron: set this to true or false
|
||||||
|
puppeteer: set this to true or false
|
||||||
|
sharp: set this to true or false
|
||||||
|
unrs-resolver: set this to true or false
|
||||||
|
|||||||
Reference in New Issue
Block a user