@retinalabsllc/zairusjs 4.0.18 → 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 +72 -1
- package/dist/index.d.ts +72 -1
- package/dist/index.js +217 -37
- package/dist/index.mjs +222 -35
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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,
|
|
@@ -2441,7 +2444,7 @@ var UniversalMembersPage = ({
|
|
|
2441
2444
|
setSelectedMember(member);
|
|
2442
2445
|
setCurrentView("details");
|
|
2443
2446
|
},
|
|
2444
|
-
className: "flex items-center justify-between
|
|
2447
|
+
className: "flex items-center justify-between hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
2445
2448
|
},
|
|
2446
2449
|
/* @__PURE__ */ import_react44.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, member.displayImage && member.displayImage !== "NO_IMAGE" ? /* @__PURE__ */ import_react44.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full overflow-hidden bg-neutral-100" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
2447
2450
|
"img",
|
|
@@ -3252,10 +3255,9 @@ var UniversalDirectoryPage = ({
|
|
|
3252
3255
|
{
|
|
3253
3256
|
key: item.id,
|
|
3254
3257
|
onClick: () => onRowClick(item.id),
|
|
3255
|
-
className: "flex items-center justify-between
|
|
3258
|
+
className: "flex items-center justify-between hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
3256
3259
|
},
|
|
3257
|
-
/* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ import_react61.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ import_react61.default.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText)))
|
|
3258
|
-
item.rightBadge && /* @__PURE__ */ import_react61.default.createElement("div", { className: "shrink-0 pl-2" }, /* @__PURE__ */ import_react61.default.createElement("span", { className: `text-[11px] tracking-[0.2em] px-3 py-1 rounded-full whitespace-nowrap ${item.rightBadgeClass || "text-neutral-500 border border-neutral-100 bg-white"}` }, item.rightBadge))
|
|
3260
|
+
/* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ import_react61.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ import_react61.default.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText)))
|
|
3259
3261
|
))), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ import_react61.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] " }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
3260
3262
|
"button",
|
|
3261
3263
|
{
|
|
@@ -3575,7 +3577,7 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
3575
3577
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3576
3578
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3577
3579
|
};
|
|
3578
|
-
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
|
|
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(
|
|
3579
3581
|
"button",
|
|
3580
3582
|
{
|
|
3581
3583
|
onClick: onClose,
|
|
@@ -4261,7 +4263,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4261
4263
|
return /* @__PURE__ */ import_react78.default.createElement("div", { key: num, className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
4262
4264
|
}
|
|
4263
4265
|
return /* @__PURE__ */ import_react78.default.createElement("div", { key: num, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.CheckmarkBadge01Icon, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteOptionalDocument(docType), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Delete02Icon, size: 16 })));
|
|
4264
|
-
}))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ import_react78.default.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ import_react78.default.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ import_react78.default.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[13px] text-
|
|
4266
|
+
}))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ import_react78.default.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ import_react78.default.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ import_react78.default.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[13px] text-neutral-500 group-hover:text-neutral-600 transition-colors" }, "I have read, understood, and agree to the terms of data transfer and processing.")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: onCancelOrClose, disabled: isSubmitting, className: "text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full px-8 py-2.5 border border-neutral-100 transition-colors outline-none w-full sm:w-auto" }, "Cancel"), /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setMacroStep(0), disabled: isSubmitting || isReadOnly, className: " text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full px-8 py-2.5 border border-neutral-100transition-colors outline-none w-full sm:w-auto" }, "Edit Application"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ import_react78.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 max-h-[80vh]" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "p-4 flex flex-col gap-2 overflow-y-auto custom-scrollbar" }, (activeModal.type === "state" ? NIGERIAN_STATES : activeModal.type === "role" ? MEMBER_ROLES : NATIONALITIES).map((opt) => {
|
|
4265
4267
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
4266
4268
|
return /* @__PURE__ */ import_react78.default.createElement("button", { key: opt, onClick: () => {
|
|
4267
4269
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
@@ -4418,8 +4420,48 @@ SECRET_KEY="${secKey}"
|
|
|
4418
4420
|
)))));
|
|
4419
4421
|
};
|
|
4420
4422
|
|
|
4421
|
-
// src/components/
|
|
4423
|
+
// src/components/UniversalAppLibrary.tsx
|
|
4422
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"));
|
|
4423
4465
|
var import_image11 = __toESM(require("next/image"));
|
|
4424
4466
|
var MedicalFeatureStatsBlock = ({
|
|
4425
4467
|
bottomHeadline,
|
|
@@ -4428,9 +4470,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4428
4470
|
trustText,
|
|
4429
4471
|
stats
|
|
4430
4472
|
}) => {
|
|
4431
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
4432
|
-
const titleRef = (0,
|
|
4433
|
-
(0,
|
|
4473
|
+
const [isAnimating, setIsAnimating] = (0, import_react84.useState)(false);
|
|
4474
|
+
const titleRef = (0, import_react84.useRef)(null);
|
|
4475
|
+
(0, import_react84.useEffect)(() => {
|
|
4434
4476
|
const observer = new IntersectionObserver(
|
|
4435
4477
|
([entry]) => {
|
|
4436
4478
|
if (entry.isIntersecting) {
|
|
@@ -4448,7 +4490,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4448
4490
|
}
|
|
4449
4491
|
return () => observer.disconnect();
|
|
4450
4492
|
}, []);
|
|
4451
|
-
return /* @__PURE__ */
|
|
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(
|
|
4452
4494
|
"h2",
|
|
4453
4495
|
{
|
|
4454
4496
|
ref: titleRef,
|
|
@@ -4456,7 +4498,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4456
4498
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4457
4499
|
},
|
|
4458
4500
|
bottomHeadline
|
|
4459
|
-
), /* @__PURE__ */
|
|
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(
|
|
4460
4502
|
import_image11.default,
|
|
4461
4503
|
{
|
|
4462
4504
|
src,
|
|
@@ -4465,17 +4507,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4465
4507
|
sizes: "48px",
|
|
4466
4508
|
className: "object-cover"
|
|
4467
4509
|
}
|
|
4468
|
-
)))), /* @__PURE__ */
|
|
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))))));
|
|
4469
4511
|
};
|
|
4470
4512
|
|
|
4471
4513
|
// src/components/ConsultantShowcase.tsx
|
|
4472
|
-
var
|
|
4514
|
+
var import_react85 = __toESM(require("react"));
|
|
4473
4515
|
var import_image12 = __toESM(require("next/image"));
|
|
4474
|
-
var
|
|
4475
|
-
var
|
|
4516
|
+
var import_react86 = require("@hugeicons/react");
|
|
4517
|
+
var import_core_free_icons31 = require("@hugeicons/core-free-icons");
|
|
4476
4518
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4477
|
-
const [isLoading, setIsLoading] = (0,
|
|
4478
|
-
return /* @__PURE__ */
|
|
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(
|
|
4479
4521
|
import_image12.default,
|
|
4480
4522
|
{
|
|
4481
4523
|
src,
|
|
@@ -4494,9 +4536,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4494
4536
|
var ConsultantShowcase = ({
|
|
4495
4537
|
profiles
|
|
4496
4538
|
}) => {
|
|
4497
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
4498
|
-
const [touchStart, setTouchStart] = (0,
|
|
4499
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
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);
|
|
4500
4542
|
const nextSlide = () => {
|
|
4501
4543
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4502
4544
|
};
|
|
@@ -4521,7 +4563,7 @@ var ConsultantShowcase = ({
|
|
|
4521
4563
|
}
|
|
4522
4564
|
};
|
|
4523
4565
|
if (!profiles || profiles.length === 0) return null;
|
|
4524
|
-
return /* @__PURE__ */
|
|
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(
|
|
4525
4567
|
"div",
|
|
4526
4568
|
{
|
|
4527
4569
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4531,13 +4573,13 @@ var ConsultantShowcase = ({
|
|
|
4531
4573
|
},
|
|
4532
4574
|
profiles.map((profile, idx) => {
|
|
4533
4575
|
const isActive = idx === currentIndex;
|
|
4534
|
-
return /* @__PURE__ */
|
|
4576
|
+
return /* @__PURE__ */ import_react85.default.createElement(
|
|
4535
4577
|
"div",
|
|
4536
4578
|
{
|
|
4537
4579
|
key: profile.id,
|
|
4538
4580
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4539
4581
|
},
|
|
4540
|
-
/* @__PURE__ */
|
|
4582
|
+
/* @__PURE__ */ import_react85.default.createElement(
|
|
4541
4583
|
ImageWithLoader,
|
|
4542
4584
|
{
|
|
4543
4585
|
src: profile.imageSrc,
|
|
@@ -4545,14 +4587,14 @@ var ConsultantShowcase = ({
|
|
|
4545
4587
|
priority: idx === 0
|
|
4546
4588
|
}
|
|
4547
4589
|
),
|
|
4548
|
-
/* @__PURE__ */
|
|
4549
|
-
/* @__PURE__ */
|
|
4550
|
-
/* @__PURE__ */
|
|
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)))
|
|
4551
4593
|
);
|
|
4552
4594
|
}),
|
|
4553
|
-
/* @__PURE__ */
|
|
4554
|
-
/* @__PURE__ */
|
|
4555
|
-
/* @__PURE__ */
|
|
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(
|
|
4556
4598
|
"button",
|
|
4557
4599
|
{
|
|
4558
4600
|
key: idx,
|
|
@@ -4565,13 +4607,13 @@ var ConsultantShowcase = ({
|
|
|
4565
4607
|
};
|
|
4566
4608
|
|
|
4567
4609
|
// src/components/ContentGridBlock.tsx
|
|
4568
|
-
var
|
|
4610
|
+
var import_react87 = __toESM(require("react"));
|
|
4569
4611
|
var import_image13 = __toESM(require("next/image"));
|
|
4570
|
-
var
|
|
4571
|
-
var
|
|
4612
|
+
var import_react88 = require("@hugeicons/react");
|
|
4613
|
+
var import_core_free_icons32 = require("@hugeicons/core-free-icons");
|
|
4572
4614
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4573
|
-
const [isLoading, setIsLoading] = (0,
|
|
4574
|
-
return /* @__PURE__ */
|
|
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(
|
|
4575
4617
|
import_image13.default,
|
|
4576
4618
|
{
|
|
4577
4619
|
src,
|
|
@@ -4593,14 +4635,149 @@ var ContentGridBlock = ({
|
|
|
4593
4635
|
middleBottomCard,
|
|
4594
4636
|
rightCards
|
|
4595
4637
|
}) => {
|
|
4596
|
-
return /* @__PURE__ */
|
|
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(
|
|
4597
4639
|
ImageWithLoader2,
|
|
4598
4640
|
{
|
|
4599
4641
|
src: card.bgImageSrc,
|
|
4600
4642
|
alt: card.title,
|
|
4601
4643
|
className: "absolute inset-0 w-full h-full"
|
|
4602
4644
|
}
|
|
4603
|
-
), /* @__PURE__ */
|
|
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 }))))));
|
|
4604
4781
|
};
|
|
4605
4782
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4606
4783
|
0 && (module.exports = {
|
|
@@ -4639,6 +4816,9 @@ var ContentGridBlock = ({
|
|
|
4639
4816
|
ThreeDActionButton,
|
|
4640
4817
|
ThreeDButton,
|
|
4641
4818
|
UniversalAgentConsole,
|
|
4819
|
+
UniversalAppCategoryGrid,
|
|
4820
|
+
UniversalAppDetails,
|
|
4821
|
+
UniversalAppLibrary,
|
|
4642
4822
|
UniversalBillingPage,
|
|
4643
4823
|
UniversalCheckoutView,
|
|
4644
4824
|
UniversalDashboardPage,
|
package/dist/index.mjs
CHANGED
|
@@ -2378,7 +2378,7 @@ var UniversalMembersPage = ({
|
|
|
2378
2378
|
setSelectedMember(member);
|
|
2379
2379
|
setCurrentView("details");
|
|
2380
2380
|
},
|
|
2381
|
-
className: "flex items-center justify-between
|
|
2381
|
+
className: "flex items-center justify-between hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
2382
2382
|
},
|
|
2383
2383
|
/* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, member.displayImage && member.displayImage !== "NO_IMAGE" ? /* @__PURE__ */ React29.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full overflow-hidden bg-neutral-100" }, /* @__PURE__ */ React29.createElement(
|
|
2384
2384
|
"img",
|
|
@@ -3208,10 +3208,9 @@ var UniversalDirectoryPage = ({
|
|
|
3208
3208
|
{
|
|
3209
3209
|
key: item.id,
|
|
3210
3210
|
onClick: () => onRowClick(item.id),
|
|
3211
|
-
className: "flex items-center justify-between
|
|
3211
|
+
className: "flex items-center justify-between hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
3212
3212
|
},
|
|
3213
|
-
/* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React38.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ React38.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React38.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ React38.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText)))
|
|
3214
|
-
item.rightBadge && /* @__PURE__ */ React38.createElement("div", { className: "shrink-0 pl-2" }, /* @__PURE__ */ React38.createElement("span", { className: `text-[11px] tracking-[0.2em] px-3 py-1 rounded-full whitespace-nowrap ${item.rightBadgeClass || "text-neutral-500 border border-neutral-100 bg-white"}` }, item.rightBadge))
|
|
3213
|
+
/* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React38.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ React38.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React38.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ React38.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText)))
|
|
3215
3214
|
))), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ React38.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] " }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React38.createElement(
|
|
3216
3215
|
"button",
|
|
3217
3216
|
{
|
|
@@ -3567,7 +3566,7 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
3567
3566
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3568
3567
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3569
3568
|
};
|
|
3570
|
-
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
|
|
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(
|
|
3571
3570
|
"button",
|
|
3572
3571
|
{
|
|
3573
3572
|
onClick: onClose,
|
|
@@ -4253,7 +4252,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4253
4252
|
return /* @__PURE__ */ React47.createElement("div", { key: num, className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
4254
4253
|
}
|
|
4255
4254
|
return /* @__PURE__ */ React47.createElement("div", { key: num, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: CheckmarkBadge01Icon2, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => deleteOptionalDocument(docType), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: Delete02Icon3, size: 16 })));
|
|
4256
|
-
}))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React47.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Back"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ React47.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ React47.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ React47.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ React47.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Back"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ React47.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ React47.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ React47.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ React47.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ React47.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ React47.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ React47.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ React47.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ React47.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ React47.createElement("span", { className: "text-[13px] text-
|
|
4255
|
+
}))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React47.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Back"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ React47.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ React47.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ React47.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ React47.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Back"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ React47.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ React47.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ React47.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ React47.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ React47.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ React47.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ React47.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ React47.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ React47.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ React47.createElement("span", { className: "text-[13px] text-neutral-500 group-hover:text-neutral-600 transition-colors" }, "I have read, understood, and agree to the terms of data transfer and processing.")), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ React47.createElement("button", { onClick: onCancelOrClose, disabled: isSubmitting, className: "text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full px-8 py-2.5 border border-neutral-100 transition-colors outline-none w-full sm:w-auto" }, "Cancel"), /* @__PURE__ */ React47.createElement("button", { onClick: () => setMacroStep(0), disabled: isSubmitting || isReadOnly, className: " text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full px-8 py-2.5 border border-neutral-100transition-colors outline-none w-full sm:w-auto" }, "Edit Application"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ React47.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ React47.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 max-h-[80vh]" }, /* @__PURE__ */ React47.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ React47.createElement("div", { className: "p-4 flex flex-col gap-2 overflow-y-auto custom-scrollbar" }, (activeModal.type === "state" ? NIGERIAN_STATES : activeModal.type === "role" ? MEMBER_ROLES : NATIONALITIES).map((opt) => {
|
|
4257
4256
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
4258
4257
|
return /* @__PURE__ */ React47.createElement("button", { key: opt, onClick: () => {
|
|
4259
4258
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
@@ -4410,8 +4409,48 @@ SECRET_KEY="${secKey}"
|
|
|
4410
4409
|
)))));
|
|
4411
4410
|
};
|
|
4412
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
|
+
|
|
4413
4452
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4414
|
-
import
|
|
4453
|
+
import React50, { useState as useState30, useEffect as useEffect20, useRef as useRef12 } from "react";
|
|
4415
4454
|
import Image11 from "next/image";
|
|
4416
4455
|
var MedicalFeatureStatsBlock = ({
|
|
4417
4456
|
bottomHeadline,
|
|
@@ -4420,7 +4459,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4420
4459
|
trustText,
|
|
4421
4460
|
stats
|
|
4422
4461
|
}) => {
|
|
4423
|
-
const [isAnimating, setIsAnimating] =
|
|
4462
|
+
const [isAnimating, setIsAnimating] = useState30(false);
|
|
4424
4463
|
const titleRef = useRef12(null);
|
|
4425
4464
|
useEffect20(() => {
|
|
4426
4465
|
const observer = new IntersectionObserver(
|
|
@@ -4440,7 +4479,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4440
4479
|
}
|
|
4441
4480
|
return () => observer.disconnect();
|
|
4442
4481
|
}, []);
|
|
4443
|
-
return /* @__PURE__ */
|
|
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(
|
|
4444
4483
|
"h2",
|
|
4445
4484
|
{
|
|
4446
4485
|
ref: titleRef,
|
|
@@ -4448,7 +4487,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4448
4487
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4449
4488
|
},
|
|
4450
4489
|
bottomHeadline
|
|
4451
|
-
), /* @__PURE__ */
|
|
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(
|
|
4452
4491
|
Image11,
|
|
4453
4492
|
{
|
|
4454
4493
|
src,
|
|
@@ -4457,17 +4496,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4457
4496
|
sizes: "48px",
|
|
4458
4497
|
className: "object-cover"
|
|
4459
4498
|
}
|
|
4460
|
-
)))), /* @__PURE__ */
|
|
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))))));
|
|
4461
4500
|
};
|
|
4462
4501
|
|
|
4463
4502
|
// src/components/ConsultantShowcase.tsx
|
|
4464
|
-
import
|
|
4503
|
+
import React51, { useState as useState31 } from "react";
|
|
4465
4504
|
import Image12 from "next/image";
|
|
4466
|
-
import { HugeiconsIcon as
|
|
4467
|
-
import { Loading03Icon as
|
|
4505
|
+
import { HugeiconsIcon as HugeiconsIcon35 } from "@hugeicons/react";
|
|
4506
|
+
import { Loading03Icon as Loading03Icon18 } from "@hugeicons/core-free-icons";
|
|
4468
4507
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4469
|
-
const [isLoading, setIsLoading] =
|
|
4470
|
-
return /* @__PURE__ */
|
|
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(
|
|
4471
4510
|
Image12,
|
|
4472
4511
|
{
|
|
4473
4512
|
src,
|
|
@@ -4486,9 +4525,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4486
4525
|
var ConsultantShowcase = ({
|
|
4487
4526
|
profiles
|
|
4488
4527
|
}) => {
|
|
4489
|
-
const [currentIndex, setCurrentIndex] =
|
|
4490
|
-
const [touchStart, setTouchStart] =
|
|
4491
|
-
const [touchEnd, setTouchEnd] =
|
|
4528
|
+
const [currentIndex, setCurrentIndex] = useState31(0);
|
|
4529
|
+
const [touchStart, setTouchStart] = useState31(null);
|
|
4530
|
+
const [touchEnd, setTouchEnd] = useState31(null);
|
|
4492
4531
|
const nextSlide = () => {
|
|
4493
4532
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4494
4533
|
};
|
|
@@ -4513,7 +4552,7 @@ var ConsultantShowcase = ({
|
|
|
4513
4552
|
}
|
|
4514
4553
|
};
|
|
4515
4554
|
if (!profiles || profiles.length === 0) return null;
|
|
4516
|
-
return /* @__PURE__ */
|
|
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(
|
|
4517
4556
|
"div",
|
|
4518
4557
|
{
|
|
4519
4558
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4523,13 +4562,13 @@ var ConsultantShowcase = ({
|
|
|
4523
4562
|
},
|
|
4524
4563
|
profiles.map((profile, idx) => {
|
|
4525
4564
|
const isActive = idx === currentIndex;
|
|
4526
|
-
return /* @__PURE__ */
|
|
4565
|
+
return /* @__PURE__ */ React51.createElement(
|
|
4527
4566
|
"div",
|
|
4528
4567
|
{
|
|
4529
4568
|
key: profile.id,
|
|
4530
4569
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4531
4570
|
},
|
|
4532
|
-
/* @__PURE__ */
|
|
4571
|
+
/* @__PURE__ */ React51.createElement(
|
|
4533
4572
|
ImageWithLoader,
|
|
4534
4573
|
{
|
|
4535
4574
|
src: profile.imageSrc,
|
|
@@ -4537,14 +4576,14 @@ var ConsultantShowcase = ({
|
|
|
4537
4576
|
priority: idx === 0
|
|
4538
4577
|
}
|
|
4539
4578
|
),
|
|
4540
|
-
/* @__PURE__ */
|
|
4541
|
-
/* @__PURE__ */
|
|
4542
|
-
/* @__PURE__ */
|
|
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)))
|
|
4543
4582
|
);
|
|
4544
4583
|
}),
|
|
4545
|
-
/* @__PURE__ */
|
|
4546
|
-
/* @__PURE__ */
|
|
4547
|
-
/* @__PURE__ */
|
|
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(
|
|
4548
4587
|
"button",
|
|
4549
4588
|
{
|
|
4550
4589
|
key: idx,
|
|
@@ -4557,13 +4596,13 @@ var ConsultantShowcase = ({
|
|
|
4557
4596
|
};
|
|
4558
4597
|
|
|
4559
4598
|
// src/components/ContentGridBlock.tsx
|
|
4560
|
-
import
|
|
4599
|
+
import React52, { useState as useState32 } from "react";
|
|
4561
4600
|
import Image13 from "next/image";
|
|
4562
|
-
import { HugeiconsIcon as
|
|
4563
|
-
import { Loading03Icon as
|
|
4601
|
+
import { HugeiconsIcon as HugeiconsIcon36 } from "@hugeicons/react";
|
|
4602
|
+
import { Loading03Icon as Loading03Icon19 } from "@hugeicons/core-free-icons";
|
|
4564
4603
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4565
|
-
const [isLoading, setIsLoading] =
|
|
4566
|
-
return /* @__PURE__ */
|
|
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(
|
|
4567
4606
|
Image13,
|
|
4568
4607
|
{
|
|
4569
4608
|
src,
|
|
@@ -4585,14 +4624,159 @@ var ContentGridBlock = ({
|
|
|
4585
4624
|
middleBottomCard,
|
|
4586
4625
|
rightCards
|
|
4587
4626
|
}) => {
|
|
4588
|
-
return /* @__PURE__ */
|
|
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(
|
|
4589
4628
|
ImageWithLoader2,
|
|
4590
4629
|
{
|
|
4591
4630
|
src: card.bgImageSrc,
|
|
4592
4631
|
alt: card.title,
|
|
4593
4632
|
className: "absolute inset-0 w-full h-full"
|
|
4594
4633
|
}
|
|
4595
|
-
), /* @__PURE__ */
|
|
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 }))))));
|
|
4596
4780
|
};
|
|
4597
4781
|
export {
|
|
4598
4782
|
AITranscriptionFeature,
|
|
@@ -4630,6 +4814,9 @@ export {
|
|
|
4630
4814
|
ThreeDActionButton,
|
|
4631
4815
|
ThreeDButton,
|
|
4632
4816
|
UniversalAgentConsole,
|
|
4817
|
+
UniversalAppCategoryGrid,
|
|
4818
|
+
UniversalAppDetails,
|
|
4819
|
+
UniversalAppLibrary,
|
|
4633
4820
|
UniversalBillingPage,
|
|
4634
4821
|
UniversalCheckoutView,
|
|
4635
4822
|
UniversalDashboardPage,
|