@appcorp/shadcn 1.1.83 → 1.1.86

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 (35) hide show
  1. package/components/enhanced-slider.d.ts +19 -0
  2. package/components/enhanced-slider.js +80 -0
  3. package/components/shadcn-io/copy-button/index.d.ts +1 -1
  4. package/components/ui/badge.d.ts +1 -1
  5. package/components/ui/button.d.ts +1 -1
  6. package/components/ui/slider.js +9 -1
  7. package/package.json +3 -2
  8. package/templates/appcorp-v1/footer/bottom-bar.d.ts +6 -0
  9. package/templates/appcorp-v1/footer/bottom-bar.js +25 -0
  10. package/templates/appcorp-v1/footer/cta.d.ts +6 -0
  11. package/templates/appcorp-v1/footer/cta.js +21 -0
  12. package/templates/appcorp-v1/footer/footer-grid.d.ts +14 -0
  13. package/templates/appcorp-v1/footer/footer-grid.js +52 -0
  14. package/templates/appcorp-v1/footer/index.d.ts +3 -0
  15. package/templates/appcorp-v1/footer/index.js +28 -0
  16. package/templates/appcorp-v1/footer/newsletter.d.ts +11 -0
  17. package/templates/appcorp-v1/footer/newsletter.js +28 -0
  18. package/templates/appcorp-v1/footer/stats.d.ts +6 -0
  19. package/templates/appcorp-v1/footer/stats.js +15 -0
  20. package/templates/appcorp-v1/header/announcement-bar.d.ts +3 -0
  21. package/templates/appcorp-v1/header/announcement-bar.js +15 -0
  22. package/templates/appcorp-v1/header/dropdown-panel.d.ts +8 -0
  23. package/templates/appcorp-v1/header/dropdown-panel.js +72 -0
  24. package/templates/appcorp-v1/header/index.d.ts +12 -0
  25. package/templates/appcorp-v1/header/index.js +16 -0
  26. package/templates/appcorp-v1/header/mobile-menu.d.ts +14 -0
  27. package/templates/appcorp-v1/header/mobile-menu.js +101 -0
  28. package/templates/appcorp-v1/header/navigation-bar.d.ts +3 -0
  29. package/templates/appcorp-v1/header/navigation-bar.js +117 -0
  30. package/templates/appcorp-v1/header/social-button.d.ts +7 -0
  31. package/templates/appcorp-v1/header/social-button.js +48 -0
  32. package/templates/appcorp-v1/home.d.ts +3 -0
  33. package/templates/appcorp-v1/home.js +27 -0
  34. package/templates/data/appcorp-v1.d.ts +93 -0
  35. package/templates/data/appcorp-v1.js +348 -0
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.MobileMenu = MobileMenu;
40
+ var lucide_react_1 = require("lucide-react");
41
+ var image_1 = __importDefault(require("next/image"));
42
+ var link_1 = __importDefault(require("next/link"));
43
+ var react_1 = __importStar(require("react"));
44
+ var Icons = __importStar(require("lucide-react"));
45
+ var badge_1 = require("../../../components/ui/badge");
46
+ var button_1 = require("../../../components/ui/button");
47
+ var lucide_react_2 = require("lucide-react");
48
+ function MobileMenu(_a) {
49
+ var headerCta = _a.headerCta, items = _a.items, logo = _a.logo, onClose = _a.onClose, email = _a.email, phone = _a.phone, location = _a.location;
50
+ var _b = (0, react_1.useState)(null), openSection = _b[0], setOpenSection = _b[1];
51
+ var toggle = function (label) {
52
+ return setOpenSection(function (prev) { return (prev === label ? null : label); });
53
+ };
54
+ return (react_1.default.createElement("div", { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col bg-background top-8" },
55
+ react_1.default.createElement("div", { className: "flex h-16 items-center justify-between border-b border-border/40 px-6" },
56
+ react_1.default.createElement(link_1.default, { href: "/", onClick: onClose, className: "flex items-center gap-2.5" },
57
+ react_1.default.createElement(image_1.default, { src: logo, alt: "App Corp icon", width: 32, height: 32, className: "h-8 w-8", priority: true }),
58
+ react_1.default.createElement("span", { className: "text-base font-semibold tracking-tight text-foreground" }, "App Corp")),
59
+ react_1.default.createElement("button", { onClick: onClose, "aria-label": "Close menu", className: "flex h-9 w-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground" },
60
+ react_1.default.createElement(lucide_react_1.X, { className: "h-5 w-5" }))),
61
+ react_1.default.createElement("nav", { className: "flex-1 overflow-y-auto px-4 py-4" }, items.map(function (item) {
62
+ var isOpen = openSection === item.label;
63
+ if (item.dropdown) {
64
+ return (react_1.default.createElement("div", { key: item.label, className: "mb-1" },
65
+ react_1.default.createElement("button", { onClick: function () { return toggle(item.label); }, className: "flex w-full items-center justify-between rounded-xl px-4 py-3 text-sm font-medium text-foreground transition-colors hover:bg-muted" },
66
+ item.label,
67
+ react_1.default.createElement(lucide_react_1.ChevronDown, { className: "h-4 w-4 text-muted-foreground transition-transform duration-200 ".concat(isOpen ? "rotate-180" : "") })),
68
+ isOpen && (react_1.default.createElement("div", { className: "mb-2 mt-1 space-y-0.5 pl-2" }, item.dropdown.map(function (sub) {
69
+ var IconComp = Icons[sub.icon] || Icons.Circle;
70
+ return (react_1.default.createElement(link_1.default, { key: sub.href, href: sub.href, onClick: onClose, className: "group flex items-start gap-3 rounded-xl px-4 py-3 transition-colors hover:bg-muted/60" },
71
+ react_1.default.createElement("span", { className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 transition-colors group-hover:bg-primary/15" },
72
+ react_1.default.createElement(IconComp, { className: "h-4 w-4 text-primary" })),
73
+ react_1.default.createElement("span", null,
74
+ react_1.default.createElement("span", { className: "flex items-center gap-2 text-sm font-medium text-foreground" },
75
+ sub.label,
76
+ sub.badge && (react_1.default.createElement(badge_1.Badge, { className: "h-4 rounded-full bg-emerald-500/15 px-1.5 py-0 text-[10px] font-semibold text-emerald-600 border-0" }, sub.badge))),
77
+ react_1.default.createElement("span", { className: "mt-0.5 line-clamp-1 text-xs text-muted-foreground" }, sub.description))));
78
+ })))));
79
+ }
80
+ return (react_1.default.createElement(link_1.default, { key: item.label, href: item.href, onClick: onClose, className: "flex items-center justify-between rounded-xl px-4 py-3 text-sm font-medium text-foreground transition-colors hover:bg-muted" },
81
+ item.label,
82
+ react_1.default.createElement(lucide_react_1.ArrowRight, { className: "h-3.5 w-3.5 text-muted-foreground" })));
83
+ })),
84
+ react_1.default.createElement("div", { className: "border-t border-border/40 p-5 space-y-3" },
85
+ react_1.default.createElement("div", { className: "flex items-center gap-2 text-xs text-muted-foreground" },
86
+ react_1.default.createElement(lucide_react_2.Mail, { className: "h-3.5 w-3.5 shrink-0" }),
87
+ react_1.default.createElement("span", null, email)),
88
+ phone && (react_1.default.createElement("div", { className: "flex items-center gap-2 text-xs text-muted-foreground" },
89
+ react_1.default.createElement(lucide_react_2.Phone, { className: "h-3.5 w-3.5 shrink-0" }),
90
+ react_1.default.createElement("span", null, phone))),
91
+ react_1.default.createElement("div", { className: "flex items-center gap-2 text-xs text-muted-foreground" },
92
+ react_1.default.createElement(lucide_react_2.MapPin, { className: "h-3.5 w-3.5 shrink-0" }),
93
+ react_1.default.createElement("span", null, location)),
94
+ react_1.default.createElement("div", { className: "flex flex-row gap-3 mt-1" }, headerCta
95
+ .filter(function (cta) { return cta.enabled; })
96
+ .sort(function (a, b) { return a.order - b.order; })
97
+ .map(function (cta) {
98
+ return (react_1.default.createElement(button_1.Button, { asChild: true, className: "flex-1 rounded-full ".concat(cta.type === "primary" ? "bg-primary text-white" : "bg-secondary text-foreground hover:bg-foreground hover:text-background"), key: cta.href, size: "default" },
99
+ react_1.default.createElement(link_1.default, { href: cta.href }, cta.label)));
100
+ })))));
101
+ }
@@ -0,0 +1,3 @@
1
+ import { FC } from "react";
2
+ import { SiteHeaderProps } from ".";
3
+ export declare const NavigationBar: FC<Omit<SiteHeaderProps, "announcementBar">>;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.NavigationBar = void 0;
40
+ var lucide_react_1 = require("lucide-react");
41
+ var image_1 = __importDefault(require("next/image"));
42
+ var link_1 = __importDefault(require("next/link"));
43
+ var navigation_1 = require("next/navigation");
44
+ var react_1 = __importStar(require("react"));
45
+ var button_1 = require("../../../components/ui/button");
46
+ var dropdown_panel_1 = require("./dropdown-panel");
47
+ var mobile_menu_1 = require("./mobile-menu");
48
+ var NavigationBar = function (_a) {
49
+ var headerCta = _a.headerCta, logo = _a.logo, navItems = _a.navItems, email = _a.email, phone = _a.phone, location = _a.location;
50
+ var pathname = (0, navigation_1.usePathname)();
51
+ var _b = (0, react_1.useState)(false), scrolled = _b[0], setScrolled = _b[1];
52
+ var _c = (0, react_1.useState)(false), mobileOpen = _c[0], setMobileOpen = _c[1];
53
+ var _d = (0, react_1.useState)(null), activeDropdown = _d[0], setActiveDropdown = _d[1];
54
+ var timeoutRef = (0, react_1.useRef)(null);
55
+ // Scroll detection
56
+ (0, react_1.useEffect)(function () {
57
+ var onScroll = function () { return setScrolled(window.scrollY > 20); };
58
+ window.addEventListener("scroll", onScroll, { passive: true });
59
+ return function () { return window.removeEventListener("scroll", onScroll); };
60
+ }, []);
61
+ // Lock body scroll when mobile menu open
62
+ (0, react_1.useEffect)(function () {
63
+ document.body.style.overflow = mobileOpen ? "hidden" : "";
64
+ return function () {
65
+ document.body.style.overflow = "";
66
+ };
67
+ }, [mobileOpen]);
68
+ var openDropdown = function (label) {
69
+ if (timeoutRef.current)
70
+ clearTimeout(timeoutRef.current);
71
+ setActiveDropdown(label);
72
+ };
73
+ var closeDropdown = function () {
74
+ timeoutRef.current = setTimeout(function () { return setActiveDropdown(null); }, 150);
75
+ };
76
+ var keepOpen = function () {
77
+ if (timeoutRef.current)
78
+ clearTimeout(timeoutRef.current);
79
+ };
80
+ return (react_1.default.createElement("header", { className: "fixed left-0 right-0 z-40 transition-all duration-300 top-8\n ".concat(scrolled
81
+ ? "border-b border-border/40 bg-background/95 shadow-sm backdrop-blur-md"
82
+ : "bg-transparent") },
83
+ react_1.default.createElement("div", { className: "relative mx-auto flex h-17 w-full max-w-350 items-center justify-between px-6 md:px-10" },
84
+ react_1.default.createElement(link_1.default, { href: "/", className: "flex shrink-0 items-center gap-2.5", "aria-label": "App Corp \u2014 home" },
85
+ react_1.default.createElement(image_1.default, { src: logo, alt: "App Corp icon", width: 32, height: 32, className: "h-8 w-8", priority: true }),
86
+ react_1.default.createElement("span", { className: "text-base font-semibold tracking-tight text-foreground" }, "App Corp")),
87
+ react_1.default.createElement("nav", { className: "absolute left-1/2 top-1/2 hidden -translate-x-1/2 -translate-y-1/2 lg:block", "aria-label": "Main navigation" },
88
+ react_1.default.createElement("ul", { className: "flex items-center gap-1" }, navItems
89
+ .filter(function (item) { return item.enabled; })
90
+ .sort(function (a, b) { return a.order - b.order; })
91
+ .map(function (item) {
92
+ var hasDropdown = !!item.dropdown;
93
+ var isActive = activeDropdown === item.label;
94
+ return (react_1.default.createElement("li", { key: item.label, className: "relative" },
95
+ hasDropdown ? (react_1.default.createElement("button", { onMouseEnter: function () { return openDropdown(item.label); }, onMouseLeave: closeDropdown, onFocus: function () { return openDropdown(item.label); }, onBlur: closeDropdown, className: "inline-flex items-center gap-1.5 rounded-xl px-3.5 py-2 text-sm font-medium transition-colors\n ".concat(isActive
96
+ ? "bg-muted text-foreground"
97
+ : "text-muted-foreground hover:bg-muted/70 hover:text-foreground"), "aria-expanded": isActive },
98
+ item.label,
99
+ react_1.default.createElement(lucide_react_1.ChevronDown, { className: "h-3.5 w-3.5 transition-transform duration-200 ".concat(isActive ? "rotate-180" : "") }))) : (react_1.default.createElement(link_1.default, { href: item.href, className: "inline-flex items-center gap-1.5 rounded-xl px-3.5 py-2 text-sm font-medium transition-colors\n ".concat(pathname === item.href
100
+ ? "text-foreground bg-muted"
101
+ : "text-muted-foreground hover:bg-muted/70 hover:text-foreground") }, item.label)),
102
+ hasDropdown && isActive && (react_1.default.createElement("div", { onMouseEnter: keepOpen, onMouseLeave: closeDropdown },
103
+ react_1.default.createElement(dropdown_panel_1.DropdownPanel, { item: item, onClose: function () { return setActiveDropdown(null); } })))));
104
+ }))),
105
+ react_1.default.createElement("div", { className: "flex shrink-0 items-center gap-3" },
106
+ headerCta
107
+ .filter(function (cta) { return cta.enabled; })
108
+ .sort(function (a, b) { return a.order - b.order; })
109
+ .map(function (cta) {
110
+ return (react_1.default.createElement(button_1.Button, { asChild: true, className: "hidden rounded-full px-5 text-sm shadow-sm transition-all hover:bg-foreground/90 lg:inline-flex ".concat(cta.type === "primary" ? "bg-primary text-white" : "bg-secondary text-foreground hover:bg-foreground hover:text-background"), key: cta.href, size: "default" },
111
+ react_1.default.createElement(link_1.default, { href: cta.href }, cta.label)));
112
+ }),
113
+ react_1.default.createElement("button", { onClick: function () { return setMobileOpen(true); }, "aria-label": "Open menu", className: "flex h-9 w-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground lg:hidden" },
114
+ react_1.default.createElement(lucide_react_1.Menu, { className: "h-5 w-5" })),
115
+ mobileOpen && (react_1.default.createElement(mobile_menu_1.MobileMenu, { items: navItems, onClose: function () { return setMobileOpen(false); }, logo: logo, headerCta: headerCta, email: email, phone: phone, location: location }))))));
116
+ };
117
+ exports.NavigationBar = NavigationBar;
@@ -0,0 +1,7 @@
1
+ import { FC } from "react";
2
+ export interface SocialButtonProps {
3
+ label: string;
4
+ href: string;
5
+ icon: string;
6
+ }
7
+ export declare const SocialButton: FC<SocialButtonProps>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SocialButton = void 0;
40
+ var react_1 = __importDefault(require("react"));
41
+ var Icons = __importStar(require("lucide-react"));
42
+ var SocialButton = function (_a) {
43
+ var label = _a.label, href = _a.href, icon = _a.icon;
44
+ var IconComp = Icons[icon] || Icons.Globe;
45
+ return (react_1.default.createElement("a", { "aria-label": label, className: "flex h-9 w-9 items-center justify-center rounded-full border border-white/10 bg-white/5 text-white/60 transition-all hover:border-white/25 hover:bg-white/10 hover:text-white", href: href, rel: "noopener noreferrer", target: "_blank" },
46
+ react_1.default.createElement(IconComp, { className: "h-4 w-4" })));
47
+ };
48
+ exports.SocialButton = SocialButton;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { AppCorpV1HomeTemplateProps } from "@/templates/data/appcorp-v1";
3
+ export declare const AppCorpV1HomeTemplate: ({ siteHeader, siteFooter, }: AppCorpV1HomeTemplateProps) => React.JSX.Element;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.AppCorpV1HomeTemplate = void 0;
18
+ var react_1 = __importDefault(require("react"));
19
+ var footer_1 = require("./footer");
20
+ var header_1 = require("./header");
21
+ var AppCorpV1HomeTemplate = function (_a) {
22
+ var siteHeader = _a.siteHeader, siteFooter = _a.siteFooter;
23
+ return (react_1.default.createElement("div", null,
24
+ react_1.default.createElement(header_1.SiteHeader, __assign({}, siteHeader)),
25
+ react_1.default.createElement(footer_1.SiteFooter, __assign({}, siteFooter))));
26
+ };
27
+ exports.AppCorpV1HomeTemplate = AppCorpV1HomeTemplate;
@@ -0,0 +1,93 @@
1
+ export type AnnouncementBar = {
2
+ text: string;
3
+ cta: string;
4
+ href: string;
5
+ };
6
+ export interface NavDropdownItem {
7
+ badge?: string;
8
+ description: string;
9
+ enabled: boolean;
10
+ href: string;
11
+ icon: string;
12
+ label: string;
13
+ order: number;
14
+ }
15
+ export interface NavItem {
16
+ dropdown?: NavDropdownItem[];
17
+ enabled: boolean;
18
+ href?: string;
19
+ label: string;
20
+ order: number;
21
+ }
22
+ export interface Cta {
23
+ href: string;
24
+ enabled: boolean;
25
+ label: string;
26
+ order: number;
27
+ type: "primary" | "secondary";
28
+ }
29
+ export interface FooterLinkItem {
30
+ label: string;
31
+ href: string;
32
+ badge?: string;
33
+ }
34
+ export interface FooterColumn {
35
+ heading: string;
36
+ links: FooterLinkItem[];
37
+ }
38
+ export interface SocialLink {
39
+ enabled: boolean;
40
+ href: string;
41
+ icon: string;
42
+ label: string;
43
+ order: number;
44
+ }
45
+ export interface FooterStat {
46
+ value: string;
47
+ label: string;
48
+ }
49
+ export interface TechBadge {
50
+ label: string;
51
+ enabled: boolean;
52
+ order: number;
53
+ }
54
+ export interface HeaderProps {
55
+ navItems: NavItem[];
56
+ announcementBar: AnnouncementBar;
57
+ headerCta: Cta[];
58
+ logo: string;
59
+ email: string;
60
+ phone: string;
61
+ location: string;
62
+ }
63
+ export interface FooterProps {
64
+ badges: TechBadge[];
65
+ columns: FooterColumn[];
66
+ ctas: Cta[];
67
+ description: string;
68
+ email: string;
69
+ founded: string;
70
+ location: string;
71
+ logo: string;
72
+ name: string;
73
+ newsletterBody: string;
74
+ newsletterCta: string;
75
+ newsletterDisclaimer: string;
76
+ newsletterHeading: string;
77
+ newsletterPlaceholder: string;
78
+ phone: string;
79
+ socialLinks: SocialLink[];
80
+ stats: FooterStat[];
81
+ tagline: string;
82
+ year: string;
83
+ }
84
+ export interface AppCorpV1HomeTemplateProps {
85
+ siteHeader: HeaderProps;
86
+ siteFooter: FooterProps;
87
+ }
88
+ export declare const announcementBar: AnnouncementBar;
89
+ export declare const navItems: NavItem[];
90
+ export declare const headerCta: Cta[];
91
+ export declare const header: HeaderProps;
92
+ export declare const footer: FooterProps;
93
+ export declare const homePageData: AppCorpV1HomeTemplateProps;