@appcorp/shadcn 2.0.1 → 2.0.4

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 (67) hide show
  1. package/components/ui/badge.d.ts +1 -1
  2. package/components/ui/button.d.ts +1 -1
  3. package/components/ui/resizable-impl.d.ts +1 -1
  4. package/components/ui/scroll-area.js +1 -1
  5. package/package.json +1 -1
  6. package/templates/appcorp-v1/footer/bottom-bar.d.ts +6 -0
  7. package/templates/appcorp-v1/footer/bottom-bar.js +1 -0
  8. package/templates/appcorp-v1/footer/cta.d.ts +6 -0
  9. package/templates/appcorp-v1/footer/cta.js +1 -0
  10. package/templates/appcorp-v1/footer/footer-grid.d.ts +14 -0
  11. package/templates/appcorp-v1/footer/footer-grid.js +1 -0
  12. package/templates/appcorp-v1/footer/index.d.ts +3 -0
  13. package/templates/appcorp-v1/footer/index.js +1 -0
  14. package/templates/appcorp-v1/footer/newsletter.d.ts +11 -0
  15. package/templates/appcorp-v1/footer/newsletter.js +1 -0
  16. package/templates/appcorp-v1/footer/stats.d.ts +6 -0
  17. package/templates/appcorp-v1/footer/stats.js +1 -0
  18. package/templates/appcorp-v1/header/announcement-bar.d.ts +3 -0
  19. package/templates/appcorp-v1/header/announcement-bar.js +1 -0
  20. package/templates/appcorp-v1/header/dropdown-panel.d.ts +8 -0
  21. package/templates/appcorp-v1/header/dropdown-panel.js +2 -0
  22. package/templates/appcorp-v1/header/index.d.ts +12 -0
  23. package/templates/appcorp-v1/header/index.js +1 -0
  24. package/templates/appcorp-v1/header/mobile-menu.d.ts +14 -0
  25. package/templates/appcorp-v1/header/mobile-menu.js +1 -0
  26. package/templates/appcorp-v1/header/navigation-bar.d.ts +3 -0
  27. package/templates/appcorp-v1/header/navigation-bar.js +4 -0
  28. package/templates/appcorp-v1/header/social-button.d.ts +7 -0
  29. package/templates/appcorp-v1/header/social-button.js +1 -0
  30. package/templates/appcorp-v1/home.d.ts +3 -0
  31. package/templates/appcorp-v1/home.js +1 -0
  32. package/templates/data/appcorp-v1.d.ts +93 -0
  33. package/templates/data/appcorp-v1.js +1 -0
  34. package/templates/data/edupilotpro-v1.d.ts +33 -0
  35. package/templates/data/edupilotpro-v1.js +1 -0
  36. package/templates/data/school-v1.d.ts +328 -0
  37. package/templates/data/school-v1.js +1 -0
  38. package/templates/edupilotpro-v1/feature-card.d.ts +13 -0
  39. package/templates/edupilotpro-v1/feature-card.js +1 -0
  40. package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +3 -0
  41. package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +1 -0
  42. package/templates/school-v1/footer.d.ts +3 -0
  43. package/templates/school-v1/footer.js +1 -0
  44. package/templates/school-v1/index.d.ts +18 -0
  45. package/templates/school-v1/index.js +1 -0
  46. package/templates/school-v1/navigation.d.ts +3 -0
  47. package/templates/school-v1/navigation.js +1 -0
  48. package/templates/school-v1/sections/about.d.ts +3 -0
  49. package/templates/school-v1/sections/about.js +1 -0
  50. package/templates/school-v1/sections/admissions.d.ts +3 -0
  51. package/templates/school-v1/sections/admissions.js +1 -0
  52. package/templates/school-v1/sections/contact.d.ts +3 -0
  53. package/templates/school-v1/sections/contact.js +1 -0
  54. package/templates/school-v1/sections/faqs.d.ts +3 -0
  55. package/templates/school-v1/sections/faqs.js +1 -0
  56. package/templates/school-v1/sections/hero.d.ts +3 -0
  57. package/templates/school-v1/sections/hero.js +1 -0
  58. package/templates/school-v1/sections/management.d.ts +3 -0
  59. package/templates/school-v1/sections/management.js +1 -0
  60. package/templates/school-v1/sections/policies.d.ts +3 -0
  61. package/templates/school-v1/sections/policies.js +1 -0
  62. package/templates/school-v1/sections/programs.d.ts +3 -0
  63. package/templates/school-v1/sections/programs.js +1 -0
  64. package/templates/school-v1/sections/testimonials.d.ts +3 -0
  65. package/templates/school-v1/sections/testimonials.js +1 -0
  66. package/templates/school-v1/sections/why-choose-us.d.ts +3 -0
  67. package/templates/school-v1/sections/why-choose-us.js +1 -0
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const badgeVariants: (props?: ({
4
- variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
4
+ variant?: "secondary" | "default" | "destructive" | "outline" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
4
+ variant?: "link" | "secondary" | "default" | "destructive" | "outline" | "ghost" | null | undefined;
5
5
  size?: "icon" | "default" | "sm" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import * as ResizablePrimitive from "react-resizable-panels";
3
3
  declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => React.JSX.Element;
4
- declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement | HTMLButtonElement | HTMLDivElement | HTMLFormElement | HTMLInputElement | HTMLObjectElement | HTMLSlotElement | HTMLStyleElement | HTMLTitleElement | HTMLSpanElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLabelElement | HTMLLegendElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLParagraphElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSourceElement | HTMLTableElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
4
+ declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement | HTMLButtonElement | HTMLObjectElement | HTMLSlotElement | HTMLStyleElement | HTMLTitleElement | HTMLInputElement | HTMLSpanElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDivElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLabelElement | HTMLLegendElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLParagraphElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSourceElement | HTMLTableElement | HTMLTemplateElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement | HTMLTableCaptionElement | HTMLMenuElement | HTMLPictureElement>, "id" | "onResize"> & {
5
5
  className?: string;
6
6
  collapsedSize?: number | undefined;
7
7
  collapsible?: boolean | undefined;
@@ -1 +1 @@
1
- "use strict";"use client";var s=function(r,a){var l={};for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&a.indexOf(e)<0&&(l[e]=r[e]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var t=0,e=Object.getOwnPropertySymbols(r);t<e.length;t++)a.indexOf(e[t])<0&&Object.prototype.propertyIsEnumerable.call(r,e[t])&&(l[e[t]]=r[e[t]]);return l};import*as o from"react";import*as n from"@radix-ui/react-scroll-area";import{cn as i}from"../../lib/utils";const m=o.forwardRef((r,a)=>{var{className:l,children:e}=r,t=s(r,["className","children"]);return o.createElement(n.Root,Object.assign({ref:a,className:i("relative overflow-hidden",l)},t),e,o.createElement(c,null),o.createElement(n.Corner,null))});m.displayName=n.Root.displayName;const c=o.forwardRef((r,a)=>{var{className:l,orientation:e="vertical"}=r,t=s(r,["className","orientation"]);return o.createElement(n.ScrollAreaScrollbar,Object.assign({ref:a,orientation:e,className:i("flex touch-none select-none transition-colors",e==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",e==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",l)},t),o.createElement(n.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"}))});c.displayName=n.ScrollAreaScrollbar.displayName;export{m as ScrollArea,c as ScrollBar};
1
+ "use strict";"use client";var s=function(r,a){var l={};for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&a.indexOf(e)<0&&(l[e]=r[e]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var t=0,e=Object.getOwnPropertySymbols(r);t<e.length;t++)a.indexOf(e[t])<0&&Object.prototype.propertyIsEnumerable.call(r,e[t])&&(l[e[t]]=r[e[t]]);return l};import*as o from"react";import*as n from"@radix-ui/react-scroll-area";import{cn as i}from"../../lib/utils";const m=o.forwardRef((r,a)=>{var{className:l,children:e}=r,t=s(r,["className","children"]);return o.createElement(n.Root,Object.assign({ref:a,className:i("relative overflow-hidden",l)},t),e,o.createElement(c,null),o.createElement(n.Corner,null))});m.displayName=n.Root.displayName;const c=o.forwardRef((r,a)=>{var{className:l,orientation:e="vertical"}=r,t=s(r,["className","orientation"]);return o.createElement(n.ScrollAreaScrollbar,Object.assign({ref:a,orientation:e,className:i("flex touch-none select-none transition-colors",e==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",e==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",l)},t),o.createElement(n.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"}))});c.displayName="ScrollAreaScrollbar";export{m as ScrollArea,c as ScrollBar};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appcorp/shadcn",
3
- "version": "2.0.1",
3
+ "version": "2.0.4",
4
4
  "license": "MIT",
5
5
  "author": "Taimoor Khan <taimoor.m.k@live.com>",
6
6
  "repository": "https://github.com/app-corp/shadcn",
@@ -0,0 +1,6 @@
1
+ import { FC } from "react";
2
+ export interface BottomBarProps {
3
+ founded: string;
4
+ year: string;
5
+ }
6
+ export declare const BottomBar: FC<BottomBarProps>;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";import t from"next/link";export const BottomBar=({founded:a,year:r})=>e.createElement("div",{className:"relative mx-auto max-w-7xl px-6 py-5 md:px-10"},e.createElement("div",{className:"flex flex-col items-center justify-between gap-3 text-xs text-white/35 sm:flex-row"},e.createElement("p",null,"\xA9 ",r," App Corp Ltd. All rights reserved.",a?` Est. ${a}.`:""),e.createElement("div",{className:"flex flex-wrap items-center gap-x-5 gap-y-1"},e.createElement(t,{href:"/privacy",className:"hover:text-white/70 transition-colors"},"Privacy"),e.createElement(t,{href:"/terms",className:"hover:text-white/70 transition-colors"},"Terms"),e.createElement(t,{href:"/contact",className:"hover:text-white/70 transition-colors"},"Contact"),e.createElement("span",{className:"hidden sm:inline text-white/20"},"|"),e.createElement("span",{className:"hidden sm:inline"},"Crafted with care in London \u{1F1EC}\u{1F1E7}"))));
@@ -0,0 +1,6 @@
1
+ import { FC } from "react";
2
+ export interface CtaProps {
3
+ href: string;
4
+ label: string;
5
+ }
6
+ export declare const Cta: FC<CtaProps>;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";import a from"next/link";import{ArrowRight as l}from"lucide-react";export const Cta=({href:t,label:r})=>e.createElement("div",{className:"relative border-y border-white/8"},e.createElement("div",{className:"mx-auto flex max-w-7xl flex-col items-center justify-between gap-5 px-6 py-8 text-center sm:flex-row sm:text-left md:px-10"},e.createElement("div",null,e.createElement("p",{className:"text-base font-semibold text-white"},"Ready to build something remarkable?"),e.createElement("p",{className:"mt-1 text-sm text-white/50"},"Tell us what you want to ship \u2014 we'll tell you exactly how we'd build it.")),e.createElement(a,{href:t,className:"inline-flex shrink-0 items-center gap-2 rounded-full bg-primary px-6 py-2.5 text-sm font-semibold text-primary-foreground shadow-lg transition-all hover:bg-primary/90 hover:shadow-primary/25"},r,e.createElement(l,{className:"h-4 w-4"}))));
@@ -0,0 +1,14 @@
1
+ import { FC } from "react";
2
+ import { FooterColumn, SocialLink } from "../../../templates/data/appcorp-v1";
3
+ export interface FooterGridProps {
4
+ description: string;
5
+ email: string;
6
+ location: string;
7
+ logo: string;
8
+ name: string;
9
+ phone: string;
10
+ socialLinks: SocialLink[];
11
+ tagline: string;
12
+ columns: FooterColumn[];
13
+ }
14
+ export declare const FooterGrid: FC<FooterGridProps>;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";import h from"next/image";import l from"next/link";import{SocialButton as d}from"../header/social-button";import{Mail as f,MapPin as g,Phone as E}from"lucide-react";import{Badge as w}from"../../../components/ui/badge";export const FooterGrid=({columns:s,description:i,email:r,location:c,logo:n,name:o,phone:m,socialLinks:x,tagline:p})=>e.createElement("div",{className:"relative mx-auto max-w-7xl px-6 pb-10 pt-16 md:px-10"},e.createElement("div",{className:"grid gap-12 lg:grid-cols-[1.6fr_repeat(4,1fr)]"},e.createElement("div",{className:"flex flex-col"},e.createElement(l,{href:"/",className:"mb-5 inline-flex items-center gap-2.5","aria-label":"App Corp home"},e.createElement(h,{alt:"App Corp icon",className:"h-9 w-9",height:36,src:n,width:36}),e.createElement("span",{className:"text-base font-semibold tracking-tight text-white"},o)),e.createElement("p",{className:"mb-4 text-sm font-medium leading-snug text-white/80"},p),e.createElement("p",{className:"mb-7 text-sm leading-relaxed text-white/45"},i),e.createElement("div",{className:"mb-7 flex items-center gap-2"},x.map(t=>e.createElement(d,Object.assign({key:t.label},t)))),e.createElement("div",{className:"space-y-2"},e.createElement("a",{href:`mailto:${r}`,className:"flex items-center gap-2 text-xs text-white/45 transition-colors hover:text-white/80"},e.createElement(f,{className:"h-3.5 w-3.5 shrink-0"}),r),m&&e.createElement("a",{href:`tel:${m}`,className:"flex items-center gap-2 text-xs text-white/45 transition-colors hover:text-white/80"},e.createElement(E,{className:"h-3.5 w-3.5 shrink-0"}),m),e.createElement("span",{className:"flex items-center gap-2 text-xs text-white/45"},e.createElement(g,{className:"h-3.5 w-3.5 shrink-0"}),c))),s.slice(0,4).map(t=>e.createElement("div",{key:t.heading},e.createElement("h3",{className:"mb-5 text-xs font-semibold uppercase tracking-widest text-white/40"},t.heading),e.createElement("ul",{className:"space-y-3"},t.links.map(a=>e.createElement("li",{key:a.label},e.createElement(l,{href:a.href,className:"group inline-flex items-center gap-1.5 text-sm text-white/60 transition-colors hover:text-white"},a.label,a.badge&&e.createElement(w,{className:"h-5 rounded-full bg-emerald-500/15 px-2 py-0 text-[10px] font-semibold text-emerald-400 border-0 whitespace-nowrap"},a.badge)))))))));
@@ -0,0 +1,3 @@
1
+ import { FC } from "react";
2
+ import { FooterProps } from "@/templates/data/appcorp-v1";
3
+ export declare const SiteFooter: FC<FooterProps>;
@@ -0,0 +1 @@
1
+ "use strict";"use client";import e from"react";import{BottomBar as B}from"./bottom-bar";import{Cta as N}from"./cta";import{Newsletter as k}from"./newsletter";import{Stats as x}from"./stats";import{FooterGrid as S}from"./footer-grid";export const SiteFooter=({ctas:r,description:o,email:a,columns:l,founded:n,location:i,logo:m,name:s,newsletterBody:d,newsletterCta:c,newsletterDisclaimer:f,newsletterHeading:p,newsletterPlaceholder:u,phone:b,socialLinks:g,stats:h,tagline:w,badges:E,year:v})=>e.createElement("footer",{className:"relative overflow-hidden bg-gray-800 text-background"},e.createElement("div",{"aria-hidden":!0,className:"bg-dot-grid pointer-events-none absolute inset-0 opacity-[0.04]"}),e.createElement("div",{"aria-hidden":!0,className:"pointer-events-none absolute -top-40 left-1/4 h-112 w-md rounded-full bg-primary/10 blur-3xl"}),e.createElement(x,{footerStats:h}),e.createElement(S,{columns:l,description:o,email:a,location:i,logo:m,name:s,phone:b,socialLinks:g,tagline:w}),e.createElement(k,{newsletterBody:d,newsletterCta:c,newsletterDisclaimer:f,newsletterHeading:p,newsletterPlaceholder:u,techBadges:E}),r.filter(t=>t.enabled).sort((t,y)=>(t.order||0)-(y.order||0)).map(t=>e.createElement(N,{key:t.label,href:t.href,label:t.label})),e.createElement(B,{year:v,founded:n}));
@@ -0,0 +1,11 @@
1
+ import { FC } from "react";
2
+ import { TechBadge } from "../../../templates/data/appcorp-v1";
3
+ export interface NewsletterProps {
4
+ newsletterHeading: string;
5
+ newsletterBody: string;
6
+ newsletterPlaceholder: string;
7
+ newsletterCta: string;
8
+ newsletterDisclaimer: string;
9
+ techBadges: TechBadge[];
10
+ }
11
+ export declare const Newsletter: FC<NewsletterProps>;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";import{CheckCircle2 as o}from"lucide-react";export const Newsletter=({newsletterHeading:r,newsletterBody:a,newsletterPlaceholder:l,newsletterCta:m,newsletterDisclaimer:s,techBadges:i})=>e.createElement("div",{className:"relative border-y border-white/8"},e.createElement("div",{className:"mx-auto max-w-7xl px-6 py-10 md:px-10"},e.createElement("div",{className:"grid gap-10 md:grid-cols-2 md:items-center"},e.createElement("div",null,e.createElement("h3",{className:"mb-1 text-base font-semibold text-white"},r),e.createElement("p",{className:"mb-4 text-sm text-white/50"},a),e.createElement("form",{onSubmit:t=>t.preventDefault(),className:"flex max-w-sm gap-2"},e.createElement("input",{type:"email",placeholder:l,className:"flex-1 rounded-full border border-white/10 bg-white/5 px-4 py-2 text-sm text-white placeholder:text-white/30 outline-none focus:border-white/25 focus:ring-0"}),e.createElement("button",{type:"submit",className:"rounded-full bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground transition-all hover:bg-primary/90"},m)),e.createElement("p",{className:"mt-2 text-xs text-white/25"},s)),e.createElement("div",{className:"flex flex-wrap justify-start gap-2 md:justify-end"},i.filter(t=>t.enabled).sort((t,n)=>t.order-n.order).map(t=>e.createElement("span",{key:t.label,className:"inline-flex items-center gap-1.5 rounded-full border border-white/10 bg-white/5 px-3 py-1.5 text-xs font-medium text-white/60"},e.createElement(o,{className:"h-3 w-3 text-emerald-400"}),t.label))))));
@@ -0,0 +1,6 @@
1
+ import { FC } from "react";
2
+ import { FooterStat } from "../../../templates/data/appcorp-v1";
3
+ export interface StatsProps {
4
+ footerStats: FooterStat[];
5
+ }
6
+ export declare const Stats: FC<StatsProps>;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";export const Stats=({footerStats:a})=>e.createElement("div",{className:"relative border-b border-white/8"},e.createElement("div",{className:"mx-auto grid max-w-7xl grid-cols-2 divide-x divide-white/8 px-6 md:grid-cols-4 md:px-10"},a.map(t=>e.createElement("div",{key:t.label,className:"flex flex-col items-center py-7 text-center"},e.createElement("span",{className:"text-2xl font-bold tracking-tight text-white md:text-3xl"},t.value),e.createElement("span",{className:"mt-1 text-xs text-white/50"},t.label)))));
@@ -0,0 +1,3 @@
1
+ import { FC } from "react";
2
+ import { AnnouncementBar as AnnouncementBarProps } from "../../data/appcorp-v1";
3
+ export declare const AnnouncementBar: FC<AnnouncementBarProps>;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";import o from"next/link";export const AnnouncementBar=({text:t,cta:n,href:r})=>e.createElement("div",{className:"fixed left-0 right-0 top-0 z-50 flex items-center justify-center gap-3 bg-foreground px-4 py-2 text-xs text-background/80"},e.createElement("span",null,t),e.createElement(o,{className:"font-semibold text-background underline-offset-2 hover:underline",href:r},n));
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { NavItem } from "../../data/appcorp-v1";
3
+ interface DropdownPanelProps {
4
+ item: NavItem;
5
+ onClose: () => void;
6
+ }
7
+ export declare const DropdownPanel: ({ item, onClose }: DropdownPanelProps) => React.JSX.Element | null;
8
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";import e from"react";import l from"next/link";import{Badge as m}from"../../../components/ui/badge";import{ArrowRight as d}from"lucide-react";import*as s from"lucide-react";export const DropdownPanel=({item:r,onClose:n})=>{if(!r.dropdown)return null;const o=r.dropdown.length>=4;return e.createElement("div",{className:`absolute top-full mt-2.5 rounded-2xl border border-border/50 bg-background/98 shadow-xl backdrop-blur-lg
2
+ ${o?"left-1/2 w-155 -translate-x-1/2":"left-1/2 w-90 -translate-x-1/2"}`,style:{zIndex:100}},e.createElement("div",{className:"absolute -top-px left-1/2 h-px w-24 -translate-x-1/2 bg-linear-to-r from-transparent via-primary/60 to-transparent"}),e.createElement("div",{className:`p-3 ${o?"grid grid-cols-2 gap-1":"flex flex-col gap-1"}`},r.dropdown.filter(t=>t.enabled).sort((t,a)=>t.order-a.order).map(t=>{const a=s[t.icon]||s.Circle;return e.createElement(l,{key:t.href,href:t.href,onClick:n,className:"group flex items-start gap-3.5 rounded-xl p-3.5 transition-all duration-150 hover:bg-muted/60"},e.createElement("span",{className:"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-primary/8 transition-colors group-hover:bg-primary/14"},e.createElement(a,{className:"h-4.5 w-4.5 text-primary"})),e.createElement("span",{className:"min-w-0"},e.createElement("span",{className:"flex items-center gap-2 text-sm font-medium text-foreground"},t.label,t.badge&&e.createElement(m,{className:"h-5 rounded-full bg-emerald-500/15 px-2 py-0 text-[10px] font-semibold text-emerald-600 border-0 whitespace-nowrap"},t.badge)),e.createElement("span",{className:"mt-0.5 block text-xs leading-relaxed text-muted-foreground"},t.description)))})),e.createElement("div",{className:"border-t border-border/40 px-4 py-3 flex items-center justify-between"},e.createElement("span",{className:"text-xs text-muted-foreground"},"Not sure where to start?"),e.createElement(l,{href:"/contact-new",onClick:n,className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline"},"Talk to us ",e.createElement(d,{className:"h-3 w-3"}))))};
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { AnnouncementBar as AnnouncementBarProps, Cta, NavItem } from "../../data/appcorp-v1";
3
+ export interface SiteHeaderProps {
4
+ announcementBar: AnnouncementBarProps;
5
+ headerCta: Cta[];
6
+ logo: string;
7
+ navItems: NavItem[];
8
+ email: string;
9
+ phone: string;
10
+ location: string;
11
+ }
12
+ export declare const SiteHeader: ({ announcementBar, headerCta, logo, navItems, email, phone, location, }: SiteHeaderProps) => React.JSX.Element;
@@ -0,0 +1 @@
1
+ "use strict";import e from"react";import{AnnouncementBar as c}from"./announcement-bar";import{NavigationBar as n}from"./navigation-bar";export const SiteHeader=({announcementBar:t,headerCta:r,logo:a,navItems:o,email:m,phone:i,location:l})=>e.createElement(e.Fragment,null,e.createElement(c,{text:t.text,cta:t.cta,href:t.href}),e.createElement(n,{logo:a,navItems:o,headerCta:r,email:m,phone:i,location:l}));
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import { Cta, NavItem } from "../../data/appcorp-v1";
3
+ interface MobileMenuProps {
4
+ announcementVisible?: boolean;
5
+ headerCta: Cta[];
6
+ items: NavItem[];
7
+ logo: string;
8
+ onClose: () => void;
9
+ email: string;
10
+ phone: string;
11
+ location: string;
12
+ }
13
+ export declare function MobileMenu({ headerCta, items, logo, onClose, email, phone, location, }: MobileMenuProps): React.JSX.Element;
14
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";import{ArrowRight as h,ChevronDown as b,X as E}from"lucide-react";import N from"next/image";import l from"next/link";import e,{useState as y}from"react";import*as m from"lucide-react";import{Badge as w}from"../../../components/ui/badge";import{Button as v}from"../../../components/ui/button";import{MapPin as k,Mail as C,Phone as j}from"lucide-react";export function MobileMenu({headerCta:s,items:c,logo:i,onClose:n,email:d,phone:o,location:f}){const[p,u]=y(null),x=t=>u(a=>a===t?null:t);return e.createElement("div",{className:"fixed inset-x-0 bottom-0 z-50 flex flex-col bg-background top-8"},e.createElement("div",{className:"flex h-16 items-center justify-between border-b border-border/40 px-6"},e.createElement(l,{href:"/",onClick:n,className:"flex items-center gap-2.5"},e.createElement(N,{src:i,alt:"App Corp icon",width:32,height:32,className:"h-8 w-8",priority:!0}),e.createElement("span",{className:"text-base font-semibold tracking-tight text-foreground"},"App Corp")),e.createElement("button",{onClick:n,"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"},e.createElement(E,{className:"h-5 w-5"}))),e.createElement("nav",{className:"flex-1 overflow-y-auto px-4 py-4"},c.map(t=>{const a=p===t.label;return t.dropdown?e.createElement("div",{key:t.label,className:"mb-1"},e.createElement("button",{onClick:()=>x(t.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"},t.label,e.createElement(b,{className:`h-4 w-4 text-muted-foreground transition-transform duration-200 ${a?"rotate-180":""}`})),a&&e.createElement("div",{className:"mb-2 mt-1 space-y-0.5 pl-2"},t.dropdown.map(r=>{const g=m[r.icon]||m.Circle;return e.createElement(l,{key:r.href,href:r.href,onClick:n,className:"group flex items-start gap-3 rounded-xl px-4 py-3 transition-colors hover:bg-muted/60"},e.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"},e.createElement(g,{className:"h-4 w-4 text-primary"})),e.createElement("span",null,e.createElement("span",{className:"flex items-center gap-2 text-sm font-medium text-foreground"},r.label,r.badge&&e.createElement(w,{className:"h-4 rounded-full bg-emerald-500/15 px-1.5 py-0 text-[10px] font-semibold text-emerald-600 border-0"},r.badge)),e.createElement("span",{className:"mt-0.5 line-clamp-1 text-xs text-muted-foreground"},r.description)))}))):e.createElement(l,{key:t.label,href:t.href,onClick:n,className:"flex items-center justify-between rounded-xl px-4 py-3 text-sm font-medium text-foreground transition-colors hover:bg-muted"},t.label,e.createElement(h,{className:"h-3.5 w-3.5 text-muted-foreground"}))})),e.createElement("div",{className:"border-t border-border/40 p-5 space-y-3"},e.createElement("div",{className:"flex items-center gap-2 text-xs text-muted-foreground"},e.createElement(C,{className:"h-3.5 w-3.5 shrink-0"}),e.createElement("span",null,d)),o&&e.createElement("div",{className:"flex items-center gap-2 text-xs text-muted-foreground"},e.createElement(j,{className:"h-3.5 w-3.5 shrink-0"}),e.createElement("span",null,o)),e.createElement("div",{className:"flex items-center gap-2 text-xs text-muted-foreground"},e.createElement(k,{className:"h-3.5 w-3.5 shrink-0"}),e.createElement("span",null,f)),e.createElement("div",{className:"flex flex-row gap-3 mt-1"},s.filter(t=>t.enabled).sort((t,a)=>t.order-a.order).map(t=>e.createElement(v,{asChild:!0,className:`flex-1 rounded-full ${t.type==="primary"?"bg-primary text-white":"bg-secondary text-foreground hover:bg-foreground hover:text-background"}`,key:t.href,size:"default"},e.createElement(l,{href:t.href},t.label))))))}
@@ -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,4 @@
1
+ "use strict";import{ChevronDown as k,Menu as M}from"lucide-react";import C from"next/image";import i from"next/link";import{usePathname as D}from"next/navigation";import t,{useEffect as b,useRef as A,useState as m}from"react";import{Button as L}from"../../../components/ui/button";import{DropdownPanel as $}from"./dropdown-panel";import{MobileMenu as O}from"./mobile-menu";export const NavigationBar=({headerCta:d,logo:c,navItems:u,email:h,phone:g,location:x})=>{const v=D(),[w,E]=m(!1),[l,f]=m(!1),[y,a]=m(null),o=A(null);b(()=>{const e=()=>E(window.scrollY>20);return window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),b(()=>(document.body.style.overflow=l?"hidden":"",()=>{document.body.style.overflow=""}),[l]);const p=e=>{o.current&&clearTimeout(o.current),a(e)},s=()=>{o.current=setTimeout(()=>a(null),150)},N=()=>{o.current&&clearTimeout(o.current)};return t.createElement("header",{className:`fixed left-0 right-0 z-40 transition-all duration-300 top-8
2
+ ${w?"border-b border-border/40 bg-background/95 shadow-sm backdrop-blur-md":"bg-transparent"}`},t.createElement("div",{className:"relative mx-auto flex h-17 w-full max-w-350 items-center justify-between px-6 md:px-10"},t.createElement(i,{href:"/",className:"flex shrink-0 items-center gap-2.5","aria-label":"App Corp \u2014 home"},t.createElement(C,{src:c,alt:"App Corp icon",width:32,height:32,className:"h-8 w-8",priority:!0}),t.createElement("span",{className:"text-base font-semibold tracking-tight text-foreground"},"App Corp")),t.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"},t.createElement("ul",{className:"flex items-center gap-1"},u.filter(e=>e.enabled).sort((e,r)=>e.order-r.order).map(e=>{const r=!!e.dropdown,n=y===e.label;return t.createElement("li",{key:e.label,className:"relative"},r?t.createElement("button",{onMouseEnter:()=>p(e.label),onMouseLeave:s,onFocus:()=>p(e.label),onBlur:s,className:`inline-flex items-center gap-1.5 rounded-xl px-3.5 py-2 text-sm font-medium transition-colors
3
+ ${n?"bg-muted text-foreground":"text-muted-foreground hover:bg-muted/70 hover:text-foreground"}`,"aria-expanded":n},e.label,t.createElement(k,{className:`h-3.5 w-3.5 transition-transform duration-200 ${n?"rotate-180":""}`})):t.createElement(i,{href:e.href,className:`inline-flex items-center gap-1.5 rounded-xl px-3.5 py-2 text-sm font-medium transition-colors
4
+ ${v===e.href?"text-foreground bg-muted":"text-muted-foreground hover:bg-muted/70 hover:text-foreground"}`},e.label),r&&n&&t.createElement("div",{onMouseEnter:N,onMouseLeave:s},t.createElement($,{item:e,onClose:()=>a(null)})))}))),t.createElement("div",{className:"flex shrink-0 items-center gap-3"},d.filter(e=>e.enabled).sort((e,r)=>e.order-r.order).map(e=>t.createElement(L,{asChild:!0,className:`hidden rounded-full px-5 text-sm shadow-sm transition-all hover:bg-foreground/90 lg:inline-flex ${e.type==="primary"?"bg-primary text-white":"bg-secondary text-foreground hover:bg-foreground hover:text-background"}`,key:e.href,size:"default"},t.createElement(i,{href:e.href},e.label))),t.createElement("button",{onClick:()=>f(!0),"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"},t.createElement(M,{className:"h-5 w-5"})),l&&t.createElement(O,{items:u,onClose:()=>f(!1),logo:c,headerCta:d,email:h,phone:g,location:x}))))};
@@ -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 @@
1
+ "use strict";import e from"react";import*as r from"lucide-react";export const SocialButton=({label:t,href:o,icon:a})=>{const n=r[a]||r.Globe;return e.createElement("a",{"aria-label":t,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:o,rel:"noopener noreferrer",target:"_blank"},e.createElement(n,{className:"h-4 w-4"}))};
@@ -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 @@
1
+ "use strict";import e from"react";import{SiteFooter as o}from"./footer";import{SiteHeader as m}from"./header";export const AppCorpV1HomeTemplate=({siteHeader:t,siteFooter:r})=>e.createElement("div",null,e.createElement(m,Object.assign({},t)),e.createElement(o,Object.assign({},r)));
@@ -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;
@@ -0,0 +1 @@
1
+ "use strict";export const announcementBar={text:"Introducing AI Operating System for Business & School \u2014 our most powerful products yet.",cta:"Explore products \u2192",href:"/product/ai-os-business"},navItems=[{label:"Products",order:1,enabled:!0,dropdown:[{label:"AI Operating System for Business",description:"An end-to-end AI layer for your entire business \u2014 automate operations, unify data, and make decisions 10\xD7 faster.",href:"/product/ai-os-business",icon:"Building2",badge:"New",order:1,enabled:!0},{label:"AI Operating System for School",description:"Transform your institution with AI \u2014 personalised learning, automated admin, and real-time analytics for educators.",href:"/product/ai-os-school",icon:"GraduationCap",badge:"New",order:2,enabled:!0}]},{label:"Services",order:2,enabled:!0,dropdown:[{label:"AI & Machine Learning",description:"Predictive models, NLP pipelines, LLM integrations, and ML infrastructure built for production scale.",href:"/service/ai-machine-learning",icon:"Brain",order:1,enabled:!0},{label:"Custom Web Development",description:"Full-stack web applications engineered for performance, long-term maintainability, and global scale.",href:"/service/custom-web-development",icon:"Code2",order:2,enabled:!0},{label:"UI / UX Design",description:"Research-led design systems and interfaces that reduce churn, increase conversion, and delight users.",href:"/service/ui-ux-design",icon:"Palette",order:3,enabled:!0},{label:"Mobile App Development",description:"Cross-platform iOS and Android applications with native performance and offline-first architecture.",href:"/service/mobile-app-development",icon:"Smartphone",order:4,enabled:!0},{label:"MVP Development",description:"From validated idea to first paying customer in 8\u201316 weeks \u2014 scoped, engineered, and shipped on time.",href:"/service/mvp-development",icon:"Rocket",badge:"Fast-track",order:5,enabled:!0},{label:"SaaS Platform Development",description:"Multi-tenant SaaS platforms built for thousands of customers, millions of events, and ISO-27001 compliance.",href:"/service/saas-platform-development",icon:"Layers",order:6,enabled:!0}]},{label:"Work",order:3,enabled:!0,dropdown:[{label:"Case Studies",description:"Six in-depth breakdowns of real problems, real architecture decisions, and real measurable business outcomes.",href:"/case-study",icon:"BarChart3",order:1,enabled:!0},{label:"Portfolio",description:"500+ projects across fintech, healthcare, logistics, e-commerce, SaaS, and emerging technology.",href:"/portfolio",icon:"Briefcase",order:2,enabled:!0},{label:"Client Results",description:"$250M+ in measurable revenue generated for clients. See the numbers behind the outcomes we deliver.",href:"/case-study",icon:"TrendingUp",order:3,enabled:!0}]},{label:"Company",order:4,enabled:!0,dropdown:[{label:"About App Corp",description:"The team, the mission, the values, and why 200+ companies across 28 countries trust us with their critical builds.",href:"/about",icon:"Building2",order:1,enabled:!0},{label:"Blog & Engineering Insights",description:"Architecture deep-dives, engineering guides, product strategy, and technical commentary from our team.",href:"/blog",icon:"BookOpen",order:2,enabled:!0},{label:"Careers",description:"Join a team that ships ambitious products and grows fast. Senior engineering roles always open.",href:"/careers",icon:"Users",badge:"Hiring",order:3,enabled:!0}]},{label:"Contact",order:5,enabled:!0,href:"/contact"}],headerCta=[{label:"View our work",href:"/case-study",order:1,enabled:!0,type:"secondary"},{label:"Schedule a Call",href:"/contact-new",order:2,enabled:!0,type:"primary"}],header={navItems,announcementBar,headerCta,logo:"/appcorp-logo.svg",email:"info@appcorp.org",phone:"+92 349 4913126",location:"Lahore, Pakistan"},footer={name:"App Corp",tagline:"We build software that powers the next generation of market leaders.",description:"A full-service software engineering agency trusted by startups, scale-ups, and enterprises across the US, UK, and EU. From zero-to-one MVPs to enterprise platform rebuilds \u2014 we engineer measurable outcomes, not just code.",email:"info@appcorp.org",phone:"+92 349 4913126",location:"Lahore, Pakistan",founded:"2017",year:new Date().getFullYear().toString(),logo:"/appcorp-logo.svg",newsletterBody:"Architecture deep-dives, technology decisions, and product strategy from senior engineers who ship. No fluff.",newsletterCta:"Subscribe",newsletterDisclaimer:"No spam. Unsubscribe any time.",newsletterHeading:"Engineering insights, monthly.",newsletterPlaceholder:"your@email.com",ctas:[{label:"Schedule a Call",href:"/contact-new",type:"primary",enabled:!0,order:1},{label:"View our Work",href:"/case-study",type:"secondary",enabled:!1,order:2}],columns:[{heading:"Products",links:[{label:"AI OS for Business",href:"/product/ai-os-business",badge:"New"},{label:"AI OS for School",href:"/product/ai-os-school",badge:"New"}]},{heading:"Services",links:[{label:"AI & Machine Learning",href:"/service/ai-machine-learning"},{label:"Custom Web Development",href:"/service/custom-web-development"},{label:"UI / UX Design",href:"/service-detail/ui-ux-design"},{label:"Mobile App Development",href:"/service/mobile-app-development"},{label:"MVP Development",href:"/service/mvp-development",badge:"Fast-track"},{label:"SaaS Platform Development",href:"/service/saas-platform-development"}]},{heading:"Work",links:[{label:"Case Studies",href:"/case-study"},{label:"Portfolio",href:"/portfolio"},{label:"Client Results",href:"/case-study"},{label:"Industries We Serve",href:"/about"}]},{heading:"Company",links:[{label:"About Us",href:"/about"},{label:"Blog & Insights",href:"/blog"},{label:"Pricing",href:"/pricing"},{label:"Careers",href:"/careers",badge:"Hiring"},{label:"Contact Us",href:"/contact"}]},{heading:"Legal",links:[{label:"Privacy Policy",href:"/privacy"},{label:"Terms & Conditions",href:"/terms"},{label:"Cookie Policy",href:"/privacy"},{label:"Security",href:"/privacy"}]}],socialLinks:[{label:"LinkedIn",href:"https://linkedin.com/company/appcorp",icon:"Linkedin",enabled:!0,order:1},{label:"Twitter / X",href:"https://twitter.com/appcorp",icon:"Twitter",enabled:!0,order:2},{label:"GitHub",href:"https://github.com/appcorp",icon:"Github",enabled:!0,order:3},{label:"YouTube",href:"https://youtube.com/@appcorp",icon:"Youtube",enabled:!0,order:4}],badges:[{label:"AWS Partner",enabled:!0,order:1},{label:"ISO 27001 Aligned",enabled:!0,order:2},{label:"SOC 2 Ready",enabled:!0,order:3},{label:"GDPR Compliant",enabled:!0,order:4},{label:"PCI DSS Capable",enabled:!0,order:5}],stats:[{value:"200+",label:"Projects Shipped"},{value:"100+",label:"Clients Worldwide"},{value:"$50M+",label:"Client Revenue Generated"},{value:"98%",label:"Client Retention Rate"}]},homePageData={siteHeader:Object.assign({},header),siteFooter:Object.assign({},footer)};
@@ -0,0 +1,33 @@
1
+ export interface DashboardMockupProps {
2
+ domain: string;
3
+ enrollmentHeading: string;
4
+ enrollmentList: {
5
+ name: string;
6
+ class: string;
7
+ status: string;
8
+ }[];
9
+ items: {
10
+ icon: React.ElementType;
11
+ label: string;
12
+ active: boolean;
13
+ }[];
14
+ schoolName: string;
15
+ stats: {
16
+ label: string;
17
+ value: string;
18
+ color: string;
19
+ }[];
20
+ }
21
+ export declare const dashboardMockupMenuList: DashboardMockupProps;
22
+ export interface FeatureCardsProps {
23
+ items: {
24
+ icon: React.ElementType;
25
+ title: string;
26
+ description: string;
27
+ highlights: string[];
28
+ href: string;
29
+ accent: string;
30
+ bg: string;
31
+ }[];
32
+ }
33
+ export declare const featureCards: FeatureCardsProps;
@@ -0,0 +1 @@
1
+ "use strict";import{BarChart3 as e,BookOpen as t,Calendar as a,CreditCard as s,LayoutDashboard as r,Receipt as i,Shield as o,Users as n}from"lucide-react";export const dashboardMockupMenuList={domain:"subdomain.edupilotpro.com",items:[{icon:r,label:"Dashboard",active:!0},{icon:n,label:"Students",active:!1},{icon:t,label:"Courses",active:!1},{icon:a,label:"Attendance",active:!1},{icon:i,label:"Finance",active:!1},{icon:e,label:"Analytics",active:!1}],schoolName:"Greenwood Academy",stats:[{label:"Students",value:"412",color:"text-blue-600"},{label:"Teachers",value:"34",color:"text-purple-600"},{label:"Attendance",value:"97%",color:"text-green-700"},{label:"Fees Due",value:"$4.2k",color:"text-rose-600"}],enrollmentHeading:"Recent Enrollments",enrollmentList:[{name:"Aisha Patel",class:"Grade 7A",status:"Active"},{name:"Omar Faruk",class:"Grade 5B",status:"Active"},{name:"Lena M\xFCller",class:"Grade 9C",status:"Pending"}]},featureCards={items:[{icon:n,title:"AI Admission Assistant",description:"Automate your entire admissions pipeline. The AI Admission Assistant captures enquiries, collects documents, and moves students from application to enrolled \u2014 with no manual follow-up from your team.",highlights:["Digital admission forms & document collection","AI-guided enrolment workflows","Family portal with sibling linking","Searchable student & family database"],accent:"text-blue-700",bg:"bg-blue-50 dark:bg-blue-950/30",href:"/features/student-family"},{icon:t,title:"Academic Structure Engine",description:"Configure your school's full academic hierarchy \u2014 year groups, sections, subjects, courses \u2014 once. Every module (attendance, grades, timetables) inherits this structure automatically.",highlights:["Multi-level class & section hierarchy","Subject catalogue & course management","Teacher assignments & academic year config","Supports all curriculum frameworks"],accent:"text-purple-700",bg:"bg-purple-50 dark:bg-purple-950/30",href:"/features/academic-structure"},{icon:a,title:"AI Attendance Assistant",description:"Teachers mark an entire class present in one tap. The AI Attendance Assistant records every entry, detects chronic absence patterns, and automatically notifies parents \u2014 all without lifting a finger.",highlights:["One-tap bulk attendance marking","AI-powered absence pattern detection","Instant automated parent notifications","Conflict-free visual timetable builder"],accent:"text-green-700",bg:"bg-green-50 dark:bg-green-950/30",href:"/features/attendance-schedules"},{icon:e,title:"AI Reporting Assistant",description:"From test scores to polished report cards in one click. The AI Reporting Assistant calculates GPA, ranks students, flags underperformers, and generates print-ready PDFs at the end of every term.",highlights:["Automatic GPA & class rank calculation","AI-flagged underperformance alerts","One-click PDF report card generation","Multi-term performance trend analytics"],accent:"text-orange-700",bg:"bg-orange-50 dark:bg-orange-950/30",href:"/features/grades-assessments"},{icon:s,title:"AI Fee Reminder Automation",description:"Build your fee structures once. EduPilotPro auto-generates invoices every term, sends escalating payment reminders automatically, and keeps your outstanding fee dashboard updated in real time.",highlights:["Automated termly invoice generation","AI fee reminder sequences to parents","Real-time outstanding balance tracking","Discount, scholarship & exemption management"],accent:"text-rose-700",bg:"bg-rose-50 dark:bg-rose-950/30",href:"/features/financial-management"},{icon:o,title:"Smart Role-Based Access",description:"Every staff member, teacher, and parent sees exactly what they need. Five permission levels ensure data is protected, workflows are clean, and nothing leaks between roles.",highlights:["5-tier role hierarchy (Admin \u2192 Parent)","Staff & workspace user management","Audit-ready access and activity logs","Secure, GDPR-compliant authentication"],accent:"text-teal-700",bg:"bg-teal-50 dark:bg-teal-950/30",href:"/features/access-control"}]};