@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.
- package/components/ui/resizable.d.ts +1 -1
- package/package.json +1 -1
- package/templates/data/school-v1.d.ts +254 -83
- package/templates/data/school-v1.js +684 -470
- package/templates/school-v1/footer.d.ts +3 -2
- package/templates/school-v1/footer.js +34 -38
- package/templates/school-v1/index.d.ts +17 -1
- package/templates/school-v1/index.js +36 -15
- package/templates/school-v1/navigation.d.ts +3 -7
- package/templates/school-v1/navigation.js +16 -10
- package/templates/school-v1/sections/about.d.ts +2 -7
- package/templates/school-v1/sections/about.js +17 -37
- package/templates/school-v1/sections/admissions.d.ts +3 -7
- package/templates/school-v1/sections/admissions.js +31 -20
- package/templates/school-v1/sections/contact.d.ts +3 -2
- package/templates/school-v1/sections/contact.js +36 -69
- package/templates/school-v1/sections/faqs.d.ts +3 -5
- package/templates/school-v1/sections/faqs.js +29 -12
- package/templates/school-v1/sections/hero.d.ts +3 -12
- package/templates/school-v1/sections/hero.js +53 -19
- package/templates/school-v1/sections/management.d.ts +3 -5
- package/templates/school-v1/sections/management.js +11 -10
- package/templates/school-v1/sections/policies.d.ts +7 -6
- package/templates/school-v1/sections/policies.js +4 -4
- package/templates/school-v1/sections/programs.d.ts +3 -5
- package/templates/school-v1/sections/programs.js +24 -10
- package/templates/school-v1/sections/testimonials.d.ts +3 -5
- package/templates/school-v1/sections/testimonials.js +13 -12
- package/templates/school-v1/sections/why-choose-us.d.ts +3 -6
- package/templates/school-v1/sections/why-choose-us.js +34 -17
- package/templates/school-v1/sections/news-events.d.ts +0 -2
- 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 =
|
|
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
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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" },
|
|
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
|
-
|
|
30
|
+
heading,
|
|
64
31
|
" ",
|
|
65
|
-
react_1.default.createElement("span", { className: "text-blue-700" },
|
|
66
|
-
react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" },
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
83
|
-
react_1.default.createElement(framer_motion_1.motion.div, { className: "flex flex-col justify-between rounded-3xl bg-
|
|
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" },
|
|
86
|
-
react_1.default.createElement("p", { className: "mb-6 leading-relaxed text-blue-200" },
|
|
87
|
-
react_1.default.createElement("ul", { className: "mb-8 space-y-2" },
|
|
88
|
-
"
|
|
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" },
|
|
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: "
|
|
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
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
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 =
|
|
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
|
-
|
|
13
|
-
|
|
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" },
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
28
|
-
|
|
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-
|
|
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
|
|
2
|
-
import type
|
|
3
|
-
|
|
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 =
|
|
8
|
-
var react_1 =
|
|
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
|
|
31
|
-
var
|
|
32
|
-
var _b = (0,
|
|
33
|
-
var _c = (0,
|
|
34
|
-
var _d = (0,
|
|
35
|
-
var paginate = (0,
|
|
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 +
|
|
38
|
-
}, []);
|
|
39
|
-
(0,
|
|
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 =
|
|
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-
|
|
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" },
|
|
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
|
|
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
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
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 =
|
|
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
|
-
|
|
14
|
-
|
|
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" },
|
|
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
|
-
|
|
20
|
+
heading,
|
|
21
21
|
" ",
|
|
22
|
-
react_1.default.createElement("span", { className: "text-blue-700" },
|
|
23
|
-
react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" },
|
|
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" },
|
|
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
|
|
2
|
-
import {
|
|
3
|
-
type
|
|
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
|
-
|
|
8
|
+
type PoliciesData = {
|
|
9
9
|
policyCategories: PolicyCategory[];
|
|
10
|
-
policyHighlights:
|
|
10
|
+
policyHighlights: PoliciesHighlight[];
|
|
11
11
|
uniformData: UniformSeason[];
|
|
12
|
-
}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
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 =
|
|
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
|
|
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" },
|
|
56
|
-
react_1.default.createElement("h2", { className: "mb-4 text-4xl font-bold text-gray-900 md:text-5xl" },
|
|
57
|
-
react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg text-gray-600" },
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
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 =
|
|
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
|
-
|
|
22
|
-
|
|
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" },
|
|
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
|
-
|
|
28
|
+
heading,
|
|
29
29
|
" ",
|
|
30
|
-
react_1.default.createElement("span", { className: "text-blue-700" },
|
|
31
|
-
react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" },
|
|
32
|
-
react_1.default.createElement("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3" },
|
|
33
|
-
react_1.default.createElement("div", { className: "pointer-events-none absolute top-0 right-0 h-24 w-24 rounded-bl-full bg-
|
|
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-
|
|
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;
|