From 81b16e4c6263995698c3ab5c10bc24c7ff55190e Mon Sep 17 00:00:00 2001 From: parsa aghaei Date: Sun, 6 Sep 2026 11:36:40 +0330 Subject: [PATCH] feat(footer): add expandable read-more and read-less with gradient fade for SEO brand text --- frontend/application/components/Footer.tsx | 47 +- graphify-out/cache/stat-index.json | 2 +- graphify-out/manifest.json | 1264 ++++++++++---------- 3 files changed, 674 insertions(+), 639 deletions(-) diff --git a/frontend/application/components/Footer.tsx b/frontend/application/components/Footer.tsx index 1c6b968..f666214 100644 --- a/frontend/application/components/Footer.tsx +++ b/frontend/application/components/Footer.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; import Image from "next/image"; -import { Phone, Mail, MapPin, Instagram, ShieldCheck, Globe, ArrowUp, Download } from "lucide-react"; +import { Phone, Mail, MapPin, Instagram, ShieldCheck, Globe, ArrowUp, Download, ChevronDown, ChevronUp } from "lucide-react"; import { useSettingsStore } from "../lib/store/settingsStore"; import BrandLogo from "./BrandLogo"; import Link from "next/link"; @@ -19,6 +19,7 @@ export default function Footer({ const isB2BEnabled = useSettingsStore((s) => s.getBoolean('b2bRegistrationOpen', true) && s.getBoolean('b2b_enabled', true)); const [showScroll, setShowScroll] = useState(false); const [footerCol1, setFooterCol1] = useState>([]); + const [isDescExpanded, setIsDescExpanded] = useState(false); useEffect(() => { fetch(`${process.env.NEXT_PUBLIC_API_URL || '/api'}/menu/type/FOOTER_COL1`) @@ -47,6 +48,9 @@ export default function Footer({ window.scrollTo({ top: 0, behavior: 'smooth' }); }; + const brandDesc = getText('footer_brand_desc', "تدارک هوشمندانه سلامت برای همراهان وفادار شما. واردکننده انحصاری مکمل‌های درمانی با گرید دارویی اختصاصی از آلمان با سابقه ۴۰ سال نوآوری."); + const isLongDesc = brandDesc.length > 120; + return (