@retinalabsllc/zairusjs 4.0.19 → 4.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1045,6 +1045,27 @@ interface UniversalDeveloperSettingsProps {
1045
1045
  }
1046
1046
  declare const UniversalDeveloperSettings: React.FC<UniversalDeveloperSettingsProps>;
1047
1047
 
1048
+ interface AppLibraryItem$1 {
1049
+ id: string;
1050
+ name: string;
1051
+ category: string;
1052
+ logoSrc: string;
1053
+ onClick?: () => void;
1054
+ }
1055
+ interface AppLibraryCategory {
1056
+ id: string;
1057
+ title: string;
1058
+ apps: AppLibraryItem$1[];
1059
+ seeMoreLabel?: string;
1060
+ onSeeMore?: () => void;
1061
+ }
1062
+ interface UniversalAppLibraryProps {
1063
+ tagline?: string;
1064
+ headline?: React.ReactNode;
1065
+ categories: AppLibraryCategory[];
1066
+ }
1067
+ declare const UniversalAppLibrary: React.FC<UniversalAppLibraryProps>;
1068
+
1048
1069
  interface StatItem {
1049
1070
  /** The small text label above the number */
1050
1071
  label: string;
@@ -1124,4 +1145,54 @@ interface ContentGridBlockProps {
1124
1145
  }
1125
1146
  declare const ContentGridBlock: React.FC<ContentGridBlockProps>;
1126
1147
 
1127
- export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, type AppTypeKey, Banner, type BannerProps, type BentoFeature, type BoardMember, type CheckoutInvoiceData, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type DriveItem$1 as DriveItem, DriveItemOpener, type DriveItemOpenerProps, type DriveItemType, DriveShareModal, type DriveShareModalProps, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, FileIconMapper, type FileIconMapperProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, type StorageConfig, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalCheckoutView, type UniversalCheckoutViewProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalDriveView, type UniversalDriveViewProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, UniversalTrashView, type UniversalTrashViewProps, type UploadQueueJob, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
1148
+ interface AppDetailsData {
1149
+ name: string;
1150
+ developer: string;
1151
+ tagline: string;
1152
+ logoSrc: string;
1153
+ description: string;
1154
+ screenshots: string[];
1155
+ platforms: {
1156
+ android: boolean;
1157
+ ios: boolean;
1158
+ };
1159
+ stats: {
1160
+ type: 'App' | 'Widget' | string;
1161
+ size: string;
1162
+ rating?: string;
1163
+ downloads?: string;
1164
+ };
1165
+ information: {
1166
+ category: string;
1167
+ version: string;
1168
+ developer: string;
1169
+ website: string;
1170
+ email: string;
1171
+ };
1172
+ ctaText?: string;
1173
+ ctaHref?: string;
1174
+ secondaryCtaText?: string;
1175
+ secondaryCtaHref?: string;
1176
+ }
1177
+ interface UniversalAppDetailsProps {
1178
+ app: AppDetailsData;
1179
+ onBack?: () => void;
1180
+ }
1181
+ declare const UniversalAppDetails: React.FC<UniversalAppDetailsProps>;
1182
+
1183
+ interface AppLibraryItem {
1184
+ id: string;
1185
+ name: string;
1186
+ category: string;
1187
+ logoSrc: string;
1188
+ onClick?: () => void;
1189
+ }
1190
+ interface UniversalAppCategoryGridProps {
1191
+ tagline?: string;
1192
+ categoryTitle: React.ReactNode;
1193
+ apps: AppLibraryItem[];
1194
+ onBack?: () => void;
1195
+ }
1196
+ declare const UniversalAppCategoryGrid: React.FC<UniversalAppCategoryGridProps>;
1197
+
1198
+ export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, type AppDetailsData, type AppLibraryCategory, type AppLibraryItem$1 as AppLibraryItem, type AppTypeKey, Banner, type BannerProps, type BentoFeature, type BoardMember, type CheckoutInvoiceData, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type DriveItem$1 as DriveItem, DriveItemOpener, type DriveItemOpenerProps, type DriveItemType, DriveShareModal, type DriveShareModalProps, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, FileIconMapper, type FileIconMapperProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, type StorageConfig, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalAppCategoryGrid, type UniversalAppCategoryGridProps, UniversalAppDetails, type UniversalAppDetailsProps, UniversalAppLibrary, type UniversalAppLibraryProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalCheckoutView, type UniversalCheckoutViewProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalDriveView, type UniversalDriveViewProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, UniversalTrashView, type UniversalTrashViewProps, type UploadQueueJob, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
package/dist/index.d.ts CHANGED
@@ -1045,6 +1045,27 @@ interface UniversalDeveloperSettingsProps {
1045
1045
  }
1046
1046
  declare const UniversalDeveloperSettings: React.FC<UniversalDeveloperSettingsProps>;
1047
1047
 
1048
+ interface AppLibraryItem$1 {
1049
+ id: string;
1050
+ name: string;
1051
+ category: string;
1052
+ logoSrc: string;
1053
+ onClick?: () => void;
1054
+ }
1055
+ interface AppLibraryCategory {
1056
+ id: string;
1057
+ title: string;
1058
+ apps: AppLibraryItem$1[];
1059
+ seeMoreLabel?: string;
1060
+ onSeeMore?: () => void;
1061
+ }
1062
+ interface UniversalAppLibraryProps {
1063
+ tagline?: string;
1064
+ headline?: React.ReactNode;
1065
+ categories: AppLibraryCategory[];
1066
+ }
1067
+ declare const UniversalAppLibrary: React.FC<UniversalAppLibraryProps>;
1068
+
1048
1069
  interface StatItem {
1049
1070
  /** The small text label above the number */
1050
1071
  label: string;
@@ -1124,4 +1145,54 @@ interface ContentGridBlockProps {
1124
1145
  }
1125
1146
  declare const ContentGridBlock: React.FC<ContentGridBlockProps>;
1126
1147
 
1127
- export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, type AppTypeKey, Banner, type BannerProps, type BentoFeature, type BoardMember, type CheckoutInvoiceData, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type DriveItem$1 as DriveItem, DriveItemOpener, type DriveItemOpenerProps, type DriveItemType, DriveShareModal, type DriveShareModalProps, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, FileIconMapper, type FileIconMapperProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, type StorageConfig, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalCheckoutView, type UniversalCheckoutViewProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalDriveView, type UniversalDriveViewProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, UniversalTrashView, type UniversalTrashViewProps, type UploadQueueJob, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
1148
+ interface AppDetailsData {
1149
+ name: string;
1150
+ developer: string;
1151
+ tagline: string;
1152
+ logoSrc: string;
1153
+ description: string;
1154
+ screenshots: string[];
1155
+ platforms: {
1156
+ android: boolean;
1157
+ ios: boolean;
1158
+ };
1159
+ stats: {
1160
+ type: 'App' | 'Widget' | string;
1161
+ size: string;
1162
+ rating?: string;
1163
+ downloads?: string;
1164
+ };
1165
+ information: {
1166
+ category: string;
1167
+ version: string;
1168
+ developer: string;
1169
+ website: string;
1170
+ email: string;
1171
+ };
1172
+ ctaText?: string;
1173
+ ctaHref?: string;
1174
+ secondaryCtaText?: string;
1175
+ secondaryCtaHref?: string;
1176
+ }
1177
+ interface UniversalAppDetailsProps {
1178
+ app: AppDetailsData;
1179
+ onBack?: () => void;
1180
+ }
1181
+ declare const UniversalAppDetails: React.FC<UniversalAppDetailsProps>;
1182
+
1183
+ interface AppLibraryItem {
1184
+ id: string;
1185
+ name: string;
1186
+ category: string;
1187
+ logoSrc: string;
1188
+ onClick?: () => void;
1189
+ }
1190
+ interface UniversalAppCategoryGridProps {
1191
+ tagline?: string;
1192
+ categoryTitle: React.ReactNode;
1193
+ apps: AppLibraryItem[];
1194
+ onBack?: () => void;
1195
+ }
1196
+ declare const UniversalAppCategoryGrid: React.FC<UniversalAppCategoryGridProps>;
1197
+
1198
+ export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, type AppDetailsData, type AppLibraryCategory, type AppLibraryItem$1 as AppLibraryItem, type AppTypeKey, Banner, type BannerProps, type BentoFeature, type BoardMember, type CheckoutInvoiceData, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type DriveItem$1 as DriveItem, DriveItemOpener, type DriveItemOpenerProps, type DriveItemType, DriveShareModal, type DriveShareModalProps, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, FileIconMapper, type FileIconMapperProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, type StorageConfig, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalAppCategoryGrid, type UniversalAppCategoryGridProps, UniversalAppDetails, type UniversalAppDetailsProps, UniversalAppLibrary, type UniversalAppLibraryProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalCheckoutView, type UniversalCheckoutViewProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalDriveView, type UniversalDriveViewProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, UniversalTrashView, type UniversalTrashViewProps, type UploadQueueJob, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
package/dist/index.js CHANGED
@@ -66,6 +66,9 @@ __export(index_exports, {
66
66
  ThreeDActionButton: () => ThreeDActionButton,
67
67
  ThreeDButton: () => ThreeDButton,
68
68
  UniversalAgentConsole: () => UniversalAgentConsole,
69
+ UniversalAppCategoryGrid: () => UniversalAppCategoryGrid,
70
+ UniversalAppDetails: () => UniversalAppDetails,
71
+ UniversalAppLibrary: () => UniversalAppLibrary,
69
72
  UniversalBillingPage: () => UniversalBillingPage,
70
73
  UniversalCheckoutView: () => UniversalCheckoutView,
71
74
  UniversalDashboardPage: () => UniversalDashboardPage,
@@ -3574,7 +3577,7 @@ var DriveItemOpener = ({ item, onClose }) => {
3574
3577
  const i = Math.floor(Math.log(num) / Math.log(k));
3575
3578
  return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
3576
3579
  };
3577
- return /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ import_react69.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm font-medium text-white tracking-wide" }, item.name), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ import_react69.default.createElement(
3580
+ return /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ import_react69.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm text-white tracking-wide" }, item.name), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ import_react69.default.createElement(
3578
3581
  "button",
3579
3582
  {
3580
3583
  onClick: onClose,
@@ -4417,8 +4420,48 @@ SECRET_KEY="${secKey}"
4417
4420
  )))));
4418
4421
  };
4419
4422
 
4420
- // src/components/MedicalFeatureStatsBlock.tsx
4423
+ // src/components/UniversalAppLibrary.tsx
4421
4424
  var import_react82 = __toESM(require("react"));
4425
+ var import_react83 = require("@hugeicons/react");
4426
+ var import_core_free_icons30 = require("@hugeicons/core-free-icons");
4427
+ var AppCard = ({ app }) => {
4428
+ const [isLoading, setIsLoading] = (0, import_react82.useState)(true);
4429
+ return /* @__PURE__ */ import_react82.default.createElement(
4430
+ "button",
4431
+ {
4432
+ onClick: app.onClick,
4433
+ className: "flex flex-col gap-3 group cursor-pointer w-25 shrink-0 text-left outline-none"
4434
+ },
4435
+ /* @__PURE__ */ import_react82.default.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ import_react82.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react82.default.createElement(
4436
+ "img",
4437
+ {
4438
+ src: app.logoSrc,
4439
+ alt: app.name,
4440
+ loading: "lazy",
4441
+ onLoad: () => setIsLoading(false),
4442
+ className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
4443
+ }
4444
+ )),
4445
+ /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
4446
+ );
4447
+ };
4448
+ var UniversalAppLibrary = ({
4449
+ tagline,
4450
+ headline,
4451
+ categories
4452
+ }) => {
4453
+ return /* @__PURE__ */ import_react82.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "max-w-6xl w-full" }, (tagline || headline) && /* @__PURE__ */ import_react82.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), headline && /* @__PURE__ */ import_react82.default.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, headline))), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex flex-col gap-14" }, categories.map((category) => /* @__PURE__ */ import_react82.default.createElement("div", { key: category.id, className: "flex flex-col" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex items-end justify-between mb-5 px-1" }, /* @__PURE__ */ import_react82.default.createElement("h3", { className: "text-lg text-black tracking-tight " }, category.title), category.onSeeMore && /* @__PURE__ */ import_react82.default.createElement(
4454
+ "button",
4455
+ {
4456
+ onClick: category.onSeeMore,
4457
+ className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors outline-none shrink-0 ml-4 pb-0.5"
4458
+ },
4459
+ category.seeMoreLabel || "See More"
4460
+ )), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex gap-4 sm:gap-6 overflow-x-auto pb-6 pt-2 -mx-4 px-4 sm:mx-0 sm:px-1 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none" }, category.apps.map((app) => /* @__PURE__ */ import_react82.default.createElement(AppCard, { key: app.id, app }))), /* @__PURE__ */ import_react82.default.createElement("div", { className: "w-full h-px mt-2 last-of-type:hidden" })))))));
4461
+ };
4462
+
4463
+ // src/components/MedicalFeatureStatsBlock.tsx
4464
+ var import_react84 = __toESM(require("react"));
4422
4465
  var import_image11 = __toESM(require("next/image"));
4423
4466
  var MedicalFeatureStatsBlock = ({
4424
4467
  bottomHeadline,
@@ -4427,9 +4470,9 @@ var MedicalFeatureStatsBlock = ({
4427
4470
  trustText,
4428
4471
  stats
4429
4472
  }) => {
4430
- const [isAnimating, setIsAnimating] = (0, import_react82.useState)(false);
4431
- const titleRef = (0, import_react82.useRef)(null);
4432
- (0, import_react82.useEffect)(() => {
4473
+ const [isAnimating, setIsAnimating] = (0, import_react84.useState)(false);
4474
+ const titleRef = (0, import_react84.useRef)(null);
4475
+ (0, import_react84.useEffect)(() => {
4433
4476
  const observer = new IntersectionObserver(
4434
4477
  ([entry]) => {
4435
4478
  if (entry.isIntersecting) {
@@ -4447,7 +4490,7 @@ var MedicalFeatureStatsBlock = ({
4447
4490
  }
4448
4491
  return () => observer.disconnect();
4449
4492
  }, []);
4450
- return /* @__PURE__ */ import_react82.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react82.default.createElement(
4493
+ return /* @__PURE__ */ import_react84.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react84.default.createElement(
4451
4494
  "h2",
4452
4495
  {
4453
4496
  ref: titleRef,
@@ -4455,7 +4498,7 @@ var MedicalFeatureStatsBlock = ({
4455
4498
  style: isAnimating ? { animationIterationCount: 1 } : {}
4456
4499
  },
4457
4500
  bottomHeadline
4458
- ), /* @__PURE__ */ import_react82.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react82.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react82.default.createElement(
4501
+ ), /* @__PURE__ */ import_react84.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react84.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react84.default.createElement(
4459
4502
  import_image11.default,
4460
4503
  {
4461
4504
  src,
@@ -4464,17 +4507,17 @@ var MedicalFeatureStatsBlock = ({
4464
4507
  sizes: "48px",
4465
4508
  className: "object-cover"
4466
4509
  }
4467
- )))), /* @__PURE__ */ import_react82.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react82.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react82.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react82.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
4510
+ )))), /* @__PURE__ */ import_react84.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react84.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react84.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react84.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react84.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
4468
4511
  };
4469
4512
 
4470
4513
  // src/components/ConsultantShowcase.tsx
4471
- var import_react83 = __toESM(require("react"));
4514
+ var import_react85 = __toESM(require("react"));
4472
4515
  var import_image12 = __toESM(require("next/image"));
4473
- var import_react84 = require("@hugeicons/react");
4474
- var import_core_free_icons30 = require("@hugeicons/core-free-icons");
4516
+ var import_react86 = require("@hugeicons/react");
4517
+ var import_core_free_icons31 = require("@hugeicons/core-free-icons");
4475
4518
  var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
4476
- const [isLoading, setIsLoading] = (0, import_react83.useState)(true);
4477
- return /* @__PURE__ */ import_react83.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react83.default.createElement(
4519
+ const [isLoading, setIsLoading] = (0, import_react85.useState)(true);
4520
+ return /* @__PURE__ */ import_react85.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react85.default.createElement(
4478
4521
  import_image12.default,
4479
4522
  {
4480
4523
  src,
@@ -4493,9 +4536,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
4493
4536
  var ConsultantShowcase = ({
4494
4537
  profiles
4495
4538
  }) => {
4496
- const [currentIndex, setCurrentIndex] = (0, import_react83.useState)(0);
4497
- const [touchStart, setTouchStart] = (0, import_react83.useState)(null);
4498
- const [touchEnd, setTouchEnd] = (0, import_react83.useState)(null);
4539
+ const [currentIndex, setCurrentIndex] = (0, import_react85.useState)(0);
4540
+ const [touchStart, setTouchStart] = (0, import_react85.useState)(null);
4541
+ const [touchEnd, setTouchEnd] = (0, import_react85.useState)(null);
4499
4542
  const nextSlide = () => {
4500
4543
  setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
4501
4544
  };
@@ -4520,7 +4563,7 @@ var ConsultantShowcase = ({
4520
4563
  }
4521
4564
  };
4522
4565
  if (!profiles || profiles.length === 0) return null;
4523
- return /* @__PURE__ */ import_react83.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react83.default.createElement(
4566
+ return /* @__PURE__ */ import_react85.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react85.default.createElement(
4524
4567
  "div",
4525
4568
  {
4526
4569
  className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
@@ -4530,13 +4573,13 @@ var ConsultantShowcase = ({
4530
4573
  },
4531
4574
  profiles.map((profile, idx) => {
4532
4575
  const isActive = idx === currentIndex;
4533
- return /* @__PURE__ */ import_react83.default.createElement(
4576
+ return /* @__PURE__ */ import_react85.default.createElement(
4534
4577
  "div",
4535
4578
  {
4536
4579
  key: profile.id,
4537
4580
  className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
4538
4581
  },
4539
- /* @__PURE__ */ import_react83.default.createElement(
4582
+ /* @__PURE__ */ import_react85.default.createElement(
4540
4583
  ImageWithLoader,
4541
4584
  {
4542
4585
  src: profile.imageSrc,
@@ -4544,14 +4587,14 @@ var ConsultantShowcase = ({
4544
4587
  priority: idx === 0
4545
4588
  }
4546
4589
  ),
4547
- /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
4548
- /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
4549
- /* @__PURE__ */ import_react83.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react83.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
4590
+ /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
4591
+ /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
4592
+ /* @__PURE__ */ import_react85.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react85.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
4550
4593
  );
4551
4594
  }),
4552
- /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
4553
- /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
4554
- /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react83.default.createElement(
4595
+ /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
4596
+ /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
4597
+ /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react85.default.createElement(
4555
4598
  "button",
4556
4599
  {
4557
4600
  key: idx,
@@ -4564,13 +4607,13 @@ var ConsultantShowcase = ({
4564
4607
  };
4565
4608
 
4566
4609
  // src/components/ContentGridBlock.tsx
4567
- var import_react85 = __toESM(require("react"));
4610
+ var import_react87 = __toESM(require("react"));
4568
4611
  var import_image13 = __toESM(require("next/image"));
4569
- var import_react86 = require("@hugeicons/react");
4570
- var import_core_free_icons31 = require("@hugeicons/core-free-icons");
4612
+ var import_react88 = require("@hugeicons/react");
4613
+ var import_core_free_icons32 = require("@hugeicons/core-free-icons");
4571
4614
  var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
4572
- const [isLoading, setIsLoading] = (0, import_react85.useState)(true);
4573
- return /* @__PURE__ */ import_react85.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react85.default.createElement(
4615
+ const [isLoading, setIsLoading] = (0, import_react87.useState)(true);
4616
+ return /* @__PURE__ */ import_react87.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react87.default.createElement(import_react88.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react87.default.createElement(
4574
4617
  import_image13.default,
4575
4618
  {
4576
4619
  src,
@@ -4592,14 +4635,149 @@ var ContentGridBlock = ({
4592
4635
  middleBottomCard,
4593
4636
  rightCards
4594
4637
  }) => {
4595
- return /* @__PURE__ */ import_react85.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react85.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react85.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react85.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react85.default.createElement("div", null, /* @__PURE__ */ import_react85.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react85.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react85.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react85.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react85.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react85.default.createElement("div", null, /* @__PURE__ */ import_react85.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react85.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react85.default.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react85.default.createElement(
4638
+ return /* @__PURE__ */ import_react87.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react87.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react87.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react87.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react87.default.createElement("div", null, /* @__PURE__ */ import_react87.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react87.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react87.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react87.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react87.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react87.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react87.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react87.default.createElement("div", null, /* @__PURE__ */ import_react87.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react87.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react87.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react87.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react87.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react87.default.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react87.default.createElement(
4596
4639
  ImageWithLoader2,
4597
4640
  {
4598
4641
  src: card.bgImageSrc,
4599
4642
  alt: card.title,
4600
4643
  className: "absolute inset-0 w-full h-full"
4601
4644
  }
4602
- ), /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react85.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react85.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react85.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
4645
+ ), /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ import_react87.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react87.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react87.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react87.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react87.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
4646
+ };
4647
+
4648
+ // src/components/UniversalAppDetails.tsx
4649
+ var import_react89 = __toESM(require("react"));
4650
+ var import_react90 = require("@hugeicons/react");
4651
+ var import_core_free_icons33 = require("@hugeicons/core-free-icons");
4652
+ var ScreenshotCard = ({ src, alt, onClick }) => {
4653
+ const [isLoading, setIsLoading] = (0, import_react89.useState)(true);
4654
+ return /* @__PURE__ */ import_react89.default.createElement(
4655
+ "button",
4656
+ {
4657
+ onClick,
4658
+ className: "relative w-28 sm:w-32 aspect-9/19 shrink-0 rounded-2xl overflow-hidden bg-neutral-100 border border-neutral-200/50 outline-none hover:opacity-90 transition-opacity"
4659
+ },
4660
+ isLoading && /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })),
4661
+ /* @__PURE__ */ import_react89.default.createElement(
4662
+ "img",
4663
+ {
4664
+ src,
4665
+ alt,
4666
+ loading: "lazy",
4667
+ onLoad: () => setIsLoading(false),
4668
+ className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
4669
+ }
4670
+ )
4671
+ );
4672
+ };
4673
+ var LightboxImage = ({ src }) => {
4674
+ const [isLoading, setIsLoading] = (0, import_react89.useState)(true);
4675
+ return /* @__PURE__ */ import_react89.default.createElement("div", { className: "relative w-full h-full flex items-center justify-center p-4" }, isLoading && /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 32, className: "animate-spin text-white" })), /* @__PURE__ */ import_react89.default.createElement(
4676
+ "img",
4677
+ {
4678
+ src,
4679
+ alt: "Fullscreen Screenshot",
4680
+ onLoad: () => setIsLoading(false),
4681
+ className: `max-w-full max-h-full object-contain transition-all duration-500 z-20 ${isLoading ? "opacity-0 blur-md" : "opacity-100 blur-0"}`
4682
+ }
4683
+ ));
4684
+ };
4685
+ var UniversalAppDetails = ({ app, onBack }) => {
4686
+ const [isLogoLoading, setIsLogoLoading] = (0, import_react89.useState)(true);
4687
+ const [isDescExpanded, setIsDescExpanded] = (0, import_react89.useState)(false);
4688
+ const [lightboxIndex, setLightboxIndex] = (0, import_react89.useState)(null);
4689
+ const MAX_DESC_LENGTH = 150;
4690
+ const isDescLong = app.description.length > MAX_DESC_LENGTH;
4691
+ const displayDesc = isDescExpanded || !isDescLong ? app.description : `${app.description.substring(0, MAX_DESC_LENGTH)}...`;
4692
+ const handlePrev = () => {
4693
+ if (lightboxIndex !== null) {
4694
+ setLightboxIndex(lightboxIndex === 0 ? app.screenshots.length - 1 : lightboxIndex - 1);
4695
+ }
4696
+ };
4697
+ const handleNext = () => {
4698
+ if (lightboxIndex !== null) {
4699
+ setLightboxIndex(lightboxIndex === app.screenshots.length - 1 ? 0 : lightboxIndex + 1);
4700
+ }
4701
+ };
4702
+ return /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full max-w-3xl mx-auto pt-10 pb-20 px-6 min-h-screen flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col sm:flex-row items-start gap-4 w-full mb-10 text-left" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "relative w-20 h-20 sm:w-20 sm:h-20 md:w-24 md:h-24 lg:w-28 lg:h-28 shrink-0 rounded-2xl overflow-hidden flex items-center justify-center border border-neutral-100/50 bg-neutral-50" }, isLogoLoading && /* @__PURE__ */ import_react89.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100 animate-pulse" }), /* @__PURE__ */ import_react89.default.createElement(
4703
+ "img",
4704
+ {
4705
+ src: app.logoSrc,
4706
+ alt: `${app.name} Logo`,
4707
+ onLoad: () => setIsLogoLoading(false),
4708
+ className: `w-full h-full object-cover transition-opacity duration-300 z-20 ${isLogoLoading ? "opacity-0" : "opacity-100"}`
4709
+ }
4710
+ )), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col justify-center pt-1 min-w-0" }, /* @__PURE__ */ import_react89.default.createElement("h1", { className: "text-xl text-black leading-tight mb-1 font-medium" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "block truncate" }, app.name)), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-xs mt-1 text-neutral-400 truncate max-w-full" }, app.tagline), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-wrap items-center mt-4 gap-8 w-full" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex items-center gap-1.5 h-6 text-neutral-800" }, app.platforms.android && /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.AndroidIcon, size: 18 }), app.platforms.ios && /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.AppleIcon, size: 18 })), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Platforms")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.type), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Type")), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.size), /* @__PURE__ */ import_react89.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Size"))))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 items-center w-full mx-auto mb-12" }, app.ctaText && app.ctaHref && /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react89.default.createElement(ThreeDButton, { href: app.ctaHref }, /* @__PURE__ */ import_react89.default.createElement("span", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Download01Icon, size: 16 }), app.ctaText))), app.secondaryCtaText && app.secondaryCtaHref && /* @__PURE__ */ import_react89.default.createElement(
4711
+ "a",
4712
+ {
4713
+ href: app.secondaryCtaHref,
4714
+ className: "w-full sm:w-60 inline-flex items-center justify-center gap-2 text-[11px] tracking-widest rounded-full px-8 py-2.5 border border-neutral-100 text-center text-black hover:bg-neutral-50 outline-none transition-colors"
4715
+ },
4716
+ /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Bookmark02Icon, size: 16 }),
4717
+ app.secondaryCtaText
4718
+ )), /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full mb-12" }, /* @__PURE__ */ import_react89.default.createElement("h2", { className: "text-xl text-black font-medium mb-4" }, "About"), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex gap-3 overflow-x-auto pb-4 scrollbar-hide -mx-6 px-6" }, app.screenshots.map((src, idx) => /* @__PURE__ */ import_react89.default.createElement(
4719
+ ScreenshotCard,
4720
+ {
4721
+ key: idx,
4722
+ src,
4723
+ alt: `${app.name} Screenshot ${idx + 1}`,
4724
+ onClick: () => setLightboxIndex(idx)
4725
+ }
4726
+ ))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex items-end text-neutral-500 text-sm leading-relaxed mt-2" }, /* @__PURE__ */ import_react89.default.createElement("p", { className: "flex-1 whitespace-pre-wrap" }, displayDesc), isDescLong && /* @__PURE__ */ import_react89.default.createElement(
4727
+ "button",
4728
+ {
4729
+ onClick: () => setIsDescExpanded(!isDescExpanded),
4730
+ className: "ml-2 mb-0.5 text-neutral-400 hover:text-black transition-colors outline-none shrink-0"
4731
+ },
4732
+ /* @__PURE__ */ import_react89.default.createElement(
4733
+ import_react90.HugeiconsIcon,
4734
+ {
4735
+ icon: import_core_free_icons33.ArrowDown01Icon,
4736
+ size: 18,
4737
+ className: `transform transition-transform ${isDescExpanded ? "rotate-180" : ""}`
4738
+ }
4739
+ )
4740
+ ))), lightboxIndex !== null && /* @__PURE__ */ import_react89.default.createElement("div", { className: "fixed inset-0 z-50 bg-black/30 flex flex-col" }, /* @__PURE__ */ import_react89.default.createElement("div", { className: "w-full p-4 sm:p-6 flex justify-end" }, /* @__PURE__ */ import_react89.default.createElement(
4741
+ "button",
4742
+ {
4743
+ onClick: () => setLightboxIndex(null),
4744
+ className: "p-3 text-white bg-white/30 rounded-full transition-colors outline-none"
4745
+ },
4746
+ /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.Cancel01Icon, size: 24 })
4747
+ )), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex-1 flex items-center justify-between px-4 sm:px-10 pb-10" }, /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowLeft01Icon, size: 24 })), /* @__PURE__ */ import_react89.default.createElement("div", { className: "flex-1 h-full max-h-[80vh]" }, /* @__PURE__ */ import_react89.default.createElement(LightboxImage, { src: app.screenshots[lightboxIndex] })), /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowRight01Icon, size: 24 }))), /* @__PURE__ */ import_react89.default.createElement("div", { className: "sm:hidden flex justify-between px-8 pb-12 w-full" }, /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowLeft01Icon, size: 24 })), /* @__PURE__ */ import_react89.default.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react89.default.createElement(import_react90.HugeiconsIcon, { icon: import_core_free_icons33.ArrowRight01Icon, size: 24 })))));
4748
+ };
4749
+
4750
+ // src/components/UniversalAppCategoryGrid.tsx
4751
+ var import_react91 = __toESM(require("react"));
4752
+ var import_react92 = require("@hugeicons/react");
4753
+ var import_core_free_icons34 = require("@hugeicons/core-free-icons");
4754
+ var AppGridCard = ({ app }) => {
4755
+ const [isLoading, setIsLoading] = (0, import_react91.useState)(true);
4756
+ return /* @__PURE__ */ import_react91.default.createElement(
4757
+ "button",
4758
+ {
4759
+ onClick: app.onClick,
4760
+ className: "flex flex-col gap-3 group cursor-pointer w-25 text-left outline-none"
4761
+ },
4762
+ /* @__PURE__ */ import_react91.default.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ import_react91.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react91.default.createElement(import_react92.HugeiconsIcon, { icon: import_core_free_icons34.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react91.default.createElement(
4763
+ "img",
4764
+ {
4765
+ src: app.logoSrc,
4766
+ alt: app.name,
4767
+ loading: "lazy",
4768
+ onLoad: () => setIsLoading(false),
4769
+ className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
4770
+ }
4771
+ )),
4772
+ /* @__PURE__ */ import_react91.default.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ import_react91.default.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ import_react91.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
4773
+ );
4774
+ };
4775
+ var UniversalAppCategoryGrid = ({
4776
+ tagline,
4777
+ categoryTitle,
4778
+ apps
4779
+ }) => {
4780
+ return /* @__PURE__ */ import_react91.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react91.default.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ import_react91.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), categoryTitle && /* @__PURE__ */ import_react91.default.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, categoryTitle))), /* @__PURE__ */ import_react91.default.createElement("div", { className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4 sm:gap-6 px-1" }, apps.map((app) => /* @__PURE__ */ import_react91.default.createElement(AppGridCard, { key: app.id, app }))))));
4603
4781
  };
4604
4782
  // Annotate the CommonJS export names for ESM import in node:
4605
4783
  0 && (module.exports = {
@@ -4638,6 +4816,9 @@ var ContentGridBlock = ({
4638
4816
  ThreeDActionButton,
4639
4817
  ThreeDButton,
4640
4818
  UniversalAgentConsole,
4819
+ UniversalAppCategoryGrid,
4820
+ UniversalAppDetails,
4821
+ UniversalAppLibrary,
4641
4822
  UniversalBillingPage,
4642
4823
  UniversalCheckoutView,
4643
4824
  UniversalDashboardPage,
package/dist/index.mjs CHANGED
@@ -3566,7 +3566,7 @@ var DriveItemOpener = ({ item, onClose }) => {
3566
3566
  const i = Math.floor(Math.log(num) / Math.log(k));
3567
3567
  return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
3568
3568
  };
3569
- return /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ React42.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm font-medium text-white tracking-wide" }, item.name), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ React42.createElement(
3569
+ return /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ React42.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm text-white tracking-wide" }, item.name), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ React42.createElement(
3570
3570
  "button",
3571
3571
  {
3572
3572
  onClick: onClose,
@@ -4409,8 +4409,48 @@ SECRET_KEY="${secKey}"
4409
4409
  )))));
4410
4410
  };
4411
4411
 
4412
+ // src/components/UniversalAppLibrary.tsx
4413
+ import React49, { useState as useState29 } from "react";
4414
+ import { HugeiconsIcon as HugeiconsIcon34 } from "@hugeicons/react";
4415
+ import { Loading03Icon as Loading03Icon17 } from "@hugeicons/core-free-icons";
4416
+ var AppCard = ({ app }) => {
4417
+ const [isLoading, setIsLoading] = useState29(true);
4418
+ return /* @__PURE__ */ React49.createElement(
4419
+ "button",
4420
+ {
4421
+ onClick: app.onClick,
4422
+ className: "flex flex-col gap-3 group cursor-pointer w-25 shrink-0 text-left outline-none"
4423
+ },
4424
+ /* @__PURE__ */ React49.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ React49.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ React49.createElement(HugeiconsIcon34, { icon: Loading03Icon17, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React49.createElement(
4425
+ "img",
4426
+ {
4427
+ src: app.logoSrc,
4428
+ alt: app.name,
4429
+ loading: "lazy",
4430
+ onLoad: () => setIsLoading(false),
4431
+ className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
4432
+ }
4433
+ )),
4434
+ /* @__PURE__ */ React49.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ React49.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ React49.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
4435
+ );
4436
+ };
4437
+ var UniversalAppLibrary = ({
4438
+ tagline,
4439
+ headline,
4440
+ categories
4441
+ }) => {
4442
+ return /* @__PURE__ */ React49.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React49.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React49.createElement("div", { className: "max-w-6xl w-full" }, (tagline || headline) && /* @__PURE__ */ React49.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React49.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ React49.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), headline && /* @__PURE__ */ React49.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, headline))), /* @__PURE__ */ React49.createElement("div", { className: "flex flex-col gap-14" }, categories.map((category) => /* @__PURE__ */ React49.createElement("div", { key: category.id, className: "flex flex-col" }, /* @__PURE__ */ React49.createElement("div", { className: "flex items-end justify-between mb-5 px-1" }, /* @__PURE__ */ React49.createElement("h3", { className: "text-lg text-black tracking-tight " }, category.title), category.onSeeMore && /* @__PURE__ */ React49.createElement(
4443
+ "button",
4444
+ {
4445
+ onClick: category.onSeeMore,
4446
+ className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors outline-none shrink-0 ml-4 pb-0.5"
4447
+ },
4448
+ category.seeMoreLabel || "See More"
4449
+ )), /* @__PURE__ */ React49.createElement("div", { className: "flex gap-4 sm:gap-6 overflow-x-auto pb-6 pt-2 -mx-4 px-4 sm:mx-0 sm:px-1 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none" }, category.apps.map((app) => /* @__PURE__ */ React49.createElement(AppCard, { key: app.id, app }))), /* @__PURE__ */ React49.createElement("div", { className: "w-full h-px mt-2 last-of-type:hidden" })))))));
4450
+ };
4451
+
4412
4452
  // src/components/MedicalFeatureStatsBlock.tsx
4413
- import React49, { useState as useState29, useEffect as useEffect20, useRef as useRef12 } from "react";
4453
+ import React50, { useState as useState30, useEffect as useEffect20, useRef as useRef12 } from "react";
4414
4454
  import Image11 from "next/image";
4415
4455
  var MedicalFeatureStatsBlock = ({
4416
4456
  bottomHeadline,
@@ -4419,7 +4459,7 @@ var MedicalFeatureStatsBlock = ({
4419
4459
  trustText,
4420
4460
  stats
4421
4461
  }) => {
4422
- const [isAnimating, setIsAnimating] = useState29(false);
4462
+ const [isAnimating, setIsAnimating] = useState30(false);
4423
4463
  const titleRef = useRef12(null);
4424
4464
  useEffect20(() => {
4425
4465
  const observer = new IntersectionObserver(
@@ -4439,7 +4479,7 @@ var MedicalFeatureStatsBlock = ({
4439
4479
  }
4440
4480
  return () => observer.disconnect();
4441
4481
  }, []);
4442
- return /* @__PURE__ */ React49.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React49.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React49.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React49.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React49.createElement(
4482
+ return /* @__PURE__ */ React50.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React50.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React50.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React50.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React50.createElement(
4443
4483
  "h2",
4444
4484
  {
4445
4485
  ref: titleRef,
@@ -4447,7 +4487,7 @@ var MedicalFeatureStatsBlock = ({
4447
4487
  style: isAnimating ? { animationIterationCount: 1 } : {}
4448
4488
  },
4449
4489
  bottomHeadline
4450
- ), /* @__PURE__ */ React49.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React49.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React49.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React49.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ React49.createElement(
4490
+ ), /* @__PURE__ */ React50.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React50.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React50.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React50.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ React50.createElement(
4451
4491
  Image11,
4452
4492
  {
4453
4493
  src,
@@ -4456,17 +4496,17 @@ var MedicalFeatureStatsBlock = ({
4456
4496
  sizes: "48px",
4457
4497
  className: "object-cover"
4458
4498
  }
4459
- )))), /* @__PURE__ */ React49.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React49.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React49.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React49.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React49.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React49.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
4499
+ )))), /* @__PURE__ */ React50.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React50.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React50.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React50.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React50.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React50.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
4460
4500
  };
4461
4501
 
4462
4502
  // src/components/ConsultantShowcase.tsx
4463
- import React50, { useState as useState30 } from "react";
4503
+ import React51, { useState as useState31 } from "react";
4464
4504
  import Image12 from "next/image";
4465
- import { HugeiconsIcon as HugeiconsIcon34 } from "@hugeicons/react";
4466
- import { Loading03Icon as Loading03Icon17 } from "@hugeicons/core-free-icons";
4505
+ import { HugeiconsIcon as HugeiconsIcon35 } from "@hugeicons/react";
4506
+ import { Loading03Icon as Loading03Icon18 } from "@hugeicons/core-free-icons";
4467
4507
  var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
4468
- const [isLoading, setIsLoading] = useState30(true);
4469
- return /* @__PURE__ */ React50.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React50.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ React50.createElement(HugeiconsIcon34, { icon: Loading03Icon17, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React50.createElement(
4508
+ const [isLoading, setIsLoading] = useState31(true);
4509
+ return /* @__PURE__ */ React51.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ React51.createElement(HugeiconsIcon35, { icon: Loading03Icon18, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React51.createElement(
4470
4510
  Image12,
4471
4511
  {
4472
4512
  src,
@@ -4485,9 +4525,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
4485
4525
  var ConsultantShowcase = ({
4486
4526
  profiles
4487
4527
  }) => {
4488
- const [currentIndex, setCurrentIndex] = useState30(0);
4489
- const [touchStart, setTouchStart] = useState30(null);
4490
- const [touchEnd, setTouchEnd] = useState30(null);
4528
+ const [currentIndex, setCurrentIndex] = useState31(0);
4529
+ const [touchStart, setTouchStart] = useState31(null);
4530
+ const [touchEnd, setTouchEnd] = useState31(null);
4491
4531
  const nextSlide = () => {
4492
4532
  setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
4493
4533
  };
@@ -4512,7 +4552,7 @@ var ConsultantShowcase = ({
4512
4552
  }
4513
4553
  };
4514
4554
  if (!profiles || profiles.length === 0) return null;
4515
- return /* @__PURE__ */ React50.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React50.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React50.createElement(
4555
+ return /* @__PURE__ */ React51.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React51.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React51.createElement(
4516
4556
  "div",
4517
4557
  {
4518
4558
  className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
@@ -4522,13 +4562,13 @@ var ConsultantShowcase = ({
4522
4562
  },
4523
4563
  profiles.map((profile, idx) => {
4524
4564
  const isActive = idx === currentIndex;
4525
- return /* @__PURE__ */ React50.createElement(
4565
+ return /* @__PURE__ */ React51.createElement(
4526
4566
  "div",
4527
4567
  {
4528
4568
  key: profile.id,
4529
4569
  className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
4530
4570
  },
4531
- /* @__PURE__ */ React50.createElement(
4571
+ /* @__PURE__ */ React51.createElement(
4532
4572
  ImageWithLoader,
4533
4573
  {
4534
4574
  src: profile.imageSrc,
@@ -4536,14 +4576,14 @@ var ConsultantShowcase = ({
4536
4576
  priority: idx === 0
4537
4577
  }
4538
4578
  ),
4539
- /* @__PURE__ */ React50.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
4540
- /* @__PURE__ */ React50.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
4541
- /* @__PURE__ */ React50.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ React50.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React50.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React50.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React50.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
4579
+ /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
4580
+ /* @__PURE__ */ React51.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
4581
+ /* @__PURE__ */ React51.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ React51.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React51.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
4542
4582
  );
4543
4583
  }),
4544
- /* @__PURE__ */ React50.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
4545
- /* @__PURE__ */ React50.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
4546
- /* @__PURE__ */ React50.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ React50.createElement(
4584
+ /* @__PURE__ */ React51.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
4585
+ /* @__PURE__ */ React51.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
4586
+ /* @__PURE__ */ React51.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ React51.createElement(
4547
4587
  "button",
4548
4588
  {
4549
4589
  key: idx,
@@ -4556,13 +4596,13 @@ var ConsultantShowcase = ({
4556
4596
  };
4557
4597
 
4558
4598
  // src/components/ContentGridBlock.tsx
4559
- import React51, { useState as useState31 } from "react";
4599
+ import React52, { useState as useState32 } from "react";
4560
4600
  import Image13 from "next/image";
4561
- import { HugeiconsIcon as HugeiconsIcon35 } from "@hugeicons/react";
4562
- import { Loading03Icon as Loading03Icon18 } from "@hugeicons/core-free-icons";
4601
+ import { HugeiconsIcon as HugeiconsIcon36 } from "@hugeicons/react";
4602
+ import { Loading03Icon as Loading03Icon19 } from "@hugeicons/core-free-icons";
4563
4603
  var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
4564
- const [isLoading, setIsLoading] = useState31(true);
4565
- return /* @__PURE__ */ React51.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React51.createElement(HugeiconsIcon35, { icon: Loading03Icon18, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React51.createElement(
4604
+ const [isLoading, setIsLoading] = useState32(true);
4605
+ return /* @__PURE__ */ React52.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React52.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React52.createElement(HugeiconsIcon36, { icon: Loading03Icon19, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React52.createElement(
4566
4606
  Image13,
4567
4607
  {
4568
4608
  src,
@@ -4584,14 +4624,159 @@ var ContentGridBlock = ({
4584
4624
  middleBottomCard,
4585
4625
  rightCards
4586
4626
  }) => {
4587
- return /* @__PURE__ */ React51.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React51.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React51.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React51.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React51.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React51.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React51.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React51.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React51.createElement("div", null, /* @__PURE__ */ React51.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React51.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React51.createElement(Image13, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React51.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React51.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React51.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React51.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React51.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React51.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React51.createElement(Image13, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React51.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React51.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React51.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React51.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React51.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React51.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React51.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React51.createElement("div", null, /* @__PURE__ */ React51.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React51.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React51.createElement(Image13, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React51.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React51.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React51.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React51.createElement(
4627
+ return /* @__PURE__ */ React52.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React52.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React52.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React52.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React52.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React52.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React52.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React52.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React52.createElement("div", null, /* @__PURE__ */ React52.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React52.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React52.createElement(Image13, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React52.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React52.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React52.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React52.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React52.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React52.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React52.createElement(Image13, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React52.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React52.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React52.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ React52.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React52.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React52.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React52.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React52.createElement("div", null, /* @__PURE__ */ React52.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React52.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React52.createElement(Image13, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React52.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React52.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React52.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React52.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React52.createElement(
4588
4628
  ImageWithLoader2,
4589
4629
  {
4590
4630
  src: card.bgImageSrc,
4591
4631
  alt: card.title,
4592
4632
  className: "absolute inset-0 w-full h-full"
4593
4633
  }
4594
- ), /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React51.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React51.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React51.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
4634
+ ), /* @__PURE__ */ React52.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ React52.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React52.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React52.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React52.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React52.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ React52.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
4635
+ };
4636
+
4637
+ // src/components/UniversalAppDetails.tsx
4638
+ import React53, { useState as useState33 } from "react";
4639
+ import { HugeiconsIcon as HugeiconsIcon37 } from "@hugeicons/react";
4640
+ import {
4641
+ AppleIcon,
4642
+ AndroidIcon,
4643
+ Download01Icon as Download01Icon2,
4644
+ Bookmark02Icon,
4645
+ Loading03Icon as Loading03Icon20,
4646
+ ArrowDown01Icon as ArrowDown01Icon5,
4647
+ Cancel01Icon as Cancel01Icon5,
4648
+ ArrowLeft01Icon as ArrowLeft01Icon11,
4649
+ ArrowRight01Icon as ArrowRight01Icon9
4650
+ } from "@hugeicons/core-free-icons";
4651
+ var ScreenshotCard = ({ src, alt, onClick }) => {
4652
+ const [isLoading, setIsLoading] = useState33(true);
4653
+ return /* @__PURE__ */ React53.createElement(
4654
+ "button",
4655
+ {
4656
+ onClick,
4657
+ className: "relative w-28 sm:w-32 aspect-9/19 shrink-0 rounded-2xl overflow-hidden bg-neutral-100 border border-neutral-200/50 outline-none hover:opacity-90 transition-opacity"
4658
+ },
4659
+ isLoading && /* @__PURE__ */ React53.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Loading03Icon20, size: 24, className: "animate-spin text-neutral-400" })),
4660
+ /* @__PURE__ */ React53.createElement(
4661
+ "img",
4662
+ {
4663
+ src,
4664
+ alt,
4665
+ loading: "lazy",
4666
+ onLoad: () => setIsLoading(false),
4667
+ className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
4668
+ }
4669
+ )
4670
+ );
4671
+ };
4672
+ var LightboxImage = ({ src }) => {
4673
+ const [isLoading, setIsLoading] = useState33(true);
4674
+ return /* @__PURE__ */ React53.createElement("div", { className: "relative w-full h-full flex items-center justify-center p-4" }, isLoading && /* @__PURE__ */ React53.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Loading03Icon20, size: 32, className: "animate-spin text-white" })), /* @__PURE__ */ React53.createElement(
4675
+ "img",
4676
+ {
4677
+ src,
4678
+ alt: "Fullscreen Screenshot",
4679
+ onLoad: () => setIsLoading(false),
4680
+ className: `max-w-full max-h-full object-contain transition-all duration-500 z-20 ${isLoading ? "opacity-0 blur-md" : "opacity-100 blur-0"}`
4681
+ }
4682
+ ));
4683
+ };
4684
+ var UniversalAppDetails = ({ app, onBack }) => {
4685
+ const [isLogoLoading, setIsLogoLoading] = useState33(true);
4686
+ const [isDescExpanded, setIsDescExpanded] = useState33(false);
4687
+ const [lightboxIndex, setLightboxIndex] = useState33(null);
4688
+ const MAX_DESC_LENGTH = 150;
4689
+ const isDescLong = app.description.length > MAX_DESC_LENGTH;
4690
+ const displayDesc = isDescExpanded || !isDescLong ? app.description : `${app.description.substring(0, MAX_DESC_LENGTH)}...`;
4691
+ const handlePrev = () => {
4692
+ if (lightboxIndex !== null) {
4693
+ setLightboxIndex(lightboxIndex === 0 ? app.screenshots.length - 1 : lightboxIndex - 1);
4694
+ }
4695
+ };
4696
+ const handleNext = () => {
4697
+ if (lightboxIndex !== null) {
4698
+ setLightboxIndex(lightboxIndex === app.screenshots.length - 1 ? 0 : lightboxIndex + 1);
4699
+ }
4700
+ };
4701
+ return /* @__PURE__ */ React53.createElement("div", { className: "w-full max-w-3xl mx-auto pt-10 pb-20 px-6 min-h-screen flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col sm:flex-row items-start gap-4 w-full mb-10 text-left" }, /* @__PURE__ */ React53.createElement("div", { className: "relative w-20 h-20 sm:w-20 sm:h-20 md:w-24 md:h-24 lg:w-28 lg:h-28 shrink-0 rounded-2xl overflow-hidden flex items-center justify-center border border-neutral-100/50 bg-neutral-50" }, isLogoLoading && /* @__PURE__ */ React53.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100 animate-pulse" }), /* @__PURE__ */ React53.createElement(
4702
+ "img",
4703
+ {
4704
+ src: app.logoSrc,
4705
+ alt: `${app.name} Logo`,
4706
+ onLoad: () => setIsLogoLoading(false),
4707
+ className: `w-full h-full object-cover transition-opacity duration-300 z-20 ${isLogoLoading ? "opacity-0" : "opacity-100"}`
4708
+ }
4709
+ )), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col justify-center pt-1 min-w-0" }, /* @__PURE__ */ React53.createElement("h1", { className: "text-xl text-black leading-tight mb-1 font-medium" }, /* @__PURE__ */ React53.createElement("span", { className: "block truncate" }, app.name)), /* @__PURE__ */ React53.createElement("span", { className: "text-xs mt-1 text-neutral-400 truncate max-w-full" }, app.tagline), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-wrap items-center mt-4 gap-8 w-full" }, /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("div", { className: "flex items-center gap-1.5 h-6 text-neutral-800" }, app.platforms.android && /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: AndroidIcon, size: 18 }), app.platforms.ios && /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: AppleIcon, size: 18 })), /* @__PURE__ */ React53.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Platforms")), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.type), /* @__PURE__ */ React53.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Type")), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React53.createElement("span", { className: "text-sm font-medium h-6 flex items-center text-neutral-800 truncate" }, app.stats.size), /* @__PURE__ */ React53.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Size"))))), /* @__PURE__ */ React53.createElement("div", { className: "flex flex-col sm:flex-row gap-4 items-center w-full mx-auto mb-12" }, app.ctaText && app.ctaHref && /* @__PURE__ */ React53.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ React53.createElement(ThreeDButton, { href: app.ctaHref }, /* @__PURE__ */ React53.createElement("span", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Download01Icon2, size: 16 }), app.ctaText))), app.secondaryCtaText && app.secondaryCtaHref && /* @__PURE__ */ React53.createElement(
4710
+ "a",
4711
+ {
4712
+ href: app.secondaryCtaHref,
4713
+ className: "w-full sm:w-60 inline-flex items-center justify-center gap-2 text-[11px] tracking-widest rounded-full px-8 py-2.5 border border-neutral-100 text-center text-black hover:bg-neutral-50 outline-none transition-colors"
4714
+ },
4715
+ /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Bookmark02Icon, size: 16 }),
4716
+ app.secondaryCtaText
4717
+ )), /* @__PURE__ */ React53.createElement("div", { className: "w-full mb-12" }, /* @__PURE__ */ React53.createElement("h2", { className: "text-xl text-black font-medium mb-4" }, "About"), /* @__PURE__ */ React53.createElement("div", { className: "flex gap-3 overflow-x-auto pb-4 scrollbar-hide -mx-6 px-6" }, app.screenshots.map((src, idx) => /* @__PURE__ */ React53.createElement(
4718
+ ScreenshotCard,
4719
+ {
4720
+ key: idx,
4721
+ src,
4722
+ alt: `${app.name} Screenshot ${idx + 1}`,
4723
+ onClick: () => setLightboxIndex(idx)
4724
+ }
4725
+ ))), /* @__PURE__ */ React53.createElement("div", { className: "flex items-end text-neutral-500 text-sm leading-relaxed mt-2" }, /* @__PURE__ */ React53.createElement("p", { className: "flex-1 whitespace-pre-wrap" }, displayDesc), isDescLong && /* @__PURE__ */ React53.createElement(
4726
+ "button",
4727
+ {
4728
+ onClick: () => setIsDescExpanded(!isDescExpanded),
4729
+ className: "ml-2 mb-0.5 text-neutral-400 hover:text-black transition-colors outline-none shrink-0"
4730
+ },
4731
+ /* @__PURE__ */ React53.createElement(
4732
+ HugeiconsIcon37,
4733
+ {
4734
+ icon: ArrowDown01Icon5,
4735
+ size: 18,
4736
+ className: `transform transition-transform ${isDescExpanded ? "rotate-180" : ""}`
4737
+ }
4738
+ )
4739
+ ))), lightboxIndex !== null && /* @__PURE__ */ React53.createElement("div", { className: "fixed inset-0 z-50 bg-black/30 flex flex-col" }, /* @__PURE__ */ React53.createElement("div", { className: "w-full p-4 sm:p-6 flex justify-end" }, /* @__PURE__ */ React53.createElement(
4740
+ "button",
4741
+ {
4742
+ onClick: () => setLightboxIndex(null),
4743
+ className: "p-3 text-white bg-white/30 rounded-full transition-colors outline-none"
4744
+ },
4745
+ /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: Cancel01Icon5, size: 24 })
4746
+ )), /* @__PURE__ */ React53.createElement("div", { className: "flex-1 flex items-center justify-between px-4 sm:px-10 pb-10" }, /* @__PURE__ */ React53.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowLeft01Icon11, size: 24 })), /* @__PURE__ */ React53.createElement("div", { className: "flex-1 h-full max-h-[80vh]" }, /* @__PURE__ */ React53.createElement(LightboxImage, { src: app.screenshots[lightboxIndex] })), /* @__PURE__ */ React53.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowRight01Icon9, size: 24 }))), /* @__PURE__ */ React53.createElement("div", { className: "sm:hidden flex justify-between px-8 pb-12 w-full" }, /* @__PURE__ */ React53.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowLeft01Icon11, size: 24 })), /* @__PURE__ */ React53.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ React53.createElement(HugeiconsIcon37, { icon: ArrowRight01Icon9, size: 24 })))));
4747
+ };
4748
+
4749
+ // src/components/UniversalAppCategoryGrid.tsx
4750
+ import React54, { useState as useState34 } from "react";
4751
+ import { HugeiconsIcon as HugeiconsIcon38 } from "@hugeicons/react";
4752
+ import { Loading03Icon as Loading03Icon21 } from "@hugeicons/core-free-icons";
4753
+ var AppGridCard = ({ app }) => {
4754
+ const [isLoading, setIsLoading] = useState34(true);
4755
+ return /* @__PURE__ */ React54.createElement(
4756
+ "button",
4757
+ {
4758
+ onClick: app.onClick,
4759
+ className: "flex flex-col gap-3 group cursor-pointer w-25 text-left outline-none"
4760
+ },
4761
+ /* @__PURE__ */ React54.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ React54.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ React54.createElement(HugeiconsIcon38, { icon: Loading03Icon21, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React54.createElement(
4762
+ "img",
4763
+ {
4764
+ src: app.logoSrc,
4765
+ alt: app.name,
4766
+ loading: "lazy",
4767
+ onLoad: () => setIsLoading(false),
4768
+ className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
4769
+ }
4770
+ )),
4771
+ /* @__PURE__ */ React54.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ React54.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ React54.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
4772
+ );
4773
+ };
4774
+ var UniversalAppCategoryGrid = ({
4775
+ tagline,
4776
+ categoryTitle,
4777
+ apps
4778
+ }) => {
4779
+ return /* @__PURE__ */ React54.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React54.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React54.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React54.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React54.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ React54.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), categoryTitle && /* @__PURE__ */ React54.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, categoryTitle))), /* @__PURE__ */ React54.createElement("div", { className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4 sm:gap-6 px-1" }, apps.map((app) => /* @__PURE__ */ React54.createElement(AppGridCard, { key: app.id, app }))))));
4595
4780
  };
4596
4781
  export {
4597
4782
  AITranscriptionFeature,
@@ -4629,6 +4814,9 @@ export {
4629
4814
  ThreeDActionButton,
4630
4815
  ThreeDButton,
4631
4816
  UniversalAgentConsole,
4817
+ UniversalAppCategoryGrid,
4818
+ UniversalAppDetails,
4819
+ UniversalAppLibrary,
4632
4820
  UniversalBillingPage,
4633
4821
  UniversalCheckoutView,
4634
4822
  UniversalDashboardPage,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "4.0.19",
3
+ "version": "4.0.20",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",