@appcorp/shadcn 1.1.51 → 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 (30) hide show
  1. package/components/ui/chart.d.ts +1 -1
  2. package/package.json +2 -2
  3. package/templates/data/school-v1.d.ts +340 -0
  4. package/templates/data/school-v1.js +1254 -0
  5. package/templates/school-v1/footer.d.ts +3 -0
  6. package/templates/school-v1/footer.js +70 -0
  7. package/templates/school-v1/index.d.ts +18 -0
  8. package/templates/school-v1/index.js +57 -0
  9. package/templates/school-v1/navigation.d.ts +3 -0
  10. package/templates/school-v1/navigation.js +92 -0
  11. package/templates/school-v1/sections/about.d.ts +3 -0
  12. package/templates/school-v1/sections/about.js +49 -0
  13. package/templates/school-v1/sections/admissions.d.ts +3 -0
  14. package/templates/school-v1/sections/admissions.js +77 -0
  15. package/templates/school-v1/sections/contact.d.ts +3 -0
  16. package/templates/school-v1/sections/contact.js +66 -0
  17. package/templates/school-v1/sections/faqs.d.ts +3 -0
  18. package/templates/school-v1/sections/faqs.js +50 -0
  19. package/templates/school-v1/sections/hero.d.ts +3 -0
  20. package/templates/school-v1/sections/hero.js +132 -0
  21. package/templates/school-v1/sections/management.d.ts +3 -0
  22. package/templates/school-v1/sections/management.js +34 -0
  23. package/templates/school-v1/sections/policies.d.ts +14 -0
  24. package/templates/school-v1/sections/policies.js +126 -0
  25. package/templates/school-v1/sections/programs.d.ts +3 -0
  26. package/templates/school-v1/sections/programs.js +107 -0
  27. package/templates/school-v1/sections/testimonials.d.ts +3 -0
  28. package/templates/school-v1/sections/testimonials.js +46 -0
  29. package/templates/school-v1/sections/why-choose-us.d.ts +3 -0
  30. package/templates/school-v1/sections/why-choose-us.js +57 -0
@@ -0,0 +1,132 @@
1
+ "use client";
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
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.HeroSection = void 0;
41
+ var react_1 = __importStar(require("react"));
42
+ var link_1 = __importDefault(require("next/link"));
43
+ var framer_motion_1 = require("framer-motion");
44
+ var lucide_react_1 = require("lucide-react");
45
+ var button_1 = require("../../../components/ui/button");
46
+ var school_v1_1 = require("../../data/school-v1");
47
+ var statIcons = {
48
+ award: lucide_react_1.Award,
49
+ users: lucide_react_1.Users,
50
+ building: lucide_react_1.Building2,
51
+ heart: lucide_react_1.Heart,
52
+ };
53
+ var textVariants = {
54
+ enter: { opacity: 0, y: 40 },
55
+ center: { opacity: 1, y: 0 },
56
+ exit: { opacity: 0, y: -30 },
57
+ };
58
+ var slideVariants = {
59
+ enter: function (direction) { return ({ x: direction > 0 ? "100%" : "-100%" }); },
60
+ center: { x: 0 },
61
+ exit: function (direction) { return ({ x: direction > 0 ? "-100%" : "100%" }); },
62
+ };
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) {
69
+ setDirection(newDirection);
70
+ setCurrent(function (prev) { return (prev + newDirection + slides.length) % slides.length; });
71
+ }, [slides.length]);
72
+ (0, react_1.useEffect)(function () {
73
+ if (isPaused)
74
+ return;
75
+ var timer = setInterval(function () { return paginate(1); }, 5500);
76
+ return function () { return clearInterval(timer); };
77
+ }, [isPaused, paginate]);
78
+ var slide = slides[current];
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); } },
80
+ react_1.default.createElement(framer_motion_1.AnimatePresence, { initial: false, custom: direction },
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) },
82
+ react_1.default.createElement("img", { src: slide.imageUrl, alt: "", role: "presentation", className: "absolute inset-0 h-full w-full object-cover opacity-20" }),
83
+ react_1.default.createElement("div", { className: "absolute inset-0 opacity-60", style: { background: slide.pattern } }),
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%)]" }),
85
+ react_1.default.createElement("div", { className: "absolute top-10 right-10 h-72 w-72 rounded-full bg-white/5 blur-3xl" }),
86
+ react_1.default.createElement("div", { className: "absolute bottom-10 left-20 h-56 w-56 rounded-full bg-white/5 blur-2xl" }),
87
+ react_1.default.createElement("div", { className: "absolute top-1/2 right-1/4 h-40 w-40 rounded-full border border-white/10" }),
88
+ react_1.default.createElement("div", { className: "absolute top-1/3 right-1/3 h-64 w-64 rounded-full border border-white/5" }))),
89
+ react_1.default.createElement("div", { className: "relative z-10 flex h-full flex-col" },
90
+ react_1.default.createElement("div", { className: "flex flex-1 items-center" },
91
+ react_1.default.createElement("div", { className: "container mx-auto px-6 md:px-12" },
92
+ react_1.default.createElement("div", { className: "max-w-3xl" },
93
+ react_1.default.createElement(framer_motion_1.AnimatePresence, { mode: "wait" },
94
+ react_1.default.createElement(framer_motion_1.motion.div, { key: slide.id + "-content", initial: "enter", animate: "center", exit: "exit", variants: textVariants, transition: { duration: 0.6 } },
95
+ react_1.default.createElement(framer_motion_1.motion.div, { variants: textVariants, transition: { duration: 0.5 }, className: "mb-2" },
96
+ react_1.default.createElement("span", { className: "inline-block rounded-full border border-white/20 bg-white/10 px-4 py-1.5 text-sm font-medium text-white backdrop-blur-sm" }, slide.badge)),
97
+ react_1.default.createElement(framer_motion_1.motion.h1, { variants: textVariants, transition: { duration: 0.55, delay: 0.1 }, className: "mb-1 text-2xl leading-tight font-extrabold tracking-tight text-white md:text-5xl lg:text-6xl xl:text-7xl" }, slide.headline),
98
+ react_1.default.createElement(framer_motion_1.motion.h1, { variants: textVariants, transition: { duration: 0.55, delay: 0.2 }, className: "mb-2 text-2xl leading-tight font-extrabold tracking-tight md:text-5xl lg:text-6xl xl:text-7xl ".concat(slide.accentColor) }, slide.subheadline),
99
+ react_1.default.createElement(framer_motion_1.motion.p, { variants: textVariants, transition: { duration: 0.5, delay: 0.3 }, className: "mb-8 max-w-xl text-base leading-relaxed text-white/75 md:text-lg" }, slide.description),
100
+ react_1.default.createElement(framer_motion_1.motion.div, { variants: textVariants, transition: { duration: 0.5, delay: 0.4 }, className: "flex flex-wrap gap-4" },
101
+ react_1.default.createElement(button_1.Button, { asChild: true, size: "lg", className: "rounded-full bg-yellow-400 font-semibold text-gray-900 shadow-lg hover:bg-yellow-300" },
102
+ react_1.default.createElement(link_1.default, { href: slide.primaryCta.href }, slide.primaryCta.label)),
103
+ react_1.default.createElement(button_1.Button, { asChild: true, size: "lg", variant: "outline", className: "rounded-full border-white/40 bg-white/10 text-white backdrop-blur-sm hover:bg-white hover:text-gray-900" },
104
+ react_1.default.createElement(link_1.default, { href: slide.secondaryCta.href }, slide.secondaryCta.label)))))))),
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 } },
106
+ react_1.default.createElement("div", { className: "container mx-auto px-6 py-4 md:px-12" },
107
+ react_1.default.createElement("div", { className: "grid grid-cols-2 gap-4 md:grid-cols-4" }, stats.map(function (stat, i) {
108
+ var Icon = statIcons[stat.icon];
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" },
110
+ react_1.default.createElement("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-yellow-400/20" },
111
+ react_1.default.createElement(Icon, { className: "h-5 w-5 text-yellow-400" })),
112
+ react_1.default.createElement("div", null,
113
+ react_1.default.createElement("div", { className: "text-lg leading-none font-bold text-white" }, stat.value),
114
+ react_1.default.createElement("div", { className: "text-xs text-white/60" }, stat.label))));
115
+ }))))),
116
+ react_1.default.createElement("button", { onClick: function () { return paginate(-1); }, "aria-label": "Previous slide", className: "absolute top-1/2 left-4 z-20 -translate-y-1/2 rounded-full bg-white/10 p-2 text-white backdrop-blur-sm transition hover:bg-white/25" },
117
+ react_1.default.createElement(lucide_react_1.ChevronLeft, { className: "h-6 w-6" })),
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" },
119
+ react_1.default.createElement(lucide_react_1.ChevronRight, { className: "h-6 w-6" })),
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 () {
121
+ setDirection(i > current ? 1 : -1);
122
+ setCurrent(i);
123
+ }, "aria-label": "Go to slide ".concat(i + 1), className: "h-2 mr-1 rounded-full transition-all duration-300 ".concat(i === current
124
+ ? "w-8 bg-yellow-400"
125
+ : "w-2 bg-white/40 hover:bg-white/70") })); })),
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" },
127
+ String(current + 1).padStart(2, "0"),
128
+ " /",
129
+ " ",
130
+ String(school_v1_1.heroSlides.length).padStart(2, "0"))));
131
+ };
132
+ exports.HeroSection = HeroSection;
@@ -0,0 +1,3 @@
1
+ import { ManagementData } from "../../data/school-v1";
2
+ import { FC } from "react";
3
+ export declare const ManagementSection: FC<ManagementData>;
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ManagementSection = void 0;
8
+ var framer_motion_1 = require("framer-motion");
9
+ var image_1 = __importDefault(require("next/image"));
10
+ var badge_1 = require("../../../components/ui/badge");
11
+ var lucide_react_1 = require("lucide-react");
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
+ return (react_1.default.createElement("section", { id: "management", className: "overflow-hidden bg-white py-24" },
16
+ react_1.default.createElement("div", { className: "container mx-auto px-4" },
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" }, badge),
19
+ react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
20
+ heading,
21
+ " ",
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
+ 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
+ react_1.default.createElement(image_1.default, { src: member.avatar, alt: member.name, fill: true, className: "rounded-full object-cover" })),
27
+ react_1.default.createElement("h3", { className: "mb-0.5 font-bold text-gray-900" }, member.name),
28
+ react_1.default.createElement("p", { className: "mb-3 text-xs font-semibold text-blue-700" }, member.title),
29
+ react_1.default.createElement("span", { className: "mb-3 inline-flex items-center gap-1 rounded-full bg-slate-100 px-2.5 py-1 text-xs text-gray-600" },
30
+ react_1.default.createElement(lucide_react_1.GraduationCap, { className: "h-3 w-3" }),
31
+ member.qualifications),
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
+ };
34
+ exports.ManagementSection = ManagementSection;
@@ -0,0 +1,14 @@
1
+ import { FC } from "react";
2
+ import type { PolicyCategory, UniformSeason } from "../../data/school-v1";
3
+ type PoliciesHighlight = {
4
+ label: string;
5
+ value: string;
6
+ note: string;
7
+ };
8
+ type PoliciesData = {
9
+ policyCategories: PolicyCategory[];
10
+ policyHighlights: PoliciesHighlight[];
11
+ uniformData: UniformSeason[];
12
+ };
13
+ export declare const PoliciesSection: FC<PoliciesData>;
14
+ export {};
@@ -0,0 +1,126 @@
1
+ "use client";
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
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.PoliciesSection = void 0;
38
+ var react_1 = __importStar(require("react"));
39
+ var framer_motion_1 = require("framer-motion");
40
+ var lucide_react_1 = require("lucide-react");
41
+ var badge_1 = require("../../../components/ui/badge");
42
+ var categoryIcons = {
43
+ "book-open": lucide_react_1.BookOpen,
44
+ "user-plus": lucide_react_1.UserPlus,
45
+ "graduation-cap": lucide_react_1.GraduationCap,
46
+ "credit-card": lucide_react_1.CreditCard,
47
+ shield: lucide_react_1.Shield,
48
+ info: lucide_react_1.Info,
49
+ tag: lucide_react_1.Tag,
50
+ };
51
+ function AccordionItem(_a) {
52
+ var section = _a.section, colorClass = _a.colorClass, bgClass = _a.bgClass, borderClass = _a.borderClass, bulletBg = _a.bulletBg;
53
+ var _b = (0, react_1.useState)(false), open = _b[0], setOpen = _b[1];
54
+ return (react_1.default.createElement("div", { className: "self-start overflow-hidden rounded-xl border ".concat(borderClass, " bg-white") },
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
+ react_1.default.createElement("span", { className: "text-sm font-semibold text-gray-800" }, section.title),
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 shrink-0 ".concat(colorClass) }))),
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
+ 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 shrink-0 ".concat(colorClass) }),
62
+ react_1.default.createElement("div", null,
63
+ react_1.default.createElement("p", { className: "text-sm leading-relaxed text-gray-700" }, point.text),
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 shrink-0 rounded-full ".concat(bulletBg) }),
66
+ react_1.default.createElement("span", { className: "text-sm text-gray-600" }, s))); })))))); })))))));
67
+ }
68
+ function UniformPanel(_a) {
69
+ var colorClass = _a.colorClass, bgClass = _a.bgClass, borderClass = _a.borderClass, bulletBg = _a.bulletBg, uniformData = _a.uniformData;
70
+ var _b = (0, react_1.useState)("Summer"), season = _b[0], setSeason = _b[1];
71
+ var current = uniformData.find(function (u) { return u.season === season; });
72
+ return (react_1.default.createElement("div", { className: "space-y-4" },
73
+ react_1.default.createElement("div", { className: "flex w-fit gap-2 rounded-xl border border-gray-100 bg-white p-1" }, ["Summer", "Winter"].map(function (s) { return (react_1.default.createElement("button", { key: s, onClick: function () { return setSeason(s); }, className: "flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-all ".concat(season === s
74
+ ? "".concat(bgClass, " ").concat(colorClass, " shadow-sm")
75
+ : "text-gray-500 hover:text-gray-700") },
76
+ s === "Summer" ? (react_1.default.createElement(lucide_react_1.Sun, { className: "h-4 w-4" })) : (react_1.default.createElement(lucide_react_1.Snowflake, { className: "h-4 w-4" })),
77
+ s)); })),
78
+ react_1.default.createElement("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2" }, current.variants.map(function (variant, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: "".concat(variant.gender, "-").concat(variant.classes), initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.2, delay: i * 0.06 }, className: "rounded-xl border ".concat(borderClass, " bg-white p-4") },
79
+ react_1.default.createElement("div", { className: "mb-3 flex items-center gap-2" },
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
+ react_1.default.createElement("span", { className: "text-xs text-gray-500" }, variant.classes)),
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 shrink-0 rounded-full ".concat(bulletBg) }),
84
+ react_1.default.createElement("span", { className: "text-sm leading-relaxed text-gray-600" }, item))); })))); })),
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
+ }
87
+ var PoliciesSection = function (_a) {
88
+ var policyCategories = _a.policyCategories, policyHighlights = _a.policyHighlights, uniformData = _a.uniformData;
89
+ var _b = (0, react_1.useState)("overview"), activeTab = _b[0], setActiveTab = _b[1];
90
+ var active = policyCategories.find(function (c) { return c.id === activeTab; });
91
+ var ActiveIcon = categoryIcons[active.icon];
92
+ return (react_1.default.createElement("section", { id: "policies", className: "overflow-hidden bg-gray-50 py-24" },
93
+ react_1.default.createElement("div", { className: "container mx-auto px-4" },
94
+ react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-12 text-center", initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, viewport: { once: true } },
95
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, "School Charter"),
96
+ react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
97
+ "Rules & ",
98
+ react_1.default.createElement("span", { className: "text-blue-700" }, "Policies")),
99
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, "Everything parents and students need to know about how LGGS operates \u2014 presented clearly and concisely.")),
100
+ react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-12 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6", initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.6, delay: 0.15 }, viewport: { once: true } }, policyHighlights.map(function (h) { return (react_1.default.createElement("div", { key: h.label, className: "rounded-2xl border border-blue-100 bg-white px-3 py-4 text-center shadow-sm" },
101
+ react_1.default.createElement("div", { className: "text-2xl font-bold text-blue-700" }, h.value),
102
+ react_1.default.createElement("div", { className: "mt-0.5 text-xs font-semibold text-gray-800" }, h.label),
103
+ react_1.default.createElement("div", { className: "mt-0.5 text-xs text-gray-400" }, h.note))); })),
104
+ react_1.default.createElement(framer_motion_1.motion.div, { className: "mb-6 flex flex-wrap gap-2", initial: { opacity: 0, y: 16 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: 0.2 }, viewport: { once: true } }, policyCategories.map(function (cat) {
105
+ var Icon = categoryIcons[cat.icon];
106
+ var isActive = cat.id === activeTab;
107
+ return (react_1.default.createElement("button", { key: cat.id, onClick: function () { return setActiveTab(cat.id); }, className: "flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium transition-all ".concat(isActive
108
+ ? "".concat(cat.bgClass, " ").concat(cat.colorClass, " ").concat(cat.borderClass, " shadow-sm")
109
+ : "border-gray-200 bg-white text-gray-500 hover:border-gray-300 hover:text-gray-700") },
110
+ react_1.default.createElement(Icon, { className: "h-4 w-4" }),
111
+ cat.label));
112
+ })),
113
+ react_1.default.createElement(framer_motion_1.AnimatePresence, { mode: "wait" },
114
+ react_1.default.createElement(framer_motion_1.motion.div, { key: activeTab, initial: { opacity: 0, y: 16 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: { duration: 0.25 } },
115
+ react_1.default.createElement("div", { className: "mb-6 flex items-center gap-4 rounded-2xl border ".concat(active.borderClass, " ").concat(active.bgClass, " p-5") },
116
+ react_1.default.createElement("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-xl border ".concat(active.borderClass, " bg-white") },
117
+ react_1.default.createElement(ActiveIcon, { className: "h-6 w-6 ".concat(active.colorClass) })),
118
+ react_1.default.createElement("div", null,
119
+ react_1.default.createElement("h3", { className: "text-lg font-bold ".concat(active.colorClass) }, active.label),
120
+ react_1.default.createElement("p", { className: "text-sm text-gray-500" }, active.description)),
121
+ react_1.default.createElement(badge_1.Badge, { className: "ml-auto ".concat(active.badgeClass, " hover:").concat(active.badgeClass) }, activeTab === "uniform"
122
+ ? "2 seasons"
123
+ : "".concat(active.sections.length, " section").concat(active.sections.length !== 1 ? "s" : ""))),
124
+ activeTab === "uniform" ? (react_1.default.createElement(UniformPanel, { colorClass: active.colorClass, bgClass: active.bgClass, borderClass: active.borderClass, bulletBg: active.bulletBg, uniformData: uniformData })) : (react_1.default.createElement("div", { className: "grid grid-cols-1 gap-3 lg:grid-cols-2" }, active.sections.map(function (section) { return (react_1.default.createElement(AccordionItem, { key: section.id, section: section, colorClass: active.colorClass, bgClass: active.bgClass, borderClass: active.borderClass, bulletBg: active.bulletBg })); }))))))));
125
+ };
126
+ exports.PoliciesSection = PoliciesSection;
@@ -0,0 +1,3 @@
1
+ import { FC } from "react";
2
+ import { ProgramsData } from "../../data/school-v1";
3
+ export declare const ProgramsSection: FC<ProgramsData>;
@@ -0,0 +1,107 @@
1
+ "use client";
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
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ProgramsSection = void 0;
41
+ var react_1 = __importStar(require("react"));
42
+ var framer_motion_1 = require("framer-motion");
43
+ var badge_1 = require("../../../components/ui/badge");
44
+ var card_1 = require("../../../components/ui/card");
45
+ var button_1 = require("../../../components/ui/button");
46
+ var link_1 = __importDefault(require("next/link"));
47
+ var lucide_react_1 = require("lucide-react");
48
+ var ProgramsSection = function (_a) {
49
+ var badge = _a.badge, title = _a.title, lead = _a.lead, programs = _a.programs;
50
+ var _b = (0, react_1.useState)(0), activeIdx = _b[0], setActiveIdx = _b[1];
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
+ };
58
+ return (react_1.default.createElement("section", { id: "programs", className: "bg-gray-50 py-24" },
59
+ react_1.default.createElement("div", { className: "container mx-auto px-4" },
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 } },
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)),
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
65
+ ? "".concat(p.color, " text-white shadow-md")
66
+ : "bg-white text-gray-600 shadow-sm hover:bg-gray-100") },
67
+ p.title,
68
+ react_1.default.createElement("span", { className: "ml-2 text-xs opacity-75" }, p.ages))); })),
69
+ react_1.default.createElement(framer_motion_1.AnimatePresence, { mode: "wait" },
70
+ react_1.default.createElement(framer_motion_1.motion.div, { key: activeIdx, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -20 }, transition: { duration: 0.4 } },
71
+ react_1.default.createElement(card_1.Card, { className: "overflow-hidden border-0 shadow-xl" },
72
+ react_1.default.createElement("div", { className: "h-2 w-full ".concat(active.color) }),
73
+ react_1.default.createElement(card_1.CardContent, { className: "p-0" },
74
+ react_1.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2" },
75
+ react_1.default.createElement("div", { className: "p-8 md:p-12 ".concat(active.lightColor) },
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") },
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
+ })(),
82
+ active.ages),
83
+ react_1.default.createElement("h3", { className: "mb-4 text-2xl font-bold text-gray-900 md:text-3xl" }, active.title),
84
+ react_1.default.createElement("p", { className: "mb-6 leading-relaxed text-gray-700" }, active.description),
85
+ react_1.default.createElement(button_1.Button, { asChild: true, className: "".concat(active.color, " border-0 text-white hover:opacity-90") },
86
+ react_1.default.createElement(link_1.default, { href: "#admissions" },
87
+ "Enroll Now ",
88
+ react_1.default.createElement(lucide_react_1.ArrowRight, { className: "ml-2 h-4 w-4" })))),
89
+ react_1.default.createElement("div", { className: "p-8 md:p-12" },
90
+ react_1.default.createElement("h4", { className: "mb-6 text-lg font-semibold text-gray-900" }, "What Your Child Gains"),
91
+ react_1.default.createElement("ul", { className: "space-y-4" }, active.highlights.map(function (hl, i) { return (react_1.default.createElement(framer_motion_1.motion.li, { key: hl, initial: { opacity: 0, x: -10 }, animate: { opacity: 1, x: 0 }, transition: { delay: i * 0.08 }, className: "flex items-start gap-3" },
92
+ react_1.default.createElement("div", { className: "mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full ".concat(active.color) },
93
+ react_1.default.createElement(lucide_react_1.Check, { className: "h-3 w-3 text-white" })),
94
+ react_1.default.createElement("span", { className: "text-gray-700" }, hl))); })))))))),
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" },
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") },
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) },
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
+ })()),
103
+ react_1.default.createElement("div", null,
104
+ react_1.default.createElement("div", { className: "text-sm font-semibold text-gray-900" }, program.title),
105
+ react_1.default.createElement("div", { className: "text-xs font-medium ".concat(program.textColor) }, program.ages)))))); })))));
106
+ };
107
+ exports.ProgramsSection = ProgramsSection;
@@ -0,0 +1,3 @@
1
+ import { TestimonialData } from "../../data/school-v1";
2
+ import { FC } from "react";
3
+ export declare const TestimonialsSection: FC<TestimonialData>;
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ "use strict";
3
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
4
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
5
+ if (ar || !(i in from)) {
6
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
7
+ ar[i] = from[i];
8
+ }
9
+ }
10
+ return to.concat(ar || Array.prototype.slice.call(from));
11
+ };
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TestimonialsSection = void 0;
17
+ var framer_motion_1 = require("framer-motion");
18
+ var badge_1 = require("../../../components/ui/badge");
19
+ var lucide_react_1 = require("lucide-react");
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
+ return (react_1.default.createElement("section", { id: "testimonials", className: "overflow-hidden bg-white py-24" },
24
+ react_1.default.createElement("div", { className: "container mx-auto px-4" },
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" }, badge),
27
+ react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
28
+ heading,
29
+ " ",
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
+ 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
+ react_1.default.createElement(lucide_react_1.Quote, { className: "mb-3 h-7 w-7 text-blue-100" }),
36
+ react_1.default.createElement("p", { className: "mb-6 text-sm leading-relaxed text-gray-600 italic" },
37
+ "\u201C",
38
+ t.quote,
39
+ "\u201D"),
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-linear-to-br ".concat(t.gradientFrom, " ").concat(t.gradientTo, " text-sm font-bold text-white") }, t.initials),
42
+ react_1.default.createElement("div", null,
43
+ react_1.default.createElement("div", { className: "text-sm font-semibold text-gray-900" }, t.name),
44
+ react_1.default.createElement("div", { className: "text-xs text-gray-400" }, t.role))))); })))));
45
+ };
46
+ exports.TestimonialsSection = TestimonialsSection;
@@ -0,0 +1,3 @@
1
+ import type { WhyUsData } from "../../data/school-v1";
2
+ import { FC } from "react";
3
+ export declare const WhyChooseUsSection: FC<WhyUsData>;
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WhyChooseUsSection = void 0;
8
+ var framer_motion_1 = require("framer-motion");
9
+ var badge_1 = require("../../../components/ui/badge");
10
+ var lucide_react_1 = require("lucide-react");
11
+ var react_1 = __importDefault(require("react"));
12
+ var WhyChooseUsSection = function (_a) {
13
+ var badge = _a.badge, highlights = _a.highlights, lead = _a.lead, paragraph = _a.paragraph, title = _a.title, features = _a.features;
14
+ var _b = [features.slice(0, 2), features.slice(2)], firstTwo = _b[0], rest = _b[1];
15
+ var iconMap = {
16
+ award: lucide_react_1.Award,
17
+ shield: lucide_react_1.Shield,
18
+ "book-open": lucide_react_1.BookOpen,
19
+ users: lucide_react_1.Users,
20
+ heart: lucide_react_1.Heart,
21
+ globe: lucide_react_1.Globe,
22
+ star: lucide_react_1.Star,
23
+ zap: lucide_react_1.Zap,
24
+ };
25
+ return (react_1.default.createElement("section", { id: "why-choose-us", className: "overflow-hidden bg-slate-50 py-24" },
26
+ react_1.default.createElement("div", { className: "container mx-auto px-4" },
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 } },
28
+ react_1.default.createElement(badge_1.Badge, { className: "mb-4 bg-blue-100 text-blue-700 hover:bg-blue-100" }, badge),
29
+ react_1.default.createElement("h2", { className: "mb-5 text-4xl font-bold text-gray-900 md:text-5xl" },
30
+ title,
31
+ " ",
32
+ react_1.default.createElement("span", { className: "text-blue-700" }, lead)),
33
+ react_1.default.createElement("p", { className: "mx-auto max-w-2xl text-lg leading-relaxed text-gray-500" }, paragraph)),
34
+ react_1.default.createElement("div", { className: "mb-8 grid grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-4" },
35
+ firstTwo.map(function (f, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: f.title, className: "group relative overflow-hidden rounded-3xl border border-gray-100 bg-white p-8 shadow-sm transition-shadow duration-300 hover:shadow-xl lg:col-span-2", initial: { opacity: 0, y: 40 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: i * 0.1 }, viewport: { once: true }, whileHover: { y: -4 } },
36
+ react_1.default.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-br from-blue-50 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100" }),
37
+ react_1.default.createElement("div", { className: "mb-5 inline-flex h-14 w-14 items-center justify-center rounded-2xl bg-gray-50 transition-transform duration-300 group-hover:scale-110" }, (function () {
38
+ var _a;
39
+ var Icon = (_a = iconMap[f.icon]) !== null && _a !== void 0 ? _a : lucide_react_1.BookOpen;
40
+ return react_1.default.createElement(Icon, { className: "h-7 w-7 ".concat(f.color) });
41
+ })()),
42
+ react_1.default.createElement("h3", { className: "mb-3 text-xl font-bold text-gray-900" }, f.title),
43
+ react_1.default.createElement("p", { className: "leading-relaxed text-gray-500" }, f.description))); }),
44
+ rest.map(function (f, i) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: f.title, className: "group relative overflow-hidden rounded-2xl border border-gray-100 bg-white p-6 shadow-sm transition-shadow duration-300 hover:shadow-lg", initial: { opacity: 0, y: 40 }, whileInView: { opacity: 1, y: 0 }, transition: { duration: 0.5, delay: (i + 2) * 0.08 }, viewport: { once: true }, whileHover: { y: -3 } },
45
+ react_1.default.createElement("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-br from-blue-50 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100" }),
46
+ react_1.default.createElement("div", { className: "mb-4 inline-flex h-11 w-11 items-center justify-center rounded-xl bg-gray-50 transition-transform duration-300 group-hover:scale-110" }, (function () {
47
+ var _a;
48
+ var Icon = (_a = iconMap[f.icon]) !== null && _a !== void 0 ? _a : lucide_react_1.BookOpen;
49
+ return react_1.default.createElement(Icon, { className: "h-5 w-5 ".concat(f.color) });
50
+ })()),
51
+ react_1.default.createElement("h3", { className: "mb-2 font-bold text-gray-900" }, f.title),
52
+ react_1.default.createElement("p", { className: "text-sm leading-relaxed text-gray-500" }, f.description))); })),
53
+ react_1.default.createElement(framer_motion_1.motion.div, { className: "flex flex-wrap items-center justify-center gap-3 border-t border-gray-200 py-8", initial: { opacity: 0 }, whileInView: { opacity: 1 }, transition: { duration: 0.6, delay: 0.5 }, viewport: { once: true } }, highlights.map(function (badge) { return (react_1.default.createElement(framer_motion_1.motion.div, { key: badge, className: "flex items-center gap-2 rounded-full border border-blue-100 bg-white px-4 py-2 text-sm font-medium text-blue-800 shadow-sm", whileHover: { scale: 1.05 }, transition: { type: "spring", stiffness: 400 } },
54
+ react_1.default.createElement(lucide_react_1.CheckCircle, { className: "h-4 w-4 text-blue-500" }),
55
+ badge)); })))));
56
+ };
57
+ exports.WhyChooseUsSection = WhyChooseUsSection;