@appcorp/shadcn 1.1.52 → 1.1.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/components/ui/resizable.d.ts +1 -1
  2. package/package.json +1 -1
  3. package/templates/data/school-v1.d.ts +254 -83
  4. package/templates/data/school-v1.js +684 -470
  5. package/templates/school-v1/footer.d.ts +3 -2
  6. package/templates/school-v1/footer.js +34 -38
  7. package/templates/school-v1/index.d.ts +17 -1
  8. package/templates/school-v1/index.js +36 -15
  9. package/templates/school-v1/navigation.d.ts +3 -7
  10. package/templates/school-v1/navigation.js +16 -10
  11. package/templates/school-v1/sections/about.d.ts +2 -7
  12. package/templates/school-v1/sections/about.js +17 -37
  13. package/templates/school-v1/sections/admissions.d.ts +3 -7
  14. package/templates/school-v1/sections/admissions.js +31 -20
  15. package/templates/school-v1/sections/contact.d.ts +3 -2
  16. package/templates/school-v1/sections/contact.js +36 -69
  17. package/templates/school-v1/sections/faqs.d.ts +3 -5
  18. package/templates/school-v1/sections/faqs.js +29 -12
  19. package/templates/school-v1/sections/hero.d.ts +3 -12
  20. package/templates/school-v1/sections/hero.js +53 -19
  21. package/templates/school-v1/sections/management.d.ts +3 -5
  22. package/templates/school-v1/sections/management.js +11 -10
  23. package/templates/school-v1/sections/policies.d.ts +7 -6
  24. package/templates/school-v1/sections/policies.js +4 -4
  25. package/templates/school-v1/sections/programs.d.ts +3 -5
  26. package/templates/school-v1/sections/programs.js +24 -10
  27. package/templates/school-v1/sections/testimonials.d.ts +3 -5
  28. package/templates/school-v1/sections/testimonials.js +13 -12
  29. package/templates/school-v1/sections/why-choose-us.d.ts +3 -6
  30. package/templates/school-v1/sections/why-choose-us.js +34 -17
  31. package/templates/school-v1/sections/news-events.d.ts +0 -2
  32. package/templates/school-v1/sections/news-events.js +0 -60
@@ -4,96 +4,63 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ContactSection = ContactSection;
8
- var react_1 = __importDefault(require("react"));
7
+ exports.ContactSection = void 0;
9
8
  var framer_motion_1 = require("framer-motion");
10
9
  var badge_1 = require("../../../components/ui/badge");
11
10
  var button_1 = require("../../../components/ui/button");
12
11
  var link_1 = __importDefault(require("next/link"));
13
12
  var lucide_react_1 = require("lucide-react");
14
- var contactDetails = [
15
- {
16
- icon: lucide_react_1.MapPin,
17
- label: "Address",
18
- value: "Awan Town, Multan Road, Lahore",
19
- href: "https://www.google.com/maps/place/Lahore+Garrison+Grammar+School+(Girls+Campus)/@31.484634,74.254856,15z/data=!4m6!3m5!1s0x39190377d7bf124d:0x3c4510636938221c!8m2!3d31.4846344!4d74.2548563!16s%2Fg%2F11s0ktj4nh?hl=en&entry=ttu&g_ep=EgoyMDI2MDMwNC4xIKXMDSoASAFQAw%3D%3D",
20
- color: "text-blue-600",
21
- bg: "bg-blue-50",
22
- },
23
- {
24
- icon: lucide_react_1.Phone,
25
- label: "Phone",
26
- value: "042-35961207",
27
- href: "tel:+924235961207",
28
- color: "text-green-600",
29
- bg: "bg-green-50",
30
- },
31
- {
32
- icon: lucide_react_1.Mail,
33
- label: "Email",
34
- value: "admin@lggs.edu.pk",
35
- href: "mailto:admin@lggs.edu.pk",
36
- color: "text-purple-600",
37
- bg: "bg-purple-50",
38
- },
39
- {
40
- icon: lucide_react_1.Clock,
41
- label: "Office Hours",
42
- value: "Mon – Sat: 8:00 AM – 2:00 PM",
43
- href: null,
44
- color: "text-amber-600",
45
- bg: "bg-amber-50",
46
- },
47
- ];
48
- var socialLinks = [
49
- {
50
- icon: lucide_react_1.Facebook,
51
- href: "https://www.facebook.com/LGGS.Lahore/",
52
- label: "Facebook",
53
- },
54
- { icon: lucide_react_1.Instagram, href: "#", label: "Instagram" },
55
- { icon: lucide_react_1.Twitter, href: "#", label: "Twitter / X" },
56
- ];
57
- function ContactSection() {
13
+ var react_1 = __importDefault(require("react"));
14
+ var iconMap = {
15
+ MapPin: lucide_react_1.MapPin,
16
+ Phone: lucide_react_1.Phone,
17
+ Mail: lucide_react_1.Mail,
18
+ Clock: lucide_react_1.Clock,
19
+ Facebook: lucide_react_1.Facebook,
20
+ Instagram: lucide_react_1.Instagram,
21
+ Twitter: lucide_react_1.Twitter,
22
+ };
23
+ var ContactSection = function (_a) {
24
+ var heading = _a.heading, headingHighlight = _a.headingHighlight, lead = _a.lead, badge = _a.badge, contactDetails = _a.contactDetails, socialLinks = _a.socialLinks, cta = _a.cta, mapEmbedSrc = _a.mapEmbedSrc, mapOpenLink = _a.mapOpenLink;
58
25
  return (react_1.default.createElement("section", { id: "contact", className: "overflow-hidden bg-white py-24" },
59
26
  react_1.default.createElement("div", { className: "container mx-auto px-4" },
60
27
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-16 text-center", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, viewport: { once: true } },
61
- react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, "Contact Us"),
28
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, badge),
62
29
  react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
63
- "We Would Love to",
30
+ heading,
64
31
  " ",
65
- react_1.default.createElement("span", { className: "text-blue-700" }, "Hear From You")),
66
- react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, "Whether you want to arrange a campus visit, ask about admissions, or simply find out more about LGGS \u2014 our team is always glad to help.")),
32
+ react_1.default.createElement("span", { className: "text-blue-700" }, headingHighlight)),
33
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, lead)),
67
34
  react_1.default.createElement("div", { className: "grid grid-cols-1 gap-10 lg:grid-cols-2" },
68
35
  react_1.default.createElement(framer_motion_1.motion.div, { initial: { opacity: 0, x: -30 }, whileInView: { opacity: 1, x: 0 }, transition: { duration: 0.5 }, viewport: { once: true } },
69
36
  react_1.default.createElement("div", { className: "mb-8 grid grid-cols-1 gap-4 sm:grid-cols-2" }, contactDetails.map(function (item) { return (react_1.default.createElement("div", { key: item.label, className: "rounded-2xl border border-gray-100 bg-slate-50 p-5 transition-shadow hover:shadow-md" },
70
- react_1.default.createElement("div", { className: "mb-3 inline-flex h-10 w-10 items-center justify-center rounded-xl ".concat(item.bg) },
71
- react_1.default.createElement(item.icon, { className: "h-5 w-5 ".concat(item.color) })),
37
+ react_1.default.createElement("div", { className: "mb-3 inline-flex h-10 w-10 items-center justify-center rounded-xl ".concat(item.bg) }, (function () {
38
+ var Icon = iconMap[item.icon];
39
+ return Icon ? (react_1.default.createElement(Icon, { className: "h-5 w-5 ".concat(item.color) })) : null;
40
+ })()),
72
41
  react_1.default.createElement("div", { className: "mb-1 text-xs font-semibold tracking-wider text-gray-400 uppercase" }, item.label),
73
42
  item.href !== null ? (react_1.default.createElement(link_1.default, { href: item.href, className: "text-sm font-medium ".concat(item.color, " hover:underline") }, item.value)) : (react_1.default.createElement("div", { className: "text-sm font-medium text-gray-700" }, item.value)))); })),
74
43
  react_1.default.createElement("div", { className: "mb-8" },
75
44
  react_1.default.createElement("p", { className: "mb-3 text-sm font-semibold text-gray-700" }, "Follow Us"),
76
- react_1.default.createElement("div", { className: "flex gap-3" }, socialLinks.map(function (s) { return (react_1.default.createElement(link_1.default, { key: s.label, href: s.href, className: "flex h-10 w-10 items-center justify-center rounded-xl border border-gray-200 bg-white transition-colors hover:border-blue-200 hover:bg-blue-50", "aria-label": s.label },
77
- react_1.default.createElement(s.icon, { className: "h-5 w-5 text-gray-600" }))); }))),
45
+ react_1.default.createElement("div", { className: "flex gap-3" }, socialLinks.map(function (s) { return (react_1.default.createElement(link_1.default, { key: s.label, href: s.href, className: "flex h-10 w-10 items-center justify-center rounded-xl border border-gray-200 bg-white transition-colors hover:border-blue-200 hover:bg-blue-50", "aria-label": s.label }, (function () {
46
+ var Icon = iconMap[s.icon];
47
+ return Icon ? (react_1.default.createElement(Icon, { className: "h-5 w-5 text-gray-600" })) : null;
48
+ })())); }))),
78
49
  react_1.default.createElement(framer_motion_1.motion.div, { className: "overflow-hidden rounded-2xl border border-gray-100 shadow-sm", initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: 0.2 }, viewport: { once: true } },
79
- react_1.default.createElement("iframe", { className: "rounded-2xl", src: "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d13608.254854601666!2d74.24767285761207!3d31.494932487606487!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3919025657a33827%3A0x4c94438286d20882!2sLahore%20Garrison%20Grammar%20School%20(Boys%20Campus)!5e0!3m2!1sen!2s!4v1772957143271!5m2!1sen!2s", width: "800", height: "250", loading: "lazy" }),
50
+ react_1.default.createElement("iframe", { className: "rounded-2xl", src: mapEmbedSrc, width: "800", height: "250", loading: "lazy" }),
80
51
  react_1.default.createElement("div", { className: "flex items-center gap-2 bg-slate-50 px-4 py-2.5" },
81
52
  react_1.default.createElement(lucide_react_1.MapPin, { className: "h-4 w-4 text-blue-600" }),
82
- react_1.default.createElement(link_1.default, { href: "https://maps.google.com/?q=Lahore+Garrison+Grammar+School+Awan+Town+Multan+Road+Lahore", className: "text-xs font-medium text-blue-700 hover:underline" }, "Open in Google Maps")))),
83
- react_1.default.createElement(framer_motion_1.motion.div, { className: "flex flex-col justify-between rounded-3xl bg-gradient-to-br from-blue-800 via-blue-700 to-blue-600 p-8 text-white", initial: { opacity: 0, x: 30 }, whileInView: { opacity: 1, x: 0 }, transition: { duration: 0.5, delay: 0.1 }, viewport: { once: true } },
53
+ react_1.default.createElement(link_1.default, { href: mapOpenLink, className: "text-xs font-medium text-blue-700 hover:underline" }, "Open in Google Maps")))),
54
+ react_1.default.createElement(framer_motion_1.motion.div, { className: "flex flex-col justify-between rounded-3xl bg-linear-to-br from-blue-800 via-blue-700 to-blue-600 p-8 text-white", initial: { opacity: 0, x: 30 }, whileInView: { opacity: 1, x: 0 }, transition: { duration: 0.5, delay: 0.1 }, viewport: { once: true } },
84
55
  react_1.default.createElement("div", null,
85
- react_1.default.createElement("h3", { className: "mb-4 text-2xl font-bold" }, "Book a Campus Tour"),
86
- react_1.default.createElement("p", { className: "mb-6 leading-relaxed text-blue-200" }, "There is no better way to experience LGGS than visiting in person. Walk our campus, meet our teachers, and see the warm, nurturing environment your child will call home."),
87
- react_1.default.createElement("ul", { className: "mb-8 space-y-2" }, [
88
- "Meet our Principal and faculty",
89
- "Tour both campuses",
90
- "Ask your questions in person",
91
- "Receive the full prospectus",
92
- ].map(function (item) { return (react_1.default.createElement("li", { key: item, className: "flex items-center gap-2 text-sm text-blue-100" },
93
- react_1.default.createElement("span", { className: "h-1.5 w-1.5 flex-shrink-0 rounded-full bg-yellow-400" }),
56
+ react_1.default.createElement("h3", { className: "mb-4 text-2xl font-bold" }, cta.title),
57
+ react_1.default.createElement("p", { className: "mb-6 leading-relaxed text-blue-200" }, cta.lead),
58
+ react_1.default.createElement("ul", { className: "mb-8 space-y-2" }, cta.bullets.map(function (item) { return (react_1.default.createElement("li", { key: item, className: "flex items-center gap-2 text-sm text-blue-100" },
59
+ react_1.default.createElement("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-yellow-400" }),
94
60
  item)); }))),
95
61
  react_1.default.createElement("div", { className: "flex flex-col gap-3 sm:flex-row" },
96
- react_1.default.createElement(button_1.Button, { className: "flex-1 bg-yellow-400 font-bold text-blue-900 hover:bg-yellow-300" }, "Book a Visit"),
62
+ react_1.default.createElement(button_1.Button, { className: "flex-1 bg-yellow-400 font-bold text-blue-900 hover:bg-yellow-300" }, cta.primary.label),
97
63
  react_1.default.createElement(button_1.Button, { asChild: true, variant: "outline", className: "flex-1 border-white/40 bg-white/10 text-white hover:bg-white/20" },
98
- react_1.default.createElement(link_1.default, { href: "tel:+924235961207" }, "Call Us Now"))))))));
99
- }
64
+ react_1.default.createElement(link_1.default, { href: cta.secondary.href || "#" }, cta.secondary.label))))))));
65
+ };
66
+ exports.ContactSection = ContactSection;
@@ -1,5 +1,3 @@
1
- import React from "react";
2
- import type { FAQ } from "../../../templates/data/school-v1";
3
- export declare function FAQsSection({ faqs }: {
4
- faqs: FAQ[];
5
- }): React.JSX.Element;
1
+ import { FAQsData } from "../../data/school-v1";
2
+ import { FC } from "react";
3
+ export declare const FAQsSection: FC<FAQsData>;
@@ -4,30 +4,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.FAQsSection = FAQsSection;
8
- var react_1 = __importDefault(require("react"));
7
+ exports.FAQsSection = void 0;
9
8
  var framer_motion_1 = require("framer-motion");
10
9
  var accordion_1 = require("../../../components/ui/accordion");
11
10
  var badge_1 = require("../../../components/ui/badge");
12
- function FAQsSection(_a) {
13
- var faqs = _a.faqs;
11
+ var lucide_react_1 = require("lucide-react");
12
+ var react_1 = __importDefault(require("react"));
13
+ var iconMap = {
14
+ HelpCircle: lucide_react_1.HelpCircle,
15
+ Users: lucide_react_1.Users,
16
+ GraduationCap: lucide_react_1.GraduationCap,
17
+ Calendar: lucide_react_1.Calendar,
18
+ BookOpen: lucide_react_1.BookOpen,
19
+ Heart: lucide_react_1.Heart,
20
+ Shield: lucide_react_1.Shield,
21
+ Star: lucide_react_1.Star,
22
+ CreditCard: lucide_react_1.CreditCard,
23
+ Bus: lucide_react_1.Bus,
24
+ };
25
+ var FAQsSection = function (_a) {
26
+ var heading = _a.heading, headingHighlight = _a.headingHighlight, lead = _a.lead, faqs = _a.faqs, badge = _a.badge;
14
27
  return (react_1.default.createElement("section", { id: "faqs", className: "overflow-hidden bg-slate-50 py-24" },
15
28
  react_1.default.createElement("div", { className: "container mx-auto px-4" },
16
29
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-16 text-center", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, viewport: { once: true } },
17
- react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, "FAQs"),
30
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, badge),
18
31
  react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
19
- "Questions We ",
20
- react_1.default.createElement("span", { className: "text-blue-700" }, "Hear Most")),
21
- react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, "We know that choosing the right school raises many questions. Here are honest, detailed answers to the things families ask us most.")),
32
+ heading,
33
+ " ",
34
+ react_1.default.createElement("span", { className: "text-blue-700" }, headingHighlight)),
35
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, lead)),
22
36
  react_1.default.createElement("div", { className: "mx-auto max-w-3xl" },
23
37
  react_1.default.createElement(accordion_1.Accordion, { type: "single", collapsible: true, className: "space-y-3" }, faqs.map(function (faq, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: faq.id, initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.4, delay: i * 0.05 }, viewport: { once: true } },
24
38
  react_1.default.createElement(accordion_1.AccordionItem, { value: faq.id, className: "rounded-xl border border-gray-100 bg-white px-2 shadow-sm transition-shadow hover:shadow-md data-[state=open]:border-blue-100 data-[state=open]:shadow-md" },
25
39
  react_1.default.createElement(accordion_1.AccordionTrigger, { className: "px-4 py-5 hover:no-underline" },
26
40
  react_1.default.createElement("div", { className: "flex items-start gap-3 text-left" },
27
- react_1.default.createElement("div", { className: "mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-50" },
28
- react_1.default.createElement(faq.icon, { className: "h-4 w-4 text-blue-600" })),
41
+ react_1.default.createElement("div", { className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-blue-50" }, (function () {
42
+ var Icon = iconMap[faq.icon];
43
+ return react_1.default.createElement(Icon, { className: "h-4 w-4 text-blue-600" });
44
+ })()),
29
45
  react_1.default.createElement("div", null,
30
46
  react_1.default.createElement(badge_1.Badge, { variant: "outline", className: "mb-1 border-blue-200 text-xs text-blue-600" }, faq.category),
31
47
  react_1.default.createElement("div", { className: "font-semibold text-gray-900" }, faq.question)))),
32
- react_1.default.createElement(accordion_1.AccordionContent, { className: "pr-4 pb-5 pl-[60px] text-sm leading-relaxed text-gray-600" }, faq.answer)))); }))))));
33
- }
48
+ react_1.default.createElement(accordion_1.AccordionContent, { className: "pr-4 pb-5 pl-15 text-sm leading-relaxed text-gray-600" }, faq.answer)))); }))))));
49
+ };
50
+ exports.FAQsSection = FAQsSection;
@@ -1,12 +1,3 @@
1
- import React from "react";
2
- import type { HeroSlide } from "../../../templates/data/school-v1";
3
- type HeroStat = {
4
- label: string;
5
- value: string;
6
- icon: string;
7
- };
8
- export declare function HeroSection({ heroSlides, heroStats, }: {
9
- heroSlides: HeroSlide[];
10
- heroStats: HeroStat[];
11
- }): React.JSX.Element;
12
- export {};
1
+ import { FC } from "react";
2
+ import { type HeroData } from "../../data/school-v1";
3
+ export declare const HeroSection: FC<HeroData>;
@@ -1,16 +1,49 @@
1
1
  "use client";
2
2
  "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
3
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
38
  };
6
39
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.HeroSection = HeroSection;
8
- var react_1 = __importDefault(require("react"));
9
- var react_2 = require("react");
40
+ exports.HeroSection = void 0;
41
+ var react_1 = __importStar(require("react"));
10
42
  var link_1 = __importDefault(require("next/link"));
11
43
  var framer_motion_1 = require("framer-motion");
12
44
  var lucide_react_1 = require("lucide-react");
13
45
  var button_1 = require("../../../components/ui/button");
46
+ var school_v1_1 = require("../../data/school-v1");
14
47
  var statIcons = {
15
48
  award: lucide_react_1.Award,
16
49
  users: lucide_react_1.Users,
@@ -27,25 +60,25 @@ var slideVariants = {
27
60
  center: { x: 0 },
28
61
  exit: function (direction) { return ({ x: direction > 0 ? "-100%" : "100%" }); },
29
62
  };
30
- function HeroSection(_a) {
31
- var heroSlides = _a.heroSlides, heroStats = _a.heroStats;
32
- var _b = (0, react_2.useState)(0), current = _b[0], setCurrent = _b[1];
33
- var _c = (0, react_2.useState)(1), direction = _c[0], setDirection = _c[1];
34
- var _d = (0, react_2.useState)(false), isPaused = _d[0], setIsPaused = _d[1];
35
- var paginate = (0, react_2.useCallback)(function (newDirection) {
63
+ var HeroSection = function (_a) {
64
+ var slides = _a.slides, stats = _a.stats;
65
+ var _b = (0, react_1.useState)(0), current = _b[0], setCurrent = _b[1];
66
+ var _c = (0, react_1.useState)(1), direction = _c[0], setDirection = _c[1];
67
+ var _d = (0, react_1.useState)(false), isPaused = _d[0], setIsPaused = _d[1];
68
+ var paginate = (0, react_1.useCallback)(function (newDirection) {
36
69
  setDirection(newDirection);
37
- setCurrent(function (prev) { return (prev + newDirection + heroSlides.length) % heroSlides.length; });
38
- }, []);
39
- (0, react_2.useEffect)(function () {
70
+ setCurrent(function (prev) { return (prev + newDirection + slides.length) % slides.length; });
71
+ }, [slides.length]);
72
+ (0, react_1.useEffect)(function () {
40
73
  if (isPaused)
41
74
  return;
42
75
  var timer = setInterval(function () { return paginate(1); }, 5500);
43
76
  return function () { return clearInterval(timer); };
44
77
  }, [isPaused, paginate]);
45
- var slide = heroSlides[current];
78
+ var slide = slides[current];
46
79
  return (react_1.default.createElement("section", { id: "home", className: "relative overflow-hidden bg-blue-950", style: { height: "75vh", minHeight: "560px" }, onMouseEnter: function () { return setIsPaused(true); }, onMouseLeave: function () { return setIsPaused(false); } },
47
80
  react_1.default.createElement(framer_motion_1.AnimatePresence, { initial: false, custom: direction },
48
- react_1.default.createElement(framer_motion_1.motion.div, { key: slide.id, custom: direction, variants: slideVariants, initial: "enter", animate: "center", exit: "exit", transition: { duration: 0.85, ease: [0.32, 0.72, 0, 1] }, className: "absolute inset-0 bg-gradient-to-br ".concat(slide.gradient) },
81
+ react_1.default.createElement(framer_motion_1.motion.div, { key: slide.id, custom: direction, variants: slideVariants, initial: "enter", animate: "center", exit: "exit", transition: { duration: 0.85, ease: [0.32, 0.72, 0, 1] }, className: "absolute inset-0 bg-linear-to-br ".concat(slide.gradient) },
49
82
  react_1.default.createElement("img", { src: slide.imageUrl, alt: "", role: "presentation", className: "absolute inset-0 h-full w-full object-cover opacity-20" }),
50
83
  react_1.default.createElement("div", { className: "absolute inset-0 opacity-60", style: { background: slide.pattern } }),
51
84
  react_1.default.createElement("div", { className: "absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,rgba(255,255,255,0.06)_0%,transparent_55%)]" }),
@@ -71,7 +104,7 @@ function HeroSection(_a) {
71
104
  react_1.default.createElement(link_1.default, { href: slide.secondaryCta.href }, slide.secondaryCta.label)))))))),
72
105
  react_1.default.createElement(framer_motion_1.motion.div, { className: "border-t border-white/10 bg-black/20 backdrop-blur-sm", initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.8, delay: 0.6 } },
73
106
  react_1.default.createElement("div", { className: "container mx-auto px-6 py-4 md:px-12" },
74
- react_1.default.createElement("div", { className: "grid grid-cols-2 gap-4 md:grid-cols-4" }, heroStats.map(function (stat, i) {
107
+ react_1.default.createElement("div", { className: "grid grid-cols-2 gap-4 md:grid-cols-4" }, stats.map(function (stat, i) {
75
108
  var Icon = statIcons[stat.icon];
76
109
  return (react_1.default.createElement(framer_motion_1.motion.div, { key: stat.label, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: 0.7 + i * 0.1 }, className: "flex items-center gap-3" },
77
110
  react_1.default.createElement("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-yellow-400/20" },
@@ -84,15 +117,16 @@ function HeroSection(_a) {
84
117
  react_1.default.createElement(lucide_react_1.ChevronLeft, { className: "h-6 w-6" })),
85
118
  react_1.default.createElement("button", { onClick: function () { return paginate(1); }, "aria-label": "Next slide", className: "absolute top-1/2 right-4 z-20 -translate-y-1/2 rounded-full bg-white/10 p-2 text-white backdrop-blur-sm transition hover:bg-white/25" },
86
119
  react_1.default.createElement(lucide_react_1.ChevronRight, { className: "h-6 w-6" })),
87
- react_1.default.createElement("div", { className: "absolute bottom-20 left-6 z-20 flex hidden gap-2 md:left-12 md:block" }, heroSlides.map(function (_, i) { return (react_1.default.createElement("button", { key: i, onClick: function () {
120
+ react_1.default.createElement("div", { className: "absolute bottom-20 left-6 z-20 hidden gap-2 md:left-12 md:block" }, school_v1_1.heroSlides.map(function (_, i) { return (react_1.default.createElement("button", { key: i, onClick: function () {
88
121
  setDirection(i > current ? 1 : -1);
89
122
  setCurrent(i);
90
- }, "aria-label": "Go to slide ".concat(i + 1), className: "h-2 rounded-full transition-all duration-300 ".concat(i === current
123
+ }, "aria-label": "Go to slide ".concat(i + 1), className: "h-2 mr-1 rounded-full transition-all duration-300 ".concat(i === current
91
124
  ? "w-8 bg-yellow-400"
92
125
  : "w-2 bg-white/40 hover:bg-white/70") })); })),
93
126
  react_1.default.createElement("div", { className: "absolute right-6 bottom-24 z-20 hidden rounded-full bg-black/20 px-3 py-1 text-xs text-white/60 backdrop-blur-sm md:block" },
94
127
  String(current + 1).padStart(2, "0"),
95
128
  " /",
96
129
  " ",
97
- String(heroSlides.length).padStart(2, "0"))));
98
- }
130
+ String(school_v1_1.heroSlides.length).padStart(2, "0"))));
131
+ };
132
+ exports.HeroSection = HeroSection;
@@ -1,5 +1,3 @@
1
- import React from "react";
2
- import type { ManagementMember } from "../../../templates/data/school-v1";
3
- export declare function ManagementSection({ managementTeam, }: {
4
- managementTeam: ManagementMember[];
5
- }): React.JSX.Element;
1
+ import { ManagementData } from "../../data/school-v1";
2
+ import { FC } from "react";
3
+ export declare const ManagementSection: FC<ManagementData>;
@@ -4,24 +4,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ManagementSection = ManagementSection;
8
- var react_1 = __importDefault(require("react"));
7
+ exports.ManagementSection = void 0;
9
8
  var framer_motion_1 = require("framer-motion");
10
9
  var image_1 = __importDefault(require("next/image"));
11
10
  var badge_1 = require("../../../components/ui/badge");
12
11
  var lucide_react_1 = require("lucide-react");
13
- function ManagementSection(_a) {
14
- var managementTeam = _a.managementTeam;
12
+ var react_1 = __importDefault(require("react"));
13
+ var ManagementSection = function (_a) {
14
+ var badge = _a.badge, heading = _a.heading, headingHighlight = _a.headingHighlight, lead = _a.lead, team = _a.team;
15
15
  return (react_1.default.createElement("section", { id: "management", className: "overflow-hidden bg-white py-24" },
16
16
  react_1.default.createElement("div", { className: "container mx-auto px-4" },
17
17
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-16 text-center", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, viewport: { once: true } },
18
- react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, "Leadership"),
18
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, badge),
19
19
  react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
20
- "The Dedicated Team",
20
+ heading,
21
21
  " ",
22
- react_1.default.createElement("span", { className: "text-blue-700" }, "Behind LGGS")),
23
- react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, "Our school is guided by a passionate, experienced leadership team committed to maintaining the highest standards of education, care, and institutional integrity.")),
24
- react_1.default.createElement("div", { className: "grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5" }, managementTeam.map(function (member, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: member.id, className: "group flex flex-col items-center text-center", initial: { opacity: 1, y: 50 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: i * 0.1 }, viewport: { once: true } },
22
+ react_1.default.createElement("span", { className: "text-blue-700" }, headingHighlight)),
23
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, lead)),
24
+ react_1.default.createElement("div", { className: "grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5" }, team.map(function (member, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: member.id, className: "group flex flex-col items-center text-center", initial: { opacity: 1, y: 50 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: i * 0.1 }, viewport: { once: true } },
25
25
  react_1.default.createElement(framer_motion_1.motion.div, { className: "relative mb-5 h-24 w-24 rounded-full shadow-lg", whileHover: { scale: 1.08 }, transition: { type: "spring", stiffness: 300 } },
26
26
  react_1.default.createElement(image_1.default, { src: member.avatar, alt: member.name, fill: true, className: "rounded-full object-cover" })),
27
27
  react_1.default.createElement("h3", { className: "mb-0.5 font-bold text-gray-900" }, member.name),
@@ -30,4 +30,5 @@ function ManagementSection(_a) {
30
30
  react_1.default.createElement(lucide_react_1.GraduationCap, { className: "h-3 w-3" }),
31
31
  member.qualifications),
32
32
  react_1.default.createElement("p", { className: "line-clamp-4 text-xs leading-relaxed text-gray-500 transition-all duration-300 group-hover:line-clamp-none" }, member.bio))); })))));
33
- }
33
+ };
34
+ exports.ManagementSection = ManagementSection;
@@ -1,13 +1,14 @@
1
- import React from "react";
2
- import { UniformSeason, type PolicyCategory } from "../../../templates/data/school-v1";
3
- type PolicyHighlight = {
1
+ import { FC } from "react";
2
+ import type { PolicyCategory, UniformSeason } from "../../data/school-v1";
3
+ type PoliciesHighlight = {
4
4
  label: string;
5
5
  value: string;
6
6
  note: string;
7
7
  };
8
- export declare const PoliciesSection: ({ policyCategories, policyHighlights, uniformData, }: {
8
+ type PoliciesData = {
9
9
  policyCategories: PolicyCategory[];
10
- policyHighlights: PolicyHighlight[];
10
+ policyHighlights: PoliciesHighlight[];
11
11
  uniformData: UniformSeason[];
12
- }) => React.JSX.Element;
12
+ };
13
+ export declare const PoliciesSection: FC<PoliciesData>;
13
14
  export {};
@@ -55,14 +55,14 @@ function AccordionItem(_a) {
55
55
  react_1.default.createElement("button", { className: "flex w-full items-center justify-between gap-4 px-5 py-4 text-left", onClick: function () { return setOpen(function (o) { return !o; }); } },
56
56
  react_1.default.createElement("span", { className: "text-sm font-semibold text-gray-800" }, section.title),
57
57
  react_1.default.createElement(framer_motion_1.motion.div, { animate: { rotate: open ? 180 : 0 }, transition: { duration: 0.2 } },
58
- react_1.default.createElement(lucide_react_1.ChevronDown, { className: "h-4 w-4 flex-shrink-0 ".concat(colorClass) }))),
58
+ react_1.default.createElement(lucide_react_1.ChevronDown, { className: "h-4 w-4 shrink-0 ".concat(colorClass) }))),
59
59
  react_1.default.createElement(framer_motion_1.AnimatePresence, { initial: false }, open && (react_1.default.createElement(framer_motion_1.motion.div, { initial: { height: 0, opacity: 0 }, animate: { height: "auto", opacity: 1 }, exit: { height: 0, opacity: 0 }, transition: { duration: 0.25, ease: "easeInOut" } },
60
60
  react_1.default.createElement("div", { className: "border-t ".concat(borderClass, " ").concat(bgClass, " space-y-3 px-5 py-4") }, section.points.map(function (point, i) { return (react_1.default.createElement("div", { key: i, className: "flex gap-3" },
61
- react_1.default.createElement(lucide_react_1.CheckCircle, { className: "mt-0.5 h-4 w-4 flex-shrink-0 ".concat(colorClass) }),
61
+ react_1.default.createElement(lucide_react_1.CheckCircle, { className: "mt-0.5 h-4 w-4 shrink-0 ".concat(colorClass) }),
62
62
  react_1.default.createElement("div", null,
63
63
  react_1.default.createElement("p", { className: "text-sm leading-relaxed text-gray-700" }, point.text),
64
64
  point.sub && (react_1.default.createElement("ul", { className: "mt-2 space-y-1" }, point.sub.map(function (s, j) { return (react_1.default.createElement("li", { key: j, className: "flex items-start gap-2" },
65
- react_1.default.createElement("span", { className: "mt-2 h-1.5 w-1.5 flex-shrink-0 rounded-full ".concat(bulletBg) }),
65
+ react_1.default.createElement("span", { className: "mt-2 h-1.5 w-1.5 shrink-0 rounded-full ".concat(bulletBg) }),
66
66
  react_1.default.createElement("span", { className: "text-sm text-gray-600" }, s))); })))))); })))))));
67
67
  }
68
68
  function UniformPanel(_a) {
@@ -80,7 +80,7 @@ function UniformPanel(_a) {
80
80
  react_1.default.createElement("span", { className: "rounded-md px-2 py-0.5 text-xs font-bold ".concat(bgClass, " ").concat(colorClass) }, variant.gender),
81
81
  react_1.default.createElement("span", { className: "text-xs text-gray-500" }, variant.classes)),
82
82
  react_1.default.createElement("ul", { className: "space-y-1.5" }, variant.items.map(function (item, j) { return (react_1.default.createElement("li", { key: j, className: "flex items-start gap-2" },
83
- react_1.default.createElement("span", { className: "mt-2 h-1.5 w-1.5 flex-shrink-0 rounded-full ".concat(bulletBg) }),
83
+ react_1.default.createElement("span", { className: "mt-2 h-1.5 w-1.5 shrink-0 rounded-full ".concat(bulletBg) }),
84
84
  react_1.default.createElement("span", { className: "text-sm leading-relaxed text-gray-600" }, item))); })))); })),
85
85
  react_1.default.createElement("p", { className: "rounded-lg border border-amber-200 bg-amber-50 px-4 py-2.5 text-xs text-amber-700" }, "Uniforms for both campuses are available at each campus canteen. Playgroup children may come in private clothes.")));
86
86
  }
@@ -1,5 +1,3 @@
1
- import React from "react";
2
- import type { Program } from "../../../templates/data/school-v1";
3
- export declare function ProgramsSection({ programs }: {
4
- programs: Program[];
5
- }): React.JSX.Element;
1
+ import { FC } from "react";
2
+ import { ProgramsData } from "../../data/school-v1";
3
+ export declare const ProgramsSection: FC<ProgramsData>;
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.ProgramsSection = ProgramsSection;
40
+ exports.ProgramsSection = void 0;
41
41
  var react_1 = __importStar(require("react"));
42
42
  var framer_motion_1 = require("framer-motion");
43
43
  var badge_1 = require("../../../components/ui/badge");
@@ -45,16 +45,22 @@ var card_1 = require("../../../components/ui/card");
45
45
  var button_1 = require("../../../components/ui/button");
46
46
  var link_1 = __importDefault(require("next/link"));
47
47
  var lucide_react_1 = require("lucide-react");
48
- function ProgramsSection(_a) {
49
- var programs = _a.programs;
48
+ var ProgramsSection = function (_a) {
49
+ var badge = _a.badge, title = _a.title, lead = _a.lead, programs = _a.programs;
50
50
  var _b = (0, react_1.useState)(0), activeIdx = _b[0], setActiveIdx = _b[1];
51
51
  var active = programs[activeIdx];
52
+ var iconMap = {
53
+ baby: lucide_react_1.Baby,
54
+ "book-open": lucide_react_1.BookOpen,
55
+ "graduation-cap": lucide_react_1.GraduationCap,
56
+ user: lucide_react_1.User,
57
+ };
52
58
  return (react_1.default.createElement("section", { id: "programs", className: "bg-gray-50 py-24" },
53
59
  react_1.default.createElement("div", { className: "container mx-auto px-4" },
54
60
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-14 text-center", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, viewport: { once: true } },
55
- react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, "Our Programs"),
56
- react_1.default.createElement("h2", { className: "mb-4 text-4xl font-bold text-gray-900 md:text-5xl" }, "A Complete Educational Journey"),
57
- react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg text-gray-600" }, "From a child's very first steps into learning all the way to board examinations, LGGS provides nurturing, rigorous, and joyful education at every stage.")),
61
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, badge),
62
+ react_1.default.createElement("h2", { className: "mb-4 text-4xl font-bold text-gray-900 md:text-5xl" }, title),
63
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg text-gray-600" }, lead)),
58
64
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-10 flex flex-wrap justify-center gap-3", initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: 0.2 }, viewport: { once: true } }, programs.map(function (p, i) { return (react_1.default.createElement("button", { key: p.title, onClick: function () { return setActiveIdx(i); }, className: "rounded-full px-5 py-2.5 text-sm font-medium transition-all ".concat(activeIdx === i
59
65
  ? "".concat(p.color, " text-white shadow-md")
60
66
  : "bg-white text-gray-600 shadow-sm hover:bg-gray-100") },
@@ -68,7 +74,11 @@ function ProgramsSection(_a) {
68
74
  react_1.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2" },
69
75
  react_1.default.createElement("div", { className: "p-8 md:p-12 ".concat(active.lightColor) },
70
76
  react_1.default.createElement("div", { className: "mb-4 inline-flex items-center gap-2 rounded-full ".concat(active.color, " px-4 py-1.5 text-sm font-semibold text-white") },
71
- react_1.default.createElement(active.icon, { className: "h-4 w-4" }),
77
+ (function () {
78
+ var _a;
79
+ var Icon = (_a = iconMap[active.icon]) !== null && _a !== void 0 ? _a : lucide_react_1.BookOpen;
80
+ return react_1.default.createElement(Icon, { className: "h-4 w-4" });
81
+ })(),
72
82
  active.ages),
73
83
  react_1.default.createElement("h3", { className: "mb-4 text-2xl font-bold text-gray-900 md:text-3xl" }, active.title),
74
84
  react_1.default.createElement("p", { className: "mb-6 leading-relaxed text-gray-700" }, active.description),
@@ -85,9 +95,13 @@ function ProgramsSection(_a) {
85
95
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mt-12 grid grid-cols-2 gap-4 md:grid-cols-4", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6, delay: 0.3 }, viewport: { once: true } }, programs.map(function (program, index) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: program.title, whileHover: { y: -6, scale: 1.02 }, transition: { type: "spring", stiffness: 300 }, onClick: function () { return setActiveIdx(index); }, className: "cursor-pointer" },
86
96
  react_1.default.createElement(card_1.Card, { className: "border-2 transition-all ".concat(activeIdx === index ? "border-current ".concat(program.textColor, " shadow-md") : "border-transparent") },
87
97
  react_1.default.createElement(card_1.CardContent, { className: "flex flex-col items-center gap-3 rounded-lg p-6 text-center ".concat(program.lightColor) },
88
- react_1.default.createElement("div", { className: "flex h-14 w-14 items-center justify-center rounded-2xl ".concat(program.color) },
89
- react_1.default.createElement(program.icon, { className: "h-7 w-7 text-white" })),
98
+ react_1.default.createElement("div", { className: "flex h-14 w-14 items-center justify-center rounded-2xl ".concat(program.color) }, (function () {
99
+ var _a;
100
+ var Icon = (_a = iconMap[program.icon]) !== null && _a !== void 0 ? _a : lucide_react_1.BookOpen;
101
+ return react_1.default.createElement(Icon, { className: "h-7 w-7 text-white" });
102
+ })()),
90
103
  react_1.default.createElement("div", null,
91
104
  react_1.default.createElement("div", { className: "text-sm font-semibold text-gray-900" }, program.title),
92
105
  react_1.default.createElement("div", { className: "text-xs font-medium ".concat(program.textColor) }, program.ages)))))); })))));
93
- }
106
+ };
107
+ exports.ProgramsSection = ProgramsSection;
@@ -1,5 +1,3 @@
1
- import React from "react";
2
- import type { Testimonial } from "../../../templates/data/school-v1";
3
- export declare function TestimonialsSection({ testimonials, }: {
4
- testimonials: Testimonial[];
5
- }): React.JSX.Element;
1
+ import { TestimonialData } from "../../data/school-v1";
2
+ import { FC } from "react";
3
+ export declare const TestimonialsSection: FC<TestimonialData>;
@@ -13,24 +13,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
14
  };
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.TestimonialsSection = TestimonialsSection;
17
- var react_1 = __importDefault(require("react"));
16
+ exports.TestimonialsSection = void 0;
18
17
  var framer_motion_1 = require("framer-motion");
19
18
  var badge_1 = require("../../../components/ui/badge");
20
19
  var lucide_react_1 = require("lucide-react");
21
- function TestimonialsSection(_a) {
22
- var testimonials = _a.testimonials;
20
+ var react_1 = __importDefault(require("react"));
21
+ var TestimonialsSection = function (_a) {
22
+ var badge = _a.badge, heading = _a.heading, headingHighlight = _a.headingHighlight, lead = _a.lead, items = _a.items;
23
23
  return (react_1.default.createElement("section", { id: "testimonials", className: "overflow-hidden bg-white py-24" },
24
24
  react_1.default.createElement("div", { className: "container mx-auto px-4" },
25
25
  react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-16 text-center", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, viewport: { once: true } },
26
- react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, "Testimonials"),
26
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, badge),
27
27
  react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
28
- "Trusted by",
28
+ heading,
29
29
  " ",
30
- react_1.default.createElement("span", { className: "text-blue-700" }, "Families Across Lahore")),
31
- react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, "Don't just take our word for it \u2014 hear from the parents and alumni who have experienced the LGGS difference firsthand.")),
32
- react_1.default.createElement("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3" }, testimonials.map(function (t, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: t.id, className: "group relative overflow-hidden rounded-3xl border border-gray-100 bg-white p-7 shadow-sm transition-all duration-300 hover:shadow-xl", initial: { opacity: 0, y: 40 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: i * 0.07 }, viewport: { once: true }, whileHover: { y: -4 } },
33
- react_1.default.createElement("div", { className: "pointer-events-none absolute top-0 right-0 h-24 w-24 rounded-bl-full bg-gradient-to-br ".concat(t.gradientFrom, " ").concat(t.gradientTo, " opacity-5 transition-opacity group-hover:opacity-10") }),
30
+ react_1.default.createElement("span", { className: "text-blue-700" }, headingHighlight)),
31
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, lead)),
32
+ react_1.default.createElement("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3" }, items.map(function (t, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: t.id, className: "group relative overflow-hidden rounded-3xl border border-gray-100 bg-white p-7 shadow-sm transition-all duration-300 hover:shadow-xl", initial: { opacity: 0, y: 40 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: i * 0.07 }, viewport: { once: true }, whileHover: { y: -4 } },
33
+ react_1.default.createElement("div", { className: "pointer-events-none absolute top-0 right-0 h-24 w-24 rounded-bl-full bg-linear-to-br ".concat(t.gradientFrom, " ").concat(t.gradientTo, " opacity-5 transition-opacity group-hover:opacity-10") }),
34
34
  react_1.default.createElement("div", { className: "mb-4 flex gap-1" }, __spreadArray([], Array(5), true).map(function (_, s) { return (react_1.default.createElement(lucide_react_1.Star, { key: s, className: "h-4 w-4 fill-yellow-400 text-yellow-400" })); })),
35
35
  react_1.default.createElement(lucide_react_1.Quote, { className: "mb-3 h-7 w-7 text-blue-100" }),
36
36
  react_1.default.createElement("p", { className: "mb-6 text-sm leading-relaxed text-gray-600 italic" },
@@ -38,8 +38,9 @@ function TestimonialsSection(_a) {
38
38
  t.quote,
39
39
  "\u201D"),
40
40
  react_1.default.createElement("div", { className: "flex items-center gap-3" },
41
- react_1.default.createElement("div", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-gradient-to-br ".concat(t.gradientFrom, " ").concat(t.gradientTo, " text-sm font-bold text-white") }, t.initials),
41
+ react_1.default.createElement("div", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-linear-to-br ".concat(t.gradientFrom, " ").concat(t.gradientTo, " text-sm font-bold text-white") }, t.initials),
42
42
  react_1.default.createElement("div", null,
43
43
  react_1.default.createElement("div", { className: "text-sm font-semibold text-gray-900" }, t.name),
44
44
  react_1.default.createElement("div", { className: "text-xs text-gray-400" }, t.role))))); })))));
45
- }
45
+ };
46
+ exports.TestimonialsSection = TestimonialsSection;