style(homepage): optimize mobile margins, paddings and section spacing
This commit is contained in:
parent
9371fd79e1
commit
0b52f9e9e4
@ -71,18 +71,18 @@ export default function HomeClient({ initialData }: HomeClientProps) {
|
||||
|
||||
|
||||
{/* Navigation to Sections */}
|
||||
<section className="py-12 bg-medical-gray-50 border-y border-medical-gray-100 font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid md:grid-cols-2 gap-8">
|
||||
<section className="py-6 sm:py-12 bg-medical-gray-50 border-y border-medical-gray-100 font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid md:grid-cols-2 gap-4 sm:gap-8">
|
||||
{/* Specialty Shop Card */}
|
||||
<Link
|
||||
href="/shop"
|
||||
className="bg-gradient-to-br from-blue-50/60 to-canina-blue/5 p-12 rounded-[2.5rem] border border-blue-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
className="bg-gradient-to-br from-blue-50/60 to-canina-blue/5 p-6 sm:p-12 rounded-2xl sm:rounded-[2.5rem] border border-blue-100/60 shadow-md hover:shadow-2xl hover:-translate-y-1 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
>
|
||||
<div className="absolute -top-12 -left-12 w-32 h-32 bg-canina-blue/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
|
||||
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-canina-blue transition-colors font-lalezar tracking-wide">
|
||||
<h3 className="text-2xl sm:text-3xl font-black text-medical-gray-900 mb-2 sm:mb-4 group-hover:text-canina-blue transition-colors font-lalezar tracking-wide">
|
||||
{getText('nav_card_shop_title', "فروشگاه تخصصی")}
|
||||
</h3>
|
||||
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
|
||||
<p className="text-sm sm:text-base text-medical-gray-600 mb-4 sm:mb-8 leading-relaxed font-shabnam">
|
||||
{getText('nav_card_shop_desc', "دسترسی به تمامی محصولات بر اساس علائم بالینی و نیازهای پت شما.")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2 text-canina-blue font-black tracking-widest uppercase text-xs font-vazir">
|
||||
@ -94,13 +94,13 @@ export default function HomeClient({ initialData }: HomeClientProps) {
|
||||
{/* Scientific Wiki Card */}
|
||||
<Link
|
||||
href="/wiki"
|
||||
className="bg-gradient-to-br from-emerald-50/60 to-green-50/20 p-12 rounded-[2.5rem] border border-emerald-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
className="bg-gradient-to-br from-emerald-50/60 to-green-50/20 p-6 sm:p-12 rounded-2xl sm:rounded-[2.5rem] border border-emerald-100/60 shadow-md hover:shadow-2xl hover:-translate-y-1 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
>
|
||||
<div className="absolute -top-12 -left-12 w-32 h-32 bg-emerald-500/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
|
||||
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-emerald-700 transition-colors font-lalezar tracking-wide">
|
||||
<h3 className="text-2xl sm:text-3xl font-black text-medical-gray-900 mb-2 sm:mb-4 group-hover:text-emerald-700 transition-colors font-lalezar tracking-wide">
|
||||
{getText('nav_card_wiki_title', "دانشنامه علمی")}
|
||||
</h3>
|
||||
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
|
||||
<p className="text-sm sm:text-base text-medical-gray-600 mb-4 sm:mb-8 leading-relaxed font-shabnam">
|
||||
{getText('nav_card_wiki_desc', "آشنایی با ترکیبات نایاب و استانداردهای دارویی محصولات آلمانی کنینا.")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2 text-emerald-700 font-black tracking-widest uppercase text-xs font-vazir">
|
||||
@ -112,31 +112,31 @@ export default function HomeClient({ initialData }: HomeClientProps) {
|
||||
</section>
|
||||
|
||||
{/* About Section Teaser */}
|
||||
<section className="py-16 bg-white overflow-hidden font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid lg:grid-cols-2 gap-16 lg:gap-24 items-center">
|
||||
<div className="relative overflow-hidden rounded-[3rem]">
|
||||
<section className="py-8 sm:py-16 bg-white overflow-hidden font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid lg:grid-cols-2 gap-8 lg:gap-24 items-center">
|
||||
<div className="relative overflow-hidden rounded-2xl sm:rounded-[3rem]">
|
||||
<div className="absolute -top-10 -right-10 w-40 h-40 bg-canina-blue/5 rounded-full blur-3xl" />
|
||||
<Image
|
||||
src="/assets/images/regenerated_image_1779109861747.png"
|
||||
alt="آزمایشگاه تخصصی تولید مکملهای دارویی کنینا آلمان"
|
||||
className="rounded-[3rem] shadow-2xl relative z-10 grayscale-[10%] w-full"
|
||||
className="rounded-2xl sm:rounded-[3rem] shadow-2xl relative z-10 grayscale-[10%] w-full"
|
||||
width={640}
|
||||
height={425}
|
||||
loading="lazy"
|
||||
/>
|
||||
<div className="absolute bottom-4 left-4 sm:bottom-6 sm:left-6 bg-canina-blue text-white p-4 sm:p-6 md:p-8 rounded-[1.5rem] sm:rounded-[2rem] shadow-2xl z-20 max-w-[80%] border border-white/10">
|
||||
<div className="text-2xl sm:text-4xl font-black mb-1 font-lalezar tracking-wide">{getText('quality', "کیفیت")}</div>
|
||||
<div className="text-[10px] sm:text-xs uppercase tracking-widest font-bold opacity-90 font-vazir">{getText('ultra_pharmaceutical', "استانداردهای فوقدارویی")}</div>
|
||||
<div className="absolute bottom-3 left-3 sm:bottom-6 sm:left-6 bg-canina-blue text-white p-3 sm:p-6 md:p-8 rounded-xl sm:rounded-[2rem] shadow-2xl z-20 max-w-[85%] sm:max-w-[80%] border border-white/10">
|
||||
<div className="text-xl sm:text-4xl font-black mb-0.5 sm:mb-1 font-lalezar tracking-wide">{getText('quality', "کیفیت")}</div>
|
||||
<div className="text-[9px] sm:text-xs uppercase tracking-widest font-bold opacity-90 font-vazir">{getText('ultra_pharmaceutical', "استانداردهای فوقدارویی")}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-4 font-vazir">
|
||||
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-2 sm:mb-4 font-vazir">
|
||||
{getText('about_label', "میراث ما از آلمان")}
|
||||
</div>
|
||||
<h2 className="text-3xl lg:text-5xl font-black text-medical-gray-900 leading-[1.2] mb-12 font-lalezar tracking-wide">
|
||||
<h2 className="text-2xl sm:text-3xl lg:text-5xl font-black text-medical-gray-900 leading-tight mb-6 sm:mb-12 font-lalezar tracking-wide">
|
||||
{getText('about_title', "چرا برند آلمانی Canina مرجع دامپزشکان است؟")}
|
||||
</h2>
|
||||
<div className="space-y-6">
|
||||
<div className="space-y-4 sm:space-y-6">
|
||||
{[
|
||||
{ title: getText('about_item1_title', "مواد اولیه نایاب"), desc: getText('about_item1_desc', "استفاده از پودر صدف لبسبز اصل نیوزیلند و مواد ارگانیک با گرید دارویی.") },
|
||||
{ title: getText('about_item2_title', "فاقد مواد نگهدارنده"), desc: getText('about_item2_desc', "تمامی محصولات ۱۰۰٪ طبیعی و فاقد رنگهای مصنوعی و طعمدهندههای شیمیایی هستند.") },
|
||||
|
||||
@ -56,30 +56,27 @@ export default function BlogPreviewSection() {
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="py-20 bg-white font-vazir" dir="rtl">
|
||||
<section className="py-8 sm:py-20 bg-white font-vazir" dir="rtl">
|
||||
<div className="max-w-7xl mx-auto px-4">
|
||||
{/* Header */}
|
||||
<div className="flex flex-col md:flex-row md:items-end justify-between mb-12 gap-4">
|
||||
<div>
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-xs font-black uppercase tracking-widest mb-3">
|
||||
<BookOpen className="w-4 h-4" />
|
||||
<span>{getText("blog_preview_badge", "آخرین مطالب تخصصی")}</span>
|
||||
{/* Section Header */}
|
||||
<div className="flex flex-col md:flex-row md:items-end justify-between mb-6 sm:mb-16 gap-4 sm:gap-6">
|
||||
<div className="max-w-2xl">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4">
|
||||
<BookOpen className="w-3 h-3" />
|
||||
<span>{getText("blog_preview_badge", "دانشنامه و مقالات علمی")}</span>
|
||||
</div>
|
||||
<h2 className="text-3xl md:text-4xl font-black text-medical-gray-900 font-lalezar leading-tight">
|
||||
{getText("blog_preview_title", "مجله سلامت پت کنینا")}
|
||||
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide">
|
||||
{getText("blog_preview_title", "تازهترین مقالات")} <span className="text-canina-blue">{getText("blog_preview_title_highlight", "دامپزشکی و سلامت")}</span>
|
||||
</h2>
|
||||
<p className="text-sm md:text-base text-medical-gray-500 font-medium mt-2">
|
||||
{getText(
|
||||
"blog_preview_subtitle",
|
||||
"مقالات علمی و تخصصی دامپزشکی برای مراقبت بهتر از حیوان خانگی شما"
|
||||
)}
|
||||
<p className="text-sm sm:text-lg text-medical-gray-500 font-medium mt-2 sm:mt-4">
|
||||
{getText("blog_preview_desc", "راهنماهای علمی و کاربردی برای نگهداری، تغذیه و پیشگیری از بیماریهای سگ و گربه بر اساس آخرین تحقیقات بینالمللی.")}
|
||||
</p>
|
||||
</div>
|
||||
<Link
|
||||
href="/blog"
|
||||
className="inline-flex items-center gap-2 text-canina-blue font-bold hover:gap-3 transition-all text-sm shrink-0"
|
||||
className="inline-flex items-center gap-1.5 sm:gap-2 text-canina-blue font-bold text-xs sm:text-sm hover:translate-x-1 transition-transform rtl:hover:-translate-x-1"
|
||||
>
|
||||
<span>{getText("blog_preview_read_more", "مشاهده همه مقالات")}</span>
|
||||
<span>{getText("blog_preview_view_all", "مشاهده همه مقالات")}</span>
|
||||
<ArrowLeft className="w-4 h-4" />
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
@ -54,7 +54,7 @@ export default function FAQSection() {
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="py-20 bg-medical-gray-50/70 border-t border-medical-gray-100 font-vazir" dir="rtl">
|
||||
<section className="py-8 sm:py-20 bg-medical-gray-50/70 border-t border-medical-gray-100 font-vazir" dir="rtl">
|
||||
{/* Schema.org FAQPage Rich Snippet */}
|
||||
{faqs.length > 0 && (
|
||||
<script
|
||||
@ -65,16 +65,16 @@ export default function FAQSection() {
|
||||
|
||||
<div className="max-w-4xl mx-auto px-4">
|
||||
{/* Header */}
|
||||
<div className="text-center mb-12">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 bg-amber-500/10 text-amber-600 rounded-full text-xs font-black uppercase tracking-widest mb-3">
|
||||
<HelpCircle className="w-4 h-4" />
|
||||
<span>{getText("faq_badge", "سوالات پرتکرار")}</span>
|
||||
<div className="text-center mb-6 sm:mb-12">
|
||||
<div className="inline-flex items-center gap-2 px-3.5 py-1.5 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4">
|
||||
<HelpCircle className="w-3.5 h-3.5" />
|
||||
<span>{getText("faq_badge", "پاسخ به سوالات پرتکرار")}</span>
|
||||
</div>
|
||||
<h2 className="text-3xl md:text-4xl font-black text-medical-gray-900 font-lalezar leading-tight">
|
||||
{getText("faq_title", "سوالات متداول")}
|
||||
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide">
|
||||
{getText("faq_title_1", "سوالات متداول")} <span className="text-canina-blue">{getText("faq_title_2", "درباره محصولات و سفارش")}</span>
|
||||
</h2>
|
||||
<p className="text-sm md:text-base text-medical-gray-500 font-medium mt-2">
|
||||
{getText("faq_subtitle", "پاسخ سوالاتی که اغلب از ما میپرسید")}
|
||||
<p className="text-sm sm:text-base text-medical-gray-500 font-medium mt-2 sm:mt-4">
|
||||
{getText("faq_desc", "پاسخ به متداولترین سوالات درباره استانداردها، دوز مصرفی، ارسال و اصالت مکملهای کنینا.")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -154,24 +154,24 @@ export default function FeaturedProducts() {
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<section className="py-16 bg-medical-gray-50">
|
||||
<section className="py-8 sm:py-16 bg-medical-gray-50">
|
||||
<div className="max-w-7xl mx-auto px-4">
|
||||
<div className="flex items-center justify-between w-full mb-12 pb-6 border-b border-medical-gray-200">
|
||||
<div className="flex items-center justify-between w-full mb-6 sm:mb-12 pb-4 sm:pb-6 border-b border-medical-gray-200 gap-2">
|
||||
<div>
|
||||
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-2 font-vazir">
|
||||
<div className="text-canina-blue text-[10px] sm:text-xs font-bold uppercase tracking-[0.2em] mb-1 sm:mb-2 font-vazir">
|
||||
{getText("featured_badge", "بیشترین انتخاب توسط دامپزشکان")}
|
||||
</div>
|
||||
<h2 className="text-2xl md:text-3xl lg:text-4xl font-black text-medical-gray-900 font-lalezar tracking-wide">
|
||||
<h2 className="text-xl sm:text-2xl md:text-3xl lg:text-4xl font-black text-medical-gray-900 font-lalezar tracking-wide">
|
||||
{getText("featured_title_line1", "محصولات برگزیده و راهکارهای")}{" "}
|
||||
<span className="text-canina-blue">{getText("featured_title_line2", "درمان تخصصی")}</span>
|
||||
</h2>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => router.push("/shop")}
|
||||
className="inline-flex items-center gap-2 text-canina-blue font-black text-sm hover:translate-x-1 transition-all group font-vazir"
|
||||
className="inline-flex items-center gap-1 sm:gap-2 text-canina-blue font-black text-xs sm:text-sm hover:translate-x-1 transition-all group font-vazir shrink-0"
|
||||
>
|
||||
{getText("featured_view_all", "مشاهده تمامی محصولات")}
|
||||
<span className="text-lg group-hover:-translate-x-1 transition-transform">←</span>
|
||||
<span>{getText("featured_view_all", "مشاهده تمامی محصولات")}</span>
|
||||
<span className="text-sm sm:text-lg group-hover:-translate-x-1 transition-transform">←</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
@ -118,7 +118,7 @@ export default function Hero({ banners = [], onShopNavigate }: { banners?: Banne
|
||||
<div className="absolute bottom-0 left-0 w-[600px] h-[600px] bg-medical-gray-500 rounded-full blur-[100px] -ml-40 -mb-40" />
|
||||
</div>
|
||||
|
||||
<div className="max-w-7xl mx-auto px-4 relative flex flex-col lg:flex-row gap-4 sm:gap-12 mb-16 lg:mb-20">
|
||||
<div className="max-w-7xl mx-auto px-4 relative flex flex-col lg:flex-row gap-4 sm:gap-12 mb-8 sm:mb-16 lg:mb-20">
|
||||
{/* Content */}
|
||||
<div className="lg:w-1/2 text-center lg:text-right">
|
||||
<motion.div
|
||||
|
||||
@ -211,20 +211,20 @@ export default function SmartAdvisor({ onComplete, rules = [] }: SmartAdvisorPro
|
||||
};
|
||||
|
||||
return (
|
||||
<section id="canino-advisor" className="py-16 bg-gradient-to-b from-white via-medical-gray-50/50 to-white">
|
||||
<section id="canino-advisor" className="py-8 sm:py-16 bg-gradient-to-b from-white via-medical-gray-50/50 to-white">
|
||||
<div className="max-w-5xl mx-auto px-4">
|
||||
{/* Header Title */}
|
||||
<div className="text-center mb-10">
|
||||
<div className="text-center mb-6 sm:mb-10">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
className="inline-flex items-center gap-2 px-4 py-2 bg-canina-blue/5 rounded-full mb-4 border border-canina-blue/10"
|
||||
className="inline-flex items-center gap-2 px-3.5 py-1.5 sm:px-4 sm:py-2 bg-canina-blue/5 rounded-full mb-3 sm:mb-4 border border-canina-blue/10"
|
||||
>
|
||||
<Sparkle className="w-4 h-4 text-canina-blue animate-spin" />
|
||||
<span suppressHydrationWarning className="text-canina-blue text-xs font-black uppercase tracking-widest font-vazir">{getText('advisor_badge', "سیستم پایش و تجویز هوشمند")}</span>
|
||||
<span suppressHydrationWarning className="text-canina-blue text-[11px] sm:text-xs font-black uppercase tracking-widest font-vazir">{getText('advisor_badge', "سیستم پایش و تجویز هوشمند")}</span>
|
||||
</motion.div>
|
||||
<h2 suppressHydrationWarning className="text-4xl lg:text-5xl font-black text-medical-gray-900 mb-4 font-lalezar tracking-wide">{getText('advisor_title', "دستیار سلامت و الگوریتم پایش کنینا")}</h2>
|
||||
<p suppressHydrationWarning className="text-medical-gray-600 font-medium text-base font-shabnam max-w-2xl mx-auto leading-relaxed">
|
||||
<h2 suppressHydrationWarning className="text-2xl sm:text-4xl lg:text-5xl font-black text-medical-gray-900 mb-2 sm:mb-4 font-lalezar tracking-wide">{getText('advisor_title', "دستیار سلامت و الگوریتم پایش کنینا")}</h2>
|
||||
<p suppressHydrationWarning className="text-medical-gray-600 font-medium text-xs sm:text-base font-shabnam max-w-2xl mx-auto leading-relaxed">
|
||||
{getText('advisor_subtitle', "با ثبت اطلاعات همدم خود در ۴ قدم ساده، از الگوریتم علمی کنینا برای تجویز دقیق مکمل و پایش سلامت بهرهمند شوید.")}
|
||||
</p>
|
||||
|
||||
|
||||
@ -54,19 +54,23 @@ export default function TestimonialsSection() {
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="py-20 bg-medical-gray-50/50 border-t border-medical-gray-100 font-vazir" dir="rtl">
|
||||
<section className="py-8 sm:py-20 bg-medical-gray-50/50 border-t border-medical-gray-100 font-vazir" dir="rtl">
|
||||
<div className="max-w-7xl mx-auto px-4">
|
||||
{/* Section Header */}
|
||||
<div className="text-center max-w-2xl mx-auto mb-16">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 bg-amber-500/10 text-amber-600 rounded-full text-xs font-black uppercase tracking-widest mb-4">
|
||||
<MessageSquareQuote className="w-4 h-4" />
|
||||
<span>{getText('testimonials_badge', "گواهی کیفیت و اصالت")}</span>
|
||||
</div>
|
||||
<h2 className="text-3xl md:text-4xl font-black text-medical-gray-900 font-lalezar leading-tight">
|
||||
{getText('testimonials_title', "دیدگاه دامپزشکان و همراهان")} <span className="text-canina-blue">{getText('testimonials_title_highlight', "کنینا")}</span>
|
||||
<div className="text-center max-w-2xl mx-auto mb-6 sm:mb-16">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
className="inline-flex items-center gap-2 px-3.5 py-1.5 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4"
|
||||
>
|
||||
<UserCheck className="w-3.5 h-3.5" />
|
||||
<span>{getText('testimonials_badge', 'توصیهها و تجربیات')}</span>
|
||||
</motion.div>
|
||||
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide">
|
||||
{getText('testimonials_title_1', 'نظرات')} <span className="text-canina-blue">{getText('testimonials_title_2', 'دامپزشکان و مشتریان')}</span>
|
||||
</h2>
|
||||
<p className="text-base text-medical-gray-500 font-medium mt-4">
|
||||
{getText('testimonials_subtitle', "تجربه متخصصان، کلینیکهای همکار و سرپرستان حیوانات خانگی از نتایج مکملهای آلمانی کنینا")}
|
||||
<p className="text-sm sm:text-lg text-medical-gray-500 font-medium mt-2 sm:mt-4">
|
||||
{getText('testimonials_desc', 'تجربه استفاده از مکملهای دارویی کنینا از نگاه برترین کلینیکهای دامپزشکی و سرپرستان پت در سراسر کشور.')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -96,24 +96,24 @@ export default function VetGallery({ testimonials = [] }: { testimonials?: Testi
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="py-24 bg-white font-vazir" dir="rtl">
|
||||
<section className="py-8 sm:py-20 bg-white font-vazir relative overflow-hidden" dir="rtl">
|
||||
<div className="max-w-7xl mx-auto px-4">
|
||||
<div className="flex flex-col md:flex-row md:items-end justify-between mb-16 gap-6">
|
||||
<div className="flex flex-col md:flex-row md:items-end justify-between mb-6 sm:mb-16 gap-4 sm:gap-6">
|
||||
<div className="max-w-2xl">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-4">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4">
|
||||
<Star className="w-3 h-3" />
|
||||
{getText('videos_badge', "Vet Insights")}
|
||||
</div>
|
||||
<h2 className="text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide" suppressHydrationWarning>
|
||||
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide" suppressHydrationWarning>
|
||||
{getText('videos_title', "مشاوره ویدئویی")} <span className="text-canina-blue underline decoration-4 decoration-canina-blue/20 underline-offset-8">{getText('videos_title_highlight', "دوست دامپزشک پت شما")}</span>
|
||||
</h2>
|
||||
<p className="text-lg text-medical-gray-500 font-medium mt-6" suppressHydrationWarning>
|
||||
<p className="text-sm sm:text-lg text-medical-gray-500 font-medium mt-2 sm:mt-6" suppressHydrationWarning>
|
||||
{getText('videos_desc', "تیم علمی و فرمولهکنندگان کمپانی کنینا در آلمان مستقیماً با شما صحبت میکنند؛ آشنایی با نحوه مصرف، مزایای بالینی و دانش پزشکی پشت هر محصول.")}
|
||||
</p>
|
||||
</div>
|
||||
<Link
|
||||
href="/videos"
|
||||
className="inline-flex items-center gap-2 text-canina-blue font-bold text-sm hover:translate-x-1 transition-transform rtl:hover:-translate-x-1"
|
||||
className="inline-flex items-center gap-2 text-canina-blue font-bold text-xs sm:text-sm hover:translate-x-1 transition-transform rtl:hover:-translate-x-1"
|
||||
>
|
||||
{getText('videos_view_all', "مشاهده همه ویدئوها")}
|
||||
<Play className="w-4 h-4" />
|
||||
|
||||
@ -203,7 +203,7 @@
|
||||
"201": "deploy.sh",
|
||||
"202": "🔒 Security & Performance Review (09_devops_security)",
|
||||
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
|
||||
"204": "eslint",
|
||||
"204": "eslint-config-prettier",
|
||||
"205": "prisma/scientificTerms.ts",
|
||||
"206": "seed-blogs.ts",
|
||||
"207": "seed-custom.ts",
|
||||
@ -232,7 +232,7 @@
|
||||
"230": "instructions.md",
|
||||
"231": "typescript",
|
||||
"232": "@eslint/js",
|
||||
"233": "globals",
|
||||
"233": "tailwindcss",
|
||||
"238": "prisma",
|
||||
"239": "source-map-support",
|
||||
"240": "supertest",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1,38 +1,26 @@
|
||||
{
|
||||
"0": "Roles",
|
||||
"1": "app.module.ts",
|
||||
"2": "SmsService",
|
||||
"2": "SettingsController",
|
||||
"3": "ProductService",
|
||||
"4": "utils.ts",
|
||||
"4": "SafeImage.tsx",
|
||||
"5": "CmsController",
|
||||
"6": "tickets.controller.ts",
|
||||
"7": "Button.tsx",
|
||||
"8": "ReportsController",
|
||||
"8": "admin.module.ts",
|
||||
"9": "devDependencies",
|
||||
<<<<<<< HEAD
|
||||
"10": "ReviewsController",
|
||||
"10": "CreateReviewDto",
|
||||
"11": "MediaSelector.tsx",
|
||||
"12": "index.ts",
|
||||
"13": "app-audit-verification.e2e-spec.js",
|
||||
"14": "useSettingsStore",
|
||||
=======
|
||||
"10": "ReviewsService",
|
||||
"11": "MediaSelector.tsx",
|
||||
"12": "PetProfile.tsx",
|
||||
"13": "app-audit-verification.e2e-spec.js",
|
||||
"14": "UserDashboard.tsx",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"15": "src/services/api.ts",
|
||||
"16": "DoctorQueryDto",
|
||||
"17": "UserDashboard.tsx",
|
||||
"17": "schema.ts",
|
||||
"18": "JwtAuthGuard",
|
||||
"19": "ProductsService",
|
||||
"19": "RevalidationService",
|
||||
"20": "CreateVideoDto",
|
||||
<<<<<<< HEAD
|
||||
"21": "Button.tsx",
|
||||
=======
|
||||
"21": "ProductPage.tsx",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"22": "lib/services/api.ts",
|
||||
"23": "MenuService",
|
||||
"24": "BE-001",
|
||||
@ -44,9 +32,9 @@
|
||||
"30": "DEVOPS-001",
|
||||
"31": "DOC-001",
|
||||
"32": "adminRoutes.tsx",
|
||||
"33": "WholesaleService",
|
||||
"33": "WholesaleApplyDto",
|
||||
"34": "B2BService",
|
||||
"35": "PetProfile.tsx",
|
||||
"35": "AuthController",
|
||||
"36": "FaqService",
|
||||
"37": "راهنمای تست سیستم (Software Testing)",
|
||||
"38": "Button",
|
||||
@ -59,47 +47,27 @@
|
||||
"45": "What You Must Do When Invoked",
|
||||
"46": "HomeController",
|
||||
"47": "IngredientsService",
|
||||
<<<<<<< HEAD
|
||||
"48": "useCartStore",
|
||||
=======
|
||||
"48": "auth.module.ts",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"49": "devDependencies",
|
||||
"50": "devDependencies",
|
||||
"51": "BlogsController",
|
||||
"52": "PrescriptionsService",
|
||||
"53": "SmartAdvisorService",
|
||||
<<<<<<< HEAD
|
||||
"54": "UsersService",
|
||||
=======
|
||||
"54": "UsersController",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"55": "UITexts.tsx",
|
||||
"56": "Orders.tsx",
|
||||
"57": "Role & Core Objective",
|
||||
"58": "ContactService",
|
||||
"59": "compilerOptions",
|
||||
<<<<<<< HEAD
|
||||
"60": "PaymentService",
|
||||
"61": "AdminTransactionFilterDto",
|
||||
"62": "CreateReviewDto",
|
||||
"63": "dependencies",
|
||||
"64": "compilerOptions",
|
||||
"65": "Media.tsx",
|
||||
"66": "WikiController",
|
||||
"67": "PetsController",
|
||||
"68": "20260526145407_init/migration.sql",
|
||||
=======
|
||||
"60": "users.controller.ts",
|
||||
"61": "payment.service.ts",
|
||||
"62": "ProductDto",
|
||||
"63": "dependencies",
|
||||
"64": "compilerOptions",
|
||||
"65": "app.e2e-spec.js",
|
||||
"66": "ApiOperation",
|
||||
"67": "admin.module.ts",
|
||||
"66": "AdminQueryDto",
|
||||
"67": "PetsController",
|
||||
"68": "PaymentService",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"69": "Required Review Group Closures",
|
||||
"70": "compilerOptions",
|
||||
"71": "getPageMetadata",
|
||||
@ -107,36 +75,28 @@
|
||||
"73": "Operational Rules & Boundaries",
|
||||
"74": "WikiController",
|
||||
"75": "PetsController",
|
||||
<<<<<<< HEAD
|
||||
"76": "CreateEBankCheckoutDto",
|
||||
=======
|
||||
"76": "AdminService",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"76": ".getDashboardStats",
|
||||
"77": "seo.module.ts",
|
||||
"78": "route.ts",
|
||||
"78": "rss.xml/route.ts",
|
||||
"79": "🏢 AI Software Agency — Master Orchestration Protocol v3",
|
||||
"80": "Operational Rules & Boundaries",
|
||||
"81": "Operational Rules & Boundaries",
|
||||
"82": "scripts",
|
||||
"83": "dependencies",
|
||||
"84": "Role & Core Objective",
|
||||
"85": "eslint-config-prettier",
|
||||
"85": "ArchivePage.tsx",
|
||||
"86": "zibal.service.ts",
|
||||
"87": "dependencies",
|
||||
<<<<<<< HEAD
|
||||
"88": "ProductPage.tsx",
|
||||
=======
|
||||
"88": "toPersian",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"88": "NetworkBanner.tsx",
|
||||
"89": "seed-products.ts",
|
||||
"90": "useSettingsStore",
|
||||
"91": "Reconciled Audit Roles & Assignments",
|
||||
"92": "OrdersService",
|
||||
"93": "@nestjs/schematics",
|
||||
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
|
||||
"95": "schema.ts",
|
||||
"95": "blog/[slug]/page.tsx",
|
||||
"96": "compilerOptions",
|
||||
"97": "blog/[slug]/page.tsx",
|
||||
"97": "SettingsService",
|
||||
"98": "scripts",
|
||||
"99": "BlogsController",
|
||||
"100": "Deep Audit Summary Report",
|
||||
@ -145,19 +105,14 @@
|
||||
"103": "Comprehensive Change Log",
|
||||
"104": "Coupons.tsx",
|
||||
"105": "Operational Rules & Boundaries",
|
||||
<<<<<<< HEAD
|
||||
"106": "blog/page.tsx",
|
||||
"107": "layout.tsx",
|
||||
=======
|
||||
"106": "Media.tsx",
|
||||
"107": "@types/supertest",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"107": "WikiController",
|
||||
"108": "PrismaService",
|
||||
"109": "1. Summary of Integrity Repairs Performed",
|
||||
"110": "Operational Rules & Boundaries",
|
||||
"111": "Operational Rules & Boundaries",
|
||||
"112": "Operational Rules & Boundaries",
|
||||
"113": "CreateReviewDto",
|
||||
"113": "SmsService",
|
||||
"114": "AppService",
|
||||
"115": "UsersService",
|
||||
"116": "Vazirmatn Changelog",
|
||||
@ -166,57 +121,43 @@
|
||||
"119": "compilerOptions",
|
||||
"120": "compilerOptions",
|
||||
"121": "backend/README.md",
|
||||
<<<<<<< HEAD
|
||||
"122": "videos/page.tsx",
|
||||
"123": "BlogsService",
|
||||
=======
|
||||
"122": "Param",
|
||||
"122": "AdminService",
|
||||
"123": "CreateEBankCheckoutDto",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"124": "Repository Map",
|
||||
"125": "validate_integrity.js",
|
||||
"126": "admin-panel/package.json",
|
||||
"127": "Sahel-Font",
|
||||
<<<<<<< HEAD
|
||||
"128": "AdminService",
|
||||
"129": "نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina",
|
||||
=======
|
||||
"128": "AdminController",
|
||||
"129": "InitiatePaymentDto",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"130": "Sahel-Font",
|
||||
"131": "Role & Core Objective",
|
||||
"132": "orchestrate.py",
|
||||
"133": "backend/package.json",
|
||||
"134": "app.e2e-spec.js",
|
||||
"134": "blog/page.tsx",
|
||||
"135": "graphify reference: extra exports and benchmark",
|
||||
"136": "Phase 2 Final Quality Gate Summary Report",
|
||||
"137": "Task Modifications Log",
|
||||
"138": "Install",
|
||||
"139": "catalog/page.tsx",
|
||||
"139": "layout.tsx",
|
||||
"140": "ErrorBoundary",
|
||||
"141": "application/package.json",
|
||||
"142": "start-dev.js",
|
||||
"143": "generate-openapi.js",
|
||||
"144": "@testing-library/react",
|
||||
"145": "@types/node",
|
||||
"145": "admin.service.ts",
|
||||
"146": "System Discovery",
|
||||
"147": "RevalidationService",
|
||||
"148": "typescript",
|
||||
"147": "useCartStore",
|
||||
"148": "wiki/[slug]/page.tsx",
|
||||
"149": "SmsSettingsPage.tsx",
|
||||
"150": "Product Requirement Document (PRD)",
|
||||
<<<<<<< HEAD
|
||||
"151": "admin.service.ts",
|
||||
"152": "InitiatePaymentDto",
|
||||
=======
|
||||
"151": "auth.service.ts",
|
||||
"152": ".createCoupon",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"152": "cartStore.ts",
|
||||
"153": "exclude",
|
||||
"154": "Baseline Command Plan & Reconciled Command History",
|
||||
"155": "seo-backfill.ts",
|
||||
"156": "manual-test-scenarios.md",
|
||||
"157": "ErrorPages.tsx",
|
||||
"158": "AuthService",
|
||||
"159": "with-vpn.sh",
|
||||
"160": "Architecture Specification",
|
||||
"161": "Project Health Audit Report",
|
||||
@ -234,12 +175,16 @@
|
||||
"173": "Phase 3 Audit Traceability Matrix",
|
||||
"174": "rebuild_honest_ledger.js",
|
||||
"175": "validate_evidence_grade.js",
|
||||
"176": "CreateOrderDto",
|
||||
"177": "SmsLogQueryDto",
|
||||
"178": "نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina",
|
||||
"179": "PaginationDto",
|
||||
"180": "API Contract Specification",
|
||||
"181": "⚙️ Backend Technical Review (05_dev_backend)",
|
||||
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
|
||||
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
|
||||
"184": "MetricsController",
|
||||
"184": "RedisService",
|
||||
"185": "trust-seals/page.tsx",
|
||||
"186": "seed-ui-texts.ts",
|
||||
"187": "seed-wiki.ts",
|
||||
"188": "update-blog.dto.ts",
|
||||
@ -251,11 +196,14 @@
|
||||
"194": "Raw Finding Verification & Disposition Report",
|
||||
"195": "React + TypeScript + Vite",
|
||||
"196": "Select.tsx",
|
||||
"199": "auth.controller.ts",
|
||||
"197": "wiki/page.tsx",
|
||||
"198": "catalog/page.tsx",
|
||||
"199": "RegisterDto",
|
||||
"200": "application/README.md",
|
||||
"201": "deploy.sh",
|
||||
"202": "🔒 Security & Performance Review (09_devops_security)",
|
||||
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
|
||||
"204": "eslint",
|
||||
"205": "prisma/scientificTerms.ts",
|
||||
"206": "seed-blogs.ts",
|
||||
"207": "seed-custom.ts",
|
||||
@ -274,6 +222,7 @@
|
||||
"220": "Input.tsx",
|
||||
"221": "Textarea.tsx",
|
||||
"222": "admin-panel/tsconfig.json",
|
||||
"223": "@types/node",
|
||||
"224": "jest",
|
||||
"225": "next.config.ts",
|
||||
"226": "Shabnam Font README",
|
||||
@ -281,16 +230,9 @@
|
||||
"228": "rules/graphify.md",
|
||||
"229": ".agents/workflows/graphify.md",
|
||||
"230": "instructions.md",
|
||||
"231": "typescript",
|
||||
"232": "@eslint/js",
|
||||
<<<<<<< HEAD
|
||||
"234": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
|
||||
=======
|
||||
"233": "eslint-plugin-prettier",
|
||||
"234": "WholesaleApplyDto",
|
||||
"235": "@nestjs/cli",
|
||||
"236": "@nestjs/testing",
|
||||
"237": "app/page.tsx",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"233": "globals",
|
||||
"238": "prisma",
|
||||
"239": "source-map-support",
|
||||
"240": "supertest",
|
||||
@ -349,7 +291,6 @@
|
||||
"293": "Staging Docker Compose",
|
||||
"294": "ZibalService",
|
||||
"295": "eslint-plugin-react-refresh",
|
||||
"296": "tailwindcss",
|
||||
"297": "ZibalEBankService",
|
||||
"298": ".initiateOrderPayment",
|
||||
"299": "@tailwindcss/postcss",
|
||||
@ -365,12 +306,7 @@
|
||||
"311": "@types/multer",
|
||||
"312": "@types/passport-jwt",
|
||||
"313": "Modal.tsx",
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
"314": "typescript-eslint",
|
||||
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
|
||||
"315": "typescript",
|
||||
"316": "ts-jest",
|
||||
"317": "revalidate/route.ts",
|
||||
"318": "MaskableField.tsx",
|
||||
"319": "eslint-config-next"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
# Graph Report - canina (2026-08-26)
|
||||
|
||||
## Corpus Check
|
||||
- 586 files · ~1,330,298 words
|
||||
- 586 files · ~1,330,416 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
@ -10,7 +10,7 @@
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `753b3dd7`
|
||||
- Built from commit: `9371fd79`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
@ -217,7 +217,7 @@
|
||||
- deploy.sh
|
||||
- 🔒 Security & Performance Review (09_devops_security)
|
||||
- 👁️ UX & Persona Interface Review (08_visual_qa)
|
||||
- eslint
|
||||
- eslint-config-prettier
|
||||
- prisma/scientificTerms.ts
|
||||
- seed-blogs.ts
|
||||
- seed-custom.ts
|
||||
@ -246,7 +246,7 @@
|
||||
- instructions.md
|
||||
- typescript
|
||||
- @eslint/js
|
||||
- globals
|
||||
- tailwindcss
|
||||
- prisma
|
||||
- source-map-support
|
||||
- supertest
|
||||
@ -333,8 +333,8 @@
|
||||
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
|
||||
## Import Cycles
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
|
||||
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
|
||||
|
||||
## Communities (311 total, 101 thin omitted)
|
||||
@ -377,15 +377,15 @@ Nodes (17): AdminModule, Module, ReportsController, ApiBearerAuth, ApiOperation,
|
||||
|
||||
### Community 9 - "devDependencies"
|
||||
Cohesion: 0.08
|
||||
Nodes (25): devDependencies, eslint-config-prettier, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
|
||||
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
|
||||
|
||||
### Community 10 - "CreateReviewDto"
|
||||
Cohesion: 0.08
|
||||
Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more)
|
||||
|
||||
### Community 11 - "MediaSelector.tsx"
|
||||
Cohesion: 0.07
|
||||
Nodes (33): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, Pagination(), PaginationProps (+25 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (27): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, Pagination(), PaginationProps (+19 more)
|
||||
|
||||
### Community 12 - "index.ts"
|
||||
Cohesion: 0.06
|
||||
@ -537,7 +537,7 @@ Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), Auth
|
||||
|
||||
### Community 49 - "devDependencies"
|
||||
Cohesion: 0.11
|
||||
Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, postcss, tailwindcss, @types/node (+11 more)
|
||||
Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, globals, postcss, @types/node (+11 more)
|
||||
|
||||
### Community 50 - "devDependencies"
|
||||
Cohesion: 0.13
|
||||
@ -560,8 +560,8 @@ Cohesion: 0.19
|
||||
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
|
||||
|
||||
### Community 55 - "UITexts.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (20): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps (+12 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (26): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps (+18 more)
|
||||
|
||||
### Community 56 - "Orders.tsx"
|
||||
Cohesion: 0.09
|
||||
|
||||
2
graphify-out/cache/stat-index.json
vendored
2
graphify-out/cache/stat-index.json
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -705,71 +705,6 @@
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "paginationprops"
|
||||
},
|
||||
{
|
||||
"label": "AuthorUser",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L54",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_authoruser",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "authoruser"
|
||||
},
|
||||
{
|
||||
"label": "BlogCategory",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L39",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogcategory",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "blogcategory"
|
||||
},
|
||||
{
|
||||
"label": "BlogPost",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L70",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogpost",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "blogpost"
|
||||
},
|
||||
{
|
||||
"label": "BlogTag",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L48",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogtag",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "blogtag"
|
||||
},
|
||||
{
|
||||
"label": "ProductSimple",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L62",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_productsimple",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "productsimple"
|
||||
},
|
||||
{
|
||||
"label": "Category",
|
||||
"file_type": "code",
|
||||
@ -4228,6 +4163,71 @@
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "toggleswitchprops"
|
||||
},
|
||||
{
|
||||
"label": "AuthorUser",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L54",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_authoruser",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "authoruser"
|
||||
},
|
||||
{
|
||||
"label": "BlogCategory",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L39",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogcategory",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "blogcategory"
|
||||
},
|
||||
{
|
||||
"label": "BlogPost",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L70",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogpost",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "blogpost"
|
||||
},
|
||||
{
|
||||
"label": "BlogTag",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L48",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogtag",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "blogtag"
|
||||
},
|
||||
{
|
||||
"label": "ProductSimple",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L62",
|
||||
"_callable": true,
|
||||
"_callable_class": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_productsimple",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "productsimple"
|
||||
},
|
||||
{
|
||||
"label": "AppSitePage",
|
||||
"file_type": "code",
|
||||
@ -6206,18 +6206,6 @@
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "bannersmanager()"
|
||||
},
|
||||
{
|
||||
"label": "Blogs()",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L113",
|
||||
"_callable": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogs",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "blogs()"
|
||||
},
|
||||
{
|
||||
"label": "Categories()",
|
||||
"file_type": "code",
|
||||
@ -14126,6 +14114,18 @@
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "toggleswitch()"
|
||||
},
|
||||
{
|
||||
"label": "Blogs()",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L113",
|
||||
"_callable": true,
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs_blogs",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "blogs()"
|
||||
},
|
||||
{
|
||||
"label": "createSeoSection()",
|
||||
"file_type": "code",
|
||||
@ -19361,17 +19361,6 @@
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "bannersmanager.tsx"
|
||||
},
|
||||
{
|
||||
"label": "Blogs.tsx",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L1",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "blogs.tsx"
|
||||
},
|
||||
{
|
||||
"label": "Categories.tsx",
|
||||
"file_type": "code",
|
||||
@ -19460,17 +19449,6 @@
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "bannersmanager"
|
||||
},
|
||||
{
|
||||
"label": "Blogs",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
|
||||
"source_location": "L18",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_routes_adminroutes_blogs",
|
||||
"community": 11,
|
||||
"community_name": "MediaSelector.tsx",
|
||||
"norm_label": "blogs"
|
||||
},
|
||||
{
|
||||
"label": "Categories",
|
||||
"file_type": "code",
|
||||
@ -28558,26 +28536,26 @@
|
||||
"norm_label": "\ud83d\udc41\ufe0f ux & persona interface review (08_visual_qa)"
|
||||
},
|
||||
{
|
||||
"label": "eslint",
|
||||
"label": "eslint-config-prettier",
|
||||
"file_type": "code",
|
||||
"source_file": "backend/package.json",
|
||||
"source_location": "L63",
|
||||
"source_location": "L64",
|
||||
"_origin": "ast",
|
||||
"id": "backend_package_devdependencies_eslint",
|
||||
"id": "backend_package_devdependencies_eslint_config_prettier",
|
||||
"community": 204,
|
||||
"community_name": "eslint",
|
||||
"norm_label": "eslint"
|
||||
"community_name": "eslint-config-prettier",
|
||||
"norm_label": "eslint-config-prettier"
|
||||
},
|
||||
{
|
||||
"label": "eslint",
|
||||
"label": "eslint-config-prettier",
|
||||
"file_type": "concept",
|
||||
"source_file": "backend/package.json",
|
||||
"source_location": "L63",
|
||||
"source_location": "L64",
|
||||
"_origin": "ast",
|
||||
"id": "backend_package_json_eslint",
|
||||
"id": "eslint_config_prettier",
|
||||
"community": 204,
|
||||
"community_name": "eslint",
|
||||
"norm_label": "eslint"
|
||||
"community_name": "eslint-config-prettier",
|
||||
"norm_label": "eslint-config-prettier"
|
||||
},
|
||||
{
|
||||
"label": "prisma/scientificTerms.ts",
|
||||
@ -29757,26 +29735,26 @@
|
||||
"norm_label": "@eslint/js"
|
||||
},
|
||||
{
|
||||
"label": "globals",
|
||||
"label": "tailwindcss",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/package.json",
|
||||
"source_location": "L35",
|
||||
"source_location": "L37",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_package_devdependencies_globals",
|
||||
"id": "frontend_admin_panel_package_devdependencies_tailwindcss",
|
||||
"community": 233,
|
||||
"community_name": "globals",
|
||||
"norm_label": "globals"
|
||||
"community_name": "tailwindcss",
|
||||
"norm_label": "tailwindcss"
|
||||
},
|
||||
{
|
||||
"label": "globals",
|
||||
"label": "tailwindcss",
|
||||
"file_type": "concept",
|
||||
"source_file": "frontend/admin-panel/package.json",
|
||||
"source_location": "L35",
|
||||
"source_location": "L37",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_package_json_globals",
|
||||
"id": "frontend_admin_panel_package_json_tailwindcss",
|
||||
"community": 233,
|
||||
"community_name": "globals",
|
||||
"norm_label": "globals"
|
||||
"community_name": "tailwindcss",
|
||||
"norm_label": "tailwindcss"
|
||||
},
|
||||
{
|
||||
"label": "prisma",
|
||||
@ -34227,6 +34205,17 @@
|
||||
"community_name": "adminRoutes.tsx",
|
||||
"norm_label": "doctorsmanager"
|
||||
},
|
||||
{
|
||||
"label": "PaymentGatewaysPage",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
|
||||
"source_location": "L35",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_routes_adminroutes_paymentgatewayspage",
|
||||
"community": 32,
|
||||
"community_name": "adminRoutes.tsx",
|
||||
"norm_label": "paymentgatewayspage"
|
||||
},
|
||||
{
|
||||
"label": "Reports",
|
||||
"file_type": "code",
|
||||
@ -34249,17 +34238,6 @@
|
||||
"community_name": "adminRoutes.tsx",
|
||||
"norm_label": "router"
|
||||
},
|
||||
{
|
||||
"label": "Settings",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
|
||||
"source_location": "L15",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_routes_adminroutes_settings",
|
||||
"community": 32,
|
||||
"community_name": "adminRoutes.tsx",
|
||||
"norm_label": "settings"
|
||||
},
|
||||
{
|
||||
"label": "ShippingSettingsPage",
|
||||
"file_type": "code",
|
||||
@ -37164,6 +37142,17 @@
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "@eslint/js"
|
||||
},
|
||||
{
|
||||
"label": "globals",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/package.json",
|
||||
"source_location": "L35",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_package_devdependencies_globals",
|
||||
"community": 49,
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "globals"
|
||||
},
|
||||
{
|
||||
"label": "postcss",
|
||||
"file_type": "code",
|
||||
@ -37175,17 +37164,6 @@
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "postcss"
|
||||
},
|
||||
{
|
||||
"label": "tailwindcss",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/package.json",
|
||||
"source_location": "L37",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_package_devdependencies_tailwindcss",
|
||||
"community": 49,
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "tailwindcss"
|
||||
},
|
||||
{
|
||||
"label": "@types/node",
|
||||
"file_type": "code",
|
||||
@ -37264,15 +37242,15 @@
|
||||
"norm_label": "@eslint/js"
|
||||
},
|
||||
{
|
||||
"label": "tailwindcss",
|
||||
"label": "globals",
|
||||
"file_type": "concept",
|
||||
"source_file": "frontend/admin-panel/package.json",
|
||||
"source_location": "L37",
|
||||
"source_location": "L35",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_package_json_tailwindcss",
|
||||
"id": "frontend_admin_panel_package_json_globals",
|
||||
"community": 49,
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "tailwindcss"
|
||||
"norm_label": "globals"
|
||||
},
|
||||
{
|
||||
"label": "@types/node",
|
||||
@ -38418,6 +38396,17 @@
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "toggleswitch.tsx"
|
||||
},
|
||||
{
|
||||
"label": "Blogs.tsx",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
|
||||
"source_location": "L1",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_pages_blogs",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "blogs.tsx"
|
||||
},
|
||||
{
|
||||
"label": "UITexts.tsx",
|
||||
"file_type": "code",
|
||||
@ -38495,6 +38484,17 @@
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "v1_page_tabs"
|
||||
},
|
||||
{
|
||||
"label": "Blogs",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
|
||||
"source_location": "L18",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_routes_adminroutes_blogs",
|
||||
"community": 55,
|
||||
"community_name": "UITexts.tsx",
|
||||
"norm_label": "blogs"
|
||||
},
|
||||
{
|
||||
"label": "UITexts",
|
||||
"file_type": "code",
|
||||
@ -41234,17 +41234,6 @@
|
||||
"community_name": "Button.tsx",
|
||||
"norm_label": "faqmanager"
|
||||
},
|
||||
{
|
||||
"label": "PaymentGatewaysPage",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
|
||||
"source_location": "L35",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_routes_adminroutes_paymentgatewayspage",
|
||||
"community": 7,
|
||||
"community_name": "Button.tsx",
|
||||
"norm_label": "paymentgatewayspage"
|
||||
},
|
||||
{
|
||||
"label": "Reviews",
|
||||
"file_type": "code",
|
||||
@ -41256,6 +41245,17 @@
|
||||
"community_name": "Button.tsx",
|
||||
"norm_label": "reviews"
|
||||
},
|
||||
{
|
||||
"label": "Settings",
|
||||
"file_type": "code",
|
||||
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
|
||||
"source_location": "L15",
|
||||
"_origin": "ast",
|
||||
"id": "frontend_admin_panel_src_routes_adminroutes_settings",
|
||||
"community": 7,
|
||||
"community_name": "Button.tsx",
|
||||
"norm_label": "settings"
|
||||
},
|
||||
{
|
||||
"label": "SslSettingsPage",
|
||||
"file_type": "code",
|
||||
@ -44821,15 +44821,15 @@
|
||||
"norm_label": "devdependencies"
|
||||
},
|
||||
{
|
||||
"label": "eslint-config-prettier",
|
||||
"label": "eslint",
|
||||
"file_type": "code",
|
||||
"source_file": "backend/package.json",
|
||||
"source_location": "L64",
|
||||
"source_location": "L63",
|
||||
"_origin": "ast",
|
||||
"id": "backend_package_devdependencies_eslint_config_prettier",
|
||||
"id": "backend_package_devdependencies_eslint",
|
||||
"community": 9,
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "eslint-config-prettier"
|
||||
"norm_label": "eslint"
|
||||
},
|
||||
{
|
||||
"label": "@eslint/eslintrc",
|
||||
@ -44952,6 +44952,17 @@
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "typescript-eslint"
|
||||
},
|
||||
{
|
||||
"label": "eslint",
|
||||
"file_type": "concept",
|
||||
"source_file": "backend/package.json",
|
||||
"source_location": "L63",
|
||||
"_origin": "ast",
|
||||
"id": "backend_package_json_eslint",
|
||||
"community": 9,
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "eslint"
|
||||
},
|
||||
{
|
||||
"label": "globals",
|
||||
"file_type": "concept",
|
||||
@ -44974,17 +44985,6 @@
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "typescript-eslint"
|
||||
},
|
||||
{
|
||||
"label": "eslint-config-prettier",
|
||||
"file_type": "concept",
|
||||
"source_file": "backend/package.json",
|
||||
"source_location": "L64",
|
||||
"_origin": "ast",
|
||||
"id": "eslint_config_prettier",
|
||||
"community": 9,
|
||||
"community_name": "devDependencies",
|
||||
"norm_label": "eslint-config-prettier"
|
||||
},
|
||||
{
|
||||
"label": "@eslint/eslintrc",
|
||||
"file_type": "concept",
|
||||
@ -49875,7 +49875,7 @@
|
||||
"confidence": "EXTRACTED",
|
||||
"confidence_score": 1.0,
|
||||
"source_file": "frontend/application/components/BlogPreviewSection.tsx",
|
||||
"source_location": "L142",
|
||||
"source_location": "L139",
|
||||
"weight": 1.0,
|
||||
"_origin": "ast",
|
||||
"source": "frontend_application_components_blogpreviewsection_blogpreviewsection",
|
||||
@ -132737,5 +132737,5 @@
|
||||
}
|
||||
],
|
||||
"hyperedges": [],
|
||||
"built_at_commit": "753b3dd7ecca4817a4473833535b2b6b765cda42"
|
||||
"built_at_commit": "9371fd79e1beae3106ebc89a136ea902ef7c341d"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user